diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 214e7d48..a5a639b7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,39 +19,26 @@ jobs: strategy: matrix: # test against - # - Java 1.8 (minimum requirement) - # - Java 9 (first version with JPMS) + # - Java 8 (minimum requirement) # - Java LTS versions (11, 17, ...) # - lastest Java version(s) java: - - 1.8 - - 9 + - 8 - 11 # LTS - - 14 - - 15 + - 17 # LTS steps: - uses: actions/checkout@v2 - uses: gradle/wrapper-validation-action@v1 + if: matrix.java == '8' - name: Setup Java ${{ matrix.java }} - uses: actions/setup-java@v1 + uses: actions/setup-java@v2 with: java-version: ${{ matrix.java }} - - - name: Cache Gradle wrapper - uses: actions/cache@v1 - with: - path: ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} - - - name: Cache Gradle cache - uses: actions/cache@v2 - with: - path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts') }} - restore-keys: ${{ runner.os }}-gradle + distribution: adopt # Java 8 and 11 are pre-installed on ubuntu-latest + cache: gradle - name: Build with Gradle run: ./gradlew build @@ -72,36 +59,36 @@ jobs: needs: build if: | github.event_name == 'push' && - github.ref == 'refs/heads/main' && + (github.ref == 'refs/heads/main' || startsWith( github.ref, 'refs/heads/develop-' )) && github.repository == 'JFormDesigner/FlatLaf' steps: - uses: actions/checkout@v2 - name: Setup Java 11 - uses: actions/setup-java@v1 + uses: actions/setup-java@v2 with: java-version: 11 - - - name: Cache Gradle wrapper - uses: actions/cache@v1 - with: - path: ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} - - - name: Cache Gradle cache - uses: actions/cache@v2 - with: - path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts') }} - restore-keys: ${{ runner.os }}-gradle + distribution: adopt # pre-installed on ubuntu-latest + cache: gradle - name: Publish snapshot to oss.sonatype.org - run: ./gradlew publish -Dorg.gradle.internal.publish.checksums.insecure=true + run: ./gradlew publish :flatlaf-theme-editor:build -Dorg.gradle.internal.publish.checksums.insecure=true env: OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} + - name: Upload theme editor + uses: sebastianpopp/ftp-action@releases/v2 + with: + host: ${{ secrets.FTP_SERVER }} + user: ${{ secrets.FTP_USERNAME }} + password: ${{ secrets.FTP_PASSWORD }} + forceSsl: true + localDir: "flatlaf-theme-editor/build/libs" + remoteDir: "snapshots" + options: "--only-newer --no-recursion --verbose=1" + release: runs-on: ubuntu-latest @@ -115,25 +102,14 @@ jobs: - uses: actions/checkout@v2 - name: Setup Java 11 - uses: actions/setup-java@v1 + uses: actions/setup-java@v2 with: java-version: 11 - - - name: Cache Gradle wrapper - uses: actions/cache@v1 - with: - path: ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} - - - name: Cache Gradle cache - uses: actions/cache@v2 - with: - path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts') }} - restore-keys: ${{ runner.os }}-gradle + distribution: adopt # pre-installed on ubuntu-latest + cache: gradle - name: Release a new stable version to Maven Central - run: ./gradlew publish :flatlaf-demo:build -Drelease=true + run: ./gradlew publish :flatlaf-demo:build :flatlaf-theme-editor:build -Drelease=true env: OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }} OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} @@ -150,3 +126,14 @@ jobs: localDir: "flatlaf-demo/build/libs" remoteDir: "." options: "--only-newer --no-recursion --verbose=1" + + - name: Upload theme editor + uses: sebastianpopp/ftp-action@releases/v2 + with: + host: ${{ secrets.FTP_SERVER }} + user: ${{ secrets.FTP_USERNAME }} + password: ${{ secrets.FTP_PASSWORD }} + forceSsl: true + localDir: "flatlaf-theme-editor/build/libs" + remoteDir: "." + options: "--only-newer --no-recursion --verbose=1" diff --git a/.github/workflows/natives.yml b/.github/workflows/natives.yml index b89ef095..8b06d494 100644 --- a/.github/workflows/natives.yml +++ b/.github/workflows/natives.yml @@ -11,12 +11,14 @@ on: paths: - 'flatlaf-natives/flatlaf-natives-windows/**' - '.github/workflows/natives.yml' + - 'gradle/wrapper/gradle-wrapper.properties' pull_request: branches: - '*' paths: - 'flatlaf-natives/flatlaf-natives-windows/**' - '.github/workflows/natives.yml' + - 'gradle/wrapper/gradle-wrapper.properties' jobs: Windows: @@ -27,28 +29,17 @@ jobs: - uses: gradle/wrapper-validation-action@v1 - - name: Setup Java 1.8 - uses: actions/setup-java@v1 + - name: Setup Java 11 + uses: actions/setup-java@v2 with: - java-version: 1.8 - - - name: Cache Gradle wrapper - uses: actions/cache@v1 - with: - path: ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.properties') }} - - - name: Cache Gradle cache - uses: actions/cache@v2 - with: - path: | - ~/.gradle/caches - !~/.gradle/caches/modules-2/modules-2.lock - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts') }} - restore-keys: ${{ runner.os }}-gradle + java-version: 11 + distribution: adopt + cache: gradle - name: Build with Gradle - run: ./gradlew :flatlaf-natives-windows:build + # --no-daemon is necessary on Windows otherwise caching Gradle would fail with: + # tar.exe: Couldn't open ~/.gradle/caches/modules-2/modules-2.lock: Permission denied + run: ./gradlew :flatlaf-natives-windows:build --no-daemon - name: Upload artifacts uses: actions/upload-artifact@v2 diff --git a/CHANGELOG.md b/CHANGELOG.md index bfc1a57c..71f1ae31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,387 @@ FlatLaf Change Log ================== -## 1.3-SNAPSHOT +## 2.2-SNAPSHOT + +#### Fixed bugs + +- Native window decorations (Windows 10/11 only): Fixed wrong window title + character encoding used in Windows taskbar. (issue #502) +- Button: Fixed icon layout and preferred width of default buttons that use bold + font. (issue #506) +- FileChooser: Enabled full row selection for details view to fix alternate row + coloring. (issue #512) +- SplitPane: Fixed `StackOverflowError` caused by layout loop that may occur + under special circumstances. (issue #513) +- ToolBar: Fixed endless loop in focus navigation that may occur under special + circumstances. (issue #505) +- IntelliJ Themes: `Component.accentColor` UI property now has useful theme + specific values. (issue #507) + + +## 2.1 + +#### New features and improvements + +- Menus: Improved usability of submenus. (PR #490; issue #247) +- Menus: Scroll large menus using mouse wheel or up/down arrows. (issue #225) +- Linux: Support using custom window decorations. Enable with + `JFrame.setDefaultLookAndFeelDecorated(true)` and + `JDialog.setDefaultLookAndFeelDecorated(true)` before creating a window. + (issue #482) +- ScrollBar: Added UI value `ScrollBar.minimumButtonSize` to specify minimum + scroll arrow button size (if shown). (issue #493) + +#### Fixed bugs + +- PasswordField: Fixed reveal button appearance in IntelliJ themes. (issue #494) +- ScrollBar: Center and scale arrows in scroll up/down buttons (if shown). + (issue #493) +- TextArea, TextPane and EditorPane: No longer select all text when component is + focused for the first time. (issue #498; regression in FlatLaf 2.0) +- TabbedPane: Disable all items in "Show Hidden Tabs" popup menu if tabbed pane + is disabled. + +#### Incompatibilities + +- Method `FlatUIUtils.paintArrow()` (and class `FlatArrowButton`) now paints + arrows one pixel smaller than before. To fix this, increase parameter + `arrowSize` by one. + + +## 2.0.2 + +- Native window decorations (Windows 10/11 only): Fixed rendering artifacts on + HiDPI screens when dragging window partly offscreen and back into screen + bounds. (issue #477) +- Repaint component when setting client property `JComponent.outline` (issue + #480). +- macOS: Fixed NPE when using some icons in main menu items. (issue #483) + + +## 2.0.1 + +- Fixed memory leak in Panel, Separator and ToolBarSeparator. (issue #471; + regression in FlatLaf 2.0) +- ToolTip: Fixed wrong tooltip location if component overrides + `JComponent.getToolTipLocation()` and wants place tooltip under mouse + location. (issue #468) +- Extras: Added copy constructor to `FlatSVGIcon`. (issue #465) +- Moved `module-info.class` from `META-INF\versions\9\` to root folder of JARs. + (issue #466) + + +## 2.0 + +- Added system property `flatlaf.nativeLibraryPath` to load native libraries + from a directory. (PR #453) +- Fixed "endless recursion in font" exception in + `FlatLaf$ActiveFont.createValue()` if `UIManager.getFont()` is invoked from + multiple threads. (issue #456) +- PasswordField: Preserve reveal button state when switching theme. (PR #442; + issue #173) +- PasswordField: Reveal button did not show password if + `JPasswordField.setEchoChar()` was invoked from application. (PR #442; issue + #173) +- Slider: Fixed/improved focused indicator color when changing accent color. (PR + #375) +- TextField: + - Improved hover/pressed/selected colors of leading/trailing buttons (e.g. + "reveal" button in password field). (issue #452) + - Clear button no longer paints over round border. (issue #451) +- Extras: Fixed concurrent loading of SVG icons on multiple threads. (issue + #459) +- Use FlatLaf native window decorations by default when running in + [JetBrains Runtime](https://github.com/JetBrains/JetBrainsRuntime/wiki) + (instead of using JetBrains custom decorations). System variable + `flatlaf.useJetBrainsCustomDecorations` is now `false` by default (was `true` + in FlatLaf 1.x). (issue #454) +- Native window decorations: + - Fixed blurry iconify/maximize/close button hover rectangles at 125%, 150% or + 175% scaling. (issue #431) + - Updated maximize and restore icons for Windows 11 style. (requires Java + 8u321, 11.0.14, 17.0.2 or 18+) + - Updated hover and pressed colors of iconify/maximize/close buttons for + Windows 11 style. + + +## 2.0-rc1 + +#### New features and improvements + +- Styling: + - Styling individual components using string in CSS syntax or `java.util.Map`. + (PR #341)\ + E.g.: `mySlider.putClientProperty( "FlatLaf.style", "trackWidth: 2" );` + - Style classes allow defining style rules at a single place (in UI defaults) + and use them in any component. (PR #388)\ + E.g.: `mySlider.putClientProperty( "FlatLaf.styleClass", "myclass" );` +- Typography defines several font styles for headers and various text sizes, + which makes it easy to use consistent font styles across the application. (PR + #396) +- Native window decorations (Windows 10/11 only): + - Unified backgrounds for window title bar is now enabled by default (window + title bar has now same background color as window content). Bottom separator + for menu bars is no longer painted (if unified background is enabled). + - Show Windows 11 snap layouts menu when hovering the mouse over the maximize + button. (issues #397 and #407) + - Possibility to hide window title bar icon (for single window set client + property `JRootPane.titleBarShowIcon` to `false`; for all windows set UI + value `TitlePane.showIcon` to `false`). + - OptionPane: Hide window title bar icon by default. Can be be made visibly by + setting UI default `OptionPane.showIcon` to `true`. (issue #416) + - No longer show the Java "duke/cup" icon if no window icon image is set. + (issue #416) +- TextField, FormattedTextField and PasswordField: + - Support leading and trailing icons (set client property + `JTextField.leadingIcon` or `JTextField.trailingIcon` to a + `javax.swing.Icon`). (PR #378; issue #368) + - Support leading and trailing components (set client property + `JTextField.leadingComponent` or `JTextField.trailingComponent` to a + `java.awt.Component`). (PR #386) + - Support "clear" (or "cancel") button to empty text field. Only shown if text + field is not empty, editable and enabled. (set client property + `JTextField.showClearButton` to `true`). (PR #442) +- PasswordField: Support reveal (or "eye") button to show password. (see UI + value `PasswordField.showRevealButton`) (PR #442; issue #173) +- TextComponents: Double/triple-click-and-drag now extends selection by whole + words/lines. +- Theming improvements: Reworks core themes to make it easier to create new + themes (e.g. reduced explicit colors by using color functions). **Note**: + There are minor incompatible changes in FlatLaf properties files. (PR #390) +- ToolBar: + - Toolbars are no longer floatable by default (dots on left side of toolbar + that allows dragging toolbar). Use `UIManager.put( "ToolBar.floatable", true + )` if you want the old behavior. + - Skip components with empty input map (e.g. `JLabel`) when using arrow keys + to navigate in focusable buttons (if UI value `ToolBar.focusableButtons` is + `true`). + - Support arrow-keys-only navigation within focusable buttons of toolbar (if + UI value `ToolBar.focusableButtons` is `true`): + - arrow keys move focus within toolbar + - tab-key moves focus out of toolbar + - if moving focus into the toolbar, focus recently focused toolbar button +- ComboBox, Spinner, TextField and subclasses: Support specifying width of + border (see UI value `Component.borderWidth`). +- CheckBox and RadioButton: + - Made selected icon better recognizable in **FlatLaf Light** (use blue + border), **Dark** and **Darcula** (use lighter border) themes. **IntelliJ** + theme is not changed. + - Support specifying width of icon border (see UI value + `CheckBox.icon.borderWidth`). + - Reworked icon UI defaults and added missing ones. **Note**: There are minor + incompatible changes in FlatLaf properties files. +- Slider: Support specifying width of thumb border (see UI value + `Slider.thumbBorderWidth`). +- TabbedPane: Optionally paint selected tab as card. (PR #343) +- MenuItem: + - Paint the selected icon when the item is selected. (PR #415) + - Vertically align text if icons have different widths. (issue #437) +- Panel: Support painting background with rounded corners. (issue #367) +- Added more color functions to class `ColorFunctions` for easy use in + applications: `lighten()`, `darken()`, `saturate()`, `desaturate()`, `spin()`, + `tint()`, `shade()` and `luma()`. +- Support defining fonts in FlatLaf properties files. (issue #384) +- Added method `FlatLaf.registerCustomDefaultsSource(URL packageUrl)` for JPMS. + (issue #325) +- Extras: + - Added class `FlatDesktop` for easy integration into macOS screen menu + (About, Preferences and Quit) when using Java 8. + - `FlatSVGIcon`: Support loading SVG from `URL` (for JPMS), `URI`, `File` or + `InputStream`. (issues #419 and #325) + - `FlatSVGUtils`: Support loading SVG from `URL` (for JPMS). (issue #325) +- SwingX: + - New "column control" icon for `JXTable` that scales and uses antialiasing. + (issue #434) + +#### Fixed bugs + +- Native window decorations: Fixed `UnsatisfiedLinkError` on Windows 11 for ARM + processors. (issue #443) +- MenuBar: Do not fill background if non-opaque and having custom background + color. (issue #409) +- InternalFrame: Fill background to avoid that parent may shine through internal + frame if it contains non-opaque components. (better fix for issue #274) +- SwingX: Fixed `NullPointerException` in `FlatCaret` when using + `org.jdesktop.swingx.prompt.PromptSupport.setPrompt()` on a text field and + then switching theme. + + +## 1.6.5 + +#### Fixed bugs + +- Linux: Fixed font problems when running on Oracle Java (OpenJDK is not + affected): + - oversized text if system font is "Inter" (issue #427) + - missing text if system font is "Cantarell" (on Fedora) +- MenuItem: Changed accelerator delimiter from `-` to `+`. (Windows and Linux). +- ComboBox: Fixed occasional `StackOverflowError` when modifying combo box not + on AWT thread. (issue #432) +- macOS: Fixed `NullPointerException` when using AWT component + `java.awt.Choice`. (issue #439) +- Native window decorations: Do not exit application with `UnsatisfiedLinkError` + in case that FlatLaf DLL cannot be executed because of restrictions on + temporary directory. Instead, continue with default window decorations. (issue + #436) + + +## 1.6.4 + +#### Fixed bugs + +- ComboBox: Fixed regression in FlatLaf 1.6.3 that makes selected item invisible + in popup list if `DefaultListCellRenderer` is used as renderer. If using + default renderer, it works. (issue #426) + + +## 1.6.3 + +#### Fixed bugs + +- ComboBox (not editable): Fixed regression in FlatLaf 1.6.2 that may display + text in non-editable combo boxes in bold. (issue #423) +- Tree: Fixed editing cell issue with custom cell renderer and cell editor that + use same component for rendering and editing. (issue #385) + + +## 1.6.2 + +#### Fixed bugs + +- ComboBox (not editable): Fixed background painted outside of border if round + edges are enabled (client property `JComponent.roundRect` is `true`). (similar + to issue #382; regression since fixing #330 in FlatLaf 1.4) +- ComboBox: Fixed `NullPointerException`, which may occur under special + circumstances. (issue #408) +- Table: Do not select text in cell editor when it gets focus (when + `JTable.surrendersFocusOnKeystroke` is `true`) and + `TextComponent.selectAllOnFocusPolicy` is `once` (the default) or `always`. + (issue #395) +- Linux: Fixed NPE when using `java.awt.TrayIcon`. (issue #405) +- FileChooser: Workaround for crash on Windows with Java 17 32-bit (disabled + Windows icons). Java 17 64-bit is not affected. (issue #403) +- Native window decorations: Fixed layout loop, which may occur under special + circumstances and slows down the application. (issue #420) + + +## 1.6.1 + +#### Fixed bugs + +- Native window decorations: Catch `UnsatisfiedLinkError` when trying to load + `jawt.dll` to avoid an application crash (Java 8 on Windows 10 only). + + +## 1.6 + +#### New features and improvements + +- InternalFrame: Double-click on icon in internal frame title bar now closes the + internal frame. (issue #374) +- IntelliJ Themes: Removed deprecated `install()` methods. + +#### Fixed bugs + +- Menus: Fixed missing modifiers flags in `ActionEvent` (e.g. `Ctrl` key + pressed) when running in Java 9+ on Linux, macOS. Occurs also on Windows in + large popup menus that do not fit into the window. (issue #371; regression + since FlatLaf 1.3) +- OptionPane: Fixed `OptionPane.sameSizeButtons`, which did not work as expected + when setting to `false`. +- OptionPane: Fixed rendering of longer HTML text if it is passed as + `StringBuilder`, `StringBuffer`, or any other object that returns HTML text in + method `toString()`. (similar to issue #12) +- ComboBox: Fixed popup border painting on HiDPI screens (e.g. at 150% scaling). +- ComboBox: Fixed popup location if shown above of combo box (Java 8 only). +- ComboBox (editable): Fixed wrong border of internal text field under special + circumstances. +- Spinner: Fixed painting of border corners on left side. (issue #382; + regression since fixing #330 in FlatLaf 1.4) +- TableHeader: Do not show resize cursor for last column if resizing last column + is not possible because auto resize mode of table is not off. (issue #332) +- TableHeader: Fixed missing trailing vertical separator line if used in upper + left corner of scroll pane. (issue #332) +- TextField, FormattedTextField, PasswordField and ComboBox: Fixed alignment of + placeholder text in right-to-left component orientation. +- Slider: Fixed calculation of baseline, which was wrong under some + circumstances. + + +## 1.5 + +#### New features and improvements + +- SwingX: Added search and clear icons to `JXSearchField`. (issue #359) + +#### Fixed bugs + +- Button and TextComponent: Do not apply minimum width/height if margins are + set. (issue #364) +- ComboBox and Spinner: Limit arrow button width if component has large + preferred height. (issue #361) +- FileChooser: Fixed missing (localized) texts when FlatLaf is loaded in special + classloader (e.g. plugin system in Apache NetBeans). +- InternalFrame: Limit internal frame bounds to parent bounds on resize. Also + honor maximum size of internal frame. (issue #362) +- Popup: Fixed incorrectly placed drop shadow for medium-weight popups in + maximized windows. (issue #358) +- Native window decorations (Windows 10 only): + - Fixed occasional application crash in `flatlaf-windows.dll`. (issue #357) + - When window is initially shown, fill background with window background color + (instead of white), which avoids flickering in dark themes. (issue 339) + - When resizing a window at the right/bottom edge, then first fill the new + space with the window background color (instead of black) before the layout + is updated. + - When resizing a window at the left/top edge, then first fill the new space + with the window background color (instead of garbage) before the layout is + updated. + + +## 1.4 + +#### New features and improvements + +- TextField, FormattedTextField and PasswordField: Support adding extra padding + (set client property `JTextField.padding` to an `Insets`). +- PasswordField: UI delegate `FlatPasswordFieldUI` now extends `FlatTextFieldUI` + (instead of `BasicPasswordFieldUI`) to avoid duplicate code and for easier + extensibility. +- Table and PopupFactory: Use `StackWalker` in Java 9+ for better performance. + (issue #334) +- ToolBar: Paint focus indicator for focused button in toolbar. (issue #346) +- ToolBar: Support focusable buttons in toolbar (set UI value + `ToolBar.focusableButtons` to `true`). (issue #346) + +#### Fixed bugs + +- ComboBox (editable) and Spinner: Increased size of internal text field to the + component border so that it behaves like plain text field (mouse click to left + of text now positions caret to first character instead of opening ComboBox + popup; mouse cursor is now of type "text" within the whole component, except + for arrow buttons). (issue #330) +- ComboBox (not editable): Increased size of internal renderer pane to the + component border so that it can paint within the whole component. Also + increase combo box size if a custom renderer uses a border with insets that + are larger than the default combo box padding (`2,6,2,6`). +- Fixed component heights at `1.25x`, `1.75x` and `2.25x` scaling factors (Java + 8 only) so that Button, ComboBox, Spinner and TextField components (including + subclasses) have same heights. This increases heights of Button and TextField + components by: + - `2px` at `1.75x` in **Light** and **Dark** themes + - `2px` at `1.25x` and `2.25x` in **IntelliJ** and **Darcula** themes +- OptionPane: Do not make child components, which are derived from `JPanel`, + non-opaque. (issue #349) +- OptionPane: Align wrapped lines to the right if component orientation is + right-to-left. (issue #350) +- PasswordField: Caps lock icon no longer painted over long text. (issue #172) +- PasswordField: Paint caps lock icon on left side in right-to-left component + orientation. +- Window decorations: Window title bar width is no longer considered when + calculating preferred/minimum width of window. (issue #351) + + +## 1.3 #### New features and improvements @@ -10,13 +390,15 @@ FlatLaf Change Log `PasswordField.focusedBackground`, `FormattedTextField.focusedBackground`, `TextArea.focusedBackground`, `TextPane.focusedBackground`, `EditorPane.focusedBackground`, `ComboBox.focusedBackground`, - `ComboBox.buttonFocusedBackground`, `ComboBox.popupFocusedBackground` and + `ComboBox.buttonFocusedBackground`, `ComboBox.popupBackground` and `Spinner.focusedBackground`). (issue #335) #### Fixed bugs - Fixed white lines at bottom and right side of window (in dark themes on HiDPI screens with scaling enabled). +- ScrollBar: Fixed left/top arrow icon location (if visible). (issue #329) +- Spinner: Fixed up/down arrow icon location. - ToolTip: Fixed positioning of huge tooltips. (issue #333) diff --git a/README.md b/README.md index 79a647b5..93ba2c02 100644 --- a/README.md +++ b/README.md @@ -11,9 +11,9 @@ scales on **HiDPI** displays and runs on Java 8 or newer. The look is heavily inspired by **Darcula** and **IntelliJ** themes from IntelliJ IDEA 2019.2+ and uses almost the same colors and icons. -![Flat Light](images/flat_light.png) +![FlatLaf Light](images/flat_light.png) -![Flat Dark](images/flat_dark.png) +![FlatLaf Dark](images/flat_dark.png) IntelliJ Platform Themes @@ -67,10 +67,13 @@ docs). Addons ------ -- [IntelliJ Themes Pack](flatlaf-intellij-themes) -- [Extras](flatlaf-extras) -- [SwingX](flatlaf-swingx) -- [JIDE Common Layer](flatlaf-jide-oss) +- [IntelliJ Themes Pack](flatlaf-intellij-themes) - bundles many popular + open-source 3rd party themes +- [Extras](flatlaf-extras) - SVG icon, tri-state check box, UI inspectors, and + more +- [SwingX](flatlaf-swingx) - support for SwingX components +- [JIDE Common Layer](flatlaf-jide-oss) - support for JIDE Common Layer + components Getting started @@ -96,10 +99,22 @@ For more information and documentation visit - [Customizing](https://www.formdev.com/flatlaf/customizing/) - [How to Customize](https://www.formdev.com/flatlaf/how-to-customize/) - [Properties Files](https://www.formdev.com/flatlaf/properties-files/) +- [Components UI Properties](https://www.formdev.com/flatlaf/components/) +- [Typography](https://www.formdev.com/flatlaf/typography/) - [Client Properties](https://www.formdev.com/flatlaf/client-properties/) - [System Properties](https://www.formdev.com/flatlaf/system-properties/) +Theme Editor +------------ + +The Theme Editor that supports editing FlatLaf theme properties files. See +[Theme Editor documentation](https://www.formdev.com/flatlaf/theme-editor/) for +details and downloads. + +![Theme Editor](images/theme-editor@1.5x.png) + + Buzz ---- @@ -111,6 +126,13 @@ Buzz Applications using FlatLaf -------------------------- +- ![New](images/new.svg) [Ultorg](https://www.ultorg.com/) (**commercial**) - a + visual query system for relational databases +- ![New](images/new.svg) [MooInfo](https://github.com/rememberber/MooInfo) - + visual implementation of OSHI, to view information about the system and + hardware +- ![New](images/new.svg) [Jailer](https://github.com/Wisser/Jailer) 11.2 - + database subsetting and relational data browsing tool - [Apache NetBeans](https://netbeans.apache.org/) 11.3 - IDE for Java, PHP, HTML and much more - [jclasslib bytecode viewer](https://github.com/ingokegel/jclasslib) 5.5 @@ -138,13 +160,16 @@ Applications using FlatLaf [OpenStreetMap](https://www.openstreetmap.org/) (requires FlatLaf JOSM plugin) - [jAlbum](https://jalbum.net/) 21 (**commercial**) - creates photo album websites +- ![New](images/new.svg) [PDF Studio](https://www.qoppa.com/pdfstudio/) 2021 + (**commercial**) - create, review and edit PDF documents - [XMLmind XML Editor](https://www.xmlmind.com/xmleditor/) 9.3 (**commercial**) - [Total Validator](https://www.totalvalidator.com/) 15 (**commercial**) - checks your website - [j-lawyer](https://github.com/jlawyerorg/j-lawyer-org) - Kanzleisoftware -- [MegaMek](https://github.com/MegaMek/megamek) v0.47.4 and - [MekHQ](https://github.com/MegaMek/mekhq) v0.47.5 - a turn-based sci-fi board - game +- [MegaMek](https://github.com/MegaMek/megamek), + [MegaMekLab](https://github.com/MegaMek/megameklab) and + [MekHQ](https://github.com/MegaMek/mekhq) v0.47.5+ - a sci-fi tabletop + BattleTech simulator suite handling battles, unit building, and campaigns - [GUIslice Builder](https://github.com/ImpulseAdventure/GUIslice-Builder) 0.13.b024 - GUI builder for [GUIslice](https://github.com/ImpulseAdventure/GUIslice), a lightweight GUI @@ -170,7 +195,7 @@ Applications using FlatLaf systems development platform - [JPass](https://github.com/gaborbata/jpass) - password manager with strong encryption -- [Jes - Die Java-ER](https://www.jes-eur.de) +- [Jes - Die Java-EÜR](https://www.jes-eur.de) - [Mapton](https://mapton.org/) 2.0 ([source code](https://github.com/trixon/mapton)) - some kind of map application (based on NetBeans platform) diff --git a/build.gradle.kts b/build.gradle.kts index d40e897e..f95007f3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,8 +14,8 @@ * limitations under the License. */ -val releaseVersion = "1.2" -val developmentVersion = "1.3-SNAPSHOT" +val releaseVersion = "2.1" +val developmentVersion = "2.2-SNAPSHOT" version = if( java.lang.Boolean.getBoolean( "release" ) ) releaseVersion else developmentVersion diff --git a/buildSrc/src/main/kotlin/flatlaf-java9.gradle.kts b/buildSrc/src/main/kotlin/flatlaf-java9.gradle.kts index 49c751a1..c702a853 100644 --- a/buildSrc/src/main/kotlin/flatlaf-java9.gradle.kts +++ b/buildSrc/src/main/kotlin/flatlaf-java9.gradle.kts @@ -28,7 +28,7 @@ if( JavaVersion.current() >= JavaVersion.VERSION_1_9 ) { } dependencies { - add( "java9Compile", sourceSets.main.get().output ) + add( "java9Implementation", sourceSets.main.get().output ) } tasks { diff --git a/buildSrc/src/main/kotlin/flatlaf-module-info.gradle.kts b/buildSrc/src/main/kotlin/flatlaf-module-info.gradle.kts index b2f78f94..b1049c2d 100644 --- a/buildSrc/src/main/kotlin/flatlaf-module-info.gradle.kts +++ b/buildSrc/src/main/kotlin/flatlaf-module-info.gradle.kts @@ -63,10 +63,8 @@ if( JavaVersion.current() >= JavaVersion.VERSION_1_9 ) { jar { manifest.attributes( "Multi-Release" to "true" ) - into( "META-INF/versions/9" ) { - from( sourceSets["module-info"].output ) { - include( "module-info.class" ) - } + from( sourceSets["module-info"].output ) { + include( "module-info.class" ) } } } diff --git a/flatlaf-core/build.gradle.kts b/flatlaf-core/build.gradle.kts index 01f7576c..43e9e670 100644 --- a/flatlaf-core/build.gradle.kts +++ b/flatlaf-core/build.gradle.kts @@ -21,6 +21,17 @@ plugins { `flatlaf-publish` } +val sigtest = configurations.create( "sigtest" ) + +dependencies { + testImplementation( "org.junit.jupiter:junit-jupiter-api:5.7.2" ) + testImplementation( "org.junit.jupiter:junit-jupiter-params" ) + testRuntimeOnly( "org.junit.jupiter:junit-jupiter-engine" ) + + // https://github.com/jtulach/netbeans-apitest + sigtest( "org.netbeans.tools:sigtest-maven-plugin:1.4" ) +} + java { withSourcesJar() withJavadocJar() @@ -34,7 +45,8 @@ tasks { processResources { // build native libraries - dependsOn( ":flatlaf-natives-windows:assemble" ) + if( org.gradle.internal.os.OperatingSystem.current().isWindows ) + dependsOn( ":flatlaf-natives-windows:assemble" ) } jar { @@ -52,6 +64,61 @@ tasks { named( "javadocJar" ) { archiveBaseName.set( "flatlaf" ) } + + check { + dependsOn( "sigtestCheck" ) + } + + test { + useJUnitPlatform() + testLogging.exceptionFormat = org.gradle.api.tasks.testing.logging.TestExceptionFormat.FULL + } + + register( "sigtestGenerate" ) { + group = "verification" + dependsOn( "jar" ) + + doLast { + ant.withGroovyBuilder { + "taskdef"( + "name" to "sigtest", + "classname" to "org.netbeans.apitest.Sigtest", + "classpath" to sigtest.asPath ) + + "sigtest"( + "action" to "generate", + "fileName" to "${project.name}-sigtest.txt", + "classpath" to jar.get().outputs.files.asPath, + "packages" to "com.formdev.flatlaf,com.formdev.flatlaf.util", + "version" to version, + "release" to "1.8", // Java version + "failonerror" to "true" ) + } + } + } + + register( "sigtestCheck" ) { + group = "verification" + dependsOn( "jar" ) + + doLast { + ant.withGroovyBuilder { + "taskdef"( + "name" to "sigtest", + "classname" to "org.netbeans.apitest.Sigtest", + "classpath" to sigtest.asPath ) + + "sigtest"( + "action" to "check", + "fileName" to "${project.name}-sigtest.txt", + "classpath" to jar.get().outputs.files.asPath, + "packages" to "com.formdev.flatlaf,com.formdev.flatlaf.util", + "version" to version, + "release" to "1.8", // Java version + "failonerror" to "true" ) + } + } + } } flatlafPublish { diff --git a/flatlaf-core/flatlaf-core-sigtest.txt b/flatlaf-core/flatlaf-core-sigtest.txt new file mode 100644 index 00000000..cf438b77 --- /dev/null +++ b/flatlaf-core/flatlaf-core-sigtest.txt @@ -0,0 +1,1124 @@ +#Signature file v4.1 +#Version 2.1 + +CLSS public abstract interface com.formdev.flatlaf.FlatClientProperties +fld public final static java.lang.String BUTTON_TYPE = "JButton.buttonType" +fld public final static java.lang.String BUTTON_TYPE_BORDERLESS = "borderless" +fld public final static java.lang.String BUTTON_TYPE_HELP = "help" +fld public final static java.lang.String BUTTON_TYPE_ROUND_RECT = "roundRect" +fld public final static java.lang.String BUTTON_TYPE_SQUARE = "square" +fld public final static java.lang.String BUTTON_TYPE_TAB = "tab" +fld public final static java.lang.String BUTTON_TYPE_TOOLBAR_BUTTON = "toolBarButton" +fld public final static java.lang.String COMPONENT_FOCUS_OWNER = "JComponent.focusOwner" +fld public final static java.lang.String COMPONENT_ROUND_RECT = "JComponent.roundRect" +fld public final static java.lang.String MENU_BAR_EMBEDDED = "JRootPane.menuBarEmbedded" +fld public final static java.lang.String MINIMUM_HEIGHT = "JComponent.minimumHeight" +fld public final static java.lang.String MINIMUM_WIDTH = "JComponent.minimumWidth" +fld public final static java.lang.String OUTLINE = "JComponent.outline" +fld public final static java.lang.String OUTLINE_ERROR = "error" +fld public final static java.lang.String OUTLINE_WARNING = "warning" +fld public final static java.lang.String PLACEHOLDER_TEXT = "JTextField.placeholderText" +fld public final static java.lang.String POPUP_DROP_SHADOW_PAINTED = "Popup.dropShadowPainted" +fld public final static java.lang.String POPUP_FORCE_HEAVY_WEIGHT = "Popup.forceHeavyWeight" +fld public final static java.lang.String PROGRESS_BAR_LARGE_HEIGHT = "JProgressBar.largeHeight" +fld public final static java.lang.String PROGRESS_BAR_SQUARE = "JProgressBar.square" +fld public final static java.lang.String SCROLL_BAR_SHOW_BUTTONS = "JScrollBar.showButtons" +fld public final static java.lang.String SCROLL_PANE_SMOOTH_SCROLLING = "JScrollPane.smoothScrolling" +fld public final static java.lang.String SELECTED_STATE = "JButton.selectedState" +fld public final static java.lang.String SELECTED_STATE_INDETERMINATE = "indeterminate" +fld public final static java.lang.String SELECT_ALL_ON_FOCUS_POLICY = "JTextField.selectAllOnFocusPolicy" +fld public final static java.lang.String SELECT_ALL_ON_FOCUS_POLICY_ALWAYS = "always" +fld public final static java.lang.String SELECT_ALL_ON_FOCUS_POLICY_NEVER = "never" +fld public final static java.lang.String SELECT_ALL_ON_FOCUS_POLICY_ONCE = "once" +fld public final static java.lang.String SQUARE_SIZE = "JButton.squareSize" +fld public final static java.lang.String STYLE = "FlatLaf.style" +fld public final static java.lang.String STYLE_CLASS = "FlatLaf.styleClass" +fld public final static java.lang.String TABBED_PANE_ALIGN_CENTER = "center" +fld public final static java.lang.String TABBED_PANE_ALIGN_FILL = "fill" +fld public final static java.lang.String TABBED_PANE_ALIGN_LEADING = "leading" +fld public final static java.lang.String TABBED_PANE_ALIGN_TRAILING = "trailing" +fld public final static java.lang.String TABBED_PANE_HAS_FULL_BORDER = "JTabbedPane.hasFullBorder" +fld public final static java.lang.String TABBED_PANE_HIDE_TAB_AREA_WITH_ONE_TAB = "JTabbedPane.hideTabAreaWithOneTab" +fld public final static java.lang.String TABBED_PANE_LEADING_COMPONENT = "JTabbedPane.leadingComponent" +fld public final static java.lang.String TABBED_PANE_MAXIMUM_TAB_WIDTH = "JTabbedPane.maximumTabWidth" +fld public final static java.lang.String TABBED_PANE_MINIMUM_TAB_WIDTH = "JTabbedPane.minimumTabWidth" +fld public final static java.lang.String TABBED_PANE_PLACEMENT_BOTH = "both" +fld public final static java.lang.String TABBED_PANE_PLACEMENT_TRAILING = "trailing" +fld public final static java.lang.String TABBED_PANE_POLICY_AS_NEEDED = "asNeeded" +fld public final static java.lang.String TABBED_PANE_POLICY_AS_NEEDED_SINGLE = "asNeededSingle" +fld public final static java.lang.String TABBED_PANE_POLICY_NEVER = "never" +fld public final static java.lang.String TABBED_PANE_SCROLL_BUTTONS_PLACEMENT = "JTabbedPane.scrollButtonsPlacement" +fld public final static java.lang.String TABBED_PANE_SCROLL_BUTTONS_POLICY = "JTabbedPane.scrollButtonsPolicy" +fld public final static java.lang.String TABBED_PANE_SHOW_CONTENT_SEPARATOR = "JTabbedPane.showContentSeparator" +fld public final static java.lang.String TABBED_PANE_SHOW_TAB_SEPARATORS = "JTabbedPane.showTabSeparators" +fld public final static java.lang.String TABBED_PANE_TABS_POPUP_POLICY = "JTabbedPane.tabsPopupPolicy" +fld public final static java.lang.String TABBED_PANE_TAB_ALIGNMENT = "JTabbedPane.tabAlignment" +fld public final static java.lang.String TABBED_PANE_TAB_AREA_ALIGNMENT = "JTabbedPane.tabAreaAlignment" +fld public final static java.lang.String TABBED_PANE_TAB_AREA_INSETS = "JTabbedPane.tabAreaInsets" +fld public final static java.lang.String TABBED_PANE_TAB_CLOSABLE = "JTabbedPane.tabClosable" +fld public final static java.lang.String TABBED_PANE_TAB_CLOSE_CALLBACK = "JTabbedPane.tabCloseCallback" +fld public final static java.lang.String TABBED_PANE_TAB_CLOSE_TOOLTIPTEXT = "JTabbedPane.tabCloseToolTipText" +fld public final static java.lang.String TABBED_PANE_TAB_HEIGHT = "JTabbedPane.tabHeight" +fld public final static java.lang.String TABBED_PANE_TAB_ICON_PLACEMENT = "JTabbedPane.tabIconPlacement" +fld public final static java.lang.String TABBED_PANE_TAB_INSETS = "JTabbedPane.tabInsets" +fld public final static java.lang.String TABBED_PANE_TAB_TYPE = "JTabbedPane.tabType" +fld public final static java.lang.String TABBED_PANE_TAB_TYPE_CARD = "card" +fld public final static java.lang.String TABBED_PANE_TAB_TYPE_UNDERLINED = "underlined" +fld public final static java.lang.String TABBED_PANE_TAB_WIDTH_MODE = "JTabbedPane.tabWidthMode" +fld public final static java.lang.String TABBED_PANE_TAB_WIDTH_MODE_COMPACT = "compact" +fld public final static java.lang.String TABBED_PANE_TAB_WIDTH_MODE_EQUAL = "equal" +fld public final static java.lang.String TABBED_PANE_TAB_WIDTH_MODE_PREFERRED = "preferred" +fld public final static java.lang.String TABBED_PANE_TRAILING_COMPONENT = "JTabbedPane.trailingComponent" +fld public final static java.lang.String TAB_BUTTON_SELECTED_BACKGROUND = "JToggleButton.tab.selectedBackground" +fld public final static java.lang.String TAB_BUTTON_UNDERLINE_COLOR = "JToggleButton.tab.underlineColor" +fld public final static java.lang.String TAB_BUTTON_UNDERLINE_HEIGHT = "JToggleButton.tab.underlineHeight" +fld public final static java.lang.String TEXT_FIELD_CLEAR_CALLBACK = "JTextField.clearCallback" +fld public final static java.lang.String TEXT_FIELD_LEADING_COMPONENT = "JTextField.leadingComponent" +fld public final static java.lang.String TEXT_FIELD_LEADING_ICON = "JTextField.leadingIcon" +fld public final static java.lang.String TEXT_FIELD_PADDING = "JTextField.padding" +fld public final static java.lang.String TEXT_FIELD_SHOW_CLEAR_BUTTON = "JTextField.showClearButton" +fld public final static java.lang.String TEXT_FIELD_TRAILING_COMPONENT = "JTextField.trailingComponent" +fld public final static java.lang.String TEXT_FIELD_TRAILING_ICON = "JTextField.trailingIcon" +fld public final static java.lang.String TITLE_BAR_BACKGROUND = "JRootPane.titleBarBackground" +fld public final static java.lang.String TITLE_BAR_FOREGROUND = "JRootPane.titleBarForeground" +fld public final static java.lang.String TITLE_BAR_SHOW_ICON = "JRootPane.titleBarShowIcon" +fld public final static java.lang.String TREE_PAINT_SELECTION = "JTree.paintSelection" +fld public final static java.lang.String TREE_WIDE_SELECTION = "JTree.wideSelection" +fld public final static java.lang.String USE_WINDOW_DECORATIONS = "JRootPane.useWindowDecorations" +meth public static <%0 extends java.lang.Object> {%%0} clientProperty(javax.swing.JComponent,java.lang.String,{%%0},java.lang.Class<{%%0}>) +meth public static boolean clientPropertyBoolean(javax.swing.JComponent,java.lang.String,boolean) +meth public static boolean clientPropertyEquals(javax.swing.JComponent,java.lang.String,java.lang.Object) +meth public static int clientPropertyInt(javax.swing.JComponent,java.lang.String,int) +meth public static java.awt.Color clientPropertyColor(javax.swing.JComponent,java.lang.String,java.awt.Color) +meth public static java.lang.Boolean clientPropertyBooleanStrict(javax.swing.JComponent,java.lang.String,java.lang.Boolean) + +CLSS public com.formdev.flatlaf.FlatDarculaLaf +cons public init() +fld public final static java.lang.String NAME = "FlatLaf Darcula" +meth public java.lang.String getDescription() +meth public java.lang.String getName() +meth public static boolean install() + anno 0 java.lang.Deprecated() +meth public static boolean setup() +meth public static void installLafInfo() +supr com.formdev.flatlaf.FlatDarkLaf + +CLSS public com.formdev.flatlaf.FlatDarkLaf +cons public init() +fld public final static java.lang.String NAME = "FlatLaf Dark" +meth public boolean isDark() +meth public java.lang.String getDescription() +meth public java.lang.String getName() +meth public static boolean install() + anno 0 java.lang.Deprecated() +meth public static boolean setup() +meth public static void installLafInfo() +supr com.formdev.flatlaf.FlatLaf + +CLSS public abstract com.formdev.flatlaf.FlatDefaultsAddon +cons public init() +meth public int getPriority() +meth public java.io.InputStream getDefaults(java.lang.Class) +meth public void afterDefaultsLoading(javax.swing.LookAndFeel,javax.swing.UIDefaults) +supr java.lang.Object + +CLSS public final !enum com.formdev.flatlaf.FlatIconColors +fld public final boolean dark +fld public final boolean light +fld public final int rgb +fld public final java.lang.String key +fld public final static com.formdev.flatlaf.FlatIconColors ACTIONS_BLUE +fld public final static com.formdev.flatlaf.FlatIconColors ACTIONS_BLUE_DARK +fld public final static com.formdev.flatlaf.FlatIconColors ACTIONS_GREEN +fld public final static com.formdev.flatlaf.FlatIconColors ACTIONS_GREEN_DARK +fld public final static com.formdev.flatlaf.FlatIconColors ACTIONS_GREY +fld public final static com.formdev.flatlaf.FlatIconColors ACTIONS_GREYINLINE +fld public final static com.formdev.flatlaf.FlatIconColors ACTIONS_GREYINLINE_DARK +fld public final static com.formdev.flatlaf.FlatIconColors ACTIONS_GREY_DARK +fld public final static com.formdev.flatlaf.FlatIconColors ACTIONS_RED +fld public final static com.formdev.flatlaf.FlatIconColors ACTIONS_RED_DARK +fld public final static com.formdev.flatlaf.FlatIconColors ACTIONS_YELLOW +fld public final static com.formdev.flatlaf.FlatIconColors ACTIONS_YELLOW_DARK +fld public final static com.formdev.flatlaf.FlatIconColors OBJECTS_BLACK_TEXT +fld public final static com.formdev.flatlaf.FlatIconColors OBJECTS_BLUE +fld public final static com.formdev.flatlaf.FlatIconColors OBJECTS_GREEN +fld public final static com.formdev.flatlaf.FlatIconColors OBJECTS_GREEN_ANDROID +fld public final static com.formdev.flatlaf.FlatIconColors OBJECTS_GREY +fld public final static com.formdev.flatlaf.FlatIconColors OBJECTS_PINK +fld public final static com.formdev.flatlaf.FlatIconColors OBJECTS_PURPLE +fld public final static com.formdev.flatlaf.FlatIconColors OBJECTS_RED +fld public final static com.formdev.flatlaf.FlatIconColors OBJECTS_RED_STATUS +fld public final static com.formdev.flatlaf.FlatIconColors OBJECTS_YELLOW +fld public final static com.formdev.flatlaf.FlatIconColors OBJECTS_YELLOW_DARK +meth public static com.formdev.flatlaf.FlatIconColors valueOf(java.lang.String) +meth public static com.formdev.flatlaf.FlatIconColors[] values() +supr java.lang.Enum + +CLSS public com.formdev.flatlaf.FlatIntelliJLaf +cons public init() +fld public final static java.lang.String NAME = "FlatLaf IntelliJ" +meth public java.lang.String getDescription() +meth public java.lang.String getName() +meth public static boolean install() + anno 0 java.lang.Deprecated() +meth public static boolean setup() +meth public static void installLafInfo() +supr com.formdev.flatlaf.FlatLightLaf + +CLSS public abstract com.formdev.flatlaf.FlatLaf +cons public init() +fld public final static java.lang.Object NULL_VALUE +innr public abstract interface static DisabledIconProvider +meth protected java.util.List> getLafClassesForDefaultsLoading() +meth protected java.util.Properties getAdditionalDefaults() +meth public abstract boolean isDark() +meth public boolean getSupportsWindowDecorations() +meth public boolean isNativeLookAndFeel() +meth public boolean isSupportedLookAndFeel() +meth public final boolean equals(java.lang.Object) +meth public final int hashCode() +meth public java.lang.String getID() +meth public java.util.Map getExtraDefaults() +meth public javax.swing.Icon getDisabledIcon(javax.swing.JComponent,javax.swing.Icon) +meth public javax.swing.UIDefaults getDefaults() +meth public static boolean install(javax.swing.LookAndFeel) + anno 0 java.lang.Deprecated() +meth public static boolean isLafDark() +meth public static boolean isShowMnemonics() +meth public static boolean isUseNativeWindowDecorations() +meth public static boolean setup(javax.swing.LookAndFeel) +meth public static boolean supportsNativeWindowDecorations() +meth public static java.lang.Object parseDefaultsValue(java.lang.String,java.lang.String,java.lang.Class) +meth public static java.util.Map getGlobalExtraDefaults() +meth public static javax.swing.UIDefaults$ActiveValue createActiveFontValue(float) +meth public static void hideMnemonics() +meth public static void initIconColors(javax.swing.UIDefaults,boolean) +meth public static void installLafInfo(java.lang.String,java.lang.Class) +meth public static void registerCustomDefaultsSource(java.io.File) +meth public static void registerCustomDefaultsSource(java.lang.String) +meth public static void registerCustomDefaultsSource(java.lang.String,java.lang.ClassLoader) +meth public static void registerCustomDefaultsSource(java.net.URL) +meth public static void repaintAllFramesAndDialogs() +meth public static void revalidateAndRepaintAllFramesAndDialogs() +meth public static void runWithUIDefaultsGetter(java.util.function.Function,java.lang.Runnable) +meth public static void setGlobalExtraDefaults(java.util.Map) +meth public static void setUseNativeWindowDecorations(boolean) +meth public static void showMnemonics(java.awt.Component) +meth public static void unregisterCustomDefaultsSource(java.io.File) +meth public static void unregisterCustomDefaultsSource(java.lang.String) +meth public static void unregisterCustomDefaultsSource(java.lang.String,java.lang.ClassLoader) +meth public static void unregisterCustomDefaultsSource(java.net.URL) +meth public static void updateUI() +meth public static void updateUILater() +meth public void initialize() +meth public void registerUIDefaultsGetter(java.util.function.Function) +meth public void setExtraDefaults(java.util.Map) +meth public void uninitialize() +meth public void unregisterUIDefaultsGetter(java.util.function.Function) +supr javax.swing.plaf.basic.BasicLookAndFeel +hfds DESKTOPFONTHINTS,aquaLoaded,customDefaultsSources,desktopPropertyListener,desktopPropertyName,desktopPropertyName2,extraDefaults,globalExtraDefaults,mnemonicHandler,oldPopupFactory,postInitialization,subMenuUsabilityHelper,uiDefaultsGetters,updateUIPending +hcls ActiveFont,FlatUIDefaults,ImageIconUIResource + +CLSS public abstract interface static com.formdev.flatlaf.FlatLaf$DisabledIconProvider + outer com.formdev.flatlaf.FlatLaf +meth public abstract javax.swing.Icon getDisabledIcon() + +CLSS public com.formdev.flatlaf.FlatLightLaf +cons public init() +fld public final static java.lang.String NAME = "FlatLaf Light" +meth public boolean isDark() +meth public java.lang.String getDescription() +meth public java.lang.String getName() +meth public static boolean install() + anno 0 java.lang.Deprecated() +meth public static boolean setup() +meth public static void installLafInfo() +supr com.formdev.flatlaf.FlatLaf + +CLSS public com.formdev.flatlaf.FlatPropertiesLaf +cons public init(java.lang.String,java.io.File) throws java.io.IOException +cons public init(java.lang.String,java.io.InputStream) throws java.io.IOException +cons public init(java.lang.String,java.util.Properties) +meth protected java.util.ArrayList> getLafClassesForDefaultsLoading() +meth protected java.util.Properties getAdditionalDefaults() +meth public boolean isDark() +meth public java.lang.String getDescription() +meth public java.lang.String getName() +meth public java.util.Properties getProperties() +supr com.formdev.flatlaf.FlatLaf +hfds baseTheme,dark,name,properties + +CLSS public abstract interface com.formdev.flatlaf.FlatSystemProperties +fld public final static java.lang.String ANIMATION = "flatlaf.animation" +fld public final static java.lang.String MENUBAR_EMBEDDED = "flatlaf.menuBarEmbedded" +fld public final static java.lang.String NATIVE_LIBRARY_PATH = "flatlaf.nativeLibraryPath" +fld public final static java.lang.String UI_SCALE = "flatlaf.uiScale" +fld public final static java.lang.String UI_SCALE_ALLOW_SCALE_DOWN = "flatlaf.uiScale.allowScaleDown" +fld public final static java.lang.String UI_SCALE_ENABLED = "flatlaf.uiScale.enabled" +fld public final static java.lang.String USE_JETBRAINS_CUSTOM_DECORATIONS = "flatlaf.useJetBrainsCustomDecorations" +fld public final static java.lang.String USE_TEXT_Y_CORRECTION = "flatlaf.useTextYCorrection" +fld public final static java.lang.String USE_UBUNTU_FONT = "flatlaf.useUbuntuFont" +fld public final static java.lang.String USE_WINDOW_DECORATIONS = "flatlaf.useWindowDecorations" +meth public static boolean getBoolean(java.lang.String,boolean) +meth public static java.lang.Boolean getBooleanStrict(java.lang.String,java.lang.Boolean) + +CLSS public com.formdev.flatlaf.IntelliJTheme +cons public init(java.io.InputStream) throws java.io.IOException +fld public final boolean dark +fld public final java.lang.String author +fld public final java.lang.String name +innr public static ThemeLaf +meth public static boolean install(java.io.InputStream) + anno 0 java.lang.Deprecated() +meth public static boolean setup(java.io.InputStream) +meth public static com.formdev.flatlaf.FlatLaf createLaf(com.formdev.flatlaf.IntelliJTheme) +meth public static com.formdev.flatlaf.FlatLaf createLaf(java.io.InputStream) throws java.io.IOException +supr java.lang.Object +hfds checkboxDuplicateColors,checkboxKeyMapping,colors,icons,isMaterialUILite,namedColors,ui,uiKeyCopying,uiKeyInverseMapping,uiKeyMapping + +CLSS public static com.formdev.flatlaf.IntelliJTheme$ThemeLaf + outer com.formdev.flatlaf.IntelliJTheme +cons public init(com.formdev.flatlaf.IntelliJTheme) +meth protected java.util.ArrayList> getLafClassesForDefaultsLoading() +meth public boolean isDark() +meth public com.formdev.flatlaf.IntelliJTheme getTheme() +meth public java.lang.String getDescription() +meth public java.lang.String getName() +supr com.formdev.flatlaf.FlatLaf +hfds theme + +CLSS public abstract interface com.formdev.flatlaf.util.AnimatedIcon +innr public static AnimationSupport +intf javax.swing.Icon +meth public abstract float getValue(java.awt.Component) +meth public abstract void paintIconAnimated(java.awt.Component,java.awt.Graphics,int,int,float) +meth public boolean isAnimationEnabled() +meth public com.formdev.flatlaf.util.Animator$Interpolator getAnimationInterpolator() +meth public int getAnimationDuration() +meth public int getAnimationResolution() +meth public java.lang.Object getClientPropertyKey() +meth public void paintIcon(java.awt.Component,java.awt.Graphics,int,int) + +CLSS public static com.formdev.flatlaf.util.AnimatedIcon$AnimationSupport + outer com.formdev.flatlaf.util.AnimatedIcon +cons public init() +meth public static void paintIcon(com.formdev.flatlaf.util.AnimatedIcon,java.awt.Component,java.awt.Graphics,int,int) +meth public static void saveIconLocation(com.formdev.flatlaf.util.AnimatedIcon,java.awt.Component,int,int) +supr java.lang.Object +hfds animatedValue,animator,fraction,startValue,targetValue,x,y + +CLSS public com.formdev.flatlaf.util.Animator +cons public init(int) +cons public init(int,com.formdev.flatlaf.util.Animator$TimingTarget) +cons public init(int,com.formdev.flatlaf.util.Animator$TimingTarget,java.lang.Runnable) +innr public abstract interface static Interpolator +innr public abstract interface static TimingTarget +meth public boolean isRunning() +meth public com.formdev.flatlaf.util.Animator$Interpolator getInterpolator() +meth public int getDuration() +meth public int getResolution() +meth public static boolean useAnimation() +meth public void addTarget(com.formdev.flatlaf.util.Animator$TimingTarget) +meth public void cancel() +meth public void removeTarget(com.formdev.flatlaf.util.Animator$TimingTarget) +meth public void restart() +meth public void setDuration(int) +meth public void setInterpolator(com.formdev.flatlaf.util.Animator$Interpolator) +meth public void setResolution(int) +meth public void start() +meth public void stop() +supr java.lang.Object +hfds duration,endRunnable,hasBegun,interpolator,resolution,running,startTime,targets,timeToStop,timer + +CLSS public abstract interface static com.formdev.flatlaf.util.Animator$Interpolator + outer com.formdev.flatlaf.util.Animator + anno 0 java.lang.FunctionalInterface() +meth public abstract float interpolate(float) + +CLSS public abstract interface static com.formdev.flatlaf.util.Animator$TimingTarget + outer com.formdev.flatlaf.util.Animator + anno 0 java.lang.FunctionalInterface() +meth public abstract void timingEvent(float) +meth public void begin() +meth public void end() + +CLSS public com.formdev.flatlaf.util.ColorFunctions +cons public init() +innr public abstract interface static ColorFunction +innr public static Fade +innr public static HSLChange +innr public static HSLIncreaseDecrease +innr public static Mix +meth public !varargs static java.awt.Color applyFunctions(java.awt.Color,com.formdev.flatlaf.util.ColorFunctions$ColorFunction[]) +meth public static float clamp(float) +meth public static float luma(java.awt.Color) +meth public static java.awt.Color darken(java.awt.Color,float) +meth public static java.awt.Color desaturate(java.awt.Color,float) +meth public static java.awt.Color lighten(java.awt.Color,float) +meth public static java.awt.Color mix(java.awt.Color,java.awt.Color,float) +meth public static java.awt.Color saturate(java.awt.Color,float) +meth public static java.awt.Color shade(java.awt.Color,float) +meth public static java.awt.Color spin(java.awt.Color,float) +meth public static java.awt.Color tint(java.awt.Color,float) +supr java.lang.Object + +CLSS public abstract interface static com.formdev.flatlaf.util.ColorFunctions$ColorFunction + outer com.formdev.flatlaf.util.ColorFunctions +meth public abstract void apply(float[]) + +CLSS public static com.formdev.flatlaf.util.ColorFunctions$Fade + outer com.formdev.flatlaf.util.ColorFunctions +cons public init(float) +fld public final float amount +intf com.formdev.flatlaf.util.ColorFunctions$ColorFunction +meth public java.lang.String toString() +meth public void apply(float[]) +supr java.lang.Object + +CLSS public static com.formdev.flatlaf.util.ColorFunctions$HSLChange + outer com.formdev.flatlaf.util.ColorFunctions +cons public init(int,float) +fld public final float value +fld public final int hslIndex +intf com.formdev.flatlaf.util.ColorFunctions$ColorFunction +meth public java.lang.String toString() +meth public void apply(float[]) +supr java.lang.Object + +CLSS public static com.formdev.flatlaf.util.ColorFunctions$HSLIncreaseDecrease + outer com.formdev.flatlaf.util.ColorFunctions +cons public init(int,boolean,float,boolean,boolean) +fld public final boolean autoInverse +fld public final boolean increase +fld public final boolean relative +fld public final float amount +fld public final int hslIndex +intf com.formdev.flatlaf.util.ColorFunctions$ColorFunction +meth protected boolean shouldInverse(float[]) +meth public java.lang.String toString() +meth public void apply(float[]) +supr java.lang.Object + +CLSS public static com.formdev.flatlaf.util.ColorFunctions$Mix + outer com.formdev.flatlaf.util.ColorFunctions +cons public init(java.awt.Color,float) +fld public final float weight +fld public final java.awt.Color color2 +intf com.formdev.flatlaf.util.ColorFunctions$ColorFunction +meth public java.lang.String toString() +meth public void apply(float[]) +supr java.lang.Object + +CLSS public com.formdev.flatlaf.util.CubicBezierEasing +cons public init(float,float,float,float) +fld public final static com.formdev.flatlaf.util.CubicBezierEasing EASE +fld public final static com.formdev.flatlaf.util.CubicBezierEasing EASE_IN +fld public final static com.formdev.flatlaf.util.CubicBezierEasing EASE_IN_OUT +fld public final static com.formdev.flatlaf.util.CubicBezierEasing EASE_OUT +fld public final static com.formdev.flatlaf.util.CubicBezierEasing STANDARD_EASING +intf com.formdev.flatlaf.util.Animator$Interpolator +meth public float interpolate(float) +supr java.lang.Object +hfds x1,x2,y1,y2 + +CLSS public com.formdev.flatlaf.util.DerivedColor +cons public !varargs init(java.awt.Color,com.formdev.flatlaf.util.ColorFunctions$ColorFunction[]) +meth public com.formdev.flatlaf.util.ColorFunctions$ColorFunction[] getFunctions() +meth public java.awt.Color derive(java.awt.Color) +meth public java.lang.String toString() +supr javax.swing.plaf.ColorUIResource +hfds baseOfDefaultColorRGB,functions,hasBaseOfDefaultColor + +CLSS public com.formdev.flatlaf.util.Graphics2DProxy +cons public init(java.awt.Graphics2D) +meth public boolean drawImage(java.awt.Image,int,int,int,int,int,int,int,int,java.awt.Color,java.awt.image.ImageObserver) +meth public boolean drawImage(java.awt.Image,int,int,int,int,int,int,int,int,java.awt.image.ImageObserver) +meth public boolean drawImage(java.awt.Image,int,int,int,int,java.awt.Color,java.awt.image.ImageObserver) +meth public boolean drawImage(java.awt.Image,int,int,int,int,java.awt.image.ImageObserver) +meth public boolean drawImage(java.awt.Image,int,int,java.awt.Color,java.awt.image.ImageObserver) +meth public boolean drawImage(java.awt.Image,int,int,java.awt.image.ImageObserver) +meth public boolean drawImage(java.awt.Image,java.awt.geom.AffineTransform,java.awt.image.ImageObserver) +meth public boolean hit(java.awt.Rectangle,java.awt.Shape,boolean) +meth public boolean hitClip(int,int,int,int) +meth public java.awt.Color getBackground() +meth public java.awt.Color getColor() +meth public java.awt.Composite getComposite() +meth public java.awt.Font getFont() +meth public java.awt.FontMetrics getFontMetrics() +meth public java.awt.FontMetrics getFontMetrics(java.awt.Font) +meth public java.awt.Graphics create() +meth public java.awt.Graphics create(int,int,int,int) +meth public java.awt.GraphicsConfiguration getDeviceConfiguration() +meth public java.awt.Paint getPaint() +meth public java.awt.Rectangle getClipBounds() +meth public java.awt.Rectangle getClipBounds(java.awt.Rectangle) +meth public java.awt.Rectangle getClipRect() +meth public java.awt.RenderingHints getRenderingHints() +meth public java.awt.Shape getClip() +meth public java.awt.Stroke getStroke() +meth public java.awt.font.FontRenderContext getFontRenderContext() +meth public java.awt.geom.AffineTransform getTransform() +meth public java.lang.Object getRenderingHint(java.awt.RenderingHints$Key) +meth public java.lang.String toString() +meth public void addRenderingHints(java.util.Map) +meth public void clearRect(int,int,int,int) +meth public void clip(java.awt.Shape) +meth public void clipRect(int,int,int,int) +meth public void copyArea(int,int,int,int,int,int) +meth public void dispose() +meth public void draw(java.awt.Shape) +meth public void draw3DRect(int,int,int,int,boolean) +meth public void drawArc(int,int,int,int,int,int) +meth public void drawBytes(byte[],int,int,int,int) +meth public void drawChars(char[],int,int,int,int) +meth public void drawGlyphVector(java.awt.font.GlyphVector,float,float) +meth public void drawImage(java.awt.image.BufferedImage,java.awt.image.BufferedImageOp,int,int) +meth public void drawLine(int,int,int,int) +meth public void drawOval(int,int,int,int) +meth public void drawPolygon(int[],int[],int) +meth public void drawPolygon(java.awt.Polygon) +meth public void drawPolyline(int[],int[],int) +meth public void drawRect(int,int,int,int) +meth public void drawRenderableImage(java.awt.image.renderable.RenderableImage,java.awt.geom.AffineTransform) +meth public void drawRenderedImage(java.awt.image.RenderedImage,java.awt.geom.AffineTransform) +meth public void drawRoundRect(int,int,int,int,int,int) +meth public void drawString(java.lang.String,float,float) +meth public void drawString(java.lang.String,int,int) +meth public void drawString(java.text.AttributedCharacterIterator,float,float) +meth public void drawString(java.text.AttributedCharacterIterator,int,int) +meth public void fill(java.awt.Shape) +meth public void fill3DRect(int,int,int,int,boolean) +meth public void fillArc(int,int,int,int,int,int) +meth public void fillOval(int,int,int,int) +meth public void fillPolygon(int[],int[],int) +meth public void fillPolygon(java.awt.Polygon) +meth public void fillRect(int,int,int,int) +meth public void fillRoundRect(int,int,int,int,int,int) +meth public void rotate(double) +meth public void rotate(double,double,double) +meth public void scale(double,double) +meth public void setBackground(java.awt.Color) +meth public void setClip(int,int,int,int) +meth public void setClip(java.awt.Shape) +meth public void setColor(java.awt.Color) +meth public void setComposite(java.awt.Composite) +meth public void setFont(java.awt.Font) +meth public void setPaint(java.awt.Paint) +meth public void setPaintMode() +meth public void setRenderingHint(java.awt.RenderingHints$Key,java.lang.Object) +meth public void setRenderingHints(java.util.Map) +meth public void setStroke(java.awt.Stroke) +meth public void setTransform(java.awt.geom.AffineTransform) +meth public void setXORMode(java.awt.Color) +meth public void shear(double,double) +meth public void transform(java.awt.geom.AffineTransform) +meth public void translate(double,double) +meth public void translate(int,int) +supr java.awt.Graphics2D +hfds delegate + +CLSS public com.formdev.flatlaf.util.GrayFilter +cons public init() +cons public init(int,int,int) +meth public int filterRGB(int,int,int) +meth public int getAlpha() +meth public int getBrightness() +meth public int getContrast() +meth public static com.formdev.flatlaf.util.GrayFilter createDisabledIconFilter(boolean) +supr java.awt.image.RGBImageFilter +hfds alpha,brightness,contrast,origBrightness,origContrast + +CLSS public com.formdev.flatlaf.util.HSLColor +cons public init(float,float,float) +cons public init(float,float,float,float) +cons public init(float[]) +cons public init(float[],float) +cons public init(java.awt.Color) +meth public float getAlpha() +meth public float getHue() +meth public float getLuminance() +meth public float getSaturation() +meth public float[] getHSL() +meth public java.awt.Color adjustHue(float) +meth public java.awt.Color adjustLuminance(float) +meth public java.awt.Color adjustSaturation(float) +meth public java.awt.Color adjustShade(float) +meth public java.awt.Color adjustTone(float) +meth public java.awt.Color getComplementary() +meth public java.awt.Color getRGB() +meth public java.lang.String toString() +meth public static float[] fromRGB(java.awt.Color) +meth public static java.awt.Color toRGB(float,float,float) +meth public static java.awt.Color toRGB(float,float,float,float) +meth public static java.awt.Color toRGB(float[]) +meth public static java.awt.Color toRGB(float[],float) +supr java.lang.Object +hfds alpha,hsl,rgb + +CLSS public com.formdev.flatlaf.util.HiDPIUtils +cons public init() +innr public abstract interface static Painter +meth public static float computeTextYCorrection(java.awt.Graphics2D) +meth public static java.awt.Graphics2D createGraphicsTextYCorrection(java.awt.Graphics2D) +meth public static void drawStringUnderlineCharAtWithYCorrection(javax.swing.JComponent,java.awt.Graphics2D,java.lang.String,int,int,int) +meth public static void drawStringWithYCorrection(javax.swing.JComponent,java.awt.Graphics2D,java.lang.String,int,int) +meth public static void paintAtScale1x(java.awt.Graphics2D,int,int,int,int,com.formdev.flatlaf.util.HiDPIUtils$Painter) +meth public static void paintAtScale1x(java.awt.Graphics2D,javax.swing.JComponent,com.formdev.flatlaf.util.HiDPIUtils$Painter) +supr java.lang.Object +hfds useTextYCorrection + +CLSS public abstract interface static com.formdev.flatlaf.util.HiDPIUtils$Painter + outer com.formdev.flatlaf.util.HiDPIUtils +meth public abstract void paint(java.awt.Graphics2D,int,int,int,int,double) + +CLSS public com.formdev.flatlaf.util.JavaCompatibility +cons public init() +meth public static java.lang.String getClippedString(javax.swing.JComponent,java.awt.FontMetrics,java.lang.String,int) +meth public static void drawStringUnderlineCharAt(javax.swing.JComponent,java.awt.Graphics,java.lang.String,int,int,int) +supr java.lang.Object +hfds drawStringUnderlineCharAtMethod,getClippedStringMethod + +CLSS public abstract interface com.formdev.flatlaf.util.LoggingFacade +fld public final static com.formdev.flatlaf.util.LoggingFacade INSTANCE +meth public abstract void logConfig(java.lang.String,java.lang.Throwable) +meth public abstract void logSevere(java.lang.String,java.lang.Throwable) + +CLSS public com.formdev.flatlaf.util.MultiResolutionImageSupport +cons public init() +meth public !varargs static java.awt.Image create(int,java.awt.Image[]) +meth public static boolean isAvailable() +meth public static boolean isMultiResolutionImage(java.awt.Image) +meth public static java.awt.Image create(int,java.awt.Dimension[],java.util.function.Function) +meth public static java.awt.Image getResolutionVariant(java.awt.Image,int,int) +meth public static java.awt.Image map(java.awt.Image,java.util.function.Function) +meth public static java.util.List getResolutionVariants(java.awt.Image) +supr java.lang.Object + +CLSS public com.formdev.flatlaf.util.NativeLibrary +cons public init(java.io.File,boolean) +cons public init(java.lang.String,java.lang.ClassLoader,boolean) +meth public boolean isLoaded() +supr java.lang.Object +hfds DELETE_SUFFIX,deletedTemporary,loaded + +CLSS public com.formdev.flatlaf.util.ScaledEmptyBorder +cons public init(int,int,int,int) +cons public init(java.awt.Insets) +meth public java.awt.Insets getBorderInsets() +meth public java.awt.Insets getBorderInsets(java.awt.Component,java.awt.Insets) +supr javax.swing.border.EmptyBorder + +CLSS public com.formdev.flatlaf.util.ScaledImageIcon +cons public init(javax.swing.ImageIcon) +cons public init(javax.swing.ImageIcon,int,int) +intf javax.swing.Icon +meth protected java.awt.Image getResolutionVariant(int,int) +meth public int getIconHeight() +meth public int getIconWidth() +meth public void paintIcon(java.awt.Component,java.awt.Graphics,int,int) +supr java.lang.Object +hfds iconHeight,iconWidth,imageIcon,lastImage,lastSystemScaleFactor,lastUserScaleFactor + +CLSS public com.formdev.flatlaf.util.SoftCache<%0 extends java.lang.Object, %1 extends java.lang.Object> +cons public init() +cons public init(int) +intf java.util.Map<{com.formdev.flatlaf.util.SoftCache%0},{com.formdev.flatlaf.util.SoftCache%1}> +meth public boolean containsKey(java.lang.Object) +meth public boolean containsValue(java.lang.Object) +meth public boolean isEmpty() +meth public int size() +meth public java.util.Collection<{com.formdev.flatlaf.util.SoftCache%1}> values() +meth public java.util.Set> entrySet() +meth public java.util.Set<{com.formdev.flatlaf.util.SoftCache%0}> keySet() +meth public void clear() +meth public void forEach(java.util.function.BiConsumer) +meth public void putAll(java.util.Map) +meth public void replaceAll(java.util.function.BiFunction) +meth public {com.formdev.flatlaf.util.SoftCache%1} get(java.lang.Object) +meth public {com.formdev.flatlaf.util.SoftCache%1} put({com.formdev.flatlaf.util.SoftCache%0},{com.formdev.flatlaf.util.SoftCache%1}) +meth public {com.formdev.flatlaf.util.SoftCache%1} remove(java.lang.Object) +supr java.lang.Object +hfds map,queue +hcls CacheReference + +CLSS public com.formdev.flatlaf.util.StringUtils +cons public init() +meth public static boolean isEmpty(java.lang.String) +meth public static boolean isTrimmedEmpty(java.lang.String) +meth public static java.lang.String removeLeading(java.lang.String,java.lang.String) +meth public static java.lang.String removeTrailing(java.lang.String,java.lang.String) +meth public static java.lang.String substringTrimmed(java.lang.String,int) +meth public static java.lang.String substringTrimmed(java.lang.String,int,int) +meth public static java.util.List split(java.lang.String,char) +meth public static java.util.List split(java.lang.String,char,boolean,boolean) +supr java.lang.Object + +CLSS public com.formdev.flatlaf.util.SwingUtils +cons public init() +meth public static <%0 extends java.awt.Component> {%%0} getComponentByName(java.awt.Container,java.lang.String) +supr java.lang.Object + +CLSS public com.formdev.flatlaf.util.SystemInfo +cons public init() +fld public final static boolean isAARCH64 +fld public final static boolean isJava_11_orLater +fld public final static boolean isJava_15_orLater +fld public final static boolean isJava_17_orLater +fld public final static boolean isJava_18_orLater +fld public final static boolean isJava_9_orLater +fld public final static boolean isJetBrainsJVM +fld public final static boolean isJetBrainsJVM_11_orLater +fld public final static boolean isKDE +fld public final static boolean isLinux +fld public final static boolean isMacOS +fld public final static boolean isMacOS_10_11_ElCapitan_orLater +fld public final static boolean isMacOS_10_14_Mojave_orLater +fld public final static boolean isMacOS_10_15_Catalina_orLater +fld public final static boolean isProjector +fld public final static boolean isWebswing +fld public final static boolean isWinPE +fld public final static boolean isWindows +fld public final static boolean isWindows_10_orLater +fld public final static boolean isWindows_11_orLater +fld public final static boolean isX86 +fld public final static boolean isX86_64 +fld public final static long javaVersion +fld public final static long osVersion +meth public static long scanVersion(java.lang.String) +meth public static long toVersion(int,int,int,int) +supr java.lang.Object + +CLSS public com.formdev.flatlaf.util.UIScale +cons public init() +meth public static boolean isSystemScalingEnabled() +meth public static double getSystemScaleFactor(java.awt.Graphics2D) +meth public static double getSystemScaleFactor(java.awt.GraphicsConfiguration) +meth public static float computeFontScaleFactor(java.awt.Font) +meth public static float getUserScaleFactor() +meth public static float scale(float) +meth public static float unscale(float) +meth public static int scale(int) +meth public static int scale2(int) +meth public static int unscale(int) +meth public static java.awt.Dimension scale(java.awt.Dimension) +meth public static java.awt.Insets scale(java.awt.Insets) +meth public static javax.swing.plaf.FontUIResource applyCustomScaleFactor(javax.swing.plaf.FontUIResource) +meth public static void addPropertyChangeListener(java.beans.PropertyChangeListener) +meth public static void removePropertyChangeListener(java.beans.PropertyChangeListener) +meth public static void scaleGraphics(java.awt.Graphics2D) +supr java.lang.Object +hfds DEBUG,changeSupport,initialized,jreHiDPI,scaleFactor + +CLSS public java.awt.Color +cons public init(float,float,float) +cons public init(float,float,float,float) +cons public init(int) +cons public init(int,boolean) +cons public init(int,int,int) +cons public init(int,int,int,int) + anno 0 java.beans.ConstructorProperties(java.lang.String[] value=["red", "green", "blue", "alpha"]) +cons public init(java.awt.color.ColorSpace,float[],float) +fld public final static java.awt.Color BLACK +fld public final static java.awt.Color BLUE +fld public final static java.awt.Color CYAN +fld public final static java.awt.Color DARK_GRAY +fld public final static java.awt.Color GRAY +fld public final static java.awt.Color GREEN +fld public final static java.awt.Color LIGHT_GRAY +fld public final static java.awt.Color MAGENTA +fld public final static java.awt.Color ORANGE +fld public final static java.awt.Color PINK +fld public final static java.awt.Color RED +fld public final static java.awt.Color WHITE +fld public final static java.awt.Color YELLOW +fld public final static java.awt.Color black +fld public final static java.awt.Color blue +fld public final static java.awt.Color cyan +fld public final static java.awt.Color darkGray +fld public final static java.awt.Color gray +fld public final static java.awt.Color green +fld public final static java.awt.Color lightGray +fld public final static java.awt.Color magenta +fld public final static java.awt.Color orange +fld public final static java.awt.Color pink +fld public final static java.awt.Color red +fld public final static java.awt.Color white +fld public final static java.awt.Color yellow +intf java.awt.Paint +intf java.io.Serializable +meth public boolean equals(java.lang.Object) +meth public float[] getColorComponents(float[]) +meth public float[] getColorComponents(java.awt.color.ColorSpace,float[]) +meth public float[] getComponents(float[]) +meth public float[] getComponents(java.awt.color.ColorSpace,float[]) +meth public float[] getRGBColorComponents(float[]) +meth public float[] getRGBComponents(float[]) +meth public int getAlpha() +meth public int getBlue() +meth public int getGreen() +meth public int getRGB() +meth public int getRed() +meth public int getTransparency() +meth public int hashCode() +meth public java.awt.Color brighter() +meth public java.awt.Color darker() +meth public java.awt.PaintContext createContext(java.awt.image.ColorModel,java.awt.Rectangle,java.awt.geom.Rectangle2D,java.awt.geom.AffineTransform,java.awt.RenderingHints) +meth public java.awt.color.ColorSpace getColorSpace() +meth public java.lang.String toString() +meth public static float[] RGBtoHSB(int,int,int,float[]) +meth public static int HSBtoRGB(float,float,float) +meth public static java.awt.Color decode(java.lang.String) +meth public static java.awt.Color getColor(java.lang.String) +meth public static java.awt.Color getColor(java.lang.String,int) +meth public static java.awt.Color getColor(java.lang.String,java.awt.Color) +meth public static java.awt.Color getHSBColor(float,float,float) +supr java.lang.Object + +CLSS public abstract java.awt.Graphics +cons protected init() +meth public abstract boolean drawImage(java.awt.Image,int,int,int,int,int,int,int,int,java.awt.Color,java.awt.image.ImageObserver) +meth public abstract boolean drawImage(java.awt.Image,int,int,int,int,int,int,int,int,java.awt.image.ImageObserver) +meth public abstract boolean drawImage(java.awt.Image,int,int,int,int,java.awt.Color,java.awt.image.ImageObserver) +meth public abstract boolean drawImage(java.awt.Image,int,int,int,int,java.awt.image.ImageObserver) +meth public abstract boolean drawImage(java.awt.Image,int,int,java.awt.Color,java.awt.image.ImageObserver) +meth public abstract boolean drawImage(java.awt.Image,int,int,java.awt.image.ImageObserver) +meth public abstract java.awt.Color getColor() +meth public abstract java.awt.Font getFont() +meth public abstract java.awt.FontMetrics getFontMetrics(java.awt.Font) +meth public abstract java.awt.Graphics create() +meth public abstract java.awt.Rectangle getClipBounds() +meth public abstract java.awt.Shape getClip() +meth public abstract void clearRect(int,int,int,int) +meth public abstract void clipRect(int,int,int,int) +meth public abstract void copyArea(int,int,int,int,int,int) +meth public abstract void dispose() +meth public abstract void drawArc(int,int,int,int,int,int) +meth public abstract void drawLine(int,int,int,int) +meth public abstract void drawOval(int,int,int,int) +meth public abstract void drawPolygon(int[],int[],int) +meth public abstract void drawPolyline(int[],int[],int) +meth public abstract void drawRoundRect(int,int,int,int,int,int) +meth public abstract void drawString(java.lang.String,int,int) +meth public abstract void drawString(java.text.AttributedCharacterIterator,int,int) +meth public abstract void fillArc(int,int,int,int,int,int) +meth public abstract void fillOval(int,int,int,int) +meth public abstract void fillPolygon(int[],int[],int) +meth public abstract void fillRect(int,int,int,int) +meth public abstract void fillRoundRect(int,int,int,int,int,int) +meth public abstract void setClip(int,int,int,int) +meth public abstract void setClip(java.awt.Shape) +meth public abstract void setColor(java.awt.Color) +meth public abstract void setFont(java.awt.Font) +meth public abstract void setPaintMode() +meth public abstract void setXORMode(java.awt.Color) +meth public abstract void translate(int,int) +meth public boolean hitClip(int,int,int,int) +meth public java.awt.FontMetrics getFontMetrics() +meth public java.awt.Graphics create(int,int,int,int) +meth public java.awt.Rectangle getClipBounds(java.awt.Rectangle) +meth public java.awt.Rectangle getClipRect() + anno 0 java.lang.Deprecated() +meth public java.lang.String toString() +meth public void draw3DRect(int,int,int,int,boolean) +meth public void drawBytes(byte[],int,int,int,int) +meth public void drawChars(char[],int,int,int,int) +meth public void drawPolygon(java.awt.Polygon) +meth public void drawRect(int,int,int,int) +meth public void fill3DRect(int,int,int,int,boolean) +meth public void fillPolygon(java.awt.Polygon) +meth public void finalize() +supr java.lang.Object + +CLSS public abstract java.awt.Graphics2D +cons protected init() +meth public abstract boolean drawImage(java.awt.Image,java.awt.geom.AffineTransform,java.awt.image.ImageObserver) +meth public abstract boolean hit(java.awt.Rectangle,java.awt.Shape,boolean) +meth public abstract java.awt.Color getBackground() +meth public abstract java.awt.Composite getComposite() +meth public abstract java.awt.GraphicsConfiguration getDeviceConfiguration() +meth public abstract java.awt.Paint getPaint() +meth public abstract java.awt.RenderingHints getRenderingHints() +meth public abstract java.awt.Stroke getStroke() +meth public abstract java.awt.font.FontRenderContext getFontRenderContext() +meth public abstract java.awt.geom.AffineTransform getTransform() +meth public abstract java.lang.Object getRenderingHint(java.awt.RenderingHints$Key) +meth public abstract void addRenderingHints(java.util.Map) +meth public abstract void clip(java.awt.Shape) +meth public abstract void draw(java.awt.Shape) +meth public abstract void drawGlyphVector(java.awt.font.GlyphVector,float,float) +meth public abstract void drawImage(java.awt.image.BufferedImage,java.awt.image.BufferedImageOp,int,int) +meth public abstract void drawRenderableImage(java.awt.image.renderable.RenderableImage,java.awt.geom.AffineTransform) +meth public abstract void drawRenderedImage(java.awt.image.RenderedImage,java.awt.geom.AffineTransform) +meth public abstract void drawString(java.lang.String,float,float) +meth public abstract void drawString(java.lang.String,int,int) +meth public abstract void drawString(java.text.AttributedCharacterIterator,float,float) +meth public abstract void drawString(java.text.AttributedCharacterIterator,int,int) +meth public abstract void fill(java.awt.Shape) +meth public abstract void rotate(double) +meth public abstract void rotate(double,double,double) +meth public abstract void scale(double,double) +meth public abstract void setBackground(java.awt.Color) +meth public abstract void setComposite(java.awt.Composite) +meth public abstract void setPaint(java.awt.Paint) +meth public abstract void setRenderingHint(java.awt.RenderingHints$Key,java.lang.Object) +meth public abstract void setRenderingHints(java.util.Map) +meth public abstract void setStroke(java.awt.Stroke) +meth public abstract void setTransform(java.awt.geom.AffineTransform) +meth public abstract void shear(double,double) +meth public abstract void transform(java.awt.geom.AffineTransform) +meth public abstract void translate(double,double) +meth public abstract void translate(int,int) +meth public void draw3DRect(int,int,int,int,boolean) +meth public void fill3DRect(int,int,int,int,boolean) +supr java.awt.Graphics + +CLSS public abstract interface java.awt.Paint +intf java.awt.Transparency +meth public abstract java.awt.PaintContext createContext(java.awt.image.ColorModel,java.awt.Rectangle,java.awt.geom.Rectangle2D,java.awt.geom.AffineTransform,java.awt.RenderingHints) + +CLSS public abstract interface java.awt.Transparency +fld public final static int BITMASK = 2 +fld public final static int OPAQUE = 1 +fld public final static int TRANSLUCENT = 3 +meth public abstract int getTransparency() + +CLSS public abstract interface java.awt.image.ImageConsumer +fld public final static int COMPLETESCANLINES = 4 +fld public final static int IMAGEABORTED = 4 +fld public final static int IMAGEERROR = 1 +fld public final static int RANDOMPIXELORDER = 1 +fld public final static int SINGLEFRAME = 16 +fld public final static int SINGLEFRAMEDONE = 2 +fld public final static int SINGLEPASS = 8 +fld public final static int STATICIMAGEDONE = 3 +fld public final static int TOPDOWNLEFTRIGHT = 2 +meth public abstract void imageComplete(int) +meth public abstract void setColorModel(java.awt.image.ColorModel) +meth public abstract void setDimensions(int,int) +meth public abstract void setHints(int) +meth public abstract void setPixels(int,int,int,int,java.awt.image.ColorModel,byte[],int,int) +meth public abstract void setPixels(int,int,int,int,java.awt.image.ColorModel,int[],int,int) +meth public abstract void setProperties(java.util.Hashtable) + +CLSS public java.awt.image.ImageFilter +cons public init() +fld protected java.awt.image.ImageConsumer consumer +intf java.awt.image.ImageConsumer +intf java.lang.Cloneable +meth public java.awt.image.ImageFilter getFilterInstance(java.awt.image.ImageConsumer) +meth public java.lang.Object clone() +meth public void imageComplete(int) +meth public void resendTopDownLeftRight(java.awt.image.ImageProducer) +meth public void setColorModel(java.awt.image.ColorModel) +meth public void setDimensions(int,int) +meth public void setHints(int) +meth public void setPixels(int,int,int,int,java.awt.image.ColorModel,byte[],int,int) +meth public void setPixels(int,int,int,int,java.awt.image.ColorModel,int[],int,int) +meth public void setProperties(java.util.Hashtable) +supr java.lang.Object + +CLSS public abstract java.awt.image.RGBImageFilter +cons public init() +fld protected boolean canFilterIndexColorModel +fld protected java.awt.image.ColorModel newmodel +fld protected java.awt.image.ColorModel origmodel +meth public abstract int filterRGB(int,int,int) +meth public java.awt.image.IndexColorModel filterIndexColorModel(java.awt.image.IndexColorModel) +meth public void filterRGBPixels(int,int,int,int,int[],int,int) +meth public void setColorModel(java.awt.image.ColorModel) +meth public void setPixels(int,int,int,int,java.awt.image.ColorModel,byte[],int,int) +meth public void setPixels(int,int,int,int,java.awt.image.ColorModel,int[],int,int) +meth public void substituteColorModel(java.awt.image.ColorModel,java.awt.image.ColorModel) +supr java.awt.image.ImageFilter + +CLSS public abstract interface java.io.Serializable + +CLSS public abstract interface java.lang.Cloneable + +CLSS public abstract interface java.lang.Comparable<%0 extends java.lang.Object> +meth public abstract int compareTo({java.lang.Comparable%0}) + +CLSS public abstract java.lang.Enum<%0 extends java.lang.Enum<{java.lang.Enum%0}>> +cons protected init(java.lang.String,int) +intf java.io.Serializable +intf java.lang.Comparable<{java.lang.Enum%0}> +meth protected final java.lang.Object clone() throws java.lang.CloneNotSupportedException +meth protected final void finalize() +meth public final boolean equals(java.lang.Object) +meth public final int compareTo({java.lang.Enum%0}) +meth public final int hashCode() +meth public final int ordinal() +meth public final java.lang.Class<{java.lang.Enum%0}> getDeclaringClass() +meth public final java.lang.String name() +meth public java.lang.String toString() +meth public static <%0 extends java.lang.Enum<{%%0}>> {%%0} valueOf(java.lang.Class<{%%0}>,java.lang.String) +supr java.lang.Object + +CLSS public abstract interface !annotation java.lang.FunctionalInterface + anno 0 java.lang.annotation.Documented() + anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME) + anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[TYPE]) +intf java.lang.annotation.Annotation + +CLSS public java.lang.Object +cons public init() +meth protected java.lang.Object clone() throws java.lang.CloneNotSupportedException +meth protected void finalize() throws java.lang.Throwable +meth public boolean equals(java.lang.Object) +meth public final java.lang.Class getClass() +meth public final void notify() +meth public final void notifyAll() +meth public final void wait() throws java.lang.InterruptedException +meth public final void wait(long) throws java.lang.InterruptedException +meth public final void wait(long,int) throws java.lang.InterruptedException +meth public int hashCode() +meth public java.lang.String toString() + +CLSS public abstract interface java.lang.annotation.Annotation +meth public abstract boolean equals(java.lang.Object) +meth public abstract int hashCode() +meth public abstract java.lang.Class annotationType() +meth public abstract java.lang.String toString() + +CLSS public abstract interface !annotation java.lang.annotation.Documented + anno 0 java.lang.annotation.Documented() + anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME) + anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE]) +intf java.lang.annotation.Annotation + +CLSS public abstract interface !annotation java.lang.annotation.Retention + anno 0 java.lang.annotation.Documented() + anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME) + anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE]) +intf java.lang.annotation.Annotation +meth public abstract java.lang.annotation.RetentionPolicy value() + +CLSS public abstract interface !annotation java.lang.annotation.Target + anno 0 java.lang.annotation.Documented() + anno 0 java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy value=RUNTIME) + anno 0 java.lang.annotation.Target(java.lang.annotation.ElementType[] value=[ANNOTATION_TYPE]) +intf java.lang.annotation.Annotation +meth public abstract java.lang.annotation.ElementType[] value() + +CLSS public abstract interface java.util.Map<%0 extends java.lang.Object, %1 extends java.lang.Object> +innr public abstract interface static Entry +meth public abstract boolean containsKey(java.lang.Object) +meth public abstract boolean containsValue(java.lang.Object) +meth public abstract boolean equals(java.lang.Object) +meth public abstract boolean isEmpty() +meth public abstract int hashCode() +meth public abstract int size() +meth public abstract java.util.Collection<{java.util.Map%1}> values() +meth public abstract java.util.Set> entrySet() +meth public abstract java.util.Set<{java.util.Map%0}> keySet() +meth public abstract void clear() +meth public abstract void putAll(java.util.Map) +meth public abstract {java.util.Map%1} get(java.lang.Object) +meth public abstract {java.util.Map%1} put({java.util.Map%0},{java.util.Map%1}) +meth public abstract {java.util.Map%1} remove(java.lang.Object) +meth public boolean remove(java.lang.Object,java.lang.Object) +meth public boolean replace({java.util.Map%0},{java.util.Map%1},{java.util.Map%1}) +meth public void forEach(java.util.function.BiConsumer) +meth public void replaceAll(java.util.function.BiFunction) +meth public {java.util.Map%1} compute({java.util.Map%0},java.util.function.BiFunction) +meth public {java.util.Map%1} computeIfAbsent({java.util.Map%0},java.util.function.Function) +meth public {java.util.Map%1} computeIfPresent({java.util.Map%0},java.util.function.BiFunction) +meth public {java.util.Map%1} getOrDefault(java.lang.Object,{java.util.Map%1}) +meth public {java.util.Map%1} merge({java.util.Map%0},{java.util.Map%1},java.util.function.BiFunction) +meth public {java.util.Map%1} putIfAbsent({java.util.Map%0},{java.util.Map%1}) +meth public {java.util.Map%1} replace({java.util.Map%0},{java.util.Map%1}) + +CLSS public abstract interface javax.swing.Icon +meth public abstract int getIconHeight() +meth public abstract int getIconWidth() +meth public abstract void paintIcon(java.awt.Component,java.awt.Graphics,int,int) + +CLSS public abstract javax.swing.LookAndFeel +cons public init() +meth public abstract boolean isNativeLookAndFeel() +meth public abstract boolean isSupportedLookAndFeel() +meth public abstract java.lang.String getDescription() +meth public abstract java.lang.String getID() +meth public abstract java.lang.String getName() +meth public boolean getSupportsWindowDecorations() +meth public java.lang.String toString() +meth public javax.swing.Icon getDisabledIcon(javax.swing.JComponent,javax.swing.Icon) +meth public javax.swing.Icon getDisabledSelectedIcon(javax.swing.JComponent,javax.swing.Icon) +meth public javax.swing.LayoutStyle getLayoutStyle() +meth public javax.swing.UIDefaults getDefaults() +meth public static java.lang.Object getDesktopPropertyValue(java.lang.String,java.lang.Object) +meth public static java.lang.Object makeIcon(java.lang.Class,java.lang.String) +meth public static javax.swing.ComponentInputMap makeComponentInputMap(javax.swing.JComponent,java.lang.Object[]) +meth public static javax.swing.InputMap makeInputMap(java.lang.Object[]) +meth public static javax.swing.text.JTextComponent$KeyBinding[] makeKeyBindings(java.lang.Object[]) +meth public static void installBorder(javax.swing.JComponent,java.lang.String) +meth public static void installColors(javax.swing.JComponent,java.lang.String,java.lang.String) +meth public static void installColorsAndFont(javax.swing.JComponent,java.lang.String,java.lang.String,java.lang.String) +meth public static void installProperty(javax.swing.JComponent,java.lang.String,java.lang.Object) +meth public static void loadKeyBindings(javax.swing.InputMap,java.lang.Object[]) +meth public static void uninstallBorder(javax.swing.JComponent) +meth public void initialize() +meth public void provideErrorFeedback(java.awt.Component) +meth public void uninitialize() +supr java.lang.Object + +CLSS public abstract javax.swing.border.AbstractBorder +cons public init() +intf java.io.Serializable +intf javax.swing.border.Border +meth public boolean isBorderOpaque() +meth public int getBaseline(java.awt.Component,int,int) +meth public java.awt.Component$BaselineResizeBehavior getBaselineResizeBehavior(java.awt.Component) +meth public java.awt.Insets getBorderInsets(java.awt.Component) +meth public java.awt.Insets getBorderInsets(java.awt.Component,java.awt.Insets) +meth public java.awt.Rectangle getInteriorRectangle(java.awt.Component,int,int,int,int) +meth public static java.awt.Rectangle getInteriorRectangle(java.awt.Component,javax.swing.border.Border,int,int,int,int) +meth public void paintBorder(java.awt.Component,java.awt.Graphics,int,int,int,int) +supr java.lang.Object + +CLSS public abstract interface javax.swing.border.Border +meth public abstract boolean isBorderOpaque() +meth public abstract java.awt.Insets getBorderInsets(java.awt.Component) +meth public abstract void paintBorder(java.awt.Component,java.awt.Graphics,int,int,int,int) + +CLSS public javax.swing.border.EmptyBorder +cons public init(int,int,int,int) +cons public init(java.awt.Insets) + anno 0 java.beans.ConstructorProperties(java.lang.String[] value=["borderInsets"]) +fld protected int bottom +fld protected int left +fld protected int right +fld protected int top +intf java.io.Serializable +meth public boolean isBorderOpaque() +meth public java.awt.Insets getBorderInsets() +meth public java.awt.Insets getBorderInsets(java.awt.Component,java.awt.Insets) +meth public void paintBorder(java.awt.Component,java.awt.Graphics,int,int,int,int) +supr javax.swing.border.AbstractBorder + +CLSS public javax.swing.plaf.ColorUIResource +cons public init(float,float,float) +cons public init(int) +cons public init(int,int,int) + anno 0 java.beans.ConstructorProperties(java.lang.String[] value=["red", "green", "blue"]) +cons public init(java.awt.Color) +intf javax.swing.plaf.UIResource +supr java.awt.Color + +CLSS public abstract interface javax.swing.plaf.UIResource + +CLSS public abstract javax.swing.plaf.basic.BasicLookAndFeel +cons public init() +intf java.io.Serializable +meth protected javax.swing.Action createAudioAction(java.lang.Object) +meth protected javax.swing.ActionMap getAudioActionMap() +meth protected void initClassDefaults(javax.swing.UIDefaults) +meth protected void initComponentDefaults(javax.swing.UIDefaults) +meth protected void initSystemColorDefaults(javax.swing.UIDefaults) +meth protected void loadSystemColors(javax.swing.UIDefaults,java.lang.String[],boolean) +meth protected void playSound(javax.swing.Action) +meth public javax.swing.UIDefaults getDefaults() +meth public void initialize() +meth public void uninitialize() +supr javax.swing.LookAndFeel + diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatClientProperties.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatClientProperties.java index ff6a5aa5..0fb5e513 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatClientProperties.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatClientProperties.java @@ -126,6 +126,57 @@ public interface FlatClientProperties //---- JComponent --------------------------------------------------------- + /** + * Specifies the style of a component as String in CSS syntax ("key1: value1; key2: value2; ...") + * or as {@link java.util.Map}<String, Object> with binary values. + *

+ * The keys are the same as used in UI defaults, but without component type prefix. + * E.g. for UI default {@code Slider.thumbSize} use key {@code thumbSize}. + *

+ * The syntax of the CSS values is the same as used in FlatLaf properties files + * (https://www.formdev.com/flatlaf/properties-files/), + * but some features are not supported (e.g. variables). + * When using a map, the values are not parsed from a string. They must be binary. + *

+ * Components {@link javax.swing.JComponent}
+ * Value type {@link java.lang.String} or {@link java.util.Map}<String, Object>
+ * + * @since 2 + */ + String STYLE = "FlatLaf.style"; + + /** + * Specifies the style class(es) of a component as String (single class or multiple classes separated by space characters) + * or as {@code String[]} or {@link java.util.List}<String> (multiple classes). + *

+ * The style rules must be defined in UI defaults either as strings (in CSS syntax) + * or as {@link java.util.Map}<String, Object> (with binary values). + * The key must be in syntax: {@code [style]type.styleClass}, where the type is optional. + * E.g. in FlatLaf properties file: + *

{@code
+	 * [style]Button.primary = borderColor: #08f; background: #08f; foreground: #fff
+	 * [style].secondary = borderColor: #0f8; background: #0f8
+	 * }
+ * or in Java code: + *
{@code
+	 * UIManager.put( "[style]Button.primary", "borderColor: #08f; background: #08f; foreground: #fff" );
+	 * UIManager.put( "[style].secondary", "borderColor: #0f8; background: #0f8" );
+	 * }
+ * The rule "Button.primary" can be applied to buttons only. + * The rule ".secondary" can be applied to any component. + *

+ * To have similar behavior as in CSS, first the rule without type is applied, + * then the rule with type. + * E.g. setting style class to "foo" on a {@code JButton} uses rules + * from UI default keys "[style].foo" and "[style]Button.foo". + *

+ * Components {@link javax.swing.JComponent}
+ * Value type {@link java.lang.String}, {@code String[]} or {@link java.util.List}<String>
+ * + * @since 2 + */ + String STYLE_CLASS = "FlatLaf.styleClass"; + /** * Specifies minimum width of a component. *

@@ -280,6 +331,24 @@ public interface FlatClientProperties */ String MENU_BAR_EMBEDDED = "JRootPane.menuBarEmbedded"; + /** + * Specifies whether the window icon should be shown in the window title bar + * (requires enabled window decorations). + *

+ * Setting this shows/hides the windows icon + * for the {@code JFrame} or {@code JDialog} that contains the root pane. + *

+ * This client property has higher priority than UI default {@code TitlePane.showIcon}. + *

+ * (requires Window 10) + *

+ * Component {@link javax.swing.JRootPane}
+ * Value type {@link java.lang.Boolean} + * + * @since 2 + */ + String TITLE_BAR_SHOW_ICON = "JRootPane.titleBarShowIcon"; + /** * Background color of window title bar (requires enabled window decorations). *

@@ -324,6 +393,35 @@ public interface FlatClientProperties //---- JTabbedPane -------------------------------------------------------- + /** + * Specifies type of the selected tab. + *

+ * Component {@link javax.swing.JTabbedPane}
+ * Value type {@link java.lang.String}
+ * Allowed Values + * {@link #TABBED_PANE_TAB_TYPE_UNDERLINED} or + * {@link #TABBED_PANE_TAB_TYPE_CARD} + * + * @since 2 + */ + String TABBED_PANE_TAB_TYPE = "JTabbedPane.tabType"; + + /** + * Paint the selected tab underlined. + * + * @see #TABBED_PANE_TAB_TYPE + * @since 2 + */ + String TABBED_PANE_TAB_TYPE_UNDERLINED = "underlined"; + + /** + * Paint the selected tab as card. + * + * @see #TABBED_PANE_TAB_TYPE + * @since 2 + */ + String TABBED_PANE_TAB_TYPE_CARD = "card"; + /** * Specifies whether separators are shown between tabs. *

@@ -665,9 +763,9 @@ public interface FlatClientProperties /** * Specifies a component that will be placed at the leading edge of the tabs area. *

- * For top and bottom tab placement, the layed out component size will be + * For top and bottom tab placement, the laid out component size will be * the preferred component width and the tab area height.
- * For left and right tab placement, the layed out component size will be + * For left and right tab placement, the laid out component size will be * the tab area width and the preferred component height. *

* Component {@link javax.swing.JTabbedPane}
@@ -678,9 +776,9 @@ public interface FlatClientProperties /** * Specifies a component that will be placed at the trailing edge of the tabs area. *

- * For top and bottom tab placement, the layed out component size will be + * For top and bottom tab placement, the laid out component size will be * the available horizontal space (minimum is preferred component width) and the tab area height.
- * For left and right tab placement, the layed out component size will be + * For left and right tab placement, the laid out component size will be * the tab area width and the available vertical space (minimum is preferred component height). *

* Component {@link javax.swing.JTabbedPane}
@@ -733,6 +831,130 @@ public interface FlatClientProperties */ String PLACEHOLDER_TEXT = "JTextField.placeholderText"; + /** + * Specifies the padding of the text. + * This changes the location and size of the text view within the component bounds, + * but does not affect the size of the component. + *

+ * Component {@link javax.swing.JTextField} (and subclasses)
+ * Value type {@link java.awt.Insets} + * + * @since 1.4 + */ + String TEXT_FIELD_PADDING = "JTextField.padding"; + + /** + * Specifies an icon that will be placed at the leading edge of the text field. + *

+ * Component {@link javax.swing.JTextField} (and subclasses)
+ * Value type {@link javax.swing.Icon} + * + * @since 2 + */ + String TEXT_FIELD_LEADING_ICON = "JTextField.leadingIcon"; + + /** + * Specifies an icon that will be placed at the trailing edge of the text field. + *

+ * Component {@link javax.swing.JTextField} (and subclasses)
+ * Value type {@link javax.swing.Icon} + * + * @since 2 + */ + String TEXT_FIELD_TRAILING_ICON = "JTextField.trailingIcon"; + + /** + * Specifies a component that will be placed at the leading edge of the text field. + *

+ * The component will be positioned inside and aligned to the visible text field border. + * There is no gap between the visible border and the component. + * The laid out component size will be the preferred component width + * and the inner text field height. + *

+ * The component should be not opaque because the text field border is painted + * slightly inside the usually visible border in some cases. + * E.g. when focused (in some themes) or when an outline color is specified + * (see {@link #OUTLINE}). + *

+ * The component is prepared in the following way: + *

    + *
  • Component client property {@link #STYLE_CLASS} is set to {@code inTextField}. + *
  • If component is a button or toggle button, client property {@link #BUTTON_TYPE} + * is set to {@link #BUTTON_TYPE_TOOLBAR_BUTTON} + * and button cursor is set to default cursor (if not set). + *
  • If component is a toolbar, client property {@link #STYLE_CLASS} + * is set to {@code inTextField} on all toolbar children + * and toolbar cursor is set to default cursor (if not set). + *
+ * Because text fields use the text cursor by default and the cursor is inherited by child components, + * it may be necessary to explicitly set component cursor if you e.g. need the default arrow cursor. + * E.g. {@code comp.setCursor( Cursor.getDefaultCursor() )}. + *

+ * Styling is used to modify insets/margins and appearance of buttons and toolbars + * so that they fit nicely into the text field and do not increase text field height. + * See styles {@code [style]Button.inTextField} and {@code [style]ToolBar.inTextField} + * in {@code Flat[Light|Dark]Laf.properties}. + *

+ * Component {@link javax.swing.JTextField} (and subclasses)
+ * Value type {@link javax.swing.JComponent} + * + * @since 2 + */ + String TEXT_FIELD_LEADING_COMPONENT = "JTextField.leadingComponent"; + + /** + * Specifies a component that will be placed at the trailing edge of the text field. + *

+ * See {@link #TEXT_FIELD_LEADING_COMPONENT} for details. + *

+ * Component {@link javax.swing.JTextField} (and subclasses)
+ * Value type {@link javax.swing.JComponent} + * + * @since 2 + */ + String TEXT_FIELD_TRAILING_COMPONENT = "JTextField.trailingComponent"; + + /** + * Specifies whether a "clear" (or "cancel") button is shown on the trailing side + * if the text field is not empty, editable and enabled. Default is {@code false}. + *

+ * Component {@link javax.swing.JTextField} (and subclasses)
+ * Value type {@link java.lang.Boolean} + * + * @since 2 + */ + String TEXT_FIELD_SHOW_CLEAR_BUTTON = "JTextField.showClearButton"; + + /** + * Specifies the callback that is invoked when a "clear" (or "cancel") button is clicked. + * If a callback is specified than it is responsible for clearing the text field. + * Without callback, the text field clears itself. + *

+ * Either use a {@link java.lang.Runnable}: + *

{@code
+	 * myTextField.putClientProperty( "JTextField.clearCallback",
+	 *     (Runnable) () -> {
+	 *         // clear field here or cancel search
+	 *     } );
+	 * }
+ * Or use a {@link java.util.function.Consumer}<javax.swing.text.JTextComponent> + * that receives the text field as parameter: + *
{@code
+	 * myTextField.putClientProperty( "JTextField.clearCallback",
+	 *     (Consumer) textField -> {
+	 *         // clear field here or cancel search
+	 *     } );
+	 * }
+ *

+ * Component {@link javax.swing.JTextField} (and subclasses)
+ * Value type {@link java.lang.Runnable} + * or {@link java.util.function.Consumer}<javax.swing.text.JTextComponent> + * + * @see #TEXT_FIELD_SHOW_CLEAR_BUTTON + * @since 2 + */ + String TEXT_FIELD_CLEAR_CALLBACK = "JTextField.clearCallback"; + //---- JToggleButton ------------------------------------------------------ /** @@ -801,8 +1023,7 @@ public interface FlatClientProperties * If the client property is not set, or not a {@link Boolean}, defaultValue is returned. */ static Boolean clientPropertyBooleanStrict( JComponent c, String key, Boolean defaultValue ) { - Object value = c.getClientProperty( key ); - return (value instanceof Boolean) ? (Boolean) value : defaultValue; + return clientProperty( c, key, defaultValue, Boolean.class ); } /** @@ -819,7 +1040,18 @@ public interface FlatClientProperties * If the client property is not set, or not a color, defaultValue is returned. */ static Color clientPropertyColor( JComponent c, String key, Color defaultValue ) { + return clientProperty( c, key, defaultValue, Color.class ); + } + + /** + * Returns the value of the specified client property if it is an instance of + * the specified type. Otherwise, defaultValue is returned. + * + * @since 2 + */ + @SuppressWarnings( "unchecked" ) + static T clientProperty( JComponent c, String key, T defaultValue, Class type ) { Object value = c.getClientProperty( key ); - return (value instanceof Color) ? (Color) value : defaultValue; + return type.isInstance( value ) ? (T) value : defaultValue; } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatDefaultsAddon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatDefaultsAddon.java index 1737d8e3..ac73cff9 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatDefaultsAddon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatDefaultsAddon.java @@ -26,7 +26,7 @@ import javax.swing.UIDefaults; * Allows loading of additional .properties files from addon JARs. * {@link java.util.ServiceLoader} is used to load extensions of this class from addon JARs. *

- * If you extend this class in a addon JAR, you also have to add a text file named + * If you extend this class in an addon JAR, you also have to add a text file named * {@code META-INF/services/com.formdev.flatlaf.FlatDefaultsAddon} * to the addon JAR. The file must contain a single line with the class name. *

@@ -61,7 +61,7 @@ public abstract class FlatDefaultsAddon /** * Returns the priority used to sort addon loading. - * The order is only important if you want overwrite UI defaults of other addons. + * The order is only important if you want to overwrite UI defaults of other addons. * Lower numbers mean higher priority. * Returns 10000 by default. */ diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatIconColors.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatIconColors.java index 5cda400c..80089f19 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatIconColors.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatIconColors.java @@ -19,7 +19,7 @@ package com.formdev.flatlaf; /** * Default color palette for action icons and object icons. *

- * The idea is to use only this well defined set of colors in SVG icons and + * The idea is to use only this well-defined set of colors in SVG icons, and * then they are replaced at runtime to dark variants or to other theme colors. * Then a single SVG icon (light variant) can be used for dark themes too. * IntelliJ Platform uses this mechanism to allow themes to change IntelliJ Platform icons. @@ -35,7 +35,7 @@ package com.formdev.flatlaf; *

* You may use these colors also in your application (outside of SVG icons), but do * not use the RGB values defined in this enum.
- * Instead use {@code UIManager.getColor( FlatIconColors.ACTIONS_GREY.key )}. + * Instead, use {@code UIManager.getColor( FlatIconColors.ACTIONS_GREY.key )}. * * @author Karl Tauber */ diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatInputMaps.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatInputMaps.java index ba6ba298..29297e51 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatInputMaps.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatInputMaps.java @@ -596,7 +596,7 @@ class FlatInputMaps //---- class LazyInputMapEx ----------------------------------------------- /** - * Lazily creates a input map. + * Lazily creates an input map. * Similar to {@link UIDefaults.LazyInputMap}, but can use multiple bindings arrays. */ private static class LazyInputMapEx diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatLaf.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatLaf.java index f408aaa5..9e287b9d 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatLaf.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatLaf.java @@ -31,26 +31,35 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.File; import java.lang.reflect.Method; +import java.net.URL; import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; +import java.util.MissingResourceException; import java.util.Properties; +import java.util.ResourceBundle; import java.util.ServiceLoader; import java.util.function.Consumer; import java.util.function.Function; +import java.util.function.IntUnaryOperator; import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JComponent; import javax.swing.JDialog; import javax.swing.JFrame; +import javax.swing.JMenuBar; import javax.swing.LookAndFeel; import javax.swing.PopupFactory; import javax.swing.RootPaneContainer; import javax.swing.SwingUtilities; import javax.swing.UIDefaults; import javax.swing.UIDefaults.ActiveValue; +import javax.swing.UIDefaults.LazyValue; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; import javax.swing.plaf.ColorUIResource; @@ -63,9 +72,11 @@ import javax.swing.text.html.HTMLEditorKit; import com.formdev.flatlaf.ui.FlatNativeWindowBorder; import com.formdev.flatlaf.ui.FlatPopupFactory; import com.formdev.flatlaf.ui.FlatRootPaneUI; +import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.util.GrayFilter; import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.MultiResolutionImageSupport; +import com.formdev.flatlaf.util.StringUtils; import com.formdev.flatlaf.util.SystemInfo; import com.formdev.flatlaf.util.UIScale; @@ -80,6 +91,8 @@ public abstract class FlatLaf private static final String DESKTOPFONTHINTS = "awt.font.desktophints"; private static List customDefaultsSources; + private static Map globalExtraDefaults; + private Map extraDefaults; private String desktopPropertyName; private String desktopPropertyName2; @@ -90,8 +103,10 @@ public abstract class FlatLaf private PopupFactory oldPopupFactory; private MnemonicHandler mnemonicHandler; + private SubMenuUsabilityHelper subMenuUsabilityHelper; private Consumer postInitialization; + private List> uiDefaultsGetters; /** * Sets the application look and feel to the given LaF @@ -152,18 +167,19 @@ public abstract class FlatLaf * Returns whether FlatLaf supports custom window decorations. * This depends on the operating system and on the used Java runtime. *

- * This method returns {@code true} on Windows 10 (see exception below), {@code false} otherwise. + * This method returns {@code true} on Windows 10/11 (see exception below) + * and on Linux, {@code false} otherwise. *

- * Returns also {@code false} on Windows 10 if: + * Returns also {@code false} on Windows 10/11 if: *

    - *
  • FlatLaf native window border support is available (requires Windows 10)
  • + *
  • FlatLaf native window border support is available (requires Windows 10/11)
  • *
  • running in * JetBrains Runtime 11 (or later) * (source code on github) * and JBR supports custom window decorations *
  • *
- * In this cases, custom decorations are enabled by the root pane. + * In these cases, custom decorations are enabled by the root pane. * Usage of {@link JFrame#setDefaultLookAndFeelDecorated(boolean)} or * {@link JDialog#setDefaultLookAndFeelDecorated(boolean)} is not necessary. */ @@ -176,7 +192,7 @@ public abstract class FlatLaf FlatNativeWindowBorder.isSupported() ) return false; - return SystemInfo.isWindows_10_orLater; + return SystemInfo.isWindows_10_orLater || SystemInfo.isLinux; } @Override @@ -229,6 +245,10 @@ public abstract class FlatLaf mnemonicHandler = new MnemonicHandler(); mnemonicHandler.install(); + // install submenu usability helper + subMenuUsabilityHelper = new SubMenuUsabilityHelper(); + subMenuUsabilityHelper.install(); + // listen to desktop property changes to update UI if system font or scaling changes if( SystemInfo.isWindows ) { // Windows 10 allows increasing font size independent of scaling: @@ -257,6 +277,12 @@ public abstract class FlatLaf } }; Toolkit toolkit = Toolkit.getDefaultToolkit(); + + // make sure that AWT desktop properties are initialized (on Linux) + // before invoking toolkit.addPropertyChangeListener() + // https://github.com/JFormDesigner/FlatLaf/issues/405#issuecomment-960242342 + toolkit.getDesktopProperty( "dummy" ); + toolkit.addPropertyChangeListener( desktopPropertyName, desktopPropertyListener ); if( desktopPropertyName2 != null ) toolkit.addPropertyChangeListener( desktopPropertyName2, desktopPropertyListener ); @@ -302,6 +328,12 @@ public abstract class FlatLaf mnemonicHandler = null; } + // uninstall submenu usability helper + if( subMenuUsabilityHelper != null ) { + subMenuUsabilityHelper.uninstall(); + subMenuUsabilityHelper = null; + } + // restore default link color new HTMLEditorKit().getStyleSheet().addRule( "a, address { color: blue; }" ); postInitialization = null; @@ -350,14 +382,21 @@ public abstract class FlatLaf @Override public UIDefaults getDefaults() { - UIDefaults defaults = super.getDefaults(); + // use larger initial capacity to avoid resizing UI defaults hash table + // (from 610 to 1221 to 2443 entries) and to save some memory + UIDefaults defaults = new FlatUIDefaults( 1500, 0.75f ); + + // initialize basic defaults (see super.getDefaults()) + initClassDefaults( defaults ); + initSystemColorDefaults( defaults ); + initComponentDefaults( defaults ); // add flag that indicates whether the LaF is light or dark // (can be queried without using FlatLaf API) defaults.put( "laf.dark", isDark() ); - // add resource bundle for localized texts - defaults.addResourceBundle( "com.formdev.flatlaf.resources.Bundle" ); + // init resource bundle for localized texts + initResourceBundle( defaults, "com.formdev.flatlaf.resources.Bundle" ); // initialize some defaults (for overriding) that are used in UI delegates, // but are not set in BasicLookAndFeel @@ -367,6 +406,7 @@ public abstract class FlatLaf "EditorPane.inactiveBackground", "FormattedTextField.disabledBackground", "PasswordField.disabledBackground", + "RootPane.background", "Spinner.disabledBackground", "TextArea.disabledBackground", "TextArea.inactiveBackground", @@ -385,7 +425,8 @@ public abstract class FlatLaf "Spinner.disabledForeground", "ToggleButton.disabledText" ); putDefaults( defaults, defaults.getColor( "textText" ), - "DesktopIcon.foreground" ); + "DesktopIcon.foreground", + "RootPane.foreground" ); initFonts( defaults ); initIconColors( defaults, isDark() ); @@ -395,7 +436,7 @@ public abstract class FlatLaf // (using defaults.remove() to avoid that lazy value is resolved and icon loaded here) Object icon = defaults.remove( "InternalFrame.icon" ); defaults.put( "InternalFrame.icon", icon ); - defaults.put( "TitlePane.icon", icon ); + defaults.put( "TitlePane.icon", icon ); // no longer used, but keep for compatibility // get addons and sort them by priority ServiceLoader addonLoader = ServiceLoader.load( FlatDefaultsAddon.class ); @@ -411,6 +452,10 @@ public abstract class FlatLaf else UIDefaultsLoader.loadDefaultsFromProperties( getClass(), addons, getAdditionalDefaults(), isDark(), defaults ); + // setup default font after loading defaults from properties + // to allow defining "defaultFont" in properties + initDefaultFont( defaults ); + // use Aqua MenuBarUI if Mac screen menubar is enabled if( SystemInfo.isMacOS && Boolean.getBoolean( "apple.laf.useScreenMenuBar" ) ) { defaults.put( "MenuBarUI", "com.apple.laf.AquaMenuBarUI" ); @@ -450,12 +495,76 @@ public abstract class FlatLaf } protected Properties getAdditionalDefaults() { - return null; + if( globalExtraDefaults == null && extraDefaults == null ) + return null; + + Properties properties = new Properties(); + if( globalExtraDefaults != null ) + properties.putAll( globalExtraDefaults ); + if( extraDefaults != null ) + properties.putAll( extraDefaults ); + return properties; + } + + private void initResourceBundle( UIDefaults defaults, String bundleName ) { + // add resource bundle for localized texts + defaults.addResourceBundle( bundleName ); + + // Check whether Swing can not load the FlatLaf resource bundle, + // which can happen in applications that use some plugin system + // and load FlatLaf in a plugin that uses its own classloader. + // (e.g. Apache NetBeans) + if( defaults.get( "FileChooser.fileNameHeaderText" ) != null ) + return; + + // load FlatLaf resource bundle and add content to defaults + try { + ResourceBundle bundle = ResourceBundle.getBundle( bundleName, defaults.getDefaultLocale() ); + + Enumeration keys = bundle.getKeys(); + while( keys.hasMoreElements() ) { + String key = keys.nextElement(); + String value = bundle.getString( key ); + + String baseKey = StringUtils.removeTrailing( key, ".textAndMnemonic" ); + if( baseKey != key ) { + String text = value.replace( "&", "" ); + String mnemonic = null; + int index = value.indexOf( '&' ); + if( index >= 0 ) + mnemonic = Integer.toString( Character.toUpperCase( value.charAt( index + 1 ) ) ); + + defaults.put( baseKey + "Text", text ); + if( mnemonic != null ) + defaults.put( baseKey + "Mnemonic", mnemonic ); + } else + defaults.put( key, value ); + } + } catch( MissingResourceException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } } private void initFonts( UIDefaults defaults ) { + // use active value for all fonts to allow changing fonts in all components with: + // UIManager.put( "defaultFont", myFont ); + // (this is similar as in Nimbus L&F) + Object activeFont = new ActiveFont( null, null, -1, 0, 0, 0, 0 ); + + // override fonts + for( Object key : defaults.keySet() ) { + if( key instanceof String && (((String)key).endsWith( ".font" ) || ((String)key).endsWith( "Font" )) ) + defaults.put( key, activeFont ); + } + + // add fonts that are not set in BasicLookAndFeel + defaults.put( "RootPane.font", activeFont ); + } + + private void initDefaultFont( UIDefaults defaults ) { FontUIResource uiFont = null; + // determine UI font based on operating system if( SystemInfo.isWindows ) { Font winFont = (Font) Toolkit.getDefaultToolkit().getDesktopProperty( "win.messagebox.font" ); if( winFont != null ) { @@ -498,22 +607,20 @@ public abstract class FlatLaf if( uiFont == null ) uiFont = createCompositeFont( Font.SANS_SERIF, Font.PLAIN, 12 ); - // increase font size if system property "flatlaf.uiScale" is set - uiFont = UIScale.applyCustomScaleFactor( uiFont ); + // get/remove "defaultFont" from defaults if set in properties files + // (use remove() to avoid that ActiveFont.createValue() gets invoked) + Object defaultFont = defaults.remove( "defaultFont" ); - // use active value for all fonts to allow changing fonts in all components - // (similar as in Nimbus L&F) with: - // UIManager.put( "defaultFont", myFont ); - Object activeFont = new ActiveFont( 1 ); - - // override fonts - for( Object key : defaults.keySet() ) { - if( key instanceof String && (((String)key).endsWith( ".font" ) || ((String)key).endsWith( "Font" )) ) - defaults.put( key, activeFont ); + // use font from OS as base font and derive the UI font from it + if( defaultFont instanceof ActiveFont ) { + Font baseFont = uiFont; + uiFont = ((ActiveFont)defaultFont).derive( baseFont, fontSize -> { + return Math.round( fontSize * UIScale.computeFontScaleFactor( baseFont ) ); + } ); } - // use smaller font for progress bar - defaults.put( "ProgressBar.font", new ActiveFont( 0.85f ) ); + // increase font size if system property "flatlaf.uiScale" is set + uiFont = UIScale.applyCustomScaleFactor( uiFont ); // set default font defaults.put( "defaultFont", uiFont ); @@ -527,11 +634,9 @@ public abstract class FlatLaf return (font instanceof FontUIResource) ? (FontUIResource) font : new FontUIResource( font ); } - /** - * @since 1.1 - */ + /** @since 1.1 */ public static ActiveValue createActiveFontValue( float scaleFactor ) { - return new ActiveFont( scaleFactor ); + return new ActiveFont( null, null, -1, 0, 0, 0, scaleFactor ); } /** @@ -665,6 +770,9 @@ public abstract class FlatLaf * and can therefore override all UI defaults. *

* Invoke this method before setting the look and feel. + *

+ * If using Java modules, the package must be opened in {@code module-info.java}. + * Otherwise, use {@link #registerCustomDefaultsSource(URL)}. * * @param packageName a package name (e.g. "com.myapp.resources") */ @@ -706,6 +814,32 @@ public abstract class FlatLaf } } + /** + * Registers a package where FlatLaf searches for properties files with custom UI defaults. + *

+ * See {@link #registerCustomDefaultsSource(String)} for details. + *

+ * This method is useful if using Java modules and the package containing the properties files + * is not opened in {@code module-info.java}. + * E.g. {@code FlatLaf.registerCustomDefaultsSource( MyApp.class.getResource( "/com/myapp/themes/" ) )}. + * + * @param packageUrl a package URL + * @since 2 + */ + public static void registerCustomDefaultsSource( URL packageUrl ) { + if( customDefaultsSources == null ) + customDefaultsSources = new ArrayList<>(); + customDefaultsSources.add( packageUrl ); + } + + /** @since 2 */ + public static void unregisterCustomDefaultsSource( URL packageUrl ) { + if( customDefaultsSources == null ) + return; + + customDefaultsSources.remove( packageUrl ); + } + /** * Registers a folder where FlatLaf searches for properties files with custom UI defaults. *

@@ -726,6 +860,102 @@ public abstract class FlatLaf customDefaultsSources.remove( folder ); } + /** + * Gets global extra UI defaults; or {@code null}. + * + * @since 2 + */ + public static Map getGlobalExtraDefaults() { + return globalExtraDefaults; + } + + /** + * Sets global extra UI defaults, which are only used when setting up the application look and feel. + * E.g. using {@link UIManager#setLookAndFeel(LookAndFeel)} or {@link #setup(LookAndFeel)}. + *

+ * The global extra defaults are useful for smaller additional defaults that may change. + * E.g. accent color. Otherwise, FlatLaf properties files should be used. + * See {@link #registerCustomDefaultsSource(String)}. + *

+ * The keys and values are strings in same format as in FlatLaf properties files. + *

+ * Sample that setups "FlatLaf Light" theme with red accent color: + *

{@code
+	 * FlatLaf.setGlobalExtraDefaults( Collections.singletonMap( "@accentColor", "#f00" ) );
+	 * FlatLightLaf.setup();
+	 * }
+ * + * @see #setExtraDefaults(Map) + * @since 2 + */ + public static void setGlobalExtraDefaults( Map globalExtraDefaults ) { + FlatLaf.globalExtraDefaults = globalExtraDefaults; + } + + /** + * Gets extra UI defaults; or {@code null}. + * + * @since 2 + */ + public Map getExtraDefaults() { + return extraDefaults; + } + + /** + * Sets extra UI defaults, which are only used when setting up the application look and feel. + * E.g. using {@link UIManager#setLookAndFeel(LookAndFeel)} or {@link #setup(LookAndFeel)}. + *

+ * The extra defaults are useful for smaller additional defaults that may change. + * E.g. accent color. Otherwise, FlatLaf properties files should be used. + * See {@link #registerCustomDefaultsSource(String)}. + *

+ * The keys and values are strings in same format as in FlatLaf properties files. + *

+ * Sample that setups "FlatLaf Light" theme with red accent color: + *

{@code
+	 * FlatLaf laf = new FlatLightLaf();
+	 * laf.setExtraDefaults( Collections.singletonMap( "@accentColor", "#f00" ) );
+	 * FlatLaf.setup( laf );
+	 * }
+ * + * @see #setGlobalExtraDefaults(Map) + * @since 2 + */ + public void setExtraDefaults( Map extraDefaults ) { + this.extraDefaults = extraDefaults; + } + + /** + * Parses a UI defaults value string and converts it into a binary object. + *

+ * See: https://www.formdev.com/flatlaf/properties-files/ + * + * @param key the key, which is used to determine the value type if parameter {@code valueType} is {@code null} + * @param value the value string + * @param valueType the expected value type, or {@code null} + * @return the binary value + * @throws IllegalArgumentException on syntax errors + * @since 2 + */ + public static Object parseDefaultsValue( String key, String value, Class valueType ) + throws IllegalArgumentException + { + // resolve variables + value = UIDefaultsLoader.resolveValueFromUIManager( value ); + + // parse value + Object val = UIDefaultsLoader.parseValue( key, value, valueType, null, + v -> UIDefaultsLoader.resolveValueFromUIManager( v ), Collections.emptyList() ); + + // create actual value if lazy or active + if( val instanceof LazyValue ) + val = ((LazyValue)val).createValue( null ); + else if( val instanceof ActiveValue ) + val = ((ActiveValue)val).createValue( null ); + + return val; + } + private static void reSetLookAndFeel() { EventQueue.invokeLater( () -> { LookAndFeel lookAndFeel = UIManager.getLookAndFeel(); @@ -733,7 +963,7 @@ public abstract class FlatLaf // re-set current LaF UIManager.setLookAndFeel( lookAndFeel ); - // must fire property change events ourself because old and new LaF are the same + // must fire property change events ourselves because old and new LaF are the same PropertyChangeEvent e = new PropertyChangeEvent( UIManager.class, "lookAndFeel", lookAndFeel, lookAndFeel ); for( PropertyChangeListener l : UIManager.getPropertyChangeListeners() ) l.propertyChange( e ); @@ -777,7 +1007,7 @@ public abstract class FlatLaf /** * Returns whether native window decorations are supported on current platform. *

- * This requires Windows 10, but may be disabled if running in special environments + * This requires Windows 10/11, but may be disabled if running in special environments * (JetBrains Projector, Webswing or WinPE) or if loading native library fails. * If system property {@link FlatSystemProperties#USE_WINDOW_DECORATIONS} is set to * {@code false}, then this method also returns {@code false}. @@ -819,12 +1049,23 @@ public abstract class FlatLaf /** * Revalidate and repaint all displayable frames and dialogs. + *

+ * Useful to update UI after changing {@code TitlePane.menuBarEmbedded}. * * @since 1.1.2 */ public static void revalidateAndRepaintAllFramesAndDialogs() { for( Window w : Window.getWindows() ) { if( isDisplayableFrameOrDialog( w ) ) { + // revalidate menu bar + JMenuBar menuBar = (w instanceof JFrame) + ? ((JFrame)w).getJMenuBar() + : (w instanceof JDialog + ? ((JDialog)w).getJMenuBar() + : null); + if( menuBar != null ) + menuBar.revalidate(); + w.revalidate(); w.repaint(); } @@ -833,6 +1074,9 @@ public abstract class FlatLaf /** * Repaint all displayable frames and dialogs. + *

+ * Useful to update UI after changing {@code TitlePane.unifiedBackground}, + * {@code MenuItem.selectionType} or {@code Component.hideMnemonics}. * * @since 1.1.2 */ @@ -871,46 +1115,272 @@ public abstract class FlatLaf return super.hashCode(); } - //---- class ActiveFont --------------------------------------------------- + /** + * Registers a UI defaults getter function that is invoked before the standard getter. + * This allows using different UI defaults for special purposes + * (e.g. using multiple themes at the same time). + *

+ * The key is passed as parameter to the function. + * If the function returns {@code null}, then the next registered function is invoked. + * If all registered functions return {@code null}, then the current look and feel is asked. + * If the function returns {@link #NULL_VALUE}, then the UI value becomes {@code null}. + * + * @see #unregisterUIDefaultsGetter(Function) + * @see #runWithUIDefaultsGetter(Function, Runnable) + * @since 1.6 + */ + public void registerUIDefaultsGetter( Function uiDefaultsGetter ) { + if( uiDefaultsGetters == null ) + uiDefaultsGetters = new ArrayList<>(); - private static class ActiveFont - implements ActiveValue + uiDefaultsGetters.remove( uiDefaultsGetter ); + uiDefaultsGetters.add( uiDefaultsGetter ); + + // disable shared UIs + FlatUIUtils.setUseSharedUIs( false ); + } + + /** + * Unregisters a UI defaults getter function that was invoked before the standard getter. + * + * @see #registerUIDefaultsGetter(Function) + * @see #runWithUIDefaultsGetter(Function, Runnable) + * @since 1.6 + */ + public void unregisterUIDefaultsGetter( Function uiDefaultsGetter ) { + if( uiDefaultsGetters == null ) + return; + + uiDefaultsGetters.remove( uiDefaultsGetter ); + + // enable shared UIs + if( uiDefaultsGetters.isEmpty() ) + FlatUIUtils.setUseSharedUIs( true ); + } + + /** + * Registers a UI defaults getter function that is invoked before the standard getter, + * runs the given runnable and unregisters the UI defaults getter function again. + * This allows using different UI defaults for special purposes + * (e.g. using multiple themes at the same time). + * If the current look and feel is not FlatLaf, then the getter is ignored and + * the given runnable invoked. + *

+ * The key is passed as parameter to the function. + * If the function returns {@code null}, then the next registered function is invoked. + * If all registered functions return {@code null}, then the current look and feel is asked. + * If the function returns {@link #NULL_VALUE}, then the UI value becomes {@code null}. + *

+ * Example: + *

{@code
+	 * // create secondary theme
+	 * UIDefaults darkDefaults = new FlatDarkLaf().getDefaults();
+	 *
+	 * // create panel using secondary theme
+	 * FlatLaf.runWithUIDefaultsGetter( key -> {
+	 *     Object value = darkDefaults.get( key );
+	 *     return (value != null) ? value : FlatLaf.NULL_VALUE;
+	 * }, () -> {
+	 *     // TODO create components that should use secondary theme here
+	 * } );
+	 * }
+ * + * @see #registerUIDefaultsGetter(Function) + * @see #unregisterUIDefaultsGetter(Function) + * @since 1.6 + */ + public static void runWithUIDefaultsGetter( Function uiDefaultsGetter, Runnable runnable ) { + LookAndFeel laf = UIManager.getLookAndFeel(); + if( laf instanceof FlatLaf ) { + ((FlatLaf)laf).registerUIDefaultsGetter( uiDefaultsGetter ); + try { + runnable.run(); + } finally { + ((FlatLaf)laf).unregisterUIDefaultsGetter( uiDefaultsGetter ); + } + } else + runnable.run(); + } + + /** + * Special value returned by functions used in {@link #runWithUIDefaultsGetter(Function, Runnable)} + * or {@link #registerUIDefaultsGetter(Function)} to indicate that the UI value should + * become {@code null}. + * + * @see #runWithUIDefaultsGetter(Function, Runnable) + * @see #registerUIDefaultsGetter(Function) + * @since 1.6 + */ + public static final Object NULL_VALUE = new Object(); + + //---- class FlatUIDefaults ----------------------------------------------- + + private class FlatUIDefaults + extends UIDefaults { - private final float scaleFactor; - - // cache (scaled) font - private Font font; - private Font lastDefaultFont; - - ActiveFont( float scaleFactor ) { - this.scaleFactor = scaleFactor; + FlatUIDefaults( int initialCapacity, float loadFactor ) { + super( initialCapacity, loadFactor ); } @Override - public Object createValue( UIDefaults table ) { - Font defaultFont = UIManager.getFont( "defaultFont" ); + public Object get( Object key ) { + Object value = getValue( key ); + return (value != null) ? (value != NULL_VALUE ? value : null) : super.get( key ); + } - // fallback (to avoid NPE in case that this is used in another Laf) - if( defaultFont == null ) - defaultFont = UIManager.getFont( "Label.font" ); + @Override + public Object get( Object key, Locale l ) { + Object value = getValue( key ); + return (value != null) ? (value != NULL_VALUE ? value : null) : super.get( key, l ); + } - if( lastDefaultFont != defaultFont ) { - lastDefaultFont = defaultFont; + private Object getValue( Object key ) { + // use local variable for getters to avoid potential multi-threading issues + List> uiDefaultsGetters = FlatLaf.this.uiDefaultsGetters; - if( scaleFactor != 1 ) { - // scale font - int newFontSize = Math.round( defaultFont.getSize() * scaleFactor ); - font = new FontUIResource( defaultFont.deriveFont( (float) newFontSize ) ); - } else { - // make sure that font is a UIResource for LaF switching - font = (defaultFont instanceof UIResource) - ? defaultFont - : new FontUIResource( defaultFont ); - } + if( uiDefaultsGetters == null ) + return null; + + for( int i = uiDefaultsGetters.size() - 1; i >= 0; i-- ) { + Object value = uiDefaultsGetters.get( i ).apply( key ); + if( value != null ) + return value; + } + + return null; + } + } + + //---- class ActiveFont --------------------------------------------------- + + static class ActiveFont + implements ActiveValue + { + private final String baseFontKey; + private final List families; + private final int style; + private final int styleChange; + private final int absoluteSize; + private final int relativeSize; + private final float scaleSize; + + // cache (scaled/derived) font + private FontUIResource font; + private Font lastBaseFont; + + private boolean inCreateValue; + + /** + * @param families list of font families, or {@code null} + * @param style new style of font, or {@code -1} + * @param styleChange derive style of base font; or {@code 0} + * (the lower 16 bits are added; the upper 16 bits are removed) + * @param absoluteSize new size of font, or {@code 0} + * @param relativeSize added to size of base font, or {@code 0} + * @param scaleSize multiply size of base font, or {@code 0} + */ + ActiveFont( String baseFontKey, List families, int style, int styleChange, + int absoluteSize, int relativeSize, float scaleSize ) + { + this.baseFontKey = baseFontKey; + this.families = families; + this.style = style; + this.styleChange = styleChange; + this.absoluteSize = absoluteSize; + this.relativeSize = relativeSize; + this.scaleSize = scaleSize; + } + + // using synchronized to avoid exception if invoked at the same time on multiple threads + @Override + public synchronized Object createValue( UIDefaults table ) { + if( inCreateValue ) + throw new IllegalStateException( "FlatLaf: endless recursion in font" ); + + Font baseFont = null; + + inCreateValue = true; + try { + if( baseFontKey != null ) + baseFont = (Font) UIDefaultsLoader.lazyUIManagerGet( baseFontKey ); + + if( baseFont == null ) + baseFont = UIManager.getFont( "defaultFont" ); + + // fallback (to avoid NPE in case that this is used in another Laf) + if( baseFont == null ) + baseFont = UIManager.getFont( "Label.font" ); + } finally { + inCreateValue = false; + } + + if( lastBaseFont != baseFont ) { + lastBaseFont = baseFont; + + font = derive( baseFont, fontSize -> UIScale.scale( fontSize ) ); } return font; } + + FontUIResource derive( Font baseFont, IntUnaryOperator scale ) { + int baseStyle = baseFont.getStyle(); + int baseSize = baseFont.getSize(); + + // new style + int newStyle = (style != -1) + ? style + : (styleChange != 0) + ? baseStyle & ~((styleChange >> 16) & 0xffff) | (styleChange & 0xffff) + : baseStyle; + + // new size + int newSize = (absoluteSize > 0) + ? scale.applyAsInt( absoluteSize ) + : (relativeSize != 0) + ? (baseSize + scale.applyAsInt( relativeSize )) + : (scaleSize > 0) + ? Math.round( baseSize * scaleSize ) + : baseSize; + if( newSize <= 0 ) + newSize = 1; + + // create font for family + if( families != null && !families.isEmpty() ) { + for( String family : families ) { + Font font = createCompositeFont( family, newStyle, newSize ); + if( !isFallbackFont( font ) || family.equalsIgnoreCase( Font.DIALOG ) ) + return toUIResource( font ); + } + } + + // derive font + if( newStyle != baseStyle || newSize != baseSize ) { + // hack for font "Ubuntu Medium" on Linux, which curiously belongs + // to family "Ubuntu Light" and using deriveFont() would create a light font + if( "Ubuntu Medium".equalsIgnoreCase( baseFont.getName() ) && + "Ubuntu Light".equalsIgnoreCase( baseFont.getFamily() ) ) + { + Font font = createCompositeFont( "Ubuntu Medium", newStyle, newSize ); + if( !isFallbackFont( font ) ) + return toUIResource( font ); + } + + return toUIResource( baseFont.deriveFont( newStyle, newSize ) ); + } else + return toUIResource( baseFont ); + } + + private FontUIResource toUIResource( Font font ) { + // make sure that font is a UIResource for LaF switching + return (font instanceof FontUIResource) + ? (FontUIResource) font + : new FontUIResource( font ); + } + + private boolean isFallbackFont( Font font ) { + return Font.DIALOG.equalsIgnoreCase( font.getFamily() ); + } } //---- class ImageIconUIResource ------------------------------------------ diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatSystemProperties.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatSystemProperties.java index a2036b07..024a3688 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatSystemProperties.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatSystemProperties.java @@ -34,7 +34,7 @@ public interface FlatSystemProperties * To replace the Java 9+ system scale factor, use system property "sun.java2d.uiScale", * which has the same syntax as this one. *

- * Since FlatLaf 1.1.2: Scale factors less then 100% are allowed. + * Since FlatLaf 1.1.2: Scale factors less than 100% are allowed. *

* Allowed Values e.g. {@code 1.5}, {@code 1.5x}, {@code 150%} or {@code 144dpi} (96dpi is 100%)
*/ @@ -81,7 +81,7 @@ public interface FlatSystemProperties * {@link FlatClientProperties#USE_WINDOW_DECORATIONS} and * UI default {@code TitlePane.useWindowDecorations}. *

- * (requires Window 10) + * (requires Window 10/11) *

* Allowed Values {@code false} and {@code true}
* Default none @@ -92,16 +92,16 @@ public interface FlatSystemProperties * Specifies whether JetBrains Runtime custom window decorations should be used * when creating {@code JFrame} or {@code JDialog}. * Requires that the application runs in a - * JetBrains Runtime + * JetBrains Runtime * (based on OpenJDK). *

* Setting this to {@code false} disables using JetBrains Runtime custom window decorations. * Then FlatLaf native window decorations are used. *

- * (requires Window 10) + * (requires Window 10/11) *

* Allowed Values {@code false} and {@code true}
- * Default {@code true} + * Default {@code false} (since v2; was {@code true} in v1) */ String USE_JETBRAINS_CUSTOM_DECORATIONS = "flatlaf.useJetBrainsCustomDecorations"; @@ -116,7 +116,7 @@ public interface FlatSystemProperties * {@link FlatClientProperties#MENU_BAR_EMBEDDED} and * UI default {@code TitlePane.menuBarEmbedded}. *

- * (requires Window 10) + * (requires Window 10/11) *

* Allowed Values {@code false} and {@code true}
* Default none @@ -139,6 +139,15 @@ public interface FlatSystemProperties */ String USE_TEXT_Y_CORRECTION = "flatlaf.useTextYCorrection"; + /** + * Specifies a directory in which the native FlatLaf library have been extracted. + * The path can be absolute or relative to current application working directory. + * This can be used to avoid extraction of the native libraries to the temporary directory at runtime. + * + * @since 2 + */ + String NATIVE_LIBRARY_PATH = "flatlaf.nativeLibraryPath"; + /** * Checks whether a system property is set and returns {@code true} if its value * is {@code "true"} (case-insensitive), otherwise it returns {@code false}. diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/IntelliJTheme.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/IntelliJTheme.java index 5a2fa716..8e2c4876 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/IntelliJTheme.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/IntelliJTheme.java @@ -175,7 +175,7 @@ public class IntelliJTheme defaults.put( "Button.hoverBorderColor", defaults.get( "Button.focusedBorderColor" ) ); defaults.put( "HelpButton.hoverBorderColor", defaults.get( "Button.focusedBorderColor" ) ); - // IDEA uses a SVG icon for the help button, but paints the background with Button.startBackground and Button.endBackground + // IDEA uses an SVG icon for the help button, but paints the background with Button.startBackground and Button.endBackground Object helpButtonBackground = defaults.get( "Button.startBackground" ); Object helpButtonBorderColor = defaults.get( "Button.startBorderColor" ); if( helpButtonBackground == null ) @@ -242,14 +242,26 @@ public class IntelliJTheme defaults.put( "Tree.rowHeight", 22 ); // apply theme specific UI defaults at the end to allow overwriting - defaults.putAll( themeSpecificDefaults ); + for( Map.Entry e : themeSpecificDefaults.entrySet() ) { + Object key = e.getKey(); + Object value = e.getValue(); + + // append styles to existing styles + if( key instanceof String && ((String)key).startsWith( "[style]" ) ) { + Object oldValue = defaults.get( key ); + if( oldValue != null ) + value = oldValue + "; " + value; + } + + defaults.put( key, value ); + } } private Map removeThemeSpecificDefaults( UIDefaults defaults ) { // search for theme specific UI defaults keys ArrayList themeSpecificKeys = new ArrayList<>(); for( Object key : defaults.keySet() ) { - if( key instanceof String && ((String)key).startsWith( "[" ) ) + if( key instanceof String && ((String)key).startsWith( "[" ) && !((String)key).startsWith( "[style]" ) ) themeSpecificKeys.add( (String) key ); } @@ -338,7 +350,7 @@ public class IntelliJTheme // parse value try { - uiValue = UIDefaultsLoader.parseValue( key, valueStr ); + uiValue = UIDefaultsLoader.parseValue( key, valueStr, null ); } catch( RuntimeException ex ) { UIDefaultsLoader.logParseError( key, valueStr, ex, false ); return; // ignore invalid value @@ -504,7 +516,7 @@ public class IntelliJTheme // for filled checkbox/radiobutton used in light themes defaults.remove( "CheckBox.icon[filled].focusWidth" ); defaults.put( "CheckBox.icon[filled].hoverBorderColor", defaults.get( "CheckBox.icon[filled].focusedBorderColor" ) ); - defaults.put( "CheckBox.icon[filled].selectedFocusedBackground", defaults.get( "CheckBox.icon[filled].selectedBackground" ) ); + defaults.put( "CheckBox.icon[filled].focusedSelectedBackground", defaults.get( "CheckBox.icon[filled].selectedBackground" ) ); if( dark ) { // IDEA Darcula checkBoxFocused.svg, checkBoxSelectedFocused.svg, @@ -513,9 +525,9 @@ public class IntelliJTheme // --> add alpha to focused border colors String[] focusedBorderColorKeys = new String[] { "CheckBox.icon.focusedBorderColor", - "CheckBox.icon.selectedFocusedBorderColor", + "CheckBox.icon.focusedSelectedBorderColor", "CheckBox.icon[filled].focusedBorderColor", - "CheckBox.icon[filled].selectedFocusedBorderColor", + "CheckBox.icon[filled].focusedSelectedBorderColor", }; for( String key : focusedBorderColorKeys ) { Color color = defaults.getColor( key ); @@ -534,12 +546,12 @@ public class IntelliJTheme } /** Rename UI default keys (key --> value). */ - private static Map uiKeyMapping = new HashMap<>(); + private static final Map uiKeyMapping = new HashMap<>(); /** Copy UI default keys (value --> key). */ - private static Map uiKeyCopying = new HashMap<>(); - private static Map uiKeyInverseMapping = new HashMap<>(); - private static Map checkboxKeyMapping = new HashMap<>(); - private static Map checkboxDuplicateColors = new HashMap<>(); + private static final Map uiKeyCopying = new HashMap<>(); + private static final Map uiKeyInverseMapping = new HashMap<>(); + private static final Map checkboxKeyMapping = new HashMap<>(); + private static final Map checkboxDuplicateColors = new HashMap<>(); static { // ComboBox @@ -549,6 +561,8 @@ public class IntelliJTheme uiKeyMapping.put( "ComboBox.ArrowButton.disabledIconColor", "ComboBox.buttonDisabledArrowColor" ); uiKeyMapping.put( "ComboBox.ArrowButton.iconColor", "ComboBox.buttonArrowColor" ); uiKeyMapping.put( "ComboBox.ArrowButton.nonEditableBackground", "ComboBox.buttonBackground" ); + uiKeyCopying.put( "ComboBox.buttonSeparatorColor", "Component.borderColor" ); + uiKeyCopying.put( "ComboBox.buttonDisabledSeparatorColor", "Component.disabledBorderColor" ); // Component uiKeyMapping.put( "Component.inactiveErrorFocusColor", "Component.error.borderColor" ); @@ -594,6 +608,10 @@ public class IntelliJTheme uiKeyCopying.put( "Slider.thumbColor", "ProgressBar.foreground" ); uiKeyCopying.put( "Slider.trackColor", "ProgressBar.background" ); + // Spinner + uiKeyCopying.put( "Spinner.buttonSeparatorColor", "Component.borderColor" ); + uiKeyCopying.put( "Spinner.buttonDisabledSeparatorColor", "Component.disabledBorderColor" ); + // TitlePane uiKeyCopying.put( "TitlePane.inactiveBackground", "TitlePane.background" ); uiKeyMapping.put( "TitlePane.infoForeground", "TitlePane.foreground" ); @@ -618,7 +636,7 @@ public class IntelliJTheme checkboxKeyMapping.put( "Checkbox.Background.Selected", "CheckBox.icon.selectedBackground" ); checkboxKeyMapping.put( "Checkbox.Border.Selected", "CheckBox.icon.selectedBorderColor" ); checkboxKeyMapping.put( "Checkbox.Foreground.Selected", "CheckBox.icon.checkmarkColor" ); - checkboxKeyMapping.put( "Checkbox.Focus.Thin.Selected", "CheckBox.icon.selectedFocusedBorderColor" ); + checkboxKeyMapping.put( "Checkbox.Focus.Thin.Selected", "CheckBox.icon.focusedSelectedBorderColor" ); checkboxDuplicateColors.put( "Checkbox.Background.Default.Dark", "Checkbox.Background.Selected.Dark" ); checkboxDuplicateColors.put( "Checkbox.Border.Default.Dark", "Checkbox.Border.Selected.Dark" ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/LinuxFontPolicy.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/LinuxFontPolicy.java index a9a90ee2..81b86516 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/LinuxFontPolicy.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/LinuxFontPolicy.java @@ -17,6 +17,7 @@ package com.formdev.flatlaf; import java.awt.Font; +import java.awt.FontMetrics; import java.awt.GraphicsConfiguration; import java.awt.GraphicsEnvironment; import java.awt.Toolkit; @@ -28,7 +29,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.StringTokenizer; - +import javax.swing.text.StyleContext; import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.StringUtils; import com.formdev.flatlaf.util.SystemInfo; @@ -121,14 +122,25 @@ class LinuxFontPolicy for(;;) { Font font = createFont( family, style, size, dsize ); - // if the font family does not match any font on the system, "Dialog" family is returned - if( !"Dialog".equals( font.getFamily() ) || "Dialog".equals( family ) ) + if( Font.DIALOG.equals( family ) ) return font; + // if the font family does not match any font on the system, "Dialog" family is returned + if( !Font.DIALOG.equals( font.getFamily() ) ) { + // check for font problems + // - font height much larger than expected (e.g. font Inter; Oracle Java 8) + // - character width is zero (e.g. font Cantarell; Fedora; Oracle Java 8) + FontMetrics fm = StyleContext.getDefaultStyleContext().getFontMetrics( font ); + if( fm.getHeight() > size * 2 || fm.stringWidth( "a" ) == 0 ) + return createFont( Font.DIALOG, style, size, dsize ); + + return font; + } + // find last word in family int index = family.lastIndexOf( ' ' ); if( index < 0 ) - return createFont( "Dialog", style, size, dsize );; + return createFont( Font.DIALOG, style, size, dsize ); // check whether last work contains some font weight (e.g. Ultra-Bold or Heavy) String lastWord = family.substring( index + 1 ).toLowerCase(); @@ -158,7 +170,7 @@ class LinuxFontPolicy Object value = Toolkit.getDefaultToolkit().getDesktopProperty( "gnome.Xft/DPI" ); if( value instanceof Integer ) { - int dpi = ((Integer)value).intValue() / 1024; + int dpi = (Integer) value / 1024; if( dpi == -1 ) dpi = 96; if( dpi < 50 ) @@ -185,7 +197,7 @@ class LinuxFontPolicy } /** - * Gets the default font for KDE for KDE configuration files. + * Gets the default font for KDE from KDE configuration files. * * The Swing fonts are not updated when the user changes system font size * (System Settings > Fonts > Force Font DPI). A application restart is necessary. @@ -266,7 +278,7 @@ class LinuxFontPolicy // read config file ArrayList lines = new ArrayList<>( 200 ); try( BufferedReader reader = new BufferedReader( new FileReader( file ) ) ) { - String line = null; + String line; while( (line = reader.readLine()) != null ) lines.add( line ); } catch( IOException ex ) { @@ -309,6 +321,9 @@ class LinuxFontPolicy * - running on JetBrains Runtime 11 or later and scaling is enabled in system Settings */ private static boolean isSystemScaling() { + if( GraphicsEnvironment.isHeadless() ) + return true; + GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment() .getDefaultScreenDevice().getDefaultConfiguration(); return UIScale.getSystemScaleFactor( gc ) > 1; diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/SubMenuUsabilityHelper.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/SubMenuUsabilityHelper.java new file mode 100644 index 00000000..157e8a94 --- /dev/null +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/SubMenuUsabilityHelper.java @@ -0,0 +1,322 @@ +/* + * Copyright 2022 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf; + +import java.awt.AWTEvent; +import java.awt.Color; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.EventQueue; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.MouseInfo; +import java.awt.Point; +import java.awt.PointerInfo; +import java.awt.Polygon; +import java.awt.Rectangle; +import java.awt.Toolkit; +import java.awt.Window; +import java.awt.event.MouseEvent; +import javax.swing.JComponent; +import javax.swing.JLayeredPane; +import javax.swing.JMenu; +import javax.swing.JPopupMenu; +import javax.swing.MenuElement; +import javax.swing.MenuSelectionManager; +import javax.swing.RootPaneContainer; +import javax.swing.SwingUtilities; +import javax.swing.Timer; +import javax.swing.UIManager; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import com.formdev.flatlaf.ui.FlatUIUtils; + +/** + * Improves usability of submenus by using a + * safe triangle + * to avoid that the submenu closes while the user moves the mouse to it. + * + * @author Karl Tauber + */ +class SubMenuUsabilityHelper + implements ChangeListener +{ + private static final String KEY_USE_SAFE_TRIANGLE = "Menu.useSafeTriangle"; + private static final String KEY_SHOW_SAFE_TRIANGLE = "FlatLaf.debug.menu.showSafeTriangle"; + + private SubMenuEventQueue subMenuEventQueue; + private SafeTrianglePainter safeTrianglePainter; + private boolean changePending; + + // mouse location in screen coordinates + private int mouseX; + private int mouseY; + + // target popup bounds in screen coordinates + private int targetX; + private int targetTopY; + private int targetBottomY; + + private Rectangle invokerBounds; + + void install() { + MenuSelectionManager.defaultManager().addChangeListener( this ); + } + + void uninstall() { + MenuSelectionManager.defaultManager().removeChangeListener( this ); + uninstallEventQueue(); + } + + @Override + public void stateChanged( ChangeEvent e ) { + if( !FlatUIUtils.getUIBoolean( KEY_USE_SAFE_TRIANGLE, true )) + return; + + // handle menu selection change later, but only once in case of temporary changes + // e.g. moving mouse from one menu item to another one, fires two events: + // 1. old menu item is removed from menu selection + // 2. new menu item is added to menu selection + synchronized( this ) { + if( changePending ) + return; + changePending = true; + } + + EventQueue.invokeLater( () -> { + synchronized( this ) { + changePending = false; + } + menuSelectionChanged(); + } ); + } + + private void menuSelectionChanged() { + MenuElement[] path = MenuSelectionManager.defaultManager().getSelectedPath(); + +/*debug + System.out.println( "--- " + path.length ); + for( int i = 0; i < path.length; i++ ) + System.out.println( " " + i + ": " + path[i].getClass().getName() ); +debug*/ + + // find submenu in menu selection + int subMenuIndex = findSubMenu( path ); + + // uninstall if there is no submenu in selection + if( subMenuIndex < 0 || subMenuIndex != path.length - 1 ) { + uninstallEventQueue(); + return; + } + + // get current mouse location + PointerInfo pointerInfo = MouseInfo.getPointerInfo(); + Point mouseLocation = (pointerInfo != null) ? pointerInfo.getLocation() : new Point(); + mouseX = mouseLocation.x; + mouseY = mouseLocation.y; + + // check whether popup is showing, which is e.g. not the case if it is empty + JPopupMenu popup = (JPopupMenu) path[subMenuIndex]; + if( !popup.isShowing() ) { + uninstallEventQueue(); + return; + } + + // get invoker screen bounds + Component invoker = popup.getInvoker(); + invokerBounds = (invoker != null) + ? new Rectangle( invoker.getLocationOnScreen(), invoker.getSize() ) + : null; + + // check whether mouse location is within invoker + if( invokerBounds != null && !invokerBounds.contains( mouseX, mouseY ) ) { + uninstallEventQueue(); + return; + } + + // compute top/bottom target locations + Point popupLocation = popup.getLocationOnScreen(); + Dimension popupSize = popup.getSize(); + targetX = (mouseX < popupLocation.x + (popupSize.width / 2)) + ? popupLocation.x + : popupLocation.x + popupSize.width; + targetTopY = popupLocation.y; + targetBottomY = popupLocation.y + popupSize.height; + + // install own event queue to supress mouse events when mouse is moved within safe triangle + if( subMenuEventQueue == null ) + subMenuEventQueue = new SubMenuEventQueue(); + + // create safe triangle painter + if( safeTrianglePainter == null && UIManager.getBoolean( KEY_SHOW_SAFE_TRIANGLE ) ) + safeTrianglePainter = new SafeTrianglePainter( popup ); + } + + private void uninstallEventQueue() { + if( subMenuEventQueue != null ) { + subMenuEventQueue.uninstall(); + subMenuEventQueue = null; + } + + if( safeTrianglePainter != null ) { + safeTrianglePainter.uninstall(); + safeTrianglePainter = null; + } + } + + private int findSubMenu( MenuElement[] path ) { + for( int i = path.length - 1; i >= 1; i-- ) { + if( path[i] instanceof JPopupMenu && + path[i - 1] instanceof JMenu && + !((JMenu)path[i - 1]).isTopLevelMenu() ) + return i; + } + return -1; + } + + private Polygon createSafeTriangle() { + return new Polygon( + new int[] { mouseX, targetX, targetX }, + new int[] { mouseY, targetTopY, targetBottomY }, + 3 ); + } + + //---- class SubMenuEventQueue -------------------------------------------- + + private class SubMenuEventQueue + extends EventQueue + { + private Timer mouseUpdateTimer; + private Timer timeoutTimer; + + private int newMouseX; + private int newMouseY; + private AWTEvent lastMouseEvent; + + SubMenuEventQueue() { + // timer used to slightly delay update of mouse location used for safe triangle + mouseUpdateTimer = new Timer( 50, e -> { + mouseX = newMouseX; + mouseY = newMouseY; + + if( safeTrianglePainter != null ) + safeTrianglePainter.repaint(); + } ); + mouseUpdateTimer.setRepeats( false ); + + // timer used to timeout safe triangle when mouse stops moving + timeoutTimer = new Timer( 200, e -> { + if( invokerBounds != null && !invokerBounds.contains( newMouseX, newMouseY ) ) { + // post last mouse event, which selects menu item at mouse location + if( lastMouseEvent != null ) { + postEvent( lastMouseEvent ); + lastMouseEvent = null; + } + + uninstallEventQueue(); + return; + } + } ); + timeoutTimer.setRepeats( false ); + + Toolkit.getDefaultToolkit().getSystemEventQueue().push( this ); + } + + void uninstall() { + mouseUpdateTimer.stop(); + mouseUpdateTimer = null; + + timeoutTimer.stop(); + timeoutTimer = null; + + lastMouseEvent = null; + + super.pop(); + } + + @Override + protected void dispatchEvent( AWTEvent e ) { + int id = e.getID(); + + if( e instanceof MouseEvent && + (id == MouseEvent.MOUSE_MOVED || id == MouseEvent.MOUSE_DRAGGED) ) + { + newMouseX = ((MouseEvent)e).getXOnScreen(); + newMouseY = ((MouseEvent)e).getYOnScreen(); + + if( safeTrianglePainter != null ) + safeTrianglePainter.repaint(); + + mouseUpdateTimer.stop(); + timeoutTimer.stop(); + + // check whether mouse moved within safe triangle + if( createSafeTriangle().contains( newMouseX, newMouseY ) ) { + // update mouse location delayed (this changes the safe triangle) + mouseUpdateTimer.start(); + + timeoutTimer.start(); + + // remember last mouse event, which will be posted if the mouse stops moving + lastMouseEvent = e; + + // ignore mouse event + return; + } + + // update mouse location immediately (this changes the safe triangle) + mouseX = newMouseX; + mouseY = newMouseY; + } + + super.dispatchEvent( e ); + } + } + + //---- class SafeTrianglePainter ------------------------------------------ + + private class SafeTrianglePainter + extends JComponent + { + SafeTrianglePainter( JPopupMenu popup ) { + Window window = SwingUtilities.windowForComponent( popup.getInvoker() ); + if( window instanceof RootPaneContainer ) { + JLayeredPane layeredPane = ((RootPaneContainer)window).getLayeredPane(); + setSize( layeredPane.getSize() ); + layeredPane.add( this, new Integer( JLayeredPane.POPUP_LAYER + 1 ) ); + } + } + + void uninstall() { + Container parent = getParent(); + if( parent != null ) { + parent.remove( this ); + parent.repaint(); + } + } + + @Override + protected void paintComponent( Graphics g ) { + Point locationOnScreen = getLocationOnScreen(); + g.translate( -locationOnScreen.x, -locationOnScreen.y ); + + g.setColor( Color.red ); + ((Graphics2D)g).draw( createSafeTriangle() ); + } + } +} diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java index 7ef295a0..dc47bba7 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java @@ -18,11 +18,16 @@ package com.formdev.flatlaf; import java.awt.Color; import java.awt.Dimension; +import java.awt.Font; import java.awt.Insets; import java.io.File; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.io.StreamTokenizer; +import java.io.StringReader; +import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; @@ -33,8 +38,10 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Properties; import java.util.function.Function; +import javax.swing.Icon; import javax.swing.UIDefaults; import javax.swing.UIManager; +import javax.swing.border.Border; import javax.swing.UIDefaults.ActiveValue; import javax.swing.UIDefaults.LazyValue; import javax.swing.plaf.ColorUIResource; @@ -48,6 +55,7 @@ import com.formdev.flatlaf.util.DerivedColor; import com.formdev.flatlaf.util.GrayFilter; import com.formdev.flatlaf.util.HSLColor; import com.formdev.flatlaf.util.LoggingFacade; +import com.formdev.flatlaf.util.SoftCache; import com.formdev.flatlaf.util.StringUtils; import com.formdev.flatlaf.util.SystemInfo; import com.formdev.flatlaf.util.UIScale; @@ -72,8 +80,12 @@ class UIDefaultsLoader private static final String OPTIONAL_PREFIX = "?"; private static final String WILDCARD_PREFIX = "*."; + static final String KEY_VARIABLES = "FlatLaf.internal.variables"; + private static int parseColorDepth; + private static final SoftCache fontCache = new SoftCache<>(); + static void loadDefaultsFromProperties( Class lookAndFeelClass, List addons, Properties additionalDefaults, boolean dark, UIDefaults defaults ) { @@ -146,6 +158,18 @@ class UIDefaultsLoader properties.load( in ); } } + } else if( source instanceof URL ) { + // load from package URL + URL packageUrl = (URL) source; + for( Class lafClass : lafClasses ) { + URL propertiesUrl = new URL( packageUrl + lafClass.getSimpleName() + ".properties" ); + + try( InputStream in = propertiesUrl.openStream() ) { + properties.load( in ); + } catch( FileNotFoundException ex ) { + // ignore + } + } } else if( source instanceof File ) { // load from folder File folder = (File) source; @@ -234,18 +258,24 @@ class UIDefaultsLoader }; // parse and add properties to UI defaults + Map variables = new HashMap<>( 50 ); for( Map.Entry e : properties.entrySet() ) { String key = (String) e.getKey(); - if( key.startsWith( VARIABLE_PREFIX ) ) + if( key.startsWith( VARIABLE_PREFIX ) ) { + variables.put( key, (String) e.getValue() ); continue; + } String value = resolveValue( (String) e.getValue(), propertiesGetter ); try { - defaults.put( key, parseValue( key, value, null, resolver, addonClassLoaders ) ); + defaults.put( key, parseValue( key, value, null, null, resolver, addonClassLoaders ) ); } catch( RuntimeException ex ) { logParseError( key, value, ex, true ); } } + + // remember variables in defaults to allow using them in styles + defaults.put( KEY_VARIABLES, variables ); } catch( IOException ex ) { LoggingFacade.INSTANCE.logSevere( "FlatLaf: Failed to load properties files.", ex ); } @@ -288,87 +318,200 @@ class UIDefaultsLoader return resolveValue( newValue, propertiesGetter ); } - enum ValueType { UNKNOWN, STRING, BOOLEAN, CHARACTER, INTEGER, FLOAT, BORDER, ICON, INSETS, DIMENSION, COLOR, - SCALEDINTEGER, SCALEDFLOAT, SCALEDINSETS, SCALEDDIMENSION, INSTANCE, CLASS, GRAYFILTER, NULL, LAZY } + static String resolveValueFromUIManager( String value ) { + if( value.startsWith( VARIABLE_PREFIX ) ) { + @SuppressWarnings( "unchecked" ) + Map variables = (Map) UIManager.get( KEY_VARIABLES ); + String newValue = (variables != null) ? variables.get( value ) : null; + if( newValue == null ) + throw new IllegalArgumentException( "variable '" + value + "' not found" ); - private static ValueType[] tempResultValueType = new ValueType[1]; + return newValue; + } - static Object parseValue( String key, String value ) { - return parseValue( key, value, null, v -> v, Collections.emptyList() ); + if( !value.startsWith( PROPERTY_PREFIX ) ) + return value; + + String key = value.substring( PROPERTY_PREFIX.length() ); + Object newValue = UIManager.get( key ); + if( newValue == null ) + throw new IllegalArgumentException( "property '" + key + "' not found" ); + + // convert binary color to string + if( newValue instanceof Color ) { + Color color = (Color) newValue; + int alpha = color.getAlpha(); + return String.format( (alpha != 255) ? "#%06x%02x" : "#%06x", color.getRGB() & 0xffffff, alpha ); + } + + throw new IllegalArgumentException( "property value type '" + newValue.getClass().getName() + "' not supported in references" ); } - static Object parseValue( String key, String value, ValueType[] resultValueType, + enum ValueType { UNKNOWN, STRING, BOOLEAN, CHARACTER, INTEGER, INTEGERORFLOAT, FLOAT, BORDER, ICON, INSETS, DIMENSION, COLOR, FONT, + SCALEDINTEGER, SCALEDFLOAT, SCALEDINSETS, SCALEDDIMENSION, INSTANCE, CLASS, GRAYFILTER, NULL, LAZY } + + private static final ValueType[] tempResultValueType = new ValueType[1]; + private static Map, ValueType> javaValueTypes; + private static Map knownValueTypes; + + static Object parseValue( String key, String value, Class valueType ) { + return parseValue( key, value, valueType, null, v -> v, Collections.emptyList() ); + } + + static Object parseValue( String key, String value, Class javaValueType, ValueType[] resultValueType, Function resolver, List addonClassLoaders ) { if( resultValueType == null ) resultValueType = tempResultValueType; - value = value.trim(); - - // null, false, true - switch( value ) { - case "null": resultValueType[0] = ValueType.NULL; return null; - case "false": resultValueType[0] = ValueType.BOOLEAN; return false; - case "true": resultValueType[0] = ValueType.BOOLEAN; return true; + // do not parse styles here + if( key.startsWith( "[style]" ) ) { + resultValueType[0] = ValueType.STRING; + return value; } - // check for function "lazy" - // Syntax: lazy(uiKey) - if( value.startsWith( "lazy(" ) && value.endsWith( ")" ) ) { - resultValueType[0] = ValueType.LAZY; - String uiKey = value.substring( 5, value.length() - 1 ).trim(); - return (LazyValue) t -> { - return lazyUIManagerGet( uiKey ); - }; + value = value.trim(); + + // null + if( value.equals( "null" ) || value.isEmpty() ) { + resultValueType[0] = ValueType.NULL; + return null; + } + + // check for function "if" + // Syntax: if(condition,trueValue,falseValue) + // - condition: evaluates to true if: + // - is not "null" + // - is not "false" + // - is not an integer with zero value + // - trueValue: used if condition is true + // - falseValue: used if condition is false + if( value.startsWith( "if(" ) && value.endsWith( ")" ) ) { + List params = splitFunctionParams( value.substring( 3, value.length() - 1 ), ',' ); + if( params.size() != 3 ) + throwMissingParametersException( value ); + + boolean ifCondition = parseCondition( params.get( 0 ), resolver, addonClassLoaders ); + String ifValue = params.get( ifCondition ? 1 : 2 ); + return parseValue( key, resolver.apply( ifValue ), javaValueType, resultValueType, resolver, addonClassLoaders ); } ValueType valueType = ValueType.UNKNOWN; - // check whether value type is specified in the value - if( value.startsWith( "#" ) ) - valueType = ValueType.COLOR; - else if( value.startsWith( "\"" ) && value.endsWith( "\"" ) ) { - valueType = ValueType.STRING; - value = value.substring( 1, value.length() - 1 ); - } else if( value.startsWith( TYPE_PREFIX ) ) { - int end = value.indexOf( TYPE_PREFIX_END ); - if( end != -1 ) { - try { - String typeStr = value.substring( TYPE_PREFIX.length(), end ); - valueType = ValueType.valueOf( typeStr.toUpperCase( Locale.ENGLISH ) ); + if( javaValueType != null ) { + if( javaValueTypes == null ) { + // create lazy + javaValueTypes = new HashMap<>(); + javaValueTypes.put( String.class, ValueType.STRING ); + javaValueTypes.put( boolean.class, ValueType.BOOLEAN ); + javaValueTypes.put( Boolean.class, ValueType.BOOLEAN ); + javaValueTypes.put( char.class, ValueType.CHARACTER ); + javaValueTypes.put( Character.class, ValueType.CHARACTER ); + javaValueTypes.put( int.class, ValueType.INTEGER ); + javaValueTypes.put( Integer.class, ValueType.INTEGER ); + javaValueTypes.put( float.class, ValueType.FLOAT ); + javaValueTypes.put( Float.class, ValueType.FLOAT ); + javaValueTypes.put( Border.class, ValueType.BORDER ); + javaValueTypes.put( Icon.class, ValueType.ICON ); + javaValueTypes.put( Insets.class, ValueType.INSETS ); + javaValueTypes.put( Dimension.class, ValueType.DIMENSION ); + javaValueTypes.put( Color.class, ValueType.COLOR ); + javaValueTypes.put( Font.class, ValueType.FONT ); + } - // remove type from value - value = value.substring( end + TYPE_PREFIX_END.length() ); - } catch( IllegalArgumentException ex ) { - // ignore + // map java value type to parser value type + valueType = javaValueTypes.get( javaValueType ); + if( valueType == null ) + throw new IllegalArgumentException( "unsupported value type '" + javaValueType.getName() + "'" ); + + // remove '"' from strings + if( valueType == ValueType.STRING && value.startsWith( "\"" ) && value.endsWith( "\"" ) ) + value = value.substring( 1, value.length() - 1 ); + } else { + // false, true + switch( value ) { + case "false": resultValueType[0] = ValueType.BOOLEAN; return false; + case "true": resultValueType[0] = ValueType.BOOLEAN; return true; + } + + // check for function "lazy" + // Syntax: lazy(uiKey) + if( value.startsWith( "lazy(" ) && value.endsWith( ")" ) ) { + resultValueType[0] = ValueType.LAZY; + String uiKey = StringUtils.substringTrimmed( value, 5, value.length() - 1 ); + return (LazyValue) t -> { + return lazyUIManagerGet( uiKey ); + }; + } + + // check whether value type is specified in the value + if( value.startsWith( "#" ) ) + valueType = ValueType.COLOR; + else if( value.startsWith( TYPE_PREFIX ) ) { + int end = value.indexOf( TYPE_PREFIX_END ); + if( end != -1 ) { + try { + String typeStr = value.substring( TYPE_PREFIX.length(), end ); + valueType = ValueType.valueOf( typeStr.toUpperCase( Locale.ENGLISH ) ); + + // remove type from value + value = value.substring( end + TYPE_PREFIX_END.length() ); + } catch( IllegalArgumentException ex ) { + // ignore + } } } - } - // determine value type from key - if( valueType == ValueType.UNKNOWN ) { - if( key.endsWith( "UI" ) ) - valueType = ValueType.STRING; - else if( key.endsWith( "Color" ) || - (key.endsWith( "ground" ) && - (key.endsWith( ".background" ) || key.endsWith( "Background" ) || - key.endsWith( ".foreground" ) || key.endsWith( "Foreground" ))) ) - valueType = ValueType.COLOR; - else if( key.endsWith( ".border" ) || key.endsWith( "Border" ) ) - valueType = ValueType.BORDER; - else if( key.endsWith( ".icon" ) || key.endsWith( "Icon" ) ) - valueType = ValueType.ICON; - else if( key.endsWith( ".margin" ) || key.endsWith( ".padding" ) || - key.endsWith( "Margins" ) || key.endsWith( "Insets" ) ) - valueType = ValueType.INSETS; - else if( key.endsWith( "Size" ) ) - valueType = ValueType.DIMENSION; - else if( key.endsWith( "Width" ) || key.endsWith( "Height" ) ) - valueType = ValueType.INTEGER; - else if( key.endsWith( "Char" ) ) - valueType = ValueType.CHARACTER; - else if( key.endsWith( "grayFilter" ) ) - valueType = ValueType.GRAYFILTER; + if( valueType == ValueType.UNKNOWN ) { + if( knownValueTypes == null ) { + // create lazy + knownValueTypes = new HashMap<>(); + // SplitPane + knownValueTypes.put( "SplitPane.dividerSize", ValueType.INTEGER ); + knownValueTypes.put( "SplitPaneDivider.gripDotSize", ValueType.INTEGER ); + knownValueTypes.put( "dividerSize", ValueType.INTEGER ); + knownValueTypes.put( "gripDotSize", ValueType.INTEGER ); + // TabbedPane + knownValueTypes.put( "TabbedPane.closeCrossPlainSize", ValueType.FLOAT ); + knownValueTypes.put( "TabbedPane.closeCrossFilledSize", ValueType.FLOAT ); + knownValueTypes.put( "closeCrossPlainSize", ValueType.FLOAT ); + knownValueTypes.put( "closeCrossFilledSize", ValueType.FLOAT ); + // Table + knownValueTypes.put( "Table.intercellSpacing", ValueType.DIMENSION ); + knownValueTypes.put( "intercellSpacing", ValueType.DIMENSION ); + } + + valueType = knownValueTypes.getOrDefault( key, ValueType.UNKNOWN ); + } + + // determine value type from key + if( valueType == ValueType.UNKNOWN ) { + if( key.endsWith( "UI" ) ) + valueType = ValueType.STRING; + else if( key.endsWith( "Color" ) || + (key.endsWith( "ground" ) && + (key.endsWith( ".background" ) || key.endsWith( "Background" ) || key.equals( "background" ) || + key.endsWith( ".foreground" ) || key.endsWith( "Foreground" ) || key.equals( "foreground" ))) ) + valueType = ValueType.COLOR; + else if( key.endsWith( ".font" ) || key.endsWith( "Font" ) || key.equals( "font" ) ) + valueType = ValueType.FONT; + else if( key.endsWith( ".border" ) || key.endsWith( "Border" ) || key.equals( "border" ) ) + valueType = ValueType.BORDER; + else if( key.endsWith( ".icon" ) || key.endsWith( "Icon" ) || key.equals( "icon" ) ) + valueType = ValueType.ICON; + else if( key.endsWith( ".margin" ) || key.equals( "margin" ) || + key.endsWith( ".padding" ) || key.equals( "padding" ) || + key.endsWith( "Margins" ) || key.endsWith( "Insets" ) ) + valueType = ValueType.INSETS; + else if( key.endsWith( "Size" ) ) + valueType = ValueType.DIMENSION; + else if( key.endsWith( "Width" ) || key.endsWith( "Height" ) ) + valueType = ValueType.INTEGERORFLOAT; + else if( key.endsWith( "Char" ) ) + valueType = ValueType.CHARACTER; + else if( key.endsWith( "grayFilter" ) ) + valueType = ValueType.GRAYFILTER; + } } resultValueType[0] = valueType; @@ -376,14 +519,17 @@ class UIDefaultsLoader // parse value switch( valueType ) { case STRING: return value; + case BOOLEAN: return parseBoolean( value ); case CHARACTER: return parseCharacter( value ); case INTEGER: return parseInteger( value, true ); + case INTEGERORFLOAT:return parseIntegerOrFloat( value, true ); case FLOAT: return parseFloat( value, true ); case BORDER: return parseBorder( value, resolver, addonClassLoaders ); case ICON: return parseInstance( value, addonClassLoaders ); case INSETS: return parseInsets( value ); case DIMENSION: return parseDimension( value ); case COLOR: return parseColorOrFunction( value, resolver, true ); + case FONT: return parseFont( value ); case SCALEDINTEGER: return parseScaledInteger( value ); case SCALEDFLOAT: return parseScaledFloat( value ); case SCALEDINSETS: return parseScaledInsets( value ); @@ -393,6 +539,12 @@ class UIDefaultsLoader case GRAYFILTER: return parseGrayFilter( value ); case UNKNOWN: default: + // string + if( value.startsWith( "\"" ) && value.endsWith( "\"" ) ) { + resultValueType[0] = ValueType.STRING; + return value.substring( 1, value.length() - 1 ); + } + // colors Object color = parseColorOrFunction( value, resolver, false ); if( color != null ) { @@ -420,19 +572,34 @@ class UIDefaultsLoader } } + private static boolean parseCondition( String condition, + Function resolver, List addonClassLoaders ) + { + try { + Object conditionValue = parseValue( "", resolver.apply( condition ), null, null, resolver, addonClassLoaders ); + return (conditionValue != null && + !conditionValue.equals( false ) && + !conditionValue.equals( 0 ) ); + } catch( IllegalArgumentException ex ) { + // ignore errors (e.g. variable or property not found) and evaluate to false + return false; + } + } + private static Object parseBorder( String value, Function resolver, List addonClassLoaders ) { if( value.indexOf( ',' ) >= 0 ) { - // top,left,bottom,right[,lineColor[,lineThickness]] - List parts = split( value, ',' ); + // top,left,bottom,right[,lineColor[,lineThickness[,arc]]] + List parts = splitFunctionParams( value, ',' ); Insets insets = parseInsets( value ); ColorUIResource lineColor = (parts.size() >= 5) ? (ColorUIResource) parseColorOrFunction( resolver.apply( parts.get( 4 ) ), resolver, true ) : null; - float lineThickness = (parts.size() >= 6) ? parseFloat( parts.get( 5 ), true ) : 1f; + float lineThickness = (parts.size() >= 6 && !parts.get( 5 ).isEmpty()) ? parseFloat( parts.get( 5 ), true ) : 1f; + int arc = (parts.size() >= 7) ? parseInteger( parts.get( 6 ), true ) : 0; return (LazyValue) t -> { return (lineColor != null) - ? new FlatLineBorder( insets, lineColor, lineThickness ) + ? new FlatLineBorder( insets, lineColor, lineThickness, arc ) : new FlatEmptyBorder( insets ); }; } else @@ -480,7 +647,7 @@ class UIDefaultsLoader } private static Insets parseInsets( String value ) { - List numbers = split( value, ',' ); + List numbers = StringUtils.split( value, ',', true, false ); try { return new InsetsUIResource( Integer.parseInt( numbers.get( 0 ) ), @@ -493,7 +660,7 @@ class UIDefaultsLoader } private static Dimension parseDimension( String value ) { - List numbers = split( value, ',' ); + List numbers = StringUtils.split( value, ',', true, false ); try { return new DimensionUIResource( Integer.parseInt( numbers.get( 0 ) ), @@ -581,10 +748,10 @@ class UIDefaultsLoader return null; } - String function = value.substring( 0, paramsStart ).trim(); + String function = StringUtils.substringTrimmed( value, 0, paramsStart ); List params = splitFunctionParams( value.substring( paramsStart + 1, value.length() - 1 ), ',' ); if( params.isEmpty() ) - throw new IllegalArgumentException( "missing parameters in function '" + value + "'" ); + throwMissingParametersException( value ); if( parseColorDepth > 100 ) throw new IllegalArgumentException( "endless recursion in color function '" + value + "'" ); @@ -592,6 +759,7 @@ class UIDefaultsLoader parseColorDepth++; try { switch( function ) { + case "if": return parseColorIf( value, params, resolver, reportError ); case "rgb": return parseColorRgbOrRgba( false, params, resolver, reportError ); case "rgba": return parseColorRgbOrRgba( true, params, resolver, reportError ); case "hsl": return parseColorHslOrHsla( false, params ); @@ -604,6 +772,14 @@ class UIDefaultsLoader case "fadeout": return parseColorHSLIncreaseDecrease( 3, false, params, resolver, reportError ); case "fade": return parseColorFade( params, resolver, reportError ); case "spin": return parseColorSpin( params, resolver, reportError ); + case "changeHue": return parseColorChange( 0, params, resolver, reportError ); + case "changeSaturation":return parseColorChange( 1, params, resolver, reportError ); + case "changeLightness": return parseColorChange( 2, params, resolver, reportError ); + case "changeAlpha": return parseColorChange( 3, params, resolver, reportError ); + case "mix": return parseColorMix( null, params, resolver, reportError ); + case "tint": return parseColorMix( "#fff", params, resolver, reportError ); + case "shade": return parseColorMix( "#000", params, resolver, reportError ); + case "contrast": return parseColorContrast( params, resolver, reportError ); } } finally { parseColorDepth--; @@ -612,6 +788,21 @@ class UIDefaultsLoader throw new IllegalArgumentException( "unknown color function '" + value + "'" ); } + /** + * Syntax: if(condition,trueValue,falseValue) + *

+ * This "if" function is only used if the "if" is passed as parameter to another + * color function. Otherwise, the general "if" function is used. + */ + private static Object parseColorIf( String value, List params, Function resolver, boolean reportError ) { + if( params.size() != 3 ) + throwMissingParametersException( value ); + + boolean ifCondition = parseCondition( params.get( 0 ), resolver, Collections.emptyList() ); + String ifValue = params.get( ifCondition ? 1 : 2 ); + return parseColorOrFunction( resolver.apply( ifValue ), resolver, reportError ); + } + /** * Syntax: rgb(red,green,blue) or rgba(red,green,blue,alpha) * - red: an integer 0-255 or a percentage 0-100% @@ -711,21 +902,32 @@ class UIDefaultsLoader * Syntax: fade(color,amount[,options]) * - color: a color (e.g. #f00) or a color function * - amount: percentage 0-100% - * - options: [derived] + * - options: [derived] [lazy] */ private static Object parseColorFade( List params, Function resolver, boolean reportError ) { String colorStr = params.get( 0 ); int amount = parsePercentage( params.get( 1 ) ); boolean derived = false; + boolean lazy = false; if( params.size() > 2 ) { String options = params.get( 2 ); derived = options.contains( "derived" ); + lazy = options.contains( "lazy" ); } // create function ColorFunction function = new ColorFunctions.Fade( amount ); + if( lazy ) { + return (LazyValue) t -> { + Object color = lazyUIManagerGet( colorStr ); + return (color instanceof Color) + ? new ColorUIResource( ColorFunctions.applyFunctions( (Color) color, function ) ) + : null; + }; + } + // parse base color, apply function and create derived color return parseFunctionBaseColor( colorStr, function, derived, resolver, reportError ); } @@ -753,6 +955,92 @@ class UIDefaultsLoader return parseFunctionBaseColor( colorStr, function, derived, resolver, reportError ); } + /** + * Syntax: changeHue(color,value[,options]) or + * changeSaturation(color,value[,options]) or + * changeLightness(color,value[,options]) or + * changeAlpha(color,value[,options]) + * - color: a color (e.g. #f00) or a color function + * - value: for hue: number of degrees; otherwise: percentage 0-100% + * - options: [derived] + */ + private static Object parseColorChange( int hslIndex, + List params, Function resolver, boolean reportError ) + { + String colorStr = params.get( 0 ); + int value = (hslIndex == 0) + ? parseInteger( params.get( 1 ), true ) + : parsePercentage( params.get( 1 ) ); + boolean derived = false; + + if( params.size() > 2 ) { + String options = params.get( 2 ); + derived = options.contains( "derived" ); + } + + // create function + ColorFunction function = new ColorFunctions.HSLChange( hslIndex, value ); + + // parse base color, apply function and create derived color + return parseFunctionBaseColor( colorStr, function, derived, resolver, reportError ); + } + + /** + * Syntax: mix(color1,color2[,weight]) or + * tint(color[,weight]) or + * shade(color[,weight]) + * - color1: a color (e.g. #f00) or a color function + * - color2: a color (e.g. #f00) or a color function + * - weight: the weight (in range 0-100%) to mix the two colors + * larger weight uses more of first color, smaller weight more of second color + */ + private static Object parseColorMix( String color1Str, List params, Function resolver, boolean reportError ) { + int i = 0; + if( color1Str == null ) + color1Str = params.get( i++ ); + String color2Str = params.get( i++ ); + int weight = (params.size() > i) ? parsePercentage( params.get( i ) ) : 50; + + // parse second color + ColorUIResource color2 = (ColorUIResource) parseColorOrFunction( resolver.apply( color2Str ), resolver, reportError ); + if( color2 == null ) + return null; + + // create function + ColorFunction function = new ColorFunctions.Mix( color2, weight ); + + // parse first color, apply function and create mixed color + return parseFunctionBaseColor( color1Str, function, false, resolver, reportError ); + } + + /** + * Syntax: contrast(color,dark,light[,threshold]) + * - color: a color to compare against + * - dark: a designated dark color (e.g. #000) or a color function + * - light: a designated light color (e.g. #fff) or a color function + * - threshold: the threshold (in range 0-100%) to specify where the transition + * from "dark" to "light" is (default is 43%) + */ + private static Object parseColorContrast( List params, Function resolver, boolean reportError ) { + String colorStr = params.get( 0 ); + String darkStr = params.get( 1 ); + String lightStr = params.get( 2 ); + int threshold = (params.size() > 3) ? parsePercentage( params.get( 3 ) ) : 43; + + // parse color to compare against + ColorUIResource color = (ColorUIResource) parseColorOrFunction( resolver.apply( colorStr ), resolver, reportError ); + if( color == null ) + return null; + + // check luma and determine whether to use dark or light color + String darkOrLightColor = (ColorFunctions.luma( color ) * 100 < threshold) + ? lightStr + : darkStr; + + // parse dark or light color + return parseColorOrFunction( resolver.apply( darkOrLightColor ), resolver, reportError ); + } + private static Object parseFunctionBaseColor( String colorStr, ColorFunction function, boolean derived, Function resolver, boolean reportError ) { @@ -783,6 +1071,107 @@ class UIDefaultsLoader return new ColorUIResource( newColor ); } + /** + * Syntax: [normal] [bold|+bold|-bold] [italic|+italic|-italic] [|+|-|%] [family[, family]] [$baseFontKey] + */ + private static Object parseFont( String value ) { + Object font = fontCache.get( value ); + if( font != null ) + return font; + + int style = -1; + int styleChange = 0; + int absoluteSize = 0; + int relativeSize = 0; + float scaleSize = 0; + List families = null; + String baseFontKey = null; + + // use StreamTokenizer to split string because it supports quoted strings + StreamTokenizer st = new StreamTokenizer( new StringReader( value ) ); + st.resetSyntax(); + st.wordChars( ' ' + 1, 255 ); + st.whitespaceChars( 0, ' ' ); + st.whitespaceChars( ',', ',' ); // ignore ',' + st.quoteChar( '"' ); + st.quoteChar( '\'' ); + + try { + while( st.nextToken() != StreamTokenizer.TT_EOF ) { + String param = st.sval; + switch( param ) { + // font style + case "normal": + style = 0; + break; + + case "bold": + if( style == -1 ) + style = 0; + style |= Font.BOLD; + break; + + case "italic": + if( style == -1 ) + style = 0; + style |= Font.ITALIC; + break; + + case "+bold": styleChange |= Font.BOLD; break; + case "-bold": styleChange |= Font.BOLD << 16; break; + case "+italic": styleChange |= Font.ITALIC; break; + case "-italic": styleChange |= Font.ITALIC << 16; break; + + default: + char firstChar = param.charAt( 0 ); + if( Character.isDigit( firstChar ) || firstChar == '+' || firstChar == '-' ) { + // font size + if( absoluteSize != 0 || relativeSize != 0 || scaleSize != 0 ) + throw new IllegalArgumentException( "size specified more than once in '" + value + "'" ); + + if( firstChar == '+' || firstChar == '-' ) + relativeSize = parseInteger( param, true ); + else if( param.endsWith( "%" ) ) + scaleSize = parseInteger( param.substring( 0, param.length() - 1 ), true ) / 100f; + else + absoluteSize = parseInteger( param, true ); + } else if( firstChar == '$' ) { + // reference to base font + if( baseFontKey != null ) + throw new IllegalArgumentException( "baseFontKey specified more than once in '" + value + "'" ); + + baseFontKey = param.substring( 1 ); + } else { + // font family + if( families == null ) + families = Collections.singletonList( param ); + else { + if( families.size() == 1 ) + families = new ArrayList<>( families ); + families.add( param ); + } + } + break; + } + } + } catch( IOException ex ) { + throw new IllegalArgumentException( ex ); + } + + if( style != -1 && styleChange != 0 ) + throw new IllegalArgumentException( "can not mix absolute style (e.g. 'bold') with derived style (e.g. '+italic') in '" + value + "'" ); + if( styleChange != 0 ) { + if( (styleChange & Font.BOLD) != 0 && (styleChange & (Font.BOLD << 16)) != 0 ) + throw new IllegalArgumentException( "can not use '+bold' and '-bold' in '" + value + "'" ); + if( (styleChange & Font.ITALIC) != 0 && (styleChange & (Font.ITALIC << 16)) != 0 ) + throw new IllegalArgumentException( "can not use '+italic' and '-italic' in '" + value + "'" ); + } + + font = new FlatLaf.ActiveFont( baseFontKey, families, style, styleChange, absoluteSize, relativeSize, scaleSize ); + fontCache.put( value, font ); + return font; + } + private static int parsePercentage( String value ) { if( !value.endsWith( "%" ) ) throw new NumberFormatException( "invalid percentage '" + value + "'" ); @@ -799,6 +1188,14 @@ class UIDefaultsLoader return val; } + private static Boolean parseBoolean( String value ) { + switch( value ) { + case "false": return false; + case "true": return true; + } + throw new IllegalArgumentException( "invalid boolean '" + value + "'" ); + } + private static Character parseCharacter( String value ) { if( value.length() != 1 ) throw new IllegalArgumentException( "invalid character '" + value + "'" ); @@ -812,7 +1209,7 @@ class UIDefaultsLoader } Integer integer = parseInteger( value, true ); - if( integer.intValue() < min || integer.intValue() > max ) + if( integer < min || integer > max ) throw new NumberFormatException( "integer '" + value + "' out of range (" + min + '-' + max + ')' ); return integer; } @@ -827,6 +1224,20 @@ class UIDefaultsLoader return null; } + private static Number parseIntegerOrFloat( String value, boolean reportError ) { + try { + return Integer.parseInt( value ); + } catch( NumberFormatException ex ) { + try { + return Float.parseFloat( value ); + } catch( NumberFormatException ex2 ) { + if( reportError ) + throw new NumberFormatException( "invalid integer or float '" + value + "'" ); + } + } + return null; + } + private static Float parseFloat( String value, boolean reportError ) { try { return Float.parseFloat( value ); @@ -839,34 +1250,34 @@ class UIDefaultsLoader private static ActiveValue parseScaledInteger( String value ) { int val = parseInteger( value, true ); - return (ActiveValue) t -> { + return t -> { return UIScale.scale( val ); }; } private static ActiveValue parseScaledFloat( String value ) { float val = parseFloat( value, true ); - return (ActiveValue) t -> { + return t -> { return UIScale.scale( val ); }; } private static ActiveValue parseScaledInsets( String value ) { Insets insets = parseInsets( value ); - return (ActiveValue) t -> { + return t -> { return UIScale.scale( insets ); }; } private static ActiveValue parseScaledDimension( String value ) { Dimension dimension = parseDimension( value ); - return (ActiveValue) t -> { + return t -> { return UIScale.scale( dimension ); }; } private static Object parseGrayFilter( String value ) { - List numbers = split( value, ',' ); + List numbers = StringUtils.split( value, ',', true, false ); try { int brightness = Integer.parseInt( numbers.get( 0 ) ); int contrast = Integer.parseInt( numbers.get( 1 ) ); @@ -880,20 +1291,6 @@ class UIDefaultsLoader } } - /** - * Split string and trim parts. - */ - private static List split( String str, char delim ) { - List result = StringUtils.split( str, delim ); - - // trim strings - int size = result.size(); - for( int i = 0; i < size; i++ ) - result.set( i, result.get( i ).trim() ); - - return result; - } - /** * Splits function parameters and allows using functions as parameters. * In other words: Delimiters surrounded by '(' and ')' are ignored. @@ -910,11 +1307,11 @@ class UIDefaultsLoader else if( ch == ')' ) nestLevel--; else if( nestLevel == 0 && ch == delim ) { - strs.add( str.substring( start, i ).trim() ); + strs.add( StringUtils.substringTrimmed( str, start, i ) ); start = i + 1; } } - strs.add( str.substring( start ).trim() ); + strs.add( StringUtils.substringTrimmed( str, start ) ); return strs; } @@ -923,7 +1320,7 @@ class UIDefaultsLoader * For use in LazyValue to get value for given key from UIManager and report error * if not found. If key is prefixed by '?', then no error is reported. */ - private static Object lazyUIManagerGet( String uiKey ) { + static Object lazyUIManagerGet( String uiKey ) { boolean optional = false; if( uiKey.startsWith( OPTIONAL_PREFIX ) ) { uiKey = uiKey.substring( OPTIONAL_PREFIX.length() ); @@ -935,4 +1332,8 @@ class UIDefaultsLoader LoggingFacade.INSTANCE.logSevere( "FlatLaf: '" + uiKey + "' not found in UI defaults.", null ); return value; } + + private static void throwMissingParametersException( String value ) { + throw new IllegalArgumentException( "missing parameters in function '" + value + "'" ); + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatAbstractIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatAbstractIcon.java index 9675479c..8448f128 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatAbstractIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatAbstractIcon.java @@ -39,7 +39,7 @@ public abstract class FlatAbstractIcon { protected final int width; protected final int height; - protected final Color color; + protected Color color; public FlatAbstractIcon( int width, int height, Color color ) { this.width = width; diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatAnimatedIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatAnimatedIcon.java index 4d80f49b..c4757ecf 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatAnimatedIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatAnimatedIcon.java @@ -23,13 +23,13 @@ import java.awt.Graphics2D; import com.formdev.flatlaf.util.AnimatedIcon; /** - * Base class for animated icons that scales width and height, creates and initializes + * Base class for animated icons that scale width and height, creates and initializes * a scaled graphics context for icon painting. *

* Subclasses do not need to scale icon painting. *

* This class does not store any state information (needed for animation) in its instance. - * Instead a client property is set on the painted component. + * Instead, a client property is set on the painted component. * This makes it possible to use a share icon instance for multiple components. * * @author Karl Tauber diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatAscendingSortIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatAscendingSortIcon.java index 77ee805a..4e96348d 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatAscendingSortIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatAscendingSortIcon.java @@ -21,7 +21,11 @@ import java.awt.Color; import java.awt.Component; import java.awt.Graphics2D; import java.awt.geom.Path2D; +import javax.swing.SwingUtilities; import javax.swing.UIManager; +import javax.swing.plaf.TableHeaderUI; +import javax.swing.table.JTableHeader; +import com.formdev.flatlaf.ui.FlatTableHeaderUI; import com.formdev.flatlaf.ui.FlatUIUtils; /** @@ -35,8 +39,8 @@ import com.formdev.flatlaf.ui.FlatUIUtils; public class FlatAscendingSortIcon extends FlatAbstractIcon { - protected final boolean chevron = FlatUIUtils.isChevron( UIManager.getString( "Component.arrowType" ) ); - protected final Color sortIconColor = UIManager.getColor( "Table.sortIconColor" ); + protected boolean chevron = FlatUIUtils.isChevron( UIManager.getString( "Component.arrowType" ) ); + protected Color sortIconColor = UIManager.getColor( "Table.sortIconColor" ); public FlatAscendingSortIcon() { super( 10, 5, null ); @@ -44,7 +48,28 @@ public class FlatAscendingSortIcon @Override protected void paintIcon( Component c, Graphics2D g ) { + boolean chevron = this.chevron; + Color sortIconColor = this.sortIconColor; + + // Because this icon is always shared for all table headers, + // get icon specific style from FlatTableHeaderUI. + JTableHeader tableHeader = (JTableHeader) SwingUtilities.getAncestorOfClass( JTableHeader.class, c ); + if( tableHeader != null ) { + TableHeaderUI ui = tableHeader.getUI(); + if( ui instanceof FlatTableHeaderUI ) { + FlatTableHeaderUI fui = (FlatTableHeaderUI) ui; + if( fui.arrowType != null ) + chevron = FlatUIUtils.isChevron( fui.arrowType ); + if( fui.sortIconColor != null ) + sortIconColor = fui.sortIconColor; + } + } + g.setColor( sortIconColor ); + paintArrow( c, g, chevron ); + } + + protected void paintArrow( Component c, Graphics2D g, boolean chevron ) { if( chevron ) { // chevron arrow Path2D path = FlatUIUtils.createPath( false, 1,4, 5,0, 9,4 ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCapsLockIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCapsLockIcon.java index 2ceab38f..a25c58b4 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCapsLockIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCapsLockIcon.java @@ -16,12 +16,14 @@ package com.formdev.flatlaf.icons; +import java.awt.Color; import java.awt.Component; import java.awt.Graphics2D; import java.awt.geom.Path2D; import java.awt.geom.Rectangle2D; import java.awt.geom.RoundRectangle2D; import javax.swing.UIManager; +import com.formdev.flatlaf.ui.FlatStylingSupport.UnknownStyleException; import com.formdev.flatlaf.ui.FlatUIUtils; /** @@ -38,13 +40,22 @@ public class FlatCapsLockIcon super( 16, 16, UIManager.getColor( "PasswordField.capsLockIconColor" ) ); } + /** @since 2 */ + public Object applyStyleProperty( String key, Object value ) { + Object oldValue; + switch( key ) { + case "capsLockIconColor": oldValue = color; color = (Color) value; return oldValue; + default: throw new UnknownStyleException( key ); + } + } + @Override protected void paintIcon( Component c, Graphics2D g ) { /* - + @@ -52,7 +63,7 @@ public class FlatCapsLockIcon Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD ); path.append( new RoundRectangle2D.Float( 0, 0, 16, 16, 6, 6 ), false ); - path.append( new Rectangle2D.Float( 5, 12, 6, 2 ), false ); + path.append( new Rectangle2D.Float( 5, 11.5f, 6, 2 ), false ); path.append( FlatUIUtils.createPath( 2,8, 8,2, 14,8, 11,8, 11,10, 5,10, 5,8 ), false ); g.fill( path ); } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java index c74c6976..f371679c 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxIcon.java @@ -23,83 +23,115 @@ import java.awt.Component; import java.awt.Graphics2D; import java.awt.geom.Path2D; import java.awt.geom.RoundRectangle2D; +import java.util.Map; import javax.swing.AbstractButton; import javax.swing.JComponent; import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatButtonUI; +import com.formdev.flatlaf.ui.FlatStylingSupport; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; import com.formdev.flatlaf.ui.FlatUIUtils; /** * Icon for {@link javax.swing.JCheckBox}. - * - * Note: If Component.focusWidth is greater than zero, then the outline focus border + *

+ * Note: + * If Component.focusWidth is greater than zero, then the outer focus border * is painted outside of the icon bounds. Make sure that the checkbox * has margins, which are equal or greater than focusWidth. * - * @uiDefault CheckBox.icon.style String optional; "outline"/null (default) or "filled" + * @uiDefault CheckBox.icon.style String optional; "outlined"/null (default) or "filled" * @uiDefault Component.focusWidth int + * @uiDefault Component.borderWidth int * @uiDefault Component.focusColor Color - * @uiDefault CheckBox.icon.focusWidth int optional; defaults to Component.focusWidth + * @uiDefault CheckBox.icon.focusWidth int or float optional; defaults to Component.focusWidth + * @uiDefault CheckBox.icon.borderWidth int or float optional; defaults to Component.borderWidth + * @uiDefault CheckBox.icon.selectedBorderWidth int or float optional; defaults to CheckBox.icon.borderWidth + * @uiDefault CheckBox.icon.disabledSelectedBorderWidth int or float optional; defaults to CheckBox.icon.selectedBorderWidth + * @uiDefault CheckBox.arc int + * * @uiDefault CheckBox.icon.focusColor Color optional; defaults to Component.focusColor * @uiDefault CheckBox.icon.borderColor Color * @uiDefault CheckBox.icon.background Color * @uiDefault CheckBox.icon.selectedBorderColor Color * @uiDefault CheckBox.icon.selectedBackground Color * @uiDefault CheckBox.icon.checkmarkColor Color + * * @uiDefault CheckBox.icon.disabledBorderColor Color * @uiDefault CheckBox.icon.disabledBackground Color + * @uiDefault CheckBox.icon.disabledSelectedBorderColor Color optional; CheckBox.icon.disabledBorderColor is used if not specified + * @uiDefault CheckBox.icon.disabledSelectedBackground Color optional; CheckBox.icon.disabledBackground is used if not specified * @uiDefault CheckBox.icon.disabledCheckmarkColor Color + * * @uiDefault CheckBox.icon.focusedBorderColor Color optional * @uiDefault CheckBox.icon.focusedBackground Color optional - * @uiDefault CheckBox.icon.selectedFocusedBorderColor Color optional; CheckBox.icon.focusedBorderColor is used if not specified - * @uiDefault CheckBox.icon.selectedFocusedBackground Color optional; CheckBox.icon.focusedBackground is used if not specified - * @uiDefault CheckBox.icon.selectedFocusedCheckmarkColor Color optional; CheckBox.icon.checkmarkColor is used if not specified + * @uiDefault CheckBox.icon.focusedSelectedBorderColor Color optional; CheckBox.icon.focusedBorderColor is used if not specified + * @uiDefault CheckBox.icon.focusedSelectedBackground Color optional; CheckBox.icon.focusedBackground is used if not specified + * @uiDefault CheckBox.icon.focusedCheckmarkColor Color optional; CheckBox.icon.checkmarkColor is used if not specified + * * @uiDefault CheckBox.icon.hoverBorderColor Color optional * @uiDefault CheckBox.icon.hoverBackground Color optional - * @uiDefault CheckBox.icon.selectedHoverBackground Color optional; CheckBox.icon.hoverBackground is used if not specified + * @uiDefault CheckBox.icon.hoverSelectedBorderColor Color optional; CheckBox.icon.hoverBorderColor is used if not specified + * @uiDefault CheckBox.icon.hoverSelectedBackground Color optional; CheckBox.icon.hoverBackground is used if not specified + * @uiDefault CheckBox.icon.hoverCheckmarkColor Color optional; CheckBox.icon.checkmarkColor is used if not specified + * + * @uiDefault CheckBox.icon.pressedBorderColor Color optional * @uiDefault CheckBox.icon.pressedBackground Color optional - * @uiDefault CheckBox.icon.selectedPressedBackground Color optional; CheckBox.icon.pressedBackground is used if not specified - * @uiDefault CheckBox.arc int + * @uiDefault CheckBox.icon.pressedSelectedBorderColor Color optional; CheckBox.icon.pressedBorderColor is used if not specified + * @uiDefault CheckBox.icon.pressedSelectedBackground Color optional; CheckBox.icon.pressedBackground is used if not specified + * @uiDefault CheckBox.icon.pressedCheckmarkColor Color optional; CheckBox.icon.checkmarkColor is used if not specified * * @author Karl Tauber */ public class FlatCheckBoxIcon extends FlatAbstractIcon { - protected final String style = UIManager.getString( "CheckBox.icon.style" ); - public final int focusWidth = getUIInt( "CheckBox.icon.focusWidth", - UIManager.getInt( "Component.focusWidth" ), style ); - protected final Color focusColor = FlatUIUtils.getUIColor( "CheckBox.icon.focusColor", - UIManager.getColor( "Component.focusColor" ) ); - protected final int arc = FlatUIUtils.getUIInt( "CheckBox.arc", 2 ); + protected final String style = UIManager.getString( getPropertyPrefix() + "icon.style" ); + @Styleable protected float focusWidth = getUIFloat( "CheckBox.icon.focusWidth", UIManager.getInt( "Component.focusWidth" ), style ); + @Styleable protected Color focusColor = FlatUIUtils.getUIColor( "CheckBox.icon.focusColor", UIManager.getColor( "Component.focusColor" ) ); + /** @since 2 */ @Styleable protected float borderWidth = getUIFloat( "CheckBox.icon.borderWidth", FlatUIUtils.getUIFloat( "Component.borderWidth", 1 ), style ); + /** @since 2 */ @Styleable protected float selectedBorderWidth = getUIFloat( "CheckBox.icon.selectedBorderWidth", Float.MIN_VALUE, style ); + /** @since 2 */ @Styleable protected float disabledSelectedBorderWidth = getUIFloat( "CheckBox.icon.disabledSelectedBorderWidth", Float.MIN_VALUE, style ); + @Styleable protected int arc = FlatUIUtils.getUIInt( "CheckBox.arc", 2 ); // enabled - protected final Color borderColor = getUIColor( "CheckBox.icon.borderColor", style ); - protected final Color background = getUIColor( "CheckBox.icon.background", style ); - protected final Color selectedBorderColor = getUIColor( "CheckBox.icon.selectedBorderColor", style ); - protected final Color selectedBackground = getUIColor( "CheckBox.icon.selectedBackground", style ); - protected final Color checkmarkColor = getUIColor( "CheckBox.icon.checkmarkColor", style ); + @Styleable protected Color borderColor = getUIColor( "CheckBox.icon.borderColor", style ); + @Styleable protected Color background = getUIColor( "CheckBox.icon.background", style ); + @Styleable protected Color selectedBorderColor = getUIColor( "CheckBox.icon.selectedBorderColor", style ); + @Styleable protected Color selectedBackground = getUIColor( "CheckBox.icon.selectedBackground", style ); + @Styleable protected Color checkmarkColor = getUIColor( "CheckBox.icon.checkmarkColor", style ); // disabled - protected final Color disabledBorderColor = getUIColor( "CheckBox.icon.disabledBorderColor", style ); - protected final Color disabledBackground = getUIColor( "CheckBox.icon.disabledBackground", style ); - protected final Color disabledCheckmarkColor = getUIColor( "CheckBox.icon.disabledCheckmarkColor", style ); + @Styleable protected Color disabledBorderColor = getUIColor( "CheckBox.icon.disabledBorderColor", style ); + @Styleable protected Color disabledBackground = getUIColor( "CheckBox.icon.disabledBackground", style ); + /** @since 2 */ @Styleable protected Color disabledSelectedBorderColor = getUIColor( "CheckBox.icon.disabledSelectedBorderColor", style ); + /** @since 2 */ @Styleable protected Color disabledSelectedBackground = getUIColor( "CheckBox.icon.disabledSelectedBackground", style ); + @Styleable protected Color disabledCheckmarkColor = getUIColor( "CheckBox.icon.disabledCheckmarkColor", style ); // focused - protected final Color focusedBorderColor = getUIColor( "CheckBox.icon.focusedBorderColor", style ); - protected final Color focusedBackground = getUIColor( "CheckBox.icon.focusedBackground", style ); - protected final Color selectedFocusedBorderColor = getUIColor( "CheckBox.icon.selectedFocusedBorderColor", style ); - protected final Color selectedFocusedBackground = getUIColor( "CheckBox.icon.selectedFocusedBackground", style ); - protected final Color selectedFocusedCheckmarkColor = getUIColor( "CheckBox.icon.selectedFocusedCheckmarkColor", style ); + @Styleable protected Color focusedBorderColor = getUIColor( "CheckBox.icon.focusedBorderColor", style ); + @Styleable protected Color focusedBackground = getUIColor( "CheckBox.icon.focusedBackground", style ); + /** @since 2 */ @Styleable protected Color focusedSelectedBorderColor = getUIColor( "CheckBox.icon.focusedSelectedBorderColor", style ); + /** @since 2 */ @Styleable protected Color focusedSelectedBackground = getUIColor( "CheckBox.icon.focusedSelectedBackground", style ); + /** @since 2 */ @Styleable protected Color focusedCheckmarkColor = getUIColor( "CheckBox.icon.focusedCheckmarkColor", style ); // hover - protected final Color hoverBorderColor = getUIColor( "CheckBox.icon.hoverBorderColor", style ); - protected final Color hoverBackground = getUIColor( "CheckBox.icon.hoverBackground", style ); - protected final Color selectedHoverBackground = getUIColor( "CheckBox.icon.selectedHoverBackground", style ); + @Styleable protected Color hoverBorderColor = getUIColor( "CheckBox.icon.hoverBorderColor", style ); + @Styleable protected Color hoverBackground = getUIColor( "CheckBox.icon.hoverBackground", style ); + /** @since 2 */ @Styleable protected Color hoverSelectedBorderColor = getUIColor( "CheckBox.icon.hoverSelectedBorderColor", style ); + /** @since 2 */ @Styleable protected Color hoverSelectedBackground = getUIColor( "CheckBox.icon.hoverSelectedBackground", style ); + /** @since 2 */ @Styleable protected Color hoverCheckmarkColor = getUIColor( "CheckBox.icon.hoverCheckmarkColor", style ); // pressed - protected final Color pressedBackground = getUIColor( "CheckBox.icon.pressedBackground", style ); - protected final Color selectedPressedBackground = getUIColor( "CheckBox.icon.selectedPressedBackground", style ); + /** @since 2 */ @Styleable protected Color pressedBorderColor = getUIColor( "CheckBox.icon.pressedBorderColor", style ); + @Styleable protected Color pressedBackground = getUIColor( "CheckBox.icon.pressedBackground", style ); + /** @since 2 */ @Styleable protected Color pressedSelectedBorderColor = getUIColor( "CheckBox.icon.pressedSelectedBorderColor", style ); + /** @since 2 */ @Styleable protected Color pressedSelectedBackground = getUIColor( "CheckBox.icon.pressedSelectedBackground", style ); + /** @since 2 */ @Styleable protected Color pressedCheckmarkColor = getUIColor( "CheckBox.icon.pressedCheckmarkColor", style ); + + protected String getPropertyPrefix() { + return "CheckBox."; + } protected static Color getUIColor( String key, String style ) { if( style != null ) { @@ -110,13 +142,14 @@ public class FlatCheckBoxIcon return UIManager.getColor( key ); } - protected static int getUIInt( String key, int defaultValue, String style ) { + /** @since 2 */ + protected static float getUIFloat( String key, float defaultValue, String style ) { if( style != null ) { - Object value = UIManager.get( styleKey( key, style ) ); - if( value instanceof Integer ) - return (Integer) value; + float value = FlatUIUtils.getUIFloat( styleKey( key, style ), Float.MIN_VALUE ); + if( value != Float.MIN_VALUE ) + return value; } - return FlatUIUtils.getUIInt( key, defaultValue ); + return FlatUIUtils.getUIFloat( key, defaultValue ); } private static String styleKey( String key, String style ) { @@ -129,11 +162,26 @@ public class FlatCheckBoxIcon super( ICON_SIZE, ICON_SIZE, null ); } + /** @since 2 */ + public Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObject( this, key, value ); + } + + /** @since 2 */ + public Map> getStyleableInfos() { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + @Override protected void paintIcon( Component c, Graphics2D g ) { boolean indeterminate = isIndeterminate( c ); boolean selected = indeterminate || isSelected( c ); boolean isFocused = FlatUIUtils.isPermanentFocusOwner( c ); + float bw = selected + ? (disabledSelectedBorderWidth != Float.MIN_VALUE && !c.isEnabled() + ? disabledSelectedBorderWidth + : (selectedBorderWidth != Float.MIN_VALUE ? selectedBorderWidth : borderWidth)) + : borderWidth; // paint focused border if( isFocused && focusWidth > 0 && FlatButtonUI.isFocusPainted( c ) ) { @@ -143,7 +191,7 @@ public class FlatCheckBoxIcon // paint border g.setColor( getBorderColor( c, selected ) ); - paintBorder( c, g ); + paintBorder( c, g, bw ); // paint background Color bg = FlatUIUtils.deriveColor( getBackground( c, selected ), @@ -151,14 +199,14 @@ public class FlatCheckBoxIcon if( bg.getAlpha() < 255 ) { // fill background with default color before filling with non-opaque background g.setColor( selected ? selectedBackground : background ); - paintBackground( c, g ); + paintBackground( c, g, bw ); } g.setColor( bg ); - paintBackground( c, g ); + paintBackground( c, g, bw ); // paint checkmark - if( selected || indeterminate ) { - g.setColor( getCheckmarkColor( c, selected, isFocused ) ); + if( selected ) { + g.setColor( getCheckmarkColor( c ) ); if( indeterminate ) paintIndeterminate( c, g ); else @@ -167,20 +215,25 @@ public class FlatCheckBoxIcon } protected void paintFocusBorder( Component c, Graphics2D g ) { - // the outline focus border is painted outside of the icon - int wh = ICON_SIZE - 1 + (focusWidth * 2); - int arcwh = arc + (focusWidth * 2); - g.fillRoundRect( -focusWidth + 1, -focusWidth, wh, wh, arcwh, arcwh ); + // the outer focus border is painted outside of the icon + float wh = ICON_SIZE - 1 + (focusWidth * 2); + float arcwh = arc + (focusWidth * 2); + g.fill( new RoundRectangle2D.Float( -focusWidth + 1, -focusWidth, wh, wh, arcwh, arcwh ) ); } - protected void paintBorder( Component c, Graphics2D g ) { + protected void paintBorder( Component c, Graphics2D g, float borderWidth ) { + if( borderWidth == 0 ) + return; + int arcwh = arc; g.fillRoundRect( 1, 0, 14, 14, arcwh, arcwh ); } - protected void paintBackground( Component c, Graphics2D g ) { - int arcwh = arc - 1; - g.fillRoundRect( 2, 1, 12, 12, arcwh, arcwh ); + protected void paintBackground( Component c, Graphics2D g, float borderWidth ) { + float xy = borderWidth; + float wh = 14 - (borderWidth * 2); + float arcwh = arc - borderWidth; + g.fill( new RoundRectangle2D.Float( 1 + xy, xy, wh, wh, arcwh, arcwh ) ); } protected void paintCheckmark( Component c, Graphics2D g ) { @@ -205,6 +258,11 @@ public class FlatCheckBoxIcon return c instanceof AbstractButton && ((AbstractButton)c).isSelected(); } + /** @since 2 */ + public float getFocusWidth() { + return focusWidth; + } + protected Color getFocusColor( Component c ) { return focusColor; } @@ -212,26 +270,27 @@ public class FlatCheckBoxIcon protected Color getBorderColor( Component c, boolean selected ) { return FlatButtonUI.buttonStateColor( c, selected ? selectedBorderColor : borderColor, - disabledBorderColor, - selected && selectedFocusedBorderColor != null ? selectedFocusedBorderColor : focusedBorderColor, - hoverBorderColor, - null ); + (selected && disabledSelectedBorderColor != null) ? disabledSelectedBorderColor : disabledBorderColor, + (selected && focusedSelectedBorderColor != null) ? focusedSelectedBorderColor : focusedBorderColor, + (selected && hoverSelectedBorderColor != null) ? hoverSelectedBorderColor : hoverBorderColor, + (selected && pressedSelectedBorderColor != null) ? pressedSelectedBorderColor : pressedBorderColor ); } protected Color getBackground( Component c, boolean selected ) { return FlatButtonUI.buttonStateColor( c, selected ? selectedBackground : background, - disabledBackground, - (selected && selectedFocusedBackground != null) ? selectedFocusedBackground : focusedBackground, - (selected && selectedHoverBackground != null) ? selectedHoverBackground : hoverBackground, - (selected && selectedPressedBackground != null) ? selectedPressedBackground : pressedBackground ); + (selected && disabledSelectedBackground != null) ? disabledSelectedBackground : disabledBackground, + (selected && focusedSelectedBackground != null) ? focusedSelectedBackground : focusedBackground, + (selected && hoverSelectedBackground != null) ? hoverSelectedBackground : hoverBackground, + (selected && pressedSelectedBackground != null) ? pressedSelectedBackground : pressedBackground ); } - protected Color getCheckmarkColor( Component c, boolean selected, boolean isFocused ) { - return c.isEnabled() - ? ((selected && isFocused && selectedFocusedCheckmarkColor != null) - ? selectedFocusedCheckmarkColor - : checkmarkColor) - : disabledCheckmarkColor; + protected Color getCheckmarkColor( Component c ) { + return FlatButtonUI.buttonStateColor( c, + checkmarkColor, + disabledCheckmarkColor, + focusedCheckmarkColor, + hoverCheckmarkColor, + pressedCheckmarkColor ); } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxMenuItemIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxMenuItemIcon.java index 501602b6..8900db7a 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxMenuItemIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatCheckBoxMenuItemIcon.java @@ -21,15 +21,18 @@ import java.awt.Color; import java.awt.Component; import java.awt.Graphics2D; import java.awt.geom.Path2D; +import java.util.Map; import javax.swing.AbstractButton; import javax.swing.JMenuItem; import javax.swing.UIManager; +import com.formdev.flatlaf.ui.FlatStylingSupport; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; /** * Icon for {@link javax.swing.JCheckBoxMenuItem}. * - * @uiDefault MenuItemCheckBox.icon.checkmarkColor Color - * @uiDefault MenuItemCheckBox.icon.disabledCheckmarkColor Color + * @uiDefault CheckBoxMenuItem.icon.checkmarkColor Color + * @uiDefault CheckBoxMenuItem.icon.disabledCheckmarkColor Color * @uiDefault MenuItem.selectionForeground Color * @uiDefault MenuItem.selectionType String * @@ -38,14 +41,24 @@ import javax.swing.UIManager; public class FlatCheckBoxMenuItemIcon extends FlatAbstractIcon { - protected final Color checkmarkColor = UIManager.getColor( "MenuItemCheckBox.icon.checkmarkColor" ); - protected final Color disabledCheckmarkColor = UIManager.getColor( "MenuItemCheckBox.icon.disabledCheckmarkColor" ); - protected final Color selectionForeground = UIManager.getColor( "MenuItem.selectionForeground" ); + @Styleable protected Color checkmarkColor = UIManager.getColor( "CheckBoxMenuItem.icon.checkmarkColor" ); + @Styleable protected Color disabledCheckmarkColor = UIManager.getColor( "CheckBoxMenuItem.icon.disabledCheckmarkColor" ); + @Styleable protected Color selectionForeground = UIManager.getColor( "MenuItem.selectionForeground" ); public FlatCheckBoxMenuItemIcon() { super( 15, 15, null ); } + /** @since 2 */ + public Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObject( this, key, value ); + } + + /** @since 2 */ + public Map> getStyleableInfos() { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + @Override protected void paintIcon( Component c, Graphics2D g2 ) { boolean selected = (c instanceof AbstractButton) && ((AbstractButton)c).isSelected(); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatClearIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatClearIcon.java new file mode 100644 index 00000000..30f691c4 --- /dev/null +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatClearIcon.java @@ -0,0 +1,106 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.icons; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Graphics2D; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Line2D; +import java.awt.geom.Path2D; +import java.util.Map; +import javax.swing.AbstractButton; +import javax.swing.ButtonModel; +import javax.swing.UIManager; +import com.formdev.flatlaf.ui.FlatStylingSupport; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatUIUtils; + +/** + * "clear" icon for search fields. + * + * @uiDefault SearchField.clearIconColor Color + * @uiDefault SearchField.clearIconHoverColor Color + * @uiDefault SearchField.clearIconPressedColor Color + * + * @author Karl Tauber + * @since 1.5 + */ +public class FlatClearIcon + extends FlatAbstractIcon +{ + @Styleable protected Color clearIconColor = UIManager.getColor( "SearchField.clearIconColor" ); + @Styleable protected Color clearIconHoverColor = UIManager.getColor( "SearchField.clearIconHoverColor" ); + @Styleable protected Color clearIconPressedColor = UIManager.getColor( "SearchField.clearIconPressedColor" ); + + private final boolean ignoreButtonState; + + public FlatClearIcon() { + this( false ); + } + + /** @since 2 */ + public FlatClearIcon( boolean ignoreButtonState ) { + super( 16, 16, null ); + this.ignoreButtonState = ignoreButtonState; + } + + /** @since 2 */ + public Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObject( this, key, value ); + } + + /** @since 2 */ + public Map> getStyleableInfos() { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + + @Override + protected void paintIcon( Component c, Graphics2D g ) { + if( !ignoreButtonState && c instanceof AbstractButton ) { + ButtonModel model = ((AbstractButton)c).getModel(); + if( model.isPressed() || model.isRollover() ) { + /* + + + + */ + + // paint filled circle with cross + g.setColor( model.isPressed() ? clearIconPressedColor : clearIconHoverColor ); + Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD ); + path.append( new Ellipse2D.Float( 1.75f, 1.75f, 12.5f, 12.5f ), false ); + path.append( FlatUIUtils.createPath( 4.5,5.5, 5.5,4.5, 8,7, 10.5,4.5, 11.5,5.5, 9,8, 11.5,10.5, 10.5,11.5, 8,9, 5.5,11.5, 4.5,10.5, 7,8 ), false ); + g.fill( path ); + return; + } + } + + /* + + + + */ + + // paint cross + g.setColor( clearIconColor ); + Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD ); + path.append( new Line2D.Float( 5,5, 11,11 ), false ); + path.append( new Line2D.Float( 5,11, 11,5 ), false ); + g.draw( path ); + } +} diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatDescendingSortIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatDescendingSortIcon.java index c43f751d..0ae9ac4c 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatDescendingSortIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatDescendingSortIcon.java @@ -17,11 +17,9 @@ package com.formdev.flatlaf.icons; import java.awt.BasicStroke; -import java.awt.Color; import java.awt.Component; import java.awt.Graphics2D; import java.awt.geom.Path2D; -import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatUIUtils; /** @@ -33,18 +31,14 @@ import com.formdev.flatlaf.ui.FlatUIUtils; * @author Karl Tauber */ public class FlatDescendingSortIcon - extends FlatAbstractIcon + extends FlatAscendingSortIcon { - protected final boolean chevron = FlatUIUtils.isChevron( UIManager.getString( "Component.arrowType" ) ); - protected final Color sortIconColor = UIManager.getColor( "Table.sortIconColor" ); - public FlatDescendingSortIcon() { - super( 10, 5, null ); + super(); } @Override - protected void paintIcon( Component c, Graphics2D g ) { - g.setColor( sortIconColor ); + protected void paintArrow( Component c, Graphics2D g, boolean chevron ) { if( chevron ) { // chevron arrow Path2D path = FlatUIUtils.createPath( false, 1,0, 5,4, 9,0 ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatHelpButtonIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatHelpButtonIcon.java index 9283b49d..ed676e60 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatHelpButtonIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatHelpButtonIcon.java @@ -22,8 +22,11 @@ import java.awt.Component; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; import java.awt.geom.Path2D; +import java.util.Map; import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatButtonUI; +import com.formdev.flatlaf.ui.FlatStylingSupport; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; import com.formdev.flatlaf.ui.FlatUIUtils; /** @@ -50,29 +53,37 @@ import com.formdev.flatlaf.ui.FlatUIUtils; public class FlatHelpButtonIcon extends FlatAbstractIcon { - protected final int focusWidth = UIManager.getInt( "Component.focusWidth" ); - protected final Color focusColor = UIManager.getColor( "Component.focusColor" ); - protected final float innerFocusWidth = FlatUIUtils.getUIFloat( "HelpButton.innerFocusWidth", FlatUIUtils.getUIFloat( "Component.innerFocusWidth", 0 ) ); - protected final int borderWidth = FlatUIUtils.getUIInt( "HelpButton.borderWidth", 1 ); + @Styleable protected int focusWidth = UIManager.getInt( "Component.focusWidth" ); + @Styleable protected Color focusColor = UIManager.getColor( "Component.focusColor" ); + @Styleable protected float innerFocusWidth = FlatUIUtils.getUIFloat( "HelpButton.innerFocusWidth", FlatUIUtils.getUIFloat( "Component.innerFocusWidth", 0 ) ); + @Styleable protected int borderWidth = FlatUIUtils.getUIInt( "HelpButton.borderWidth", 1 ); - protected final Color borderColor = UIManager.getColor( "HelpButton.borderColor" ); - protected final Color disabledBorderColor = UIManager.getColor( "HelpButton.disabledBorderColor" ); - protected final Color focusedBorderColor = UIManager.getColor( "HelpButton.focusedBorderColor" ); - protected final Color hoverBorderColor = UIManager.getColor( "HelpButton.hoverBorderColor" ); - protected final Color background = UIManager.getColor( "HelpButton.background" ); - protected final Color disabledBackground = UIManager.getColor( "HelpButton.disabledBackground" ); - protected final Color focusedBackground = UIManager.getColor( "HelpButton.focusedBackground" ); - protected final Color hoverBackground = UIManager.getColor( "HelpButton.hoverBackground" ); - protected final Color pressedBackground = UIManager.getColor( "HelpButton.pressedBackground" ); - protected final Color questionMarkColor = UIManager.getColor( "HelpButton.questionMarkColor" ); - protected final Color disabledQuestionMarkColor = UIManager.getColor( "HelpButton.disabledQuestionMarkColor" ); - - protected final int iconSize = 22 + (focusWidth * 2); + @Styleable protected Color borderColor = UIManager.getColor( "HelpButton.borderColor" ); + @Styleable protected Color disabledBorderColor = UIManager.getColor( "HelpButton.disabledBorderColor" ); + @Styleable protected Color focusedBorderColor = UIManager.getColor( "HelpButton.focusedBorderColor" ); + @Styleable protected Color hoverBorderColor = UIManager.getColor( "HelpButton.hoverBorderColor" ); + @Styleable protected Color background = UIManager.getColor( "HelpButton.background" ); + @Styleable protected Color disabledBackground = UIManager.getColor( "HelpButton.disabledBackground" ); + @Styleable protected Color focusedBackground = UIManager.getColor( "HelpButton.focusedBackground" ); + @Styleable protected Color hoverBackground = UIManager.getColor( "HelpButton.hoverBackground" ); + @Styleable protected Color pressedBackground = UIManager.getColor( "HelpButton.pressedBackground" ); + @Styleable protected Color questionMarkColor = UIManager.getColor( "HelpButton.questionMarkColor" ); + @Styleable protected Color disabledQuestionMarkColor = UIManager.getColor( "HelpButton.disabledQuestionMarkColor" ); public FlatHelpButtonIcon() { super( 0, 0, null ); } + /** @since 2 */ + public Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObject( this, key, value ); + } + + /** @since 2 */ + public Map> getStyleableInfos() { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + @Override protected void paintIcon( Component c, Graphics2D g2 ) { /* @@ -85,11 +96,11 @@ public class FlatHelpButtonIcon */ - boolean enabled = c.isEnabled(); - boolean focused = FlatUIUtils.isPermanentFocusOwner( c ); + boolean enabled = c == null || c.isEnabled(); + boolean focused = c != null && FlatUIUtils.isPermanentFocusOwner( c ); float xy = 0.5f; - float wh = iconSize - 1; + float wh = iconSize() - 1; // paint outer focus border if( focused && FlatButtonUI.isFocusPainted( c ) ) { @@ -151,11 +162,15 @@ public class FlatHelpButtonIcon @Override public int getIconWidth() { - return scale( iconSize ); + return scale( iconSize() ); } @Override public int getIconHeight() { - return scale( iconSize ); + return scale( iconSize() ); + } + + private int iconSize() { + return 22 + (focusWidth * 2); } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatMenuArrowIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatMenuArrowIcon.java index 2afb8faf..bf75e736 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatMenuArrowIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatMenuArrowIcon.java @@ -21,9 +21,12 @@ import java.awt.Color; import java.awt.Component; import java.awt.Graphics2D; import java.awt.geom.Path2D; +import java.util.Map; import javax.swing.JMenu; import javax.swing.UIManager; +import com.formdev.flatlaf.ui.FlatStylingSupport; import com.formdev.flatlaf.ui.FlatUIUtils; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; /** * "arrow" icon for {@link javax.swing.JMenu}. @@ -39,22 +42,32 @@ import com.formdev.flatlaf.ui.FlatUIUtils; public class FlatMenuArrowIcon extends FlatAbstractIcon { - protected final boolean chevron = FlatUIUtils.isChevron( UIManager.getString( "Component.arrowType" ) ); - protected final Color arrowColor = UIManager.getColor( "Menu.icon.arrowColor" ); - protected final Color disabledArrowColor = UIManager.getColor( "Menu.icon.disabledArrowColor" ); - protected final Color selectionForeground = UIManager.getColor( "Menu.selectionForeground" ); + @Styleable protected String arrowType = UIManager.getString( "Component.arrowType" ); + @Styleable protected Color arrowColor = UIManager.getColor( "Menu.icon.arrowColor" ); + @Styleable protected Color disabledArrowColor = UIManager.getColor( "Menu.icon.disabledArrowColor" ); + @Styleable protected Color selectionForeground = UIManager.getColor( "Menu.selectionForeground" ); public FlatMenuArrowIcon() { super( 6, 10, null ); } + /** @since 2 */ + public Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObject( this, key, value ); + } + + /** @since 2 */ + public Map> getStyleableInfos() { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + @Override protected void paintIcon( Component c, Graphics2D g ) { - if( !c.getComponentOrientation().isLeftToRight() ) + if( c != null && !c.getComponentOrientation().isLeftToRight() ) g.rotate( Math.toRadians( 180 ), width / 2., height / 2. ); g.setColor( getArrowColor( c ) ); - if( chevron ) { + if( FlatUIUtils.isChevron( arrowType ) ) { // chevron arrow Path2D path = FlatUIUtils.createPath( false, 1,1, 5,5, 1,9 ); g.setStroke( new BasicStroke( 1f ) ); @@ -69,7 +82,7 @@ public class FlatMenuArrowIcon if( c instanceof JMenu && ((JMenu)c).isSelected() && !isUnderlineSelection() ) return selectionForeground; - return c.isEnabled() ? arrowColor : disabledArrowColor; + return c == null || c.isEnabled() ? arrowColor : disabledArrowColor; } protected boolean isUnderlineSelection() { diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatMenuItemArrowIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatMenuItemArrowIcon.java index 984a12a3..2075a369 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatMenuItemArrowIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatMenuItemArrowIcon.java @@ -21,14 +21,16 @@ import java.awt.Graphics; import java.awt.Graphics2D; /** - * "arrow" icon for {@link javax.swing.JMenuItem}. + * "arrow" icon for {@link javax.swing.JMenuItem}, {@link javax.swing.JCheckBoxMenuItem} + * and {@link javax.swing.JRadioButtonMenuItem}. * * @author Karl Tauber */ public class FlatMenuItemArrowIcon - extends FlatMenuArrowIcon + extends FlatAbstractIcon { public FlatMenuItemArrowIcon() { + super( 6, 10, null ); } @Override diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java index 06095b0f..87df538c 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRadioButtonIcon.java @@ -19,38 +19,51 @@ package com.formdev.flatlaf.icons; import java.awt.Component; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; /** * Icon for {@link javax.swing.JRadioButton}. - * - * Note: If Component.focusWidth is greater than zero, then the outline focus border + *

+ * Note: + * If Component.focusWidth is greater than zero, then the outer focus border * is painted outside of the icon bounds. Make sure that the radiobutton * has margins, which are equal or greater than focusWidth. * - * @uiDefault RadioButton.icon.centerDiameter int + * @uiDefault RadioButton.icon.style String optional; "outlined"/null (default) or "filled" + * @uiDefault RadioButton.icon.centerDiameter int or float * * @author Karl Tauber */ public class FlatRadioButtonIcon extends FlatCheckBoxIcon { - protected final int centerDiameter = getUIInt( "RadioButton.icon.centerDiameter", 8, style ); + @Styleable protected float centerDiameter = getUIFloat( "RadioButton.icon.centerDiameter", 8, style ); @Override - protected void paintFocusBorder( Component c, Graphics2D g ) { - // the outline focus border is painted outside of the icon - int wh = ICON_SIZE + (focusWidth * 2); - g.fillOval( -focusWidth, -focusWidth, wh, wh ); + protected String getPropertyPrefix() { + return "RadioButton."; } @Override - protected void paintBorder( Component c, Graphics2D g ) { + protected void paintFocusBorder( Component c, Graphics2D g ) { + // the outer focus border is painted outside of the icon + float wh = ICON_SIZE + (focusWidth * 2); + g.fill( new Ellipse2D.Float( -focusWidth, -focusWidth, wh, wh ) ); + } + + @Override + protected void paintBorder( Component c, Graphics2D g, float borderWidth ) { + if( borderWidth == 0 ) + return; + g.fillOval( 0, 0, 15, 15 ); } @Override - protected void paintBackground( Component c, Graphics2D g ) { - g.fillOval( 1, 1, 13, 13 ); + protected void paintBackground( Component c, Graphics2D g, float borderWidth ) { + float xy = borderWidth; + float wh = 15 - (borderWidth * 2); + g.fill( new Ellipse2D.Float( xy, xy, wh, wh ) ); } @Override diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRevealIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRevealIcon.java new file mode 100644 index 00000000..8956e129 --- /dev/null +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatRevealIcon.java @@ -0,0 +1,56 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.icons; + +import java.awt.Component; +import java.awt.Graphics2D; +import java.awt.geom.Area; +import java.awt.geom.Ellipse2D; +import java.awt.geom.Path2D; +import java.awt.geom.Rectangle2D; +import javax.swing.UIManager; + +/** + * "eye" icon for {@link javax.swing.JPasswordField}. + * + * @uiDefault PasswordField.revealIconColor Color + * + * @author Karl Tauber + * @since 2 + */ +public class FlatRevealIcon + extends FlatAbstractIcon +{ + public FlatRevealIcon() { + super( 16, 16, UIManager.getColor( "PasswordField.revealIconColor" ) ); + } + + @Override + protected void paintIcon( Component c, Graphics2D g ) { + Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD ); + path.append( new Ellipse2D.Float( 5.15f, 6.15f, 5.7f, 5.7f ), false ); + path.append( new Ellipse2D.Float( 6, 7, 4, 4 ), false ); + g.fill( path ); + + Path2D path2 = new Path2D.Float( Path2D.WIND_EVEN_ODD ); + path2.append( new Ellipse2D.Float( 2.15f, 4.15f, 11.7f, 11.7f ), false ); + path2.append( new Ellipse2D.Float( 3, 5, 10, 10 ), false ); + Area area = new Area( path2 ); + area.subtract( new Area( new Rectangle2D.Float( 0, 9.5f, 16, 16 ) ) ); + g.fill( area ); + } +} diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatSearchIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatSearchIcon.java new file mode 100644 index 00000000..e9f72ffa --- /dev/null +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatSearchIcon.java @@ -0,0 +1,92 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.icons; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Graphics2D; +import java.awt.geom.Area; +import java.awt.geom.Ellipse2D; +import java.util.Map; +import javax.swing.UIManager; +import com.formdev.flatlaf.ui.FlatButtonUI; +import com.formdev.flatlaf.ui.FlatStylingSupport; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatUIUtils; + +/** + * "search" icon for search fields. + * + * @uiDefault SearchField.searchIconColor Color + * @uiDefault SearchField.searchIconHoverColor Color + * @uiDefault SearchField.searchIconPressedColor Color + * + * @author Karl Tauber + * @since 1.5 + */ +public class FlatSearchIcon + extends FlatAbstractIcon +{ + @Styleable protected Color searchIconColor = UIManager.getColor( "SearchField.searchIconColor" ); + @Styleable protected Color searchIconHoverColor = UIManager.getColor( "SearchField.searchIconHoverColor" ); + @Styleable protected Color searchIconPressedColor = UIManager.getColor( "SearchField.searchIconPressedColor" ); + + private final boolean ignoreButtonState; + + public FlatSearchIcon() { + this( false ); + } + + /** @since 2 */ + public FlatSearchIcon( boolean ignoreButtonState ) { + super( 16, 16, null ); + this.ignoreButtonState = ignoreButtonState; + } + + /** @since 2 */ + public Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObject( this, key, value ); + } + + /** @since 2 */ + public Map> getStyleableInfos() { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + + @Override + protected void paintIcon( Component c, Graphics2D g ) { + /* + + + + + + + */ + + g.setColor( ignoreButtonState + ? searchIconColor + : FlatButtonUI.buttonStateColor( c, searchIconColor, searchIconColor, + null, searchIconHoverColor, searchIconPressedColor ) ); + + // paint magnifier + Area area = new Area( new Ellipse2D.Float( 2, 2, 10, 10 ) ); + area.subtract( new Area( new Ellipse2D.Float( 3, 3, 8, 8 ) ) ); + area.add( new Area( FlatUIUtils.createPath( 10.813,9.75, 14,12.938, 12.938,14, 9.75,10.813 ) ) ); + g.fill( area ); + } +} diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatSearchWithHistoryIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatSearchWithHistoryIcon.java new file mode 100644 index 00000000..d8a4e00b --- /dev/null +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatSearchWithHistoryIcon.java @@ -0,0 +1,61 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.icons; + +import java.awt.Component; +import java.awt.Graphics2D; +import com.formdev.flatlaf.ui.FlatUIUtils; + +/** + * "search with history" icon for search fields. + * + * @author Karl Tauber + * @since 1.5 + */ +public class FlatSearchWithHistoryIcon + extends FlatSearchIcon +{ + public FlatSearchWithHistoryIcon() { + this( false ); + } + + /** @since 2 */ + public FlatSearchWithHistoryIcon( boolean ignoreButtonState ) { + super( ignoreButtonState ); + } + + @Override + protected void paintIcon( Component c, Graphics2D g ) { + /* + + + + + + + + */ + + // paint magnifier + g.translate( -2, 0 ); + super.paintIcon( c, g ); + g.translate( 2, 0 ); + + // paint history arrow + g.fill( FlatUIUtils.createPath( 11,7, 16,7, 13.5,10 ) ); + } +} diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTabbedPaneCloseIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTabbedPaneCloseIcon.java index 39e90587..4b228e13 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTabbedPaneCloseIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTabbedPaneCloseIcon.java @@ -23,8 +23,11 @@ import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.geom.Line2D; import java.awt.geom.Path2D; +import java.util.Map; import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatButtonUI; +import com.formdev.flatlaf.ui.FlatStylingSupport; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; import com.formdev.flatlaf.ui.FlatUIUtils; /** @@ -47,39 +50,49 @@ import com.formdev.flatlaf.ui.FlatUIUtils; public class FlatTabbedPaneCloseIcon extends FlatAbstractIcon { - protected final Dimension size = UIManager.getDimension( "TabbedPane.closeSize" ); - protected final int arc = UIManager.getInt( "TabbedPane.closeArc" ); - protected final float crossPlainSize = FlatUIUtils.getUIFloat( "TabbedPane.closeCrossPlainSize", 7.5f ); - protected final float crossFilledSize = FlatUIUtils.getUIFloat( "TabbedPane.closeCrossFilledSize", crossPlainSize ); - protected final float closeCrossLineWidth = FlatUIUtils.getUIFloat( "TabbedPane.closeCrossLineWidth", 1f ); - protected final Color background = UIManager.getColor( "TabbedPane.closeBackground" ); - protected final Color foreground = UIManager.getColor( "TabbedPane.closeForeground" ); - protected final Color hoverBackground = UIManager.getColor( "TabbedPane.closeHoverBackground" ); - protected final Color hoverForeground = UIManager.getColor( "TabbedPane.closeHoverForeground" ); - protected final Color pressedBackground = UIManager.getColor( "TabbedPane.closePressedBackground" ); - protected final Color pressedForeground = UIManager.getColor( "TabbedPane.closePressedForeground" ); + @Styleable protected Dimension closeSize = UIManager.getDimension( "TabbedPane.closeSize" ); + @Styleable protected int closeArc = UIManager.getInt( "TabbedPane.closeArc" ); + @Styleable protected float closeCrossPlainSize = FlatUIUtils.getUIFloat( "TabbedPane.closeCrossPlainSize", 7.5f ); + @Styleable protected float closeCrossFilledSize = FlatUIUtils.getUIFloat( "TabbedPane.closeCrossFilledSize", closeCrossPlainSize ); + @Styleable protected float closeCrossLineWidth = FlatUIUtils.getUIFloat( "TabbedPane.closeCrossLineWidth", 1f ); + @Styleable protected Color closeBackground = UIManager.getColor( "TabbedPane.closeBackground" ); + @Styleable protected Color closeForeground = UIManager.getColor( "TabbedPane.closeForeground" ); + @Styleable protected Color closeHoverBackground = UIManager.getColor( "TabbedPane.closeHoverBackground" ); + @Styleable protected Color closeHoverForeground = UIManager.getColor( "TabbedPane.closeHoverForeground" ); + @Styleable protected Color closePressedBackground = UIManager.getColor( "TabbedPane.closePressedBackground" ); + @Styleable protected Color closePressedForeground = UIManager.getColor( "TabbedPane.closePressedForeground" ); public FlatTabbedPaneCloseIcon() { super( 16, 16, null ); } + /** @since 2 */ + public Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObject( this, key, value ); + } + + /** @since 2 */ + public Map> getStyleableInfos() { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + @Override protected void paintIcon( Component c, Graphics2D g ) { // paint background - Color bg = FlatButtonUI.buttonStateColor( c, background, null, null, hoverBackground, pressedBackground ); + Color bg = FlatButtonUI.buttonStateColor( c, closeBackground, null, null, closeHoverBackground, closePressedBackground ); if( bg != null ) { g.setColor( FlatUIUtils.deriveColor( bg, c.getBackground() ) ); - g.fillRoundRect( (width - size.width) / 2, (height - size.height) / 2, - size.width, size.height, arc, arc ); + g.fillRoundRect( (width - closeSize.width) / 2, (height - closeSize.height) / 2, + closeSize.width, closeSize.height, closeArc, closeArc ); } // set cross color - Color fg = FlatButtonUI.buttonStateColor( c, foreground, null, null, hoverForeground, pressedForeground ); + Color fg = FlatButtonUI.buttonStateColor( c, closeForeground, null, null, closeHoverForeground, closePressedForeground ); g.setColor( FlatUIUtils.deriveColor( fg, c.getForeground() ) ); float mx = width / 2; float my = height / 2; - float r = ((bg != null) ? crossFilledSize : crossPlainSize) / 2; + float r = ((bg != null) ? closeCrossFilledSize : closeCrossPlainSize) / 2; // paint cross Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeClosedIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeClosedIcon.java index df160011..c149bb9c 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeClosedIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeClosedIcon.java @@ -37,6 +37,8 @@ public class FlatTreeClosedIcon @Override protected void paintIcon( Component c, Graphics2D g ) { + FlatTreeCollapsedIcon.setStyleColorFromTreeUI( c, g, ui -> ui.iconClosedColor ); + /* diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeCollapsedIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeCollapsedIcon.java index 481b2e42..9d76c9c4 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeCollapsedIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeCollapsedIcon.java @@ -19,7 +19,12 @@ package com.formdev.flatlaf.icons; import java.awt.Color; import java.awt.Component; import java.awt.Graphics2D; +import java.util.function.Function; +import javax.swing.JTree; +import javax.swing.SwingUtilities; import javax.swing.UIManager; +import javax.swing.plaf.TreeUI; +import com.formdev.flatlaf.ui.FlatTreeUI; import com.formdev.flatlaf.ui.FlatUIUtils; /** @@ -46,8 +51,12 @@ public class FlatTreeCollapsedIcon @Override protected void paintIcon( Component c, Graphics2D g ) { + setStyleColorFromTreeUI( c, g ); rotate( c, g ); + String arrowType = getStyleFromTreeUI( c, ui -> ui.iconArrowType ); + boolean chevron = (arrowType != null) ? FlatUIUtils.isChevron( arrowType ) : this.chevron; + if( chevron ) { // chevron arrow g.fill( FlatUIUtils.createPath( 3,1, 3,2.5, 6,5.5, 3,8.5, 3,10, 4.5,10, 9,5.5, 4.5,1 ) ); @@ -57,8 +66,34 @@ public class FlatTreeCollapsedIcon } } + void setStyleColorFromTreeUI( Component c, Graphics2D g ) { + setStyleColorFromTreeUI( c, g, ui -> ui.iconCollapsedColor ); + } + void rotate( Component c, Graphics2D g ) { if( !c.getComponentOrientation().isLeftToRight() ) g.rotate( Math.toRadians( 180 ), width / 2., height / 2. ); } + + /** + * Because this icon is always shared for all trees, + * get icon specific style from FlatTreeUI. + */ + static T getStyleFromTreeUI( Component c, Function f ) { + JTree tree = (c instanceof JTree) + ? (JTree) c + : (JTree) SwingUtilities.getAncestorOfClass( JTree.class, c ); + if( tree != null ) { + TreeUI ui = tree.getUI(); + if( ui instanceof FlatTreeUI ) + return f.apply( (FlatTreeUI) ui ); + } + return null; + } + + static void setStyleColorFromTreeUI( Component c, Graphics2D g, Function f ) { + Color color = getStyleFromTreeUI( c, f ); + if( color != null ) + g.setColor( color ); + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeExpandedIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeExpandedIcon.java index 113139e9..3e99f3ef 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeExpandedIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeExpandedIcon.java @@ -34,6 +34,11 @@ public class FlatTreeExpandedIcon super( UIManager.getColor( "Tree.icon.expandedColor" ) ); } + @Override + void setStyleColorFromTreeUI( Component c, Graphics2D g ) { + setStyleColorFromTreeUI( c, g, ui -> ui.iconExpandedColor ); + } + @Override void rotate( Component c, Graphics2D g ) { g.rotate( Math.toRadians( 90 ), width / 2., height / 2. ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeLeafIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeLeafIcon.java index 6ec8900d..b85ccbb1 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeLeafIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeLeafIcon.java @@ -37,6 +37,8 @@ public class FlatTreeLeafIcon @Override protected void paintIcon( Component c, Graphics2D g ) { + FlatTreeCollapsedIcon.setStyleColorFromTreeUI( c, g, ui -> ui.iconLeafColor ); + /* diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeOpenIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeOpenIcon.java index f8754d9e..e2ca5213 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeOpenIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatTreeOpenIcon.java @@ -37,6 +37,8 @@ public class FlatTreeOpenIcon @Override protected void paintIcon( Component c, Graphics2D g ) { + FlatTreeCollapsedIcon.setStyleColorFromTreeUI( c, g, ui -> ui.iconOpenColor ); + /* diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowAbstractIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowAbstractIcon.java index 15a8d6ab..fcea0da8 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowAbstractIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowAbstractIcon.java @@ -20,6 +20,7 @@ import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics2D; +import java.awt.RenderingHints; import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatButtonUI; import com.formdev.flatlaf.ui.FlatUIUtils; @@ -65,8 +66,14 @@ public abstract class FlatWindowAbstractIcon protected void paintBackground( Component c, Graphics2D g ) { Color background = FlatButtonUI.buttonStateColor( c, null, null, null, hoverBackground, pressedBackground ); if( background != null ) { + // disable antialiasing for background rectangle painting to avoid blury edges when scaled (e.g. at 125% or 175%) + Object oldHint = g.getRenderingHint( RenderingHints.KEY_ANTIALIASING ); + g.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF ); + g.setColor( FlatUIUtils.deriveColor( background, c.getBackground() ) ); g.fillRect( 0, 0, width, height ); + + g.setRenderingHint( RenderingHints.KEY_ANTIALIASING, oldHint ); } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowCloseIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowCloseIcon.java index f4bdc5ca..d20ef27d 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowCloseIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowCloseIcon.java @@ -24,6 +24,7 @@ import java.awt.geom.Line2D; import java.awt.geom.Path2D; import javax.swing.UIManager; import com.formdev.flatlaf.ui.FlatButtonUI; +import com.formdev.flatlaf.util.SystemInfo; /** * "close" icon for windows (frames and dialogs). @@ -54,7 +55,7 @@ public class FlatWindowCloseIcon int iy = y + ((height - iwh) / 2); int ix2 = ix + iwh - 1; int iy2 = iy + iwh - 1; - int thickness = (int) scaleFactor; + float thickness = SystemInfo.isWindows_11_orLater ? (float) scaleFactor : (int) scaleFactor; Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD ); path.append( new Line2D.Float( ix, iy, ix2, iy2 ), false ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowMaximizeIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowMaximizeIcon.java index 5035d43d..85016c18 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowMaximizeIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowMaximizeIcon.java @@ -18,6 +18,7 @@ package com.formdev.flatlaf.icons; import java.awt.Graphics2D; import com.formdev.flatlaf.ui.FlatUIUtils; +import com.formdev.flatlaf.util.SystemInfo; /** * "maximize" icon for windows (frames and dialogs). @@ -35,8 +36,11 @@ public class FlatWindowMaximizeIcon int iwh = (int) (10 * scaleFactor); int ix = x + ((width - iwh) / 2); int iy = y + ((height - iwh) / 2); - int thickness = (int) scaleFactor; + float thickness = SystemInfo.isWindows_11_orLater ? (float) scaleFactor : (int) scaleFactor; + int arc = Math.max( (int) (1.5 * scaleFactor), 2 ); - g.fill( FlatUIUtils.createRectangle( ix, iy, iwh, iwh, thickness ) ); + g.fill( SystemInfo.isWindows_11_orLater + ? FlatUIUtils.createRoundRectangle( ix, iy, iwh, iwh, thickness, arc, arc, arc, arc ) + : FlatUIUtils.createRectangle( ix, iy, iwh, iwh, thickness ) ); } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowRestoreIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowRestoreIcon.java index b62087ef..c4407e90 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowRestoreIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/icons/FlatWindowRestoreIcon.java @@ -21,6 +21,7 @@ import java.awt.geom.Area; import java.awt.geom.Path2D; import java.awt.geom.Rectangle2D; import com.formdev.flatlaf.ui.FlatUIUtils; +import com.formdev.flatlaf.util.SystemInfo; /** * "restore" icon for windows (frames and dialogs). @@ -38,18 +39,33 @@ public class FlatWindowRestoreIcon int iwh = (int) (10 * scaleFactor); int ix = x + ((width - iwh) / 2); int iy = y + ((height - iwh) / 2); - int thickness = (int) scaleFactor; + float thickness = SystemInfo.isWindows_11_orLater ? (float) scaleFactor : (int) scaleFactor; + int arc = Math.max( (int) (1.5 * scaleFactor), 2 ); + int arcOuter = (int) (arc + (1.5 * scaleFactor)); int rwh = (int) (8 * scaleFactor); int ro2 = iwh - rwh; - Path2D r1 = FlatUIUtils.createRectangle( ix + ro2, iy, rwh, rwh, thickness ); - Path2D r2 = FlatUIUtils.createRectangle( ix, iy + ro2, rwh, rwh, thickness ); + // upper-right rectangle + Path2D r1 = SystemInfo.isWindows_11_orLater + ? FlatUIUtils.createRoundRectangle( ix + ro2, iy, rwh, rwh, thickness, arc, arcOuter, arc, arc ) + : FlatUIUtils.createRectangle( ix + ro2, iy, rwh, rwh, thickness ); + // lower-left rectangle + Path2D r2 = SystemInfo.isWindows_11_orLater + ? FlatUIUtils.createRoundRectangle( ix, iy + ro2, rwh, rwh, thickness, arc, arc, arc, arc ) + : FlatUIUtils.createRectangle( ix, iy + ro2, rwh, rwh, thickness ); + + // paint upper-right rectangle Area area = new Area( r1 ); - area.subtract( new Area( new Rectangle2D.Float( ix, iy + ro2, rwh, rwh ) ) ); + if( SystemInfo.isWindows_11_orLater ) { + area.subtract( new Area( new Rectangle2D.Float( ix, (float) (iy + scaleFactor), rwh, rwh ) ) ); + area.subtract( new Area( new Rectangle2D.Float( (float) (ix + scaleFactor), iy + ro2, rwh, rwh ) ) ); + } else + area.subtract( new Area( new Rectangle2D.Float( ix, iy + ro2, rwh, rwh ) ) ); g.fill( area ); + // paint lower-left rectangle g.fill( r2 ); } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/resources/EmptyPackage.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/resources/EmptyPackage.java index 6b1610ca..32c214c2 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/resources/EmptyPackage.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/resources/EmptyPackage.java @@ -18,8 +18,8 @@ package com.formdev.flatlaf.resources; /** * The only purpose of this file is to add a .class file to this package to make it non-empty. - * Otherwise the compiler outputs a warning because this package is opend in module-info.java. - * Also when using --patch-module (e.g. from an IDE), an error would occur for empty packages. + * Otherwise, the compiler outputs a warning because this package is opened in module-info.java. + * Also, when using --patch-module (e.g. from an IDE), an error would occur for empty packages. * * @author Karl Tauber */ diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatArrowButton.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatArrowButton.java index 132e670d..df12e0ec 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatArrowButton.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatArrowButton.java @@ -37,19 +37,19 @@ public class FlatArrowButton extends BasicArrowButton implements UIResource { - public static final int DEFAULT_ARROW_WIDTH = 8; + public static final int DEFAULT_ARROW_WIDTH = 9; - protected final boolean chevron; - protected final Color foreground; - protected final Color disabledForeground; - protected final Color hoverForeground; - protected final Color hoverBackground; - protected final Color pressedForeground; - protected final Color pressedBackground; + protected boolean chevron; + protected Color foreground; + protected Color disabledForeground; + protected Color hoverForeground; + protected Color hoverBackground; + protected Color pressedForeground; + protected Color pressedBackground; private int arrowWidth = DEFAULT_ARROW_WIDTH; - private int xOffset = 0; - private int yOffset = 0; + private float xOffset = 0; + private float yOffset = 0; private boolean hover; private boolean pressed; @@ -58,14 +58,8 @@ public class FlatArrowButton Color hoverForeground, Color hoverBackground, Color pressedForeground, Color pressedBackground ) { super( direction, Color.WHITE, Color.WHITE, Color.WHITE, Color.WHITE ); - - this.chevron = FlatUIUtils.isChevron( type ); - this.foreground = foreground; - this.disabledForeground = disabledForeground; - this.hoverForeground = hoverForeground; - this.hoverBackground = hoverBackground; - this.pressedForeground = pressedForeground; - this.pressedBackground = pressedBackground; + updateStyle( type, foreground, disabledForeground, hoverForeground, hoverBackground, + pressedForeground, pressedBackground ); setOpaque( false ); setBorder( null ); @@ -101,6 +95,19 @@ public class FlatArrowButton } } + /** @since 2 */ + public void updateStyle( String type, Color foreground, Color disabledForeground, + Color hoverForeground, Color hoverBackground, Color pressedForeground, Color pressedBackground ) + { + this.chevron = FlatUIUtils.isChevron( type ); + this.foreground = foreground; + this.disabledForeground = disabledForeground; + this.hoverForeground = hoverForeground; + this.hoverBackground = hoverBackground; + this.pressedForeground = pressedForeground; + this.pressedBackground = pressedBackground; + } + public int getArrowWidth() { return arrowWidth; } @@ -117,19 +124,19 @@ public class FlatArrowButton return pressed; } - public int getXOffset() { + public float getXOffset() { return xOffset; } - public void setXOffset( int xOffset ) { + public void setXOffset( float xOffset ) { this.xOffset = xOffset; } - public int getYOffset() { + public float getYOffset() { return yOffset; } - public void setYOffset( int yOffset ) { + public void setYOffset( float yOffset ) { this.yOffset = yOffset; } @@ -204,6 +211,6 @@ public class FlatArrowButton if( vert && parent instanceof JComponent && FlatUIUtils.hasRoundBorder( (JComponent) parent ) ) x -= scale( parent.getComponentOrientation().isLeftToRight() ? 1 : -1 ); - FlatUIUtils.paintArrow( g, x, 0, getWidth(), getHeight(), getDirection(), chevron, arrowWidth, xOffset, yOffset ); + FlatUIUtils.paintArrow( g, x, 0, getWidth(), getHeight(), getDirection(), chevron, getArrowWidth(), getXOffset(), getYOffset() ); } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java index 27c8d424..636ada15 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java @@ -23,6 +23,7 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; import java.awt.Paint; +import java.util.Map; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JScrollPane; @@ -31,20 +32,25 @@ import javax.swing.JViewport; import javax.swing.UIManager; import javax.swing.plaf.basic.BasicBorders; import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableBorder; import com.formdev.flatlaf.util.DerivedColor; /** * Border for various components (e.g. {@link javax.swing.JTextField}). - * + *

* There is empty space around the component border, if Component.focusWidth is greater than zero, * which is used to paint outer focus border. - * + *

* Because there is empty space (if outer focus border is not painted), * UI delegates that use this border (or subclasses) must invoke - * {@link FlatUIUtils#paintParentBackground} to paint the empty space correctly. + * {@link FlatUIUtils#paintParentBackground} to fill the empty space correctly. * * @uiDefault Component.focusWidth int * @uiDefault Component.innerFocusWidth int or float + * @uiDefault Component.innerOutlineWidth int or float + * @uiDefault Component.borderWidth int or float + * * @uiDefault Component.focusColor Color * @uiDefault Component.borderColor Color * @uiDefault Component.disabledBorderColor Color @@ -60,20 +66,40 @@ import com.formdev.flatlaf.util.DerivedColor; */ public class FlatBorder extends BasicBorders.MarginBorder + implements StyleableBorder { - protected final int focusWidth = UIManager.getInt( "Component.focusWidth" ); - protected final float innerFocusWidth = FlatUIUtils.getUIFloat( "Component.innerFocusWidth", 0 ); - protected final float innerOutlineWidth = FlatUIUtils.getUIFloat( "Component.innerOutlineWidth", 0 ); - protected final Color focusColor = UIManager.getColor( "Component.focusColor" ); - protected final Color borderColor = UIManager.getColor( "Component.borderColor" ); - protected final Color disabledBorderColor = UIManager.getColor( "Component.disabledBorderColor" ); - protected final Color focusedBorderColor = UIManager.getColor( "Component.focusedBorderColor" ); + @Styleable protected int focusWidth = UIManager.getInt( "Component.focusWidth" ); + @Styleable protected float innerFocusWidth = FlatUIUtils.getUIFloat( "Component.innerFocusWidth", 0 ); + @Styleable protected float innerOutlineWidth = FlatUIUtils.getUIFloat( "Component.innerOutlineWidth", 0 ); + /** @since 2 */ @Styleable protected float borderWidth = FlatUIUtils.getUIFloat( "Component.borderWidth", 1 ); - protected final Color errorBorderColor = UIManager.getColor( "Component.error.borderColor" ); - protected final Color errorFocusedBorderColor = UIManager.getColor( "Component.error.focusedBorderColor" ); - protected final Color warningBorderColor = UIManager.getColor( "Component.warning.borderColor" ); - protected final Color warningFocusedBorderColor = UIManager.getColor( "Component.warning.focusedBorderColor" ); - protected final Color customBorderColor = UIManager.getColor( "Component.custom.borderColor" ); + @Styleable protected Color focusColor = UIManager.getColor( "Component.focusColor" ); + @Styleable protected Color borderColor = UIManager.getColor( "Component.borderColor" ); + @Styleable protected Color disabledBorderColor = UIManager.getColor( "Component.disabledBorderColor" ); + @Styleable protected Color focusedBorderColor = UIManager.getColor( "Component.focusedBorderColor" ); + + @Styleable(dot=true) protected Color errorBorderColor = UIManager.getColor( "Component.error.borderColor" ); + @Styleable(dot=true) protected Color errorFocusedBorderColor = UIManager.getColor( "Component.error.focusedBorderColor" ); + @Styleable(dot=true) protected Color warningBorderColor = UIManager.getColor( "Component.warning.borderColor" ); + @Styleable(dot=true) protected Color warningFocusedBorderColor = UIManager.getColor( "Component.warning.focusedBorderColor" ); + @Styleable(dot=true) protected Color customBorderColor = UIManager.getColor( "Component.custom.borderColor" ); + + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected String outline; + /** @since 2 */ @Styleable protected Color outlineColor; + /** @since 2 */ @Styleable protected Color outlineFocusedColor; + + /** @since 2 */ + @Override + public Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObject( this, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos() { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } @Override public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { @@ -82,9 +108,11 @@ public class FlatBorder FlatUIUtils.setRenderingHints( g2 ); float focusWidth = scale( (float) getFocusWidth( c ) ); - float borderWidth = scale( (float) getBorderWidth( c ) ); + float focusInnerWidth = 0; + float borderWidth = scale( getBorderWidth( c ) ); float arc = scale( (float) getArc( c ) ); Color outlineColor = getOutlineColor( c ); + Color focusColor = null; // paint outer border if( outlineColor != null || isFocused( c ) ) { @@ -93,15 +121,16 @@ public class FlatBorder : 0; if( focusWidth > 0 || innerWidth > 0 ) { - g2.setColor( (outlineColor != null) ? outlineColor : getFocusColor( c ) ); - FlatUIUtils.paintComponentOuterBorder( g2, x, y, width, height, - focusWidth, borderWidth + scale( innerWidth ), arc ); + focusColor = (outlineColor != null) ? outlineColor : getFocusColor( c ); + focusInnerWidth = borderWidth + scale( innerWidth ); } } // paint border - g2.setPaint( (outlineColor != null) ? outlineColor : getBorderColor( c ) ); - FlatUIUtils.paintComponentBorder( g2, x, y, width, height, focusWidth, borderWidth, arc ); + Paint borderColor = (outlineColor != null) ? outlineColor : getBorderColor( c ); + FlatUIUtils.paintOutlinedComponent( g2, x, y, width, height, + focusWidth, 1, focusInnerWidth, borderWidth, arc, + focusColor, borderColor, null ); } finally { g2.dispose(); } @@ -116,6 +145,17 @@ public class FlatBorder return null; Object outline = ((JComponent)c).getClientProperty( FlatClientProperties.OUTLINE ); + if( outline == null ) + outline = this.outline; + if( outline == null ) { + if( outlineColor != null && outlineFocusedColor != null ) + outline = new Color[] { outlineFocusedColor, outlineColor }; + else if( outlineColor != null ) + outline = outlineColor; + else if( outlineFocusedColor != null ) + outline = outlineFocusedColor; + } + if( outline instanceof String ) { switch( (String) outline ) { case FlatClientProperties.OUTLINE_ERROR: @@ -176,13 +216,14 @@ public class FlatBorder @Override public Insets getBorderInsets( Component c, Insets insets ) { float focusWidth = scale( (float) getFocusWidth( c ) ); - float ow = focusWidth + scale( (float) getLineWidth( c ) ); + int ow = Math.round( focusWidth + scale( (float) getLineWidth( c ) ) ); insets = super.getBorderInsets( c, insets ); - insets.top = Math.round( scale( (float) insets.top ) + ow ); - insets.left = Math.round( scale( (float) insets.left ) + ow ); - insets.bottom = Math.round( scale( (float) insets.bottom ) + ow ); - insets.right = Math.round( scale( (float) insets.right ) + ow ); + + insets.top = scale( insets.top ) + ow; + insets.left = scale( insets.left ) + ow; + insets.bottom = scale( insets.bottom ) + ow; + insets.right = scale( insets.right ) + ow; if( isCellEditor( c ) ) { // remove top and bottom insets if used as cell editor @@ -227,8 +268,8 @@ public class FlatBorder * Returns the (unscaled) line thickness used to paint the border. * This may be different to {@link #getLineWidth}. */ - protected int getBorderWidth( Component c ) { - return getLineWidth( c ); + protected float getBorderWidth( Component c ) { + return borderWidth; } /** diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonBorder.java index 7d3e06a3..d312e210 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonBorder.java @@ -20,56 +20,72 @@ import java.awt.Color; import java.awt.Component; import java.awt.GradientPaint; import java.awt.Graphics; +import java.awt.Graphics2D; import java.awt.Insets; import java.awt.Paint; import javax.swing.AbstractButton; import javax.swing.UIManager; import javax.swing.plaf.UIResource; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; import com.formdev.flatlaf.util.UIScale; /** * Border for {@link javax.swing.JButton}. * + * @uiDefault Button.arc int + * @uiDefault Button.innerFocusWidth int or float optional; defaults to Component.innerFocusWidth + * @uiDefault Button.borderWidth int or float optional; defaults to Component.borderWidth + * * @uiDefault Button.borderColor Color * @uiDefault Button.startBorderColor Color optional; if set, a gradient paint is used and Button.borderColor is ignored * @uiDefault Button.endBorderColor Color optional; if set, a gradient paint is used * @uiDefault Button.disabledBorderColor Color * @uiDefault Button.focusedBorderColor Color * @uiDefault Button.hoverBorderColor Color optional + * + * @uiDefault Button.default.borderWidth int or float * @uiDefault Button.default.borderColor Color * @uiDefault Button.default.startBorderColor Color optional; if set, a gradient paint is used and Button.default.borderColor is ignored * @uiDefault Button.default.endBorderColor Color optional; if set, a gradient paint is used - * @uiDefault Button.default.hoverBorderColor Color optional * @uiDefault Button.default.focusedBorderColor Color * @uiDefault Button.default.focusColor Color - * @uiDefault Button.borderWidth int - * @uiDefault Button.default.borderWidth int - * @uiDefault Button.innerFocusWidth int or float optional; defaults to Component.innerFocusWidth + * @uiDefault Button.default.hoverBorderColor Color optional + * + * @uiDefault Button.toolbar.focusWidth int or float optional; default is 1.5 + * @uiDefault Button.toolbar.focusColor Color optional; defaults to Component.focusColor * @uiDefault Button.toolbar.margin Insets * @uiDefault Button.toolbar.spacingInsets Insets - * @uiDefault Button.arc int * * @author Karl Tauber */ public class FlatButtonBorder extends FlatBorder { - protected final Color borderColor = FlatUIUtils.getUIColor( "Button.startBorderColor", "Button.borderColor" ); - protected final Color endBorderColor = UIManager.getColor( "Button.endBorderColor" ); - protected final Color disabledBorderColor = UIManager.getColor( "Button.disabledBorderColor" ); - protected final Color focusedBorderColor = UIManager.getColor( "Button.focusedBorderColor" ); - protected final Color hoverBorderColor = UIManager.getColor( "Button.hoverBorderColor" ); - protected final Color defaultBorderColor = FlatUIUtils.getUIColor( "Button.default.startBorderColor", "Button.default.borderColor" ); - protected final Color defaultEndBorderColor = UIManager.getColor( "Button.default.endBorderColor" ); - protected final Color defaultHoverBorderColor = UIManager.getColor( "Button.default.hoverBorderColor" ); - protected final Color defaultFocusedBorderColor = UIManager.getColor( "Button.default.focusedBorderColor" ); - protected final Color defaultFocusColor = UIManager.getColor( "Button.default.focusColor" ); - protected final int borderWidth = UIManager.getInt( "Button.borderWidth" ); - protected final int defaultBorderWidth = UIManager.getInt( "Button.default.borderWidth" ); - protected final float buttonInnerFocusWidth = FlatUIUtils.getUIFloat( "Button.innerFocusWidth", innerFocusWidth ); - protected final Insets toolbarMargin = UIManager.getInsets( "Button.toolbar.margin" ); - protected final Insets toolbarSpacingInsets = UIManager.getInsets( "Button.toolbar.spacingInsets" ); - protected final int arc = UIManager.getInt( "Button.arc" ); + @Styleable protected int arc = UIManager.getInt( "Button.arc" ); + + protected Color endBorderColor = UIManager.getColor( "Button.endBorderColor" ); + @Styleable protected Color hoverBorderColor = UIManager.getColor( "Button.hoverBorderColor" ); + + @Styleable(dot=true) protected float defaultBorderWidth = FlatUIUtils.getUIFloat( "Button.default.borderWidth", 1 ); + @Styleable(dot=true) protected Color defaultBorderColor = FlatUIUtils.getUIColor( "Button.default.startBorderColor", "Button.default.borderColor" ); + protected Color defaultEndBorderColor = UIManager.getColor( "Button.default.endBorderColor" ); + @Styleable(dot=true) protected Color defaultFocusedBorderColor = UIManager.getColor( "Button.default.focusedBorderColor" ); + @Styleable(dot=true) protected Color defaultFocusColor = UIManager.getColor( "Button.default.focusColor" ); + @Styleable(dot=true) protected Color defaultHoverBorderColor = UIManager.getColor( "Button.default.hoverBorderColor" ); + + /** @since 1.4 */ @Styleable(dot=true) protected float toolbarFocusWidth = FlatUIUtils.getUIFloat( "Button.toolbar.focusWidth", 1.5f ); + /** @since 1.4 */ @Styleable(dot=true) protected Color toolbarFocusColor = UIManager.getColor( "Button.toolbar.focusColor" ); + @Styleable(dot=true) protected Insets toolbarMargin = UIManager.getInsets( "Button.toolbar.margin" ); + @Styleable(dot=true) protected Insets toolbarSpacingInsets = UIManager.getInsets( "Button.toolbar.spacingInsets" ); + + public FlatButtonBorder() { + innerFocusWidth = FlatUIUtils.getUIFloat( "Button.innerFocusWidth", innerFocusWidth ); + borderWidth = FlatUIUtils.getUIFloat( "Button.borderWidth", borderWidth ); + + borderColor = FlatUIUtils.getUIColor( "Button.startBorderColor", "Button.borderColor" ); + disabledBorderColor = UIManager.getColor( "Button.disabledBorderColor" ); + focusedBorderColor = UIManager.getColor( "Button.focusedBorderColor" ); + } @Override public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { @@ -79,11 +95,40 @@ public class FlatButtonBorder !FlatButtonUI.isHelpButton( c ) && !FlatToggleButtonUI.isTabButton( c ) ) super.paintBorder( c, g, x, y, width, height ); + else if( FlatButtonUI.isToolBarButton( c ) && isFocused( c ) ) + paintToolBarFocus( c, g, x, y, width, height ); + } + + /** @since 1.4 */ + protected void paintToolBarFocus( Component c, Graphics g, int x, int y, int width, int height ) { + Graphics2D g2 = (Graphics2D) g.create(); + try { + FlatUIUtils.setRenderingHints( g2 ); + + float focusWidth = UIScale.scale( toolbarFocusWidth ); + float arc = UIScale.scale( (float) getArc( c ) ); + Color outlineColor = getOutlineColor( c ); + + Insets spacing = UIScale.scale( toolbarSpacingInsets ); + x += spacing.left; + y += spacing.top; + width -= spacing.left + spacing.right; + height -= spacing.top + spacing.bottom; + + Color color = (outlineColor != null) ? outlineColor : getFocusColor( c ); + // not using focus border painting of paintOutlinedComponent() here + // because its round edges look too "thick" + FlatUIUtils.paintOutlinedComponent( g2, x, y, width, height, 0, 0, 0, focusWidth, arc, null, color, null ); + } finally { + g2.dispose(); + } } @Override protected Color getFocusColor( Component c ) { - return FlatButtonUI.isDefaultButton( c ) ? defaultFocusColor : super.getFocusColor( c ); + return (toolbarFocusColor != null && FlatButtonUI.isToolBarButton( c )) + ? toolbarFocusColor + : (FlatButtonUI.isDefaultButton( c ) ? defaultFocusColor : super.getFocusColor( c )); } @Override @@ -114,7 +159,7 @@ public class FlatButtonBorder public Insets getBorderInsets( Component c, Insets insets ) { if( FlatButtonUI.isToolBarButton( c ) ) { // In toolbars, use button margin only if explicitly set. - // Otherwise use toolbar margin specified in UI defaults. + // Otherwise, use toolbar margin specified in UI defaults. Insets margin = (c instanceof AbstractButton) ? ((AbstractButton)c).getMargin() : null; @@ -138,12 +183,7 @@ public class FlatButtonBorder } @Override - protected float getInnerFocusWidth( Component c ) { - return buttonInnerFocusWidth; - } - - @Override - protected int getBorderWidth( Component c ) { + protected float getBorderWidth( Component c ) { return FlatButtonUI.isDefaultButton( c ) ? defaultBorderWidth : borderWidth; } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonUI.java index 45b6f402..6b9c71de 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonUI.java @@ -30,20 +30,33 @@ import java.awt.Insets; import java.awt.Rectangle; import java.awt.geom.RoundRectangle2D; import java.beans.PropertyChangeEvent; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicBoolean; import javax.swing.AbstractButton; import javax.swing.ButtonModel; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JComponent; +import javax.swing.JTextField; import javax.swing.JToggleButton; import javax.swing.JToolBar; import javax.swing.LookAndFeel; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; import javax.swing.UIManager; +import javax.swing.plaf.ButtonUI; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.UIResource; import javax.swing.plaf.basic.BasicButtonListener; import javax.swing.plaf.basic.BasicButtonUI; +import com.formdev.flatlaf.FlatClientProperties; import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.icons.FlatHelpButtonIcon; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.UnknownStyleException; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.UIScale; /** @@ -93,8 +106,9 @@ import com.formdev.flatlaf.util.UIScale; */ public class FlatButtonUI extends BasicButtonUI + implements StyleableUI { - protected int minimumWidth; + @Styleable protected int minimumWidth; protected int iconTextGap; protected Color background; @@ -102,38 +116,62 @@ public class FlatButtonUI protected Color startBackground; protected Color endBackground; - protected Color focusedBackground; - protected Color hoverBackground; - protected Color pressedBackground; - protected Color selectedBackground; - protected Color selectedForeground; - protected Color disabledBackground; - protected Color disabledText; - protected Color disabledSelectedBackground; + @Styleable protected Color focusedBackground; + @Styleable protected Color hoverBackground; + @Styleable protected Color pressedBackground; + @Styleable protected Color selectedBackground; + @Styleable protected Color selectedForeground; + @Styleable protected Color disabledBackground; + @Styleable protected Color disabledText; + @Styleable protected Color disabledSelectedBackground; - protected Color defaultBackground; + @Styleable(dot=true) protected Color defaultBackground; protected Color defaultEndBackground; - protected Color defaultForeground; - protected Color defaultFocusedBackground; - protected Color defaultHoverBackground; - protected Color defaultPressedBackground; - protected boolean defaultBoldText; + @Styleable(dot=true) protected Color defaultForeground; + @Styleable(dot=true) protected Color defaultFocusedBackground; + @Styleable(dot=true) protected Color defaultHoverBackground; + @Styleable(dot=true) protected Color defaultPressedBackground; + @Styleable(dot=true) protected boolean defaultBoldText; - protected int shadowWidth; - protected Color shadowColor; - protected Color defaultShadowColor; + @Styleable protected boolean paintShadow; + @Styleable protected int shadowWidth; + @Styleable protected Color shadowColor; + @Styleable(dot=true) protected Color defaultShadowColor; - protected Insets toolbarSpacingInsets; - protected Color toolbarHoverBackground; - protected Color toolbarPressedBackground; - protected Color toolbarSelectedBackground; + @Styleable(dot=true) protected Color toolbarHoverBackground; + @Styleable(dot=true) protected Color toolbarPressedBackground; + @Styleable(dot=true) protected Color toolbarSelectedBackground; + + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected String buttonType; + /** @since 2 */ @Styleable protected boolean squareSize; + /** @since 2 */ @Styleable protected int minimumHeight; private Icon helpButtonIcon; + private Insets defaultMargin; + private final boolean shared; + private boolean helpButtonIconShared = true; private boolean defaults_initialized = false; + private Map oldStyleValues; + private AtomicBoolean borderShared; public static ComponentUI createUI( JComponent c ) { - return FlatUIUtils.createSharedUI( FlatButtonUI.class, FlatButtonUI::new ); + return FlatUIUtils.canUseSharedUI( c ) + ? FlatUIUtils.createSharedUI( FlatButtonUI.class, () -> new FlatButtonUI( true ) ) + : new FlatButtonUI( false ); + } + + /** @since 2 */ + protected FlatButtonUI( boolean shared ) { + this.shared = shared; + } + + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle( (AbstractButton) c ); } @Override @@ -160,16 +198,6 @@ public class FlatButtonUI disabledText = UIManager.getColor( prefix + "disabledText" ); disabledSelectedBackground = UIManager.getColor( prefix + "disabledSelectedBackground" ); - if( UIManager.getBoolean( "Button.paintShadow" ) ) { - shadowWidth = FlatUIUtils.getUIInt( "Button.shadowWidth", 2 ); - shadowColor = UIManager.getColor( "Button.shadowColor" ); - defaultShadowColor = UIManager.getColor( "Button.default.shadowColor" ); - } else { - shadowWidth = 0; - shadowColor = null; - defaultShadowColor = null; - } - defaultBackground = FlatUIUtils.getUIColor( "Button.default.startBackground", "Button.default.background" ); defaultEndBackground = UIManager.getColor( "Button.default.endBackground" ); defaultForeground = UIManager.getColor( "Button.default.foreground" ); @@ -178,13 +206,19 @@ public class FlatButtonUI defaultPressedBackground = UIManager.getColor( "Button.default.pressedBackground" ); defaultBoldText = UIManager.getBoolean( "Button.default.boldText" ); - toolbarSpacingInsets = UIManager.getInsets( "Button.toolbar.spacingInsets" ); + paintShadow = UIManager.getBoolean( "Button.paintShadow" ); + shadowWidth = FlatUIUtils.getUIInt( "Button.shadowWidth", 2 ); + shadowColor = UIManager.getColor( "Button.shadowColor" ); + defaultShadowColor = UIManager.getColor( "Button.default.shadowColor" ); + toolbarHoverBackground = UIManager.getColor( prefix + "toolbar.hoverBackground" ); toolbarPressedBackground = UIManager.getColor( prefix + "toolbar.pressedBackground" ); toolbarSelectedBackground = UIManager.getColor( prefix + "toolbar.selectedBackground" ); helpButtonIcon = UIManager.getIcon( "HelpButton.icon" ); + defaultMargin = UIManager.getInsets( prefix + "margin" ); + helpButtonIconShared = true; defaults_initialized = true; } @@ -204,6 +238,9 @@ public class FlatButtonUI protected void uninstallDefaults( AbstractButton b ) { super.uninstallDefaults( b ); + oldStyleValues = null; + borderShared = null; + MigLayoutVisualPadding.uninstall( b ); defaults_initialized = false; } @@ -225,9 +262,74 @@ public class FlatButtonUI b.revalidate(); b.repaint(); break; + + case OUTLINE: + b.repaint(); + break; + + case STYLE: + case STYLE_CLASS: + if( shared && FlatStylingSupport.hasStyleProperty( b ) ) { + // unshare component UI if necessary + // updateUI() invokes installStyle() from installUI() + b.updateUI(); + } else + installStyle( b ); + b.revalidate(); + b.repaint(); + break; } } + /** @since 2 */ + protected void installStyle( AbstractButton b ) { + try { + applyStyle( b, FlatStylingSupport.getResolvedStyle( b, getStyleType() ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + String getStyleType() { + return "Button"; + } + + /** @since 2 */ + protected void applyStyle( AbstractButton b, Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, + (key, value) -> applyStyleProperty( b, key, value ) ); + } + + /** @since 2 */ + protected Object applyStyleProperty( AbstractButton b, String key, Object value ) { + if( key.startsWith( "help." ) ) { + if( !(helpButtonIcon instanceof FlatHelpButtonIcon) ) + return new UnknownStyleException( key ); + + if( helpButtonIconShared ) { + helpButtonIcon = FlatStylingSupport.cloneIcon( helpButtonIcon ); + helpButtonIconShared = false; + } + + key = key.substring( "help.".length() ); + return ((FlatHelpButtonIcon)helpButtonIcon).applyStyleProperty( key, value ); + } + + if( borderShared == null ) + borderShared = new AtomicBoolean( true ); + return FlatStylingSupport.applyToAnnotatedObjectOrBorder( this, key, value, b, borderShared ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + Map> infos = FlatStylingSupport.getAnnotatedStyleableInfos( this, c.getBorder() ); + if( helpButtonIcon instanceof FlatHelpButtonIcon ) + FlatStylingSupport.putAllPrefixKey( infos, "help.", ((FlatHelpButtonIcon)helpButtonIcon).getStyleableInfos() ); + return infos; + } + static boolean isContentAreaFilled( Component c ) { return !(c instanceof AbstractButton) || ((AbstractButton)c).isContentAreaFilled(); } @@ -242,7 +344,7 @@ public class FlatButtonUI /** * Returns true if the button has an icon but no text, - * or it it does not have an icon and the text is either "..." or one character. + * or it does not have an icon and the text is either "..." or one character. */ static boolean isIconOnlyOrSingleCharacterButton( Component c ) { if( !(c instanceof JButton) && !(c instanceof JToggleButton) ) @@ -265,11 +367,11 @@ public class FlatButtonUI if( !(c instanceof AbstractButton) ) return TYPE_OTHER; - Object value = ((AbstractButton)c).getClientProperty( BUTTON_TYPE ); - if( !(value instanceof String) ) + String value = getButtonTypeStr( (AbstractButton) c ); + if( value == null ) return TYPE_OTHER; - switch( (String) value ) { + switch( value ) { case BUTTON_TYPE_SQUARE: return TYPE_SQUARE; case BUTTON_TYPE_ROUND_RECT: return TYPE_ROUND_RECT; default: return TYPE_OTHER; @@ -277,16 +379,27 @@ public class FlatButtonUI } static boolean isHelpButton( Component c ) { - return c instanceof JButton && clientPropertyEquals( (JButton) c, BUTTON_TYPE, BUTTON_TYPE_HELP ); + return c instanceof JButton && BUTTON_TYPE_HELP.equals( getButtonTypeStr( (JButton) c ) ); } static boolean isToolBarButton( Component c ) { return c.getParent() instanceof JToolBar || - (c instanceof AbstractButton && clientPropertyEquals( (AbstractButton) c, BUTTON_TYPE, BUTTON_TYPE_TOOLBAR_BUTTON )); + (c instanceof AbstractButton && BUTTON_TYPE_TOOLBAR_BUTTON.equals( getButtonTypeStr( (AbstractButton) c ) )); } static boolean isBorderlessButton( Component c ) { - return c instanceof AbstractButton && clientPropertyEquals( (AbstractButton) c, BUTTON_TYPE, BUTTON_TYPE_BORDERLESS ); + return c instanceof AbstractButton && BUTTON_TYPE_BORDERLESS.equals( getButtonTypeStr( (AbstractButton) c ) ); + } + + static String getButtonTypeStr( AbstractButton c ) { + // get from client property + Object value = c.getClientProperty( BUTTON_TYPE ); + if( value instanceof String ) + return (String) value; + + // get from styling property + ButtonUI ui = c.getUI(); + return (ui instanceof FlatButtonUI) ? ((FlatButtonUI)ui).buttonType : null; } @Override @@ -315,28 +428,46 @@ public class FlatButtonUI try { FlatUIUtils.setRenderingHints( g2 ); + boolean def = isDefaultButton( c ); boolean isToolBarButton = isToolBarButton( c ); float focusWidth = isToolBarButton ? 0 : FlatUIUtils.getBorderFocusWidth( c ); float arc = FlatUIUtils.getBorderArc( c ); + float textFieldArc = 0; - boolean def = isDefaultButton( c ); + // if toolbar button is in leading/trailing component of a text field, + // increase toolbar button arc to match text field arc (if necessary) + if( isToolBarButton && + FlatClientProperties.clientProperty( c, STYLE_CLASS, "", String.class ).contains( "inTextField" ) ) + { + JTextField textField = (JTextField) SwingUtilities.getAncestorOfClass( JTextField.class, c ); + if( textField != null ) + textFieldArc = FlatUIUtils.getBorderArc( textField ); + } int x = 0; int y = 0; int width = c.getWidth(); int height = c.getHeight(); - if( isToolBarButton ) { - Insets spacing = UIScale.scale( toolbarSpacingInsets ); + if( isToolBarButton && c.getBorder() instanceof FlatButtonBorder ) { + Insets spacing = UIScale.scale( ((FlatButtonBorder)c.getBorder()).toolbarSpacingInsets ); x += spacing.left; y += spacing.top; width -= spacing.left + spacing.right; height -= spacing.top + spacing.bottom; + + // reduce text field arc + textFieldArc -= spacing.top + spacing.bottom; } + // increase toolbar button arc to match text field arc (if necessary) + if( arc < textFieldArc ) + arc = textFieldArc; + // paint shadow Color shadowColor = def ? defaultShadowColor : this.shadowColor; - if( shadowColor != null && shadowWidth > 0 && focusWidth > 0 && c.isEnabled() && + if( paintShadow && + shadowColor != null && shadowWidth > 0 && focusWidth > 0 && c.isEnabled() && !isToolBarButton && !isBorderlessButton( c ) && !(isFocusPainted( c ) && FlatUIUtils.isPermanentFocusOwner( c )) ) { @@ -364,6 +495,23 @@ public class FlatButtonUI super.paint( FlatLabelUI.createGraphicsHTMLTextYCorrection( g, c ), c ); } + @Override + protected void paintIcon( Graphics g, JComponent c, Rectangle iconRect ) { + // correct icon location when using bold font for default button + int xOffset = defaultBoldPlainWidthDiff( c ) / 2; + if( xOffset > 0 ) { + boolean ltr = c.getComponentOrientation().isLeftToRight(); + switch( ((AbstractButton)c).getHorizontalTextPosition() ) { + case SwingConstants.RIGHT: iconRect.x -= xOffset; break; + case SwingConstants.LEFT: iconRect.x += xOffset; break; + case SwingConstants.TRAILING: iconRect.x -= ltr ? xOffset : -xOffset; break; + case SwingConstants.LEADING: iconRect.x += ltr ? xOffset : -xOffset; break; + } + } + + super.paintIcon( g, c, iconRect ); + } + @Override protected void paintText( Graphics g, AbstractButton b, Rectangle textRect, String text ) { if( isHelpButton( b ) ) @@ -443,6 +591,9 @@ public class FlatButtonUI public static Color buttonStateColor( Component c, Color enabledColor, Color disabledColor, Color focusedColor, Color hoverColor, Color pressedColor ) { + if( c == null ) + return enabledColor; + if( !c.isEnabled() ) return disabledColor; @@ -491,24 +642,51 @@ public class FlatButtonUI if( prefSize == null ) return null; + // increase width when using bold font for default button + prefSize.width += defaultBoldPlainWidthDiff( c ); + // make square or apply minimum width/height boolean isIconOnlyOrSingleCharacter = isIconOnlyOrSingleCharacterButton( c ); - if( clientPropertyBoolean( c, SQUARE_SIZE, false ) ) { + if( clientPropertyBoolean( c, SQUARE_SIZE, squareSize ) ) { // make button square (increase width or height so that they are equal) prefSize.width = prefSize.height = Math.max( prefSize.width, prefSize.height ); } else if( isIconOnlyOrSingleCharacter && ((AbstractButton)c).getIcon() == null ) { // make single-character-no-icon button square (increase width) prefSize.width = Math.max( prefSize.width, prefSize.height ); - } else if( !isIconOnlyOrSingleCharacter && !isToolBarButton( c ) && c.getBorder() instanceof FlatButtonBorder ) { + } else if( !isIconOnlyOrSingleCharacter && !isToolBarButton( c ) && + c.getBorder() instanceof FlatButtonBorder && hasDefaultMargins( c ) ) + { // apply minimum width/height - float focusWidth = FlatUIUtils.getBorderFocusWidth( c ); - prefSize.width = Math.max( prefSize.width, scale( FlatUIUtils.minimumWidth( c, minimumWidth ) ) + Math.round( focusWidth * 2 ) ); - prefSize.height = Math.max( prefSize.height, scale( FlatUIUtils.minimumHeight( c, 0 ) ) + Math.round( focusWidth * 2 ) ); + int fw = Math.round( FlatUIUtils.getBorderFocusWidth( c ) * 2 ); + prefSize.width = Math.max( prefSize.width, scale( FlatUIUtils.minimumWidth( c, minimumWidth ) ) + fw ); + prefSize.height = Math.max( prefSize.height, scale( FlatUIUtils.minimumHeight( c, minimumHeight ) ) + fw ); } return prefSize; } + private int defaultBoldPlainWidthDiff( JComponent c ) { + if( defaultBoldText && isDefaultButton( c ) && c.getFont() instanceof UIResource ) { + String text = ((AbstractButton)c).getText(); + if( text == null || text.isEmpty() ) + return 0; + + Font font = c.getFont(); + Font boldFont = font.deriveFont( Font.BOLD ); + int boldWidth = c.getFontMetrics( boldFont ).stringWidth( text ); + int plainWidth = c.getFontMetrics( font ).stringWidth( text ); + if( boldWidth > plainWidth ) + return boldWidth - plainWidth; + } + + return 0; + } + + private boolean hasDefaultMargins( JComponent c ) { + Insets margin = ((AbstractButton)c).getMargin(); + return margin instanceof UIResource && Objects.equals( margin, defaultMargin ); + } + //---- class FlatButtonListener ------------------------------------------- protected class FlatButtonListener diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatCaret.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatCaret.java index ba52ff4f..95c0ccc1 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatCaret.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatCaret.java @@ -18,16 +18,27 @@ package com.formdev.flatlaf.ui; import static com.formdev.flatlaf.FlatClientProperties.*; import java.awt.EventQueue; +import java.awt.Rectangle; +import java.awt.event.ActionEvent; import java.awt.event.FocusEvent; import java.awt.event.MouseEvent; +import javax.swing.Action; +import javax.swing.ActionMap; import javax.swing.JFormattedTextField; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; import javax.swing.plaf.UIResource; +import javax.swing.text.BadLocationException; import javax.swing.text.DefaultCaret; +import javax.swing.text.DefaultEditorKit; import javax.swing.text.Document; import javax.swing.text.JTextComponent; +import javax.swing.text.Utilities; /** * Caret that can select all text on focus gained. + * Also fixes Swing's double-click-and-drag behavior so that dragging after + * a double-click extends selection by whole words. * * @author Karl Tauber */ @@ -35,12 +46,19 @@ public class FlatCaret extends DefaultCaret implements UIResource { + private static final String KEY_CARET_INFO = "FlatLaf.internal.caretInfo"; + private final String selectAllOnFocusPolicy; private final boolean selectAllOnMouseClick; + private boolean inInstall; private boolean wasFocused; private boolean wasTemporaryLost; private boolean isMousePressed; + private boolean isWordSelection; + private boolean isLineSelection; + private int dragSelectionStart; + private int dragSelectionEnd; public FlatCaret( String selectAllOnFocusPolicy, boolean selectAllOnMouseClick ) { this.selectAllOnFocusPolicy = selectAllOnFocusPolicy; @@ -49,21 +67,82 @@ public class FlatCaret @Override public void install( JTextComponent c ) { - super.install( c ); + // get caret info if switched theme + long[] ci = (long[]) c.getClientProperty( KEY_CARET_INFO ); + if( ci != null ) { + c.putClientProperty( KEY_CARET_INFO, null ); - // the dot and mark are lost when switching LaF - // --> move dot to end of text so that all text may be selected when it gains focus - Document doc = c.getDocument(); - if( doc != null && getDot() == 0 && getMark() == 0 ) { - int length = doc.getLength(); - if( length > 0 ) - setDot( length ); + // if caret info is too old assume that switched from FlatLaf + // to another Laf and back to FlatLaf + if( System.currentTimeMillis() - 500 > ci[3] ) + ci = null; + } + if( ci != null ) { + // when switching theme, it is necessary to set blink rate before + // invoking super.install() otherwise the caret does not blink + setBlinkRate( (int) ci[2] ); + } + + inInstall = true; + try { + super.install( c ); + } finally { + inInstall = false; + } + + if( ci != null ) { + // restore selection + select( (int) ci[1], (int) ci[0] ); + + // if text component is focused, then caret and selection are visible, + // but when switching theme, the component does not yet have + // a highlighter and the selection is not painted + // --> make selection temporary invisible later, then the caret + // adds selection highlights to the text component highlighter + if( isSelectionVisible() ) { + EventQueue.invokeLater( () -> { + if( getComponent() == null ) + return; // was deinstalled + + if( isSelectionVisible() ) { + setSelectionVisible( false ); + setSelectionVisible( true ); + } + } ); + } } } + @Override + public void deinstall( JTextComponent c ) { + // remember dot and mark (the selection) when switching theme + c.putClientProperty( KEY_CARET_INFO, new long[] { + getDot(), + getMark(), + getBlinkRate(), + System.currentTimeMillis(), + } ); + + super.deinstall( c ); + } + + @Override + protected void adjustVisibility( Rectangle nloc ) { + JTextComponent c = getComponent(); + if( c != null && c.getUI() instanceof FlatTextFieldUI ) { + // need to fix x location because JTextField.scrollRectToVisible() uses insets.left + // (as BasicTextUI.getVisibleEditorRect() does), + // but FlatTextFieldUI.getVisibleEditorRect() may add some padding + Rectangle r = ((FlatTextFieldUI)c.getUI()).getVisibleEditorRect(); + if( r != null ) + nloc.x -= r.x - c.getInsets().left; + } + super.adjustVisibility( nloc ); + } + @Override public void focusGained( FocusEvent e ) { - if( !wasTemporaryLost && (!isMousePressed || selectAllOnMouseClick) ) + if( !inInstall && !wasTemporaryLost && (!isMousePressed || selectAllOnMouseClick) ) selectAllOnFocusGained(); wasTemporaryLost = false; wasFocused = true; @@ -81,25 +160,83 @@ public class FlatCaret public void mousePressed( MouseEvent e ) { isMousePressed = true; super.mousePressed( e ); + + JTextComponent c = getComponent(); + + // left double-click starts word selection + isWordSelection = e.getClickCount() == 2 && SwingUtilities.isLeftMouseButton( e ) && !e.isConsumed(); + + // left triple-click starts line selection + isLineSelection = e.getClickCount() == 3 && SwingUtilities.isLeftMouseButton( e ) && (!e.isConsumed() || c.getDragEnabled()); + + // select line + // (this is also done in DefaultCaret.mouseClicked(), but this event is + // sent when the mouse is released, which is too late for triple-click-and-drag) + if( isLineSelection ) { + ActionMap actionMap = c.getActionMap(); + Action selectLineAction = (actionMap != null) + ? actionMap.get( DefaultEditorKit.selectLineAction ) + : null; + if( selectLineAction != null ) { + selectLineAction.actionPerformed( new ActionEvent( c, + ActionEvent.ACTION_PERFORMED, null, e.getWhen(), e.getModifiers() ) ); + } + } + + // remember selection where word/line selection starts to keep it always selected while dragging + if( isWordSelection || isLineSelection ) { + int mark = getMark(); + int dot = getDot(); + dragSelectionStart = Math.min( dot, mark ); + dragSelectionEnd = Math.max( dot, mark ); + } } @Override public void mouseReleased( MouseEvent e ) { isMousePressed = false; + isWordSelection = false; + isLineSelection = false; super.mouseReleased( e ); } + @Override + public void mouseDragged( MouseEvent e ) { + if( (isWordSelection || isLineSelection) && + !e.isConsumed() && SwingUtilities.isLeftMouseButton( e ) ) + { + // fix Swing's double/triple-click-and-drag behavior so that dragging after + // a double/triple-click extends selection by whole words/lines + JTextComponent c = getComponent(); + int pos = c.viewToModel( e.getPoint() ); + if( pos < 0 ) + return; + + try { + if( pos > dragSelectionEnd ) + select( dragSelectionStart, isWordSelection ? Utilities.getWordEnd( c, pos ) : Utilities.getRowEnd( c, pos ) ); + else if( pos < dragSelectionStart ) + select( dragSelectionEnd, isWordSelection ? Utilities.getWordStart( c, pos ) : Utilities.getRowStart( c, pos ) ); + else + select( dragSelectionStart, dragSelectionEnd ); + } catch( BadLocationException ex ) { + UIManager.getLookAndFeel().provideErrorFeedback( c ); + } + } else + super.mouseDragged( e ); + } + protected void selectAllOnFocusGained() { JTextComponent c = getComponent(); Document doc = c.getDocument(); - if( doc == null || !c.isEnabled() || !c.isEditable() ) + if( doc == null || !c.isEnabled() || !c.isEditable() || FlatUIUtils.isCellEditor( c ) ) return; Object selectAllOnFocusPolicy = c.getClientProperty( SELECT_ALL_ON_FOCUS_POLICY ); if( selectAllOnFocusPolicy == null ) selectAllOnFocusPolicy = this.selectAllOnFocusPolicy; - if( SELECT_ALL_ON_FOCUS_POLICY_NEVER.equals( selectAllOnFocusPolicy ) ) + if( selectAllOnFocusPolicy == null || SELECT_ALL_ON_FOCUS_POLICY_NEVER.equals( selectAllOnFocusPolicy ) ) return; if( !SELECT_ALL_ON_FOCUS_POLICY_ALWAYS.equals( selectAllOnFocusPolicy ) ) { @@ -119,12 +256,37 @@ public class FlatCaret // select all if( c instanceof JFormattedTextField ) { EventQueue.invokeLater( () -> { - setDot( 0 ); - moveDot( doc.getLength() ); + if( getComponent() == null ) + return; // was deinstalled + + select( 0, doc.getLength() ); } ); } else { - setDot( 0 ); - moveDot( doc.getLength() ); + select( 0, doc.getLength() ); + } + } + + private void select( int mark, int dot ) { + if( mark != getMark() ) + setDot( mark ); + if( dot != getDot() ) + moveDot( dot ); + } + + /** @since 1.4 */ + public void scrollCaretToVisible() { + JTextComponent c = getComponent(); + if( c == null || c.getUI() == null ) + return; + + try { + Rectangle loc = c.getUI().modelToView( c, getDot(), getDotBias() ); + if( loc != null ) { + adjustVisibility( loc ); + damage( loc ); + } + } catch( BadLocationException ex ) { + // ignore } } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatCheckBoxMenuItemUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatCheckBoxMenuItemUI.java index 5bcb2f88..e44147cb 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatCheckBoxMenuItemUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatCheckBoxMenuItemUI.java @@ -16,13 +16,19 @@ package com.formdev.flatlaf.ui; +import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; +import java.beans.PropertyChangeListener; +import java.util.Map; import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.LookAndFeel; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicCheckBoxMenuItemUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.UnknownStyleException; +import com.formdev.flatlaf.util.LoggingFacade; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JCheckBoxMenuItem}. @@ -54,13 +60,22 @@ import javax.swing.plaf.basic.BasicCheckBoxMenuItemUI; */ public class FlatCheckBoxMenuItemUI extends BasicCheckBoxMenuItemUI + implements StyleableUI { private FlatMenuItemRenderer renderer; + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { return new FlatCheckBoxMenuItemUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installDefaults() { super.installDefaults(); @@ -74,13 +89,61 @@ public class FlatCheckBoxMenuItemUI protected void uninstallDefaults() { super.uninstallDefaults(); + FlatMenuItemRenderer.clearClientProperties( menuItem.getParent() ); renderer = null; + oldStyleValues = null; } protected FlatMenuItemRenderer createRenderer() { return new FlatMenuItemRenderer( menuItem, checkIcon, arrowIcon, acceleratorFont, acceleratorDelimiter ); } + @Override + protected PropertyChangeListener createPropertyChangeListener( JComponent c ) { + return FlatStylingSupport.createPropertyChangeListener( c, this::installStyle, super.createPropertyChangeListener( c ) ); + } + + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( menuItem, "CheckBoxMenuItem" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + try { + return renderer.applyStyleProperty( key, value ); + } catch ( UnknownStyleException ex ) { + // ignore + } + + Object oldValue; + switch( key ) { + // BasicMenuItemUI + case "selectionBackground": oldValue = selectionBackground; selectionBackground = (Color) value; return oldValue; + case "selectionForeground": oldValue = selectionForeground; selectionForeground = (Color) value; return oldValue; + case "disabledForeground": oldValue = disabledForeground; disabledForeground = (Color) value; return oldValue; + case "acceleratorForeground": oldValue = acceleratorForeground; acceleratorForeground = (Color) value; return oldValue; + case "acceleratorSelectionForeground": oldValue = acceleratorSelectionForeground; acceleratorSelectionForeground = (Color) value; return oldValue; + } + + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, menuItem, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatMenuItemUI.getStyleableInfos( renderer ); + } + @Override protected Dimension getPreferredMenuItemSize( JComponent c, Icon checkIcon, Icon arrowIcon, int defaultTextIconGap ) { return renderer.getPreferredMenuItemSize(); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatCheckBoxUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatCheckBoxUI.java index e545fa66..354b30b1 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatCheckBoxUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatCheckBoxUI.java @@ -43,11 +43,24 @@ public class FlatCheckBoxUI extends FlatRadioButtonUI { public static ComponentUI createUI( JComponent c ) { - return FlatUIUtils.createSharedUI( FlatCheckBoxUI.class, FlatCheckBoxUI::new ); + return FlatUIUtils.canUseSharedUI( c ) + ? FlatUIUtils.createSharedUI( FlatCheckBoxUI.class, () -> new FlatCheckBoxUI( true ) ) + : new FlatCheckBoxUI( false ); + } + + /** @since 2 */ + protected FlatCheckBoxUI( boolean shared ) { + super( shared ); } @Override public String getPropertyPrefix() { return "CheckBox."; } + + /** @since 2 */ + @Override + String getStyleType() { + return "CheckBox"; + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatComboBoxUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatComboBoxUI.java index 1f585521..a05cd009 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatComboBoxUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatComboBoxUI.java @@ -16,12 +16,15 @@ package com.formdev.flatlaf.ui; +import static com.formdev.flatlaf.FlatClientProperties.*; import static com.formdev.flatlaf.util.UIScale.scale; +import static com.formdev.flatlaf.util.UIScale.unscale; import java.awt.Color; import java.awt.Component; import java.awt.ComponentOrientation; import java.awt.Container; import java.awt.Dimension; +import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.GraphicsConfiguration; @@ -39,11 +42,11 @@ import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.geom.Rectangle2D; import java.beans.PropertyChangeListener; -import java.lang.ref.WeakReference; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; import javax.swing.AbstractAction; import javax.swing.BorderFactory; import javax.swing.CellRendererPane; -import javax.swing.ComboBoxEditor; import javax.swing.DefaultListCellRenderer; import javax.swing.InputMap; import javax.swing.JButton; @@ -66,9 +69,10 @@ import javax.swing.plaf.basic.BasicComboBoxUI; import javax.swing.plaf.basic.BasicComboPopup; import javax.swing.plaf.basic.ComboPopup; import javax.swing.text.JTextComponent; -import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.SystemInfo; -import com.formdev.flatlaf.util.UIScale; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JComboBox}. @@ -90,59 +94,72 @@ import com.formdev.flatlaf.util.UIScale; * @uiDefault ComboBox.buttonStyle String auto (default), button or none * @uiDefault Component.arrowType String chevron (default) or triangle * @uiDefault Component.isIntelliJTheme boolean - * @uiDefault Component.borderColor Color - * @uiDefault Component.disabledBorderColor Color * @uiDefault ComboBox.editableBackground Color optional; defaults to ComboBox.background * @uiDefault ComboBox.focusedBackground Color optional * @uiDefault ComboBox.disabledBackground Color * @uiDefault ComboBox.disabledForeground Color - * @uiDefault ComboBox.buttonBackground Color - * @uiDefault ComboBox.buttonEditableBackground Color + * @uiDefault ComboBox.buttonBackground Color optional + * @uiDefault ComboBox.buttonEditableBackground Color optional * @uiDefault ComboBox.buttonFocusedBackground Color optional; defaults to ComboBox.focusedBackground + * @uiDefault ComboBox.buttonSeparatorWidth int or float optional; defaults to Component.borderWidth + * @uiDefault ComboBox.buttonSeparatorColor Color optional + * @uiDefault ComboBox.buttonDisabledSeparatorColor Color optional * @uiDefault ComboBox.buttonArrowColor Color * @uiDefault ComboBox.buttonDisabledArrowColor Color * @uiDefault ComboBox.buttonHoverArrowColor Color * @uiDefault ComboBox.buttonPressedArrowColor Color - * @uiDefault ComboBox.popupFocusedBackground Color optional + * @uiDefault ComboBox.popupBackground Color optional * * @author Karl Tauber */ public class FlatComboBoxUI extends BasicComboBoxUI + implements StyleableUI { - protected int minimumWidth; - protected int editorColumns; - protected String buttonStyle; - protected String arrowType; + @Styleable protected int minimumWidth; + @Styleable protected int editorColumns; + @Styleable protected String buttonStyle; + @Styleable protected String arrowType; protected boolean isIntelliJTheme; - protected Color borderColor; - protected Color disabledBorderColor; - protected Color editableBackground; - protected Color focusedBackground; - protected Color disabledBackground; - protected Color disabledForeground; + @Styleable protected Color editableBackground; + @Styleable protected Color focusedBackground; + @Styleable protected Color disabledBackground; + @Styleable protected Color disabledForeground; - protected Color buttonBackground; - protected Color buttonEditableBackground; - protected Color buttonFocusedBackground; - protected Color buttonArrowColor; - protected Color buttonDisabledArrowColor; - protected Color buttonHoverArrowColor; - protected Color buttonPressedArrowColor; + @Styleable protected Color buttonBackground; + @Styleable protected Color buttonEditableBackground; + @Styleable protected Color buttonFocusedBackground; + /** @since 2 */ @Styleable protected float buttonSeparatorWidth; + /** @since 2 */ @Styleable protected Color buttonSeparatorColor; + /** @since 2 */ @Styleable protected Color buttonDisabledSeparatorColor; + @Styleable protected Color buttonArrowColor; + @Styleable protected Color buttonDisabledArrowColor; + @Styleable protected Color buttonHoverArrowColor; + @Styleable protected Color buttonPressedArrowColor; - protected Color popupFocusedBackground; + @Styleable protected Color popupBackground; private MouseListener hoverListener; protected boolean hover; protected boolean pressed; - private WeakReference lastRendererComponent; + private CellPaddingBorder paddingBorder; + + private Map oldStyleValues; + private AtomicBoolean borderShared; public static ComponentUI createUI( JComponent c ) { return new FlatComboBoxUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installListeners() { super.installListeners(); @@ -199,8 +216,6 @@ public class FlatComboBoxUI buttonStyle = UIManager.getString( "ComboBox.buttonStyle" ); arrowType = UIManager.getString( "Component.arrowType" ); isIntelliJTheme = UIManager.getBoolean( "Component.isIntelliJTheme" ); - borderColor = UIManager.getColor( "Component.borderColor" ); - disabledBorderColor = UIManager.getColor( "Component.disabledBorderColor" ); editableBackground = UIManager.getColor( "ComboBox.editableBackground" ); focusedBackground = UIManager.getColor( "ComboBox.focusedBackground" ); @@ -210,20 +225,22 @@ public class FlatComboBoxUI buttonBackground = UIManager.getColor( "ComboBox.buttonBackground" ); buttonFocusedBackground = UIManager.getColor( "ComboBox.buttonFocusedBackground" ); buttonEditableBackground = UIManager.getColor( "ComboBox.buttonEditableBackground" ); + buttonSeparatorWidth = FlatUIUtils.getUIFloat( "ComboBox.buttonSeparatorWidth", FlatUIUtils.getUIFloat( "Component.borderWidth", 1 ) ); + buttonSeparatorColor = UIManager.getColor( "ComboBox.buttonSeparatorColor" ); + buttonDisabledSeparatorColor = UIManager.getColor( "ComboBox.buttonDisabledSeparatorColor" ); buttonArrowColor = UIManager.getColor( "ComboBox.buttonArrowColor" ); buttonDisabledArrowColor = UIManager.getColor( "ComboBox.buttonDisabledArrowColor" ); buttonHoverArrowColor = UIManager.getColor( "ComboBox.buttonHoverArrowColor" ); buttonPressedArrowColor = UIManager.getColor( "ComboBox.buttonPressedArrowColor" ); - popupFocusedBackground = UIManager.getColor( "ComboBox.popupFocusedBackground" ); + popupBackground = UIManager.getColor( "ComboBox.popupBackground" ); // set maximumRowCount int maximumRowCount = UIManager.getInt( "ComboBox.maximumRowCount" ); if( maximumRowCount > 0 && maximumRowCount != 8 && comboBox.getMaximumRowCount() == 8 ) comboBox.setMaximumRowCount( maximumRowCount ); - // scale - padding = UIScale.scale( padding ); + paddingBorder = new CellPaddingBorder( padding ); MigLayoutVisualPadding.install( comboBox ); } @@ -232,9 +249,6 @@ public class FlatComboBoxUI protected void uninstallDefaults() { super.uninstallDefaults(); - borderColor = null; - disabledBorderColor = null; - editableBackground = null; focusedBackground = null; disabledBackground = null; @@ -243,12 +257,19 @@ public class FlatComboBoxUI buttonBackground = null; buttonEditableBackground = null; buttonFocusedBackground = null; + buttonSeparatorColor = null; + buttonDisabledSeparatorColor = null; buttonArrowColor = null; buttonDisabledArrowColor = null; buttonHoverArrowColor = null; buttonPressedArrowColor = null; - popupFocusedBackground = null; + popupBackground = null; + + paddingBorder.uninstall(); + + oldStyleValues = null; + borderShared = null; MigLayoutVisualPadding.uninstall( comboBox ); } @@ -260,9 +281,16 @@ public class FlatComboBoxUI public void layoutContainer( Container parent ) { super.layoutContainer( parent ); - if( arrowButton != null ) { + // on macOS, a Swing combo box is used for AWT component java.awt.Choice + // and the font may be (temporary) null + + if( arrowButton != null && comboBox.getFont() != null ) { + // limit button width to height of a raw combobox (without insets) + FontMetrics fm = comboBox.getFontMetrics( comboBox.getFont() ); + int maxButtonWidth = fm.getHeight() + scale( padding.top ) + scale( padding.bottom ); + Insets insets = getInsets(); - int buttonWidth = parent.getPreferredSize().height - insets.top - insets.bottom; + int buttonWidth = Math.min( parent.getPreferredSize().height - insets.top - insets.bottom, maxButtonWidth ); if( buttonWidth != arrowButton.getWidth() ) { // set width of arrow button to preferred height of combobox int xOffset = comboBox.getComponentOrientation().isLeftToRight() @@ -276,11 +304,6 @@ public class FlatComboBoxUI editor.setBounds( rectangleForCurrentValue() ); } } - - if( editor != null && padding != null ) { - // fix editor bounds by subtracting padding - editor.setBounds( FlatUIUtils.subtractInsets( editor.getBounds(), padding ) ); - } } }; } @@ -323,12 +346,30 @@ public class FlatComboBoxUI } else if( editor != null && source == comboBox && propertyName == "componentOrientation" ) { ComponentOrientation o = (ComponentOrientation) e.getNewValue(); editor.applyComponentOrientation( o ); - } else if( editor != null && FlatClientProperties.PLACEHOLDER_TEXT.equals( propertyName ) ) - editor.repaint(); - else if( FlatClientProperties.COMPONENT_ROUND_RECT.equals( propertyName ) ) - comboBox.repaint(); - else if( FlatClientProperties.MINIMUM_WIDTH.equals( propertyName ) ) - comboBox.revalidate(); + } else { + switch( propertyName ) { + case PLACEHOLDER_TEXT: + if( editor != null ) + editor.repaint(); + break; + + case COMPONENT_ROUND_RECT: + case OUTLINE: + comboBox.repaint(); + break; + + case MINIMUM_WIDTH: + comboBox.revalidate(); + break; + + case STYLE: + case STYLE_CLASS: + installStyle(); + comboBox.revalidate(); + comboBox.repaint(); + break; + } + } }; } @@ -338,39 +379,32 @@ public class FlatComboBoxUI } @Override - protected ComboBoxEditor createEditor() { - ComboBoxEditor comboBoxEditor = super.createEditor(); + protected void configureEditor() { + super.configureEditor(); - Component editor = comboBoxEditor.getEditorComponent(); if( editor instanceof JTextField ) { JTextField textField = (JTextField) editor; textField.setColumns( editorColumns ); - // assign a non-null and non-javax.swing.plaf.UIResource border to the text field, - // otherwise it is replaced with default text field border when switching LaF - // because javax.swing.plaf.basic.BasicComboBoxEditor.BorderlessTextField.setBorder() - // uses "border instanceof javax.swing.plaf.basic.BasicComboBoxEditor.UIResource" - // instead of "border instanceof javax.swing.plaf.UIResource" - textField.setBorder( BorderFactory.createEmptyBorder() ); + // remove default text field border from editor + Border border = textField.getBorder(); + if( border == null || border instanceof UIResource ) { + // assign a non-null and non-javax.swing.plaf.UIResource border to the text field, + // otherwise it is replaced with default text field border when switching LaF + // because javax.swing.plaf.basic.BasicComboBoxEditor.BorderlessTextField.setBorder() + // uses "border instanceof javax.swing.plaf.basic.BasicComboBoxEditor.UIResource" + // instead of "border instanceof javax.swing.plaf.UIResource" + textField.setBorder( BorderFactory.createEmptyBorder() ); + } } - return comboBoxEditor; - } - - @Override - protected void configureEditor() { - super.configureEditor(); - - // remove default text field border from editor - if( editor instanceof JTextField && ((JTextField)editor).getBorder() instanceof FlatTextBorder ) - ((JTextField)editor).setBorder( BorderFactory.createEmptyBorder() ); - // explicitly make non-opaque if( editor instanceof JComponent ) ((JComponent)editor).setOpaque( false ); editor.applyComponentOrientation( comboBox.getComponentOrientation() ); + updateEditorPadding(); updateEditorColors(); // macOS @@ -387,6 +421,25 @@ public class FlatComboBoxUI } } + private void updateEditorPadding() { + if( !(editor instanceof JTextField) ) + return; + + JTextField textField = (JTextField) editor; + Insets insets = textField.getInsets(); + Insets pad = padding; + if( insets.top != 0 || insets.left != 0 || insets.bottom != 0 || insets.right != 0 ) { + // if text field has custom border, subtract text field insets from padding + pad = new Insets( + unscale( Math.max( scale( padding.top ) - insets.top, 0 ) ), + unscale( Math.max( scale( padding.left ) - insets.left, 0 ) ), + unscale( Math.max( scale( padding.bottom ) - insets.bottom, 0 ) ), + unscale( Math.max( scale( padding.right ) - insets.right, 0 ) ) + ); + } + textField.putClientProperty( TEXT_FIELD_PADDING, pad ); + } + private void updateEditorColors() { // use non-UIResource colors because when SwingUtilities.updateComponentTreeUI() // is used, then the editor is updated after the combobox and the @@ -403,6 +456,58 @@ public class FlatComboBoxUI return new FlatComboBoxButton(); } + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( comboBox, "ComboBox" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + Insets oldPadding = padding; + int oldEditorColumns = editorColumns; + + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + + if( !padding.equals( oldPadding ) ) { + paddingBorder.padding = padding; + updateEditorPadding(); + } + if( arrowButton instanceof FlatComboBoxButton ) + ((FlatComboBoxButton)arrowButton).updateStyle(); + if( popup instanceof FlatComboPopup ) + ((FlatComboPopup)popup).updateStyle(); + if( editorColumns != oldEditorColumns && editor instanceof JTextField ) + ((JTextField)editor).setColumns( editorColumns ); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + // BasicComboBoxUI + if( key.equals( "padding" ) ) { + Object oldValue = padding; + padding = (Insets) value; + return oldValue; + } + + if( borderShared == null ) + borderShared = new AtomicBoolean( true ); + return FlatStylingSupport.applyToAnnotatedObjectOrBorder( this, key, value, comboBox, borderShared ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + Map> infos = new FlatStylingSupport.StyleableInfosMap<>(); + infos.put( "padding", Insets.class ); + FlatStylingSupport.collectAnnotatedStyleableInfos( this, infos ); + FlatStylingSupport.collectStyleableInfos( comboBox.getBorder(), infos ); + return infos; + } + @Override public void update( Graphics g, JComponent c ) { float focusWidth = FlatUIUtils.getBorderFocusWidth( c ); @@ -439,26 +544,32 @@ public class FlatComboBoxUI // paint arrow button background if( enabled && !isCellRenderer ) { - g2.setColor( paintButton + Color buttonColor = paintButton ? buttonEditableBackground : (buttonFocusedBackground != null || focusedBackground != null) && isPermanentFocusOwner( comboBox ) ? (buttonFocusedBackground != null ? buttonFocusedBackground : focusedBackground) - : buttonBackground ); - Shape oldClip = g2.getClip(); - if( isLeftToRight ) - g2.clipRect( arrowX, 0, width - arrowX, height ); - else - g2.clipRect( 0, 0, arrowX + arrowWidth, height ); - FlatUIUtils.paintComponentBackground( g2, 0, 0, width, height, focusWidth, arc ); - g2.setClip( oldClip ); + : buttonBackground; + if( buttonColor != null ) { + g2.setColor( buttonColor ); + Shape oldClip = g2.getClip(); + if( isLeftToRight ) + g2.clipRect( arrowX, 0, width - arrowX, height ); + else + g2.clipRect( 0, 0, arrowX + arrowWidth, height ); + FlatUIUtils.paintComponentBackground( g2, 0, 0, width, height, focusWidth, arc ); + g2.setClip( oldClip ); + } } // paint vertical line between value and arrow button if( paintButton ) { - g2.setColor( enabled ? borderColor : disabledBorderColor ); - float lw = scale( 1f ); - float lx = isLeftToRight ? arrowX : arrowX + arrowWidth - lw; - g2.fill( new Rectangle2D.Float( lx, focusWidth, lw, height - 1 - (focusWidth * 2)) ); + Color separatorColor = enabled ? buttonSeparatorColor : buttonDisabledSeparatorColor; + if( separatorColor != null && buttonSeparatorWidth > 0 ) { + g2.setColor( separatorColor ); + float lw = scale( buttonSeparatorWidth ); + float lx = isLeftToRight ? arrowX : arrowX + arrowWidth - lw; + g2.fill( new Rectangle2D.Float( lx, focusWidth, lw, height - 1 - (focusWidth * 2)) ); + } } } @@ -471,30 +582,33 @@ public class FlatComboBoxUI @Override @SuppressWarnings( "unchecked" ) public void paintCurrentValue( Graphics g, Rectangle bounds, boolean hasFocus ) { + paddingBorder.uninstall(); + ListCellRenderer renderer = comboBox.getRenderer(); - uninstallCellPaddingBorder( renderer ); if( renderer == null ) renderer = new DefaultListCellRenderer(); Component c = renderer.getListCellRendererComponent( listBox, comboBox.getSelectedItem(), -1, false, false ); c.setFont( comboBox.getFont() ); c.applyComponentOrientation( comboBox.getComponentOrientation() ); - uninstallCellPaddingBorder( c ); boolean enabled = comboBox.isEnabled(); c.setBackground( getBackground( enabled ) ); c.setForeground( getForeground( enabled ) ); + // make renderer component temporary non-opaque to avoid that renderer paints + // background outside of border if combobox uses larger arc for edges + // (e.g. FlatClientProperties.COMPONENT_ROUND_RECT is true) + if( c instanceof JComponent ) + ((JComponent)c).setOpaque( false ); + boolean shouldValidate = (c instanceof JPanel); - if( padding != null ) - bounds = FlatUIUtils.subtractInsets( bounds, padding ); - - // increase the size of the rendering area to make sure that the text - // is vertically aligned with other component types (e.g. JTextField) - Insets rendererInsets = getRendererComponentInsets( c ); - if( rendererInsets != null ) - bounds = FlatUIUtils.addInsets( bounds, rendererInsets ); + paddingBorder.install( c ); currentValuePane.paintComponent( g, c, comboBox, bounds.x, bounds.y, bounds.width, bounds.height, shouldValidate ); + paddingBorder.uninstall(); + + if( c instanceof JComponent ) + ((JComponent)c).setOpaque( true ); } @Override @@ -526,77 +640,49 @@ public class FlatComboBoxUI @Override public Dimension getMinimumSize( JComponent c ) { Dimension minimumSize = super.getMinimumSize( c ); - minimumSize.width = Math.max( minimumSize.width, scale( FlatUIUtils.minimumWidth( c, minimumWidth ) ) ); + int fw = Math.round( FlatUIUtils.getBorderFocusWidth( c ) * 2 ); + minimumSize.width = Math.max( minimumSize.width, scale( FlatUIUtils.minimumWidth( c, minimumWidth ) ) + fw ); return minimumSize; } @Override protected Dimension getDefaultSize() { - @SuppressWarnings( "unchecked" ) - ListCellRenderer renderer = comboBox.getRenderer(); - uninstallCellPaddingBorder( renderer ); - + paddingBorder.uninstall(); Dimension size = super.getDefaultSize(); - - uninstallCellPaddingBorder( renderer ); + paddingBorder.uninstall(); return size; } @Override protected Dimension getDisplaySize() { - @SuppressWarnings( "unchecked" ) - ListCellRenderer renderer = comboBox.getRenderer(); - uninstallCellPaddingBorder( renderer ); - + paddingBorder.uninstall(); Dimension displaySize = super.getDisplaySize(); + paddingBorder.uninstall(); + + // remove padding added in super.getDisplaySize() + int displayWidth = displaySize.width - padding.left - padding.right; + int displayHeight = displaySize.height - padding.top - padding.bottom; // recalculate width without hardcoded 100 under special conditions - if( displaySize.width == 100 + padding.left + padding.right && + if( displayWidth == 100 && comboBox.isEditable() && comboBox.getItemCount() == 0 && comboBox.getPrototypeDisplayValue() == null ) { - int width = getDefaultSize().width; - width = Math.max( width, editor.getPreferredSize().width ); - width += padding.left + padding.right; - displaySize = new Dimension( width, displaySize.height ); + displayWidth = Math.max( getDefaultSize().width, editor.getPreferredSize().width ); } - uninstallCellPaddingBorder( renderer ); - return displaySize; + return new Dimension( displayWidth, displayHeight ); } @Override protected Dimension getSizeForComponent( Component comp ) { + paddingBorder.install( comp ); Dimension size = super.getSizeForComponent( comp ); - - // remove the renderer border top/bottom insets from the size to make sure that - // the combobox gets the same height as other component types (e.g. JTextField) - Insets rendererInsets = getRendererComponentInsets( comp ); - if( rendererInsets != null ) - size = new Dimension( size.width, size.height - rendererInsets.top - rendererInsets.bottom ); - + paddingBorder.uninstall(); return size; } - private Insets getRendererComponentInsets( Component rendererComponent ) { - if( rendererComponent instanceof JComponent ) { - Border rendererBorder = ((JComponent)rendererComponent).getBorder(); - if( rendererBorder != null ) - return rendererBorder.getBorderInsets( rendererComponent ); - } - - return null; - } - - private void uninstallCellPaddingBorder( Object o ) { - CellPaddingBorder.uninstall( o ); - if( lastRendererComponent != null ) { - CellPaddingBorder.uninstall( lastRendererComponent ); - lastRendererComponent = null; - } - } - private boolean isCellRenderer() { return comboBox.getParent() instanceof CellRendererPane; } @@ -607,10 +693,14 @@ public class FlatComboBoxUI return parentParent != null && !comboBox.getBackground().equals( parentParent.getBackground() ); } + /** @since 1.3 */ public static boolean isPermanentFocusOwner( JComboBox comboBox ) { if( comboBox.isEditable() ) { + if( FlatUIUtils.isPermanentFocusOwner( comboBox ) ) + return true; + Component editorComponent = comboBox.getEditor().getEditorComponent(); - return (editorComponent != null) ? FlatUIUtils.isPermanentFocusOwner( editorComponent ) : false; + return editorComponent != null && FlatUIUtils.isPermanentFocusOwner( editorComponent ); } else return FlatUIUtils.isPermanentFocusOwner( comboBox ); } @@ -632,6 +722,11 @@ public class FlatComboBoxUI hoverForeground, hoverBackground, pressedForeground, pressedBackground ); } + protected void updateStyle() { + updateStyle( arrowType, buttonArrowColor, buttonDisabledArrowColor, + buttonHoverArrowColor, null, buttonPressedArrowColor, null ); + } + @Override protected boolean isHover() { return super.isHover() || (!comboBox.isEditable() ? hover : false); @@ -657,13 +752,11 @@ public class FlatComboBoxUI protected class FlatComboPopup extends BasicComboPopup { - private CellPaddingBorder paddingBorder; - protected FlatComboPopup( JComboBox combo ) { super( combo ); // BasicComboPopup listens to JComboBox.componentOrientation and updates - // the component orientation of the list, scroller and popup, but when + // the component orientation of the list, scroll pane and popup, but when // switching the LaF and a new combo popup is created, the component // orientation is not applied. ComponentOrientation o = comboBox.getComponentOrientation(); @@ -717,9 +810,15 @@ public class FlatComboBoxUI protected void configurePopup() { super.configurePopup(); + // make opaque to avoid that background shines thru border (e.g. at 150% scaling) + setOpaque( true ); + + // set popup border + // use non-UIResource to avoid that it is overwritten when making + // popup visible (see JPopupMenu.setInvoker()) in theme editor preview Border border = UIManager.getBorder( "PopupMenu.border" ); if( border != null ) - setBorder( border ); + setBorder( FlatUIUtils.nonUIResource( border ) ); } @Override @@ -727,8 +826,17 @@ public class FlatComboBoxUI super.configureList(); list.setCellRenderer( new PopupListCellRenderer() ); - if( popupFocusedBackground != null ) - list.setBackground( popupFocusedBackground ); + updateStyle(); + } + + void updateStyle() { + if( popupBackground != null ) + list.setBackground( popupBackground ); + + // set popup background because it may shine thru when scaled (e.g. at 150%) + // use non-UIResource to avoid that it is overwritten when making + // popup visible (see JPopupMenu.setInvoker()) in theme editor preview + setBackground( FlatUIUtils.nonUIResource( list.getBackground() ) ); } @Override @@ -742,6 +850,34 @@ public class FlatComboBoxUI }; } + @Override + protected int getPopupHeightForRowCount( int maxRowCount ) { + int height = super.getPopupHeightForRowCount( maxRowCount ); + paddingBorder.uninstall(); + return height; + } + + @Override + public void show( Component invoker, int x, int y ) { + // Java 8: fix y coordinate if popup is shown above the combobox + // (already fixed in Java 9+ https://bugs.openjdk.java.net/browse/JDK-7072653) + if( y < 0 && !SystemInfo.isJava_9_orLater ) { + Border popupBorder = getBorder(); + if( popupBorder != null ) { + Insets insets = popupBorder.getBorderInsets( this ); + y -= insets.top + insets.bottom; + } + } + + super.show( invoker, x, y ); + } + + @Override + protected void paintChildren( Graphics g ) { + super.paintChildren( g ); + paddingBorder.uninstall(); + } + //---- class PopupListCellRenderer ----- private class PopupListCellRenderer @@ -751,22 +887,15 @@ public class FlatComboBoxUI public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus ) { - ListCellRenderer renderer = comboBox.getRenderer(); - CellPaddingBorder.uninstall( renderer ); - CellPaddingBorder.uninstall( lastRendererComponent ); + paddingBorder.uninstall(); + ListCellRenderer renderer = comboBox.getRenderer(); if( renderer == null ) renderer = new DefaultListCellRenderer(); Component c = renderer.getListCellRendererComponent( list, value, index, isSelected, cellHasFocus ); c.applyComponentOrientation( comboBox.getComponentOrientation() ); - if( c instanceof JComponent ) { - if( paddingBorder == null ) - paddingBorder = new CellPaddingBorder( padding ); - paddingBorder.install( (JComponent) c ); - } - - lastRendererComponent = (c != renderer) ? new WeakReference<>( c ) : null; + paddingBorder.install( c ); return c; } @@ -776,50 +905,72 @@ public class FlatComboBoxUI //---- class CellPaddingBorder -------------------------------------------- /** - * Cell padding border used only in popup list. - * + * Cell padding border used in popup list and for current value if not editable. + *

* The insets are the union of the cell padding and the renderer border insets, * which vertically aligns text in popup list with text in combobox. - * - * The renderer border is painted on the outside of this border. + *

+ * The renderer border is painted on the outer side of this border. */ private static class CellPaddingBorder extends AbstractBorder { - private final Insets padding; + private Insets padding; + private JComponent rendererComponent; private Border rendererBorder; CellPaddingBorder( Insets padding ) { this.padding = padding; } - void install( JComponent rendererComponent ) { - Border oldBorder = rendererComponent.getBorder(); - if( !(oldBorder instanceof CellPaddingBorder) ) { - rendererBorder = oldBorder; - rendererComponent.setBorder( this ); - } - } - - static void uninstall( Object o ) { - if( o instanceof WeakReference ) - o = ((WeakReference)o).get(); - - if( !(o instanceof JComponent) ) + // using synchronized to avoid problems with code that modifies combo box + // (model, selection, etc) not on AWT thread (which should be not done) + synchronized void install( Component c ) { + if( !(c instanceof JComponent) ) return; - JComponent rendererComponent = (JComponent) o; - Border border = rendererComponent.getBorder(); - if( border instanceof CellPaddingBorder ) { - CellPaddingBorder paddingBorder = (CellPaddingBorder) border; - rendererComponent.setBorder( paddingBorder.rendererBorder ); - paddingBorder.rendererBorder = null; - } + JComponent jc = (JComponent) c; + Border oldBorder = jc.getBorder(); + if( oldBorder == this ) + return; // already installed + + // component already has a padding border --> uninstall it + // (may happen if single renderer instance is used in multiple comboboxes) + if( oldBorder instanceof CellPaddingBorder ) + ((CellPaddingBorder)oldBorder).uninstall(); + + // this border can be installed only at one component + // (may happen if a renderer returns varying components) + uninstall(); + + // remember component where this border was installed for uninstall + rendererComponent = jc; + + // remember old border and replace it + rendererBorder = jc.getBorder(); + jc.setBorder( this ); + } + + /** + * Uninstall border from previously installed component. + * Because this border is installed in PopupListCellRenderer.getListCellRendererComponent(), + * there is no single place to uninstall it. + * This is the reason why this method is called from various places. + */ + synchronized void uninstall() { + if( rendererComponent == null ) + return; + + if( rendererComponent.getBorder() == this ) + rendererComponent.setBorder( rendererBorder ); + rendererComponent = null; + rendererBorder = null; } @Override - public Insets getBorderInsets( Component c, Insets insets ) { - if( rendererBorder != null ) { + synchronized public Insets getBorderInsets( Component c, Insets insets ) { + Insets padding = scale( this.padding ); + if( rendererBorder != null && !(rendererBorder instanceof CellPaddingBorder) ) { Insets insideInsets = rendererBorder.getBorderInsets( c ); insets.top = Math.max( padding.top, insideInsets.top ); insets.left = Math.max( padding.left, insideInsets.left ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatDropShadowBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatDropShadowBorder.java index 505b9276..6970d7ea 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatDropShadowBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatDropShadowBorder.java @@ -24,6 +24,9 @@ import java.awt.Image; import java.awt.Insets; import java.awt.RadialGradientPaint; import java.awt.image.BufferedImage; +import java.util.Map; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableBorder; import com.formdev.flatlaf.util.HiDPIUtils; import com.formdev.flatlaf.util.UIScale; @@ -40,14 +43,17 @@ import com.formdev.flatlaf.util.UIScale; */ public class FlatDropShadowBorder extends FlatEmptyBorder + implements StyleableBorder { - private final Color shadowColor; - private final Insets shadowInsets; - private final float shadowOpacity; + @Styleable protected Color shadowColor; + @Styleable protected Insets shadowInsets; + @Styleable protected float shadowOpacity; - private final int shadowSize; + private int shadowSize; private Image shadowImage; private Color lastShadowColor; + private float lastShadowOpacity; + private int lastShadowSize; private double lastSystemScaleFactor; private float lastUserScaleFactor; @@ -64,17 +70,43 @@ public class FlatDropShadowBorder } public FlatDropShadowBorder( Color shadowColor, Insets shadowInsets, float shadowOpacity ) { - super( Math.max( shadowInsets.top, 0 ), Math.max( shadowInsets.left, 0 ), - Math.max( shadowInsets.bottom, 0 ), Math.max( shadowInsets.right, 0 ) ); + super( nonNegativeInsets( shadowInsets ) ); + this.shadowColor = shadowColor; this.shadowInsets = shadowInsets; this.shadowOpacity = shadowOpacity; - shadowSize = Math.max( + shadowSize = maxInset( shadowInsets ); + } + + private static Insets nonNegativeInsets( Insets shadowInsets ) { + return new Insets( Math.max( shadowInsets.top, 0 ), Math.max( shadowInsets.left, 0 ), + Math.max( shadowInsets.bottom, 0 ), Math.max( shadowInsets.right, 0 ) ); + } + + private int maxInset( Insets shadowInsets ) { + return Math.max( Math.max( shadowInsets.left, shadowInsets.right ), Math.max( shadowInsets.top, shadowInsets.bottom ) ); } + /** @since 2 */ + @Override + public Object applyStyleProperty( String key, Object value ) { + Object oldValue = FlatStylingSupport.applyToAnnotatedObject( this, key, value ); + if( key.equals( "shadowInsets" ) ) { + applyStyleProperty( nonNegativeInsets( shadowInsets ) ); + shadowSize = maxInset( shadowInsets ); + } + return oldValue; + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos() { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + @Override public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { if( shadowSize <= 0 ) @@ -91,12 +123,16 @@ public class FlatDropShadowBorder float userScaleFactor = UIScale.getUserScaleFactor(); if( shadowImage == null || !shadowColor.equals( lastShadowColor ) || + lastShadowOpacity != shadowOpacity || + lastShadowSize != shadowSize || lastSystemScaleFactor != scaleFactor || lastUserScaleFactor != userScaleFactor ) { shadowImage = createShadowImage( shadowColor, shadowSize, shadowOpacity, (float) (scaleFactor * userScaleFactor) ); lastShadowColor = shadowColor; + lastShadowOpacity = shadowOpacity; + lastShadowSize = shadowSize; lastSystemScaleFactor = scaleFactor; lastUserScaleFactor = userScaleFactor; } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatEditorPaneUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatEditorPaneUI.java index 0179e60d..66defaa2 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatEditorPaneUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatEditorPaneUI.java @@ -21,16 +21,22 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; +import java.awt.Insets; import java.awt.event.FocusListener; import java.beans.PropertyChangeEvent; +import java.util.Map; import javax.swing.JComponent; import javax.swing.JEditorPane; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicEditorPaneUI; +import javax.swing.text.Caret; import javax.swing.text.JTextComponent; import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; import com.formdev.flatlaf.util.HiDPIUtils; +import com.formdev.flatlaf.util.LoggingFacade; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JEditorPane}. @@ -38,8 +44,8 @@ import com.formdev.flatlaf.util.HiDPIUtils; * * * @uiDefault EditorPane.font Font - * @uiDefault EditorPane.background Color also used if not editable - * @uiDefault EditorPane.foreground Color + * @uiDefault EditorPane.background Color + * @uiDefault EditorPane.foreground Color also used if not editable * @uiDefault EditorPane.caretForeground Color * @uiDefault EditorPane.selectionBackground Color * @uiDefault EditorPane.selectionForeground Color @@ -60,18 +66,35 @@ import com.formdev.flatlaf.util.HiDPIUtils; */ public class FlatEditorPaneUI extends BasicEditorPaneUI + implements StyleableUI { - protected int minimumWidth; + @Styleable protected int minimumWidth; protected boolean isIntelliJTheme; - protected Color focusedBackground; + private Color background; + @Styleable protected Color disabledBackground; + @Styleable protected Color inactiveBackground; + @Styleable protected Color focusedBackground; + + private Color oldDisabledBackground; + private Color oldInactiveBackground; + + private Insets defaultMargin; private Object oldHonorDisplayProperties; private FocusListener focusListener; + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { return new FlatEditorPaneUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installDefaults() { super.installDefaults(); @@ -79,8 +102,13 @@ public class FlatEditorPaneUI String prefix = getPropertyPrefix(); minimumWidth = UIManager.getInt( "Component.minimumWidth" ); isIntelliJTheme = UIManager.getBoolean( "Component.isIntelliJTheme" ); + background = UIManager.getColor( prefix + ".background" ); + disabledBackground = UIManager.getColor( prefix + ".disabledBackground" ); + inactiveBackground = UIManager.getColor( prefix + ".inactiveBackground" ); focusedBackground = UIManager.getColor( prefix + ".focusedBackground" ); + defaultMargin = UIManager.getInsets( prefix + ".margin" ); + // use component font and foreground for HTML text oldHonorDisplayProperties = getComponent().getClientProperty( JEditorPane.HONOR_DISPLAY_PROPERTIES ); getComponent().putClientProperty( JEditorPane.HONOR_DISPLAY_PROPERTIES, true ); @@ -90,8 +118,16 @@ public class FlatEditorPaneUI protected void uninstallDefaults() { super.uninstallDefaults(); + background = null; + disabledBackground = null; + inactiveBackground = null; focusedBackground = null; + oldDisabledBackground = null; + oldInactiveBackground = null; + + oldStyleValues = null; + getComponent().putClientProperty( JEditorPane.HONOR_DISPLAY_PROPERTIES, oldHonorDisplayProperties ); } @@ -113,30 +149,87 @@ public class FlatEditorPaneUI } @Override - protected void propertyChange( PropertyChangeEvent e ) { - super.propertyChange( e ); - propertyChange( getComponent(), e ); + protected Caret createCaret() { + return new FlatCaret( null, false ); } - static void propertyChange( JTextComponent c, PropertyChangeEvent e ) { + @Override + protected void propertyChange( PropertyChangeEvent e ) { + // invoke updateBackground() before super.propertyChange() + String propertyName = e.getPropertyName(); + if( "editable".equals( propertyName ) || "enabled".equals( propertyName ) ) + updateBackground(); + + super.propertyChange( e ); + propertyChange( getComponent(), e, this::installStyle ); + } + + static void propertyChange( JTextComponent c, PropertyChangeEvent e, Runnable installStyle ) { switch( e.getPropertyName() ) { case FlatClientProperties.MINIMUM_WIDTH: c.revalidate(); break; + + case FlatClientProperties.STYLE: + case FlatClientProperties.STYLE_CLASS: + installStyle.run(); + c.revalidate(); + c.repaint(); + break; } } + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( getComponent(), "EditorPane" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldDisabledBackground = disabledBackground; + oldInactiveBackground = inactiveBackground; + + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + + updateBackground(); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, getComponent(), key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + + private void updateBackground() { + FlatTextFieldUI.updateBackground( getComponent(), background, + disabledBackground, inactiveBackground, + oldDisabledBackground, oldInactiveBackground ); + } + @Override public Dimension getPreferredSize( JComponent c ) { - return applyMinimumWidth( c, super.getPreferredSize( c ), minimumWidth ); + return applyMinimumWidth( c, super.getPreferredSize( c ), minimumWidth, defaultMargin ); } @Override public Dimension getMinimumSize( JComponent c ) { - return applyMinimumWidth( c, super.getMinimumSize( c ), minimumWidth ); + return applyMinimumWidth( c, super.getMinimumSize( c ), minimumWidth, defaultMargin ); } - static Dimension applyMinimumWidth( JComponent c, Dimension size, int minimumWidth ) { + static Dimension applyMinimumWidth( JComponent c, Dimension size, int minimumWidth, Insets defaultMargin ) { + // do not apply minimum width if JTextComponent.margin is set + if( !FlatTextFieldUI.hasDefaultMargins( c, defaultMargin ) ) + return size; + // Assume that text area is in a scroll pane (that displays the border) // and subtract 1px border line width. // Using "(scale( 1 ) * 2)" instead of "scale( 2 )" to deal with rounding diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatEmptyBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatEmptyBorder.java index 55d08c72..34e5fb04 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatEmptyBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatEmptyBorder.java @@ -50,6 +50,12 @@ public class FlatEmptyBorder @Override public Insets getBorderInsets( Component c, Insets insets ) { + return scaleInsets( c, insets, top, left, bottom, right ); + } + + protected static Insets scaleInsets( Component c, Insets insets, + int top, int left, int bottom, int right ) + { boolean leftToRight = left == right || c.getComponentOrientation().isLeftToRight(); insets.left = scale( leftToRight ? left : right ); insets.top = scale( top ); @@ -61,4 +67,13 @@ public class FlatEmptyBorder public Insets getUnscaledBorderInsets() { return super.getBorderInsets(); } + + public Object applyStyleProperty( Insets insets ) { + Insets oldInsets = getUnscaledBorderInsets(); + top = insets.top; + left = insets.left; + bottom = insets.bottom; + right = insets.right; + return oldInsets; + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatFileChooserUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatFileChooserUI.java index 061f0c75..6b4a749f 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatFileChooserUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatFileChooserUI.java @@ -262,12 +262,23 @@ public class FlatFileChooserUI @Override public FileView getFileView( JFileChooser fc ) { - return fileView; + return doNotUseSystemIcons() ? super.getFileView( fc ) : fileView; } @Override public void clearIconCache() { - fileView.clearIconCache(); + if( doNotUseSystemIcons() ) + super.clearIconCache(); + else + fileView.clearIconCache(); + } + + private boolean doNotUseSystemIcons() { + // Java 17 32bit craches on Windows when using system icons + // fixed in Java 18+ (see https://bugs.openjdk.java.net/browse/JDK-8277299) + return SystemInfo.isWindows && + SystemInfo.isX86 && + (SystemInfo.isJava_17_orLater && !SystemInfo.isJava_18_orLater); } //---- class FlatFileView ------------------------------------------------- diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatFormattedTextFieldUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatFormattedTextFieldUI.java index 11d91245..5f390de8 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatFormattedTextFieldUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatFormattedTextFieldUI.java @@ -39,12 +39,11 @@ import javax.swing.plaf.ComponentUI; * * * - * @uiDefault TextComponent.arc int - * @uiDefault Component.focusWidth int * @uiDefault Component.minimumWidth int * @uiDefault Component.isIntelliJTheme boolean * @uiDefault FormattedTextField.placeholderForeground Color * @uiDefault FormattedTextField.focusedBackground Color optional + * @uiDefault FormattedTextField.iconTextGap int optional, default is 4 * @uiDefault TextComponent.selectAllOnFocusPolicy String never, once (default) or always * @uiDefault TextComponent.selectAllOnMouseClick boolean * @@ -61,4 +60,10 @@ public class FlatFormattedTextFieldUI protected String getPropertyPrefix() { return "FormattedTextField"; } + + /** @since 2 */ + @Override + String getStyleType() { + return "FormattedTextField"; + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatInternalFrameTitlePane.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatInternalFrameTitlePane.java index 3e4f7c1a..500936a2 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatInternalFrameTitlePane.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatInternalFrameTitlePane.java @@ -21,6 +21,7 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.LayoutManager; +import java.awt.Rectangle; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.BorderFactory; @@ -146,6 +147,19 @@ public class FlatInternalFrameTitlePane closeButton.setVisible( frame.isClosable() ); } + Rectangle getFrameIconBounds() { + Icon icon = titleLabel.getIcon(); + if( icon == null ) + return null; + + int iconWidth = icon.getIconWidth(); + int iconHeight = icon.getIconHeight(); + boolean leftToRight = titleLabel.getComponentOrientation().isLeftToRight(); + int x = titleLabel.getX() + (leftToRight ? 0 : (titleLabel.getWidth() - iconWidth)); + int y = titleLabel.getY() + ((titleLabel.getHeight() - iconHeight) / 2); + return new Rectangle( x, y, iconWidth, iconHeight ); + } + /** * Does nothing because FlatLaf internal frames do not have system menus. */ @@ -199,6 +213,13 @@ public class FlatInternalFrameTitlePane case "componentOrientation": applyComponentOrientation( frame.getComponentOrientation() ); break; + + case "opaque": + // Do not invoke super.propertyChange() here because it always + // invokes repaint(), which would cause endless repainting. + // The opaque flag is temporary changed in FlatUIUtils.hasOpaqueBeenExplicitlySet(), + // invoked from FlatInternalFrameUI.update(). + return; } super.propertyChange( e ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatInternalFrameUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatInternalFrameUI.java index efc3bfaf..2db28a82 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatInternalFrameUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatInternalFrameUI.java @@ -22,12 +22,22 @@ import java.awt.Component; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; +import java.awt.Rectangle; +import java.awt.event.MouseEvent; +import java.beans.PropertyChangeListener; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; import javax.swing.JComponent; import javax.swing.JInternalFrame; import javax.swing.LookAndFeel; import javax.swing.UIManager; +import javax.swing.event.MouseInputAdapter; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicInternalFrameUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableBorder; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.util.LoggingFacade; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JInternalFrame}. @@ -83,9 +93,13 @@ import javax.swing.plaf.basic.BasicInternalFrameUI; */ public class FlatInternalFrameUI extends BasicInternalFrameUI + implements StyleableUI { protected FlatWindowResizer windowResizer; + private Map oldStyleValues; + private AtomicBoolean borderShared; + public static ComponentUI createUI( JComponent c ) { return new FlatInternalFrameUI( (JInternalFrame) c ); } @@ -101,6 +115,8 @@ public class FlatInternalFrameUI LookAndFeel.installProperty( frame, "opaque", false ); windowResizer = createWindowResizer(); + + installStyle(); } @Override @@ -111,6 +127,9 @@ public class FlatInternalFrameUI windowResizer.uninstall(); windowResizer = null; } + + oldStyleValues = null; + borderShared = null; } @Override @@ -122,15 +141,74 @@ public class FlatInternalFrameUI return new FlatWindowResizer.InternalFrameResizer( frame, this::getDesktopManager ); } + @Override + protected MouseInputAdapter createBorderListener( JInternalFrame w ) { + return new FlatBorderListener(); + } + + @Override + protected PropertyChangeListener createPropertyChangeListener() { + return FlatStylingSupport.createPropertyChangeListener( frame, this::installStyle, + super.createPropertyChangeListener() ); + } + + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( frame, "InternalFrame" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + if( borderShared == null ) + borderShared = new AtomicBoolean( true ); + return FlatStylingSupport.applyToAnnotatedObjectOrBorder( this, key, value, frame, borderShared ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this, frame.getBorder() ); + } + + @Override + public void update( Graphics g, JComponent c ) { + // The internal frame actually should be opaque and fill its background, + // but it must be non-opaque to allow translucent resize handles (outside of visual bounds). + // To avoid that parent may shine through internal frame (e.g. if menu bar is non-opaque), + // fill background excluding insets (translucent resize handles), + // but only if opaque was not set explicitly by application to false. + // If applications has set internal frame opacity to false, do not fill background (for compatibility). + if( !c.isOpaque() && !FlatUIUtils.hasOpaqueBeenExplicitlySet( c ) ) { + Insets insets = c.getInsets(); + + g.setColor( c.getBackground() ); + g.fillRect( insets.left, insets.top, + c.getWidth() - insets.left - insets.right, + c.getHeight() - insets.top - insets.bottom ); + } + + super.update( g, c ); + } + //---- class FlatInternalFrameBorder -------------------------------------- public static class FlatInternalFrameBorder extends FlatEmptyBorder + implements StyleableBorder { - private final Color activeBorderColor = UIManager.getColor( "InternalFrame.activeBorderColor" ); - private final Color inactiveBorderColor = UIManager.getColor( "InternalFrame.inactiveBorderColor" ); - private final int borderLineWidth = FlatUIUtils.getUIInt( "InternalFrame.borderLineWidth", 1 ); - private final boolean dropShadowPainted = UIManager.getBoolean( "InternalFrame.dropShadowPainted" ); + @Styleable protected Color activeBorderColor = UIManager.getColor( "InternalFrame.activeBorderColor" ); + @Styleable protected Color inactiveBorderColor = UIManager.getColor( "InternalFrame.inactiveBorderColor" ); + @Styleable protected int borderLineWidth = FlatUIUtils.getUIInt( "InternalFrame.borderLineWidth", 1 ); + @Styleable protected boolean dropShadowPainted = UIManager.getBoolean( "InternalFrame.dropShadowPainted" ); private final FlatDropShadowBorder activeDropShadowBorder = new FlatDropShadowBorder( UIManager.getColor( "InternalFrame.activeDropShadowColor" ), @@ -145,6 +223,36 @@ public class FlatInternalFrameUI super( UIManager.getInsets( "InternalFrame.borderMargins" ) ); } + @Override + public Object applyStyleProperty( String key, Object value ) { + switch( key ) { + case "borderMargins": return applyStyleProperty( (Insets) value ); + + case "activeDropShadowColor": return activeDropShadowBorder.applyStyleProperty( "shadowColor", value ); + case "activeDropShadowInsets": return activeDropShadowBorder.applyStyleProperty( "shadowInsets", value ); + case "activeDropShadowOpacity": return activeDropShadowBorder.applyStyleProperty( "shadowOpacity", value ); + case "inactiveDropShadowColor": return inactiveDropShadowBorder.applyStyleProperty( "shadowColor", value ); + case "inactiveDropShadowInsets": return inactiveDropShadowBorder.applyStyleProperty( "shadowInsets", value ); + case "inactiveDropShadowOpacity": return inactiveDropShadowBorder.applyStyleProperty( "shadowOpacity", value ); + } + + return FlatStylingSupport.applyToAnnotatedObject( this, key, value ); + } + + @Override + public Map> getStyleableInfos() { + Map> infos = new FlatStylingSupport.StyleableInfosMap<>(); + FlatStylingSupport.collectAnnotatedStyleableInfos( this, infos ); + infos.put( "borderMargins", Insets.class ); + infos.put( "activeDropShadowColor", Color.class ); + infos.put( "activeDropShadowInsets", Insets.class ); + infos.put( "activeDropShadowOpacity", float.class ); + infos.put( "inactiveDropShadowColor", Color.class ); + infos.put( "inactiveDropShadowInsets", Insets.class ); + infos.put( "inactiveDropShadowOpacity", float.class ); + return infos; + } + @Override public Insets getBorderInsets( Component c, Insets insets ) { if( c instanceof JInternalFrame && ((JInternalFrame)c).isMaximum() ) { @@ -195,4 +303,27 @@ public class FlatInternalFrameUI } } } + + //---- class FlatBorderListener ------------------------------------------- + + /** @since 1.6 */ + protected class FlatBorderListener + extends BorderListener + { + @Override + public void mouseClicked( MouseEvent e ) { + if( e.getClickCount() == 2 && !frame.isIcon() && + e.getSource() instanceof FlatInternalFrameTitlePane ) + { + Rectangle iconBounds = ((FlatInternalFrameTitlePane)e.getSource()).getFrameIconBounds(); + if( iconBounds != null && iconBounds.contains( e.getX(), e.getY() ) ) { + if( frame.isClosable() ) + frame.doDefaultCloseAction(); + return; + } + } + + super.mouseClicked( e ); + } + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatLabelUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatLabelUI.java index ae629b55..157fd759 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatLabelUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatLabelUI.java @@ -24,6 +24,7 @@ import java.awt.Rectangle; import java.beans.PropertyChangeEvent; import java.util.Arrays; import java.util.HashSet; +import java.util.Map; import java.util.Set; import javax.swing.Icon; import javax.swing.JComponent; @@ -33,8 +34,12 @@ import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicHTML; import javax.swing.plaf.basic.BasicLabelUI; +import com.formdev.flatlaf.FlatClientProperties; import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; import com.formdev.flatlaf.util.HiDPIUtils; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.UIScale; /** @@ -54,13 +59,30 @@ import com.formdev.flatlaf.util.UIScale; */ public class FlatLabelUI extends BasicLabelUI + implements StyleableUI { - private Color disabledForeground; + @Styleable protected Color disabledForeground; + private final boolean shared; private boolean defaults_initialized = false; + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { - return FlatUIUtils.createSharedUI( FlatLabelUI.class, FlatLabelUI::new ); + return FlatUIUtils.canUseSharedUI( c ) + ? FlatUIUtils.createSharedUI( FlatLabelUI.class, () -> new FlatLabelUI( true ) ) + : new FlatLabelUI( false ); + } + + /** @since 2 */ + protected FlatLabelUI( boolean shared ) { + this.shared = shared; + } + + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle( (JLabel) c ); } @Override @@ -77,7 +99,9 @@ public class FlatLabelUI @Override protected void uninstallDefaults( JLabel c ) { super.uninstallDefaults( c ); + defaults_initialized = false; + oldStyleValues = null; } @Override @@ -94,10 +118,46 @@ public class FlatLabelUI if( name == "text" || name == "font" || name == "foreground" ) { JLabel label = (JLabel) e.getSource(); updateHTMLRenderer( label, label.getText(), true ); + } else if( name.equals( FlatClientProperties.STYLE ) || name.equals( FlatClientProperties.STYLE_CLASS ) ) { + JLabel label = (JLabel) e.getSource(); + if( shared && FlatStylingSupport.hasStyleProperty( label ) ) { + // unshare component UI if necessary + // updateUI() invokes installStyle() from installUI() + label.updateUI(); + } else + installStyle( label ); + label.revalidate(); + label.repaint(); } else super.propertyChange( e ); } + /** @since 2 */ + protected void installStyle( JLabel c ) { + try { + applyStyle( c, FlatStylingSupport.getResolvedStyle( c, "Label" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( JLabel c, Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, + (key, value) -> applyStyleProperty( c, key, value ) ); + } + + /** @since 2 */ + protected Object applyStyleProperty( JLabel c, String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, c, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + /** * Checks whether text contains HTML tags that use "absolute-size" keywords * (e.g. "x-large") for font-size in default style sheet diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatLineBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatLineBorder.java index a529f096..fea886d8 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatLineBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatLineBorder.java @@ -37,15 +37,18 @@ public class FlatLineBorder { private final Color lineColor; private final float lineThickness; + /** @since 2 */ private final int arc; public FlatLineBorder( Insets insets, Color lineColor ) { - this( insets, lineColor, 1f ); + this( insets, lineColor, 1f, 0 ); } - public FlatLineBorder( Insets insets, Color lineColor, float lineThickness ) { + /** @since 2 */ + public FlatLineBorder( Insets insets, Color lineColor, float lineThickness, int arc ) { super( insets ); this.lineColor = lineColor; this.lineThickness = lineThickness; + this.arc = arc; } public Color getLineColor() { @@ -56,13 +59,18 @@ public class FlatLineBorder return lineThickness; } + /** @since 2 */ + public int getArc() { + return arc; + } + @Override public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { Graphics2D g2 = (Graphics2D) g.create(); try { FlatUIUtils.setRenderingHints( g2 ); - g2.setColor( lineColor ); - FlatUIUtils.paintComponentBorder( g2, x, y, width, height, 0f, scale( lineThickness ), 0f ); + FlatUIUtils.paintOutlinedComponent( g2, x, y, width, height, + 0, 0, 0, scale( getLineThickness() ), scale( getArc() ), null, getLineColor(), null ); } finally { g2.dispose(); } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatListCellBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatListCellBorder.java index 16d3a23d..c8a01a02 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatListCellBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatListCellBorder.java @@ -16,11 +16,15 @@ package com.formdev.flatlaf.ui; +import java.awt.Color; import java.awt.Component; import java.awt.Graphics; +import java.awt.Insets; +import java.util.function.Function; import javax.swing.JList; import javax.swing.SwingUtilities; import javax.swing.UIManager; +import javax.swing.plaf.ListUI; /** * Cell border for {@link javax.swing.DefaultListCellRenderer} @@ -33,12 +37,54 @@ import javax.swing.UIManager; public class FlatListCellBorder extends FlatLineBorder { - final boolean showCellFocusIndicator = UIManager.getBoolean( "List.showCellFocusIndicator" ); + /** @since 2 */ protected boolean showCellFocusIndicator = UIManager.getBoolean( "List.showCellFocusIndicator" ); + + private Component c; protected FlatListCellBorder() { super( UIManager.getInsets( "List.cellMargins" ), UIManager.getColor( "List.cellFocusColor" ) ); } + @Override + public Insets getBorderInsets( Component c, Insets insets ) { + Insets m = getStyleFromListUI( c, ui -> ui.cellMargins ); + if( m != null ) + return scaleInsets( c, insets, m.top, m.left, m.bottom, m.right ); + + return super.getBorderInsets( c, insets ); + } + + @Override + public Color getLineColor() { + if( c != null ) { + Color color = getStyleFromListUI( c, ui -> ui.cellFocusColor ); + if( color != null ) + return color; + } + return super.getLineColor(); + } + + @Override + public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { + this.c = c; + super.paintBorder( c, g, x, y, width, height ); + this.c = null; + } + + /** + * Because this border is always shared for all lists, + * get border specific style from FlatListUI. + */ + static T getStyleFromListUI( Component c, Function f ) { + JList list = (JList) SwingUtilities.getAncestorOfClass( JList.class, c ); + if( list != null ) { + ListUI ui = list.getUI(); + if( ui instanceof FlatListUI ) + return f.apply( (FlatListUI) ui ); + } + return null; + } + //---- class Default ------------------------------------------------------ /** @@ -67,17 +113,19 @@ public class FlatListCellBorder /** * Border for selected cell that uses margins and paints focus indicator border - * if enabled (List.showCellFocusIndicator=true) and exactly one item is selected. + * if enabled (List.showCellFocusIndicator=true) and multiple items are selected. */ public static class Selected extends FlatListCellBorder { @Override public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { + Boolean b = getStyleFromListUI( c, ui -> ui.showCellFocusIndicator ); + boolean showCellFocusIndicator = (b != null) ? b : this.showCellFocusIndicator; if( !showCellFocusIndicator ) return; - // paint focus indicator border only if exactly one item is selected + // paint focus indicator border only if multiple items are selected JList list = (JList) SwingUtilities.getAncestorOfClass( JList.class, c ); if( list != null && list.getMinSelectionIndex() == list.getMaxSelectionIndex() ) return; diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatListUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatListUI.java index d639ecb3..638e8cce 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatListUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatListUI.java @@ -18,12 +18,19 @@ package com.formdev.flatlaf.ui; import java.awt.Color; import java.awt.EventQueue; +import java.awt.Insets; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; +import java.beans.PropertyChangeListener; +import java.util.Map; import javax.swing.JComponent; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicListUI; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.util.LoggingFacade; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JList}. @@ -63,16 +70,31 @@ import javax.swing.plaf.basic.BasicListUI; */ public class FlatListUI extends BasicListUI + implements StyleableUI { - protected Color selectionBackground; - protected Color selectionForeground; - protected Color selectionInactiveBackground; - protected Color selectionInactiveForeground; + @Styleable protected Color selectionBackground; + @Styleable protected Color selectionForeground; + @Styleable protected Color selectionInactiveBackground; + @Styleable protected Color selectionInactiveForeground; + + // for FlatListCellBorder + /** @since 2 */ @Styleable protected Insets cellMargins; + /** @since 2 */ @Styleable protected Color cellFocusColor; + /** @since 2 */ @Styleable protected Boolean showCellFocusIndicator; + + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { return new FlatListUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installDefaults() { super.installDefaults(); @@ -93,6 +115,8 @@ public class FlatListUI selectionForeground = null; selectionInactiveBackground = null; selectionInactiveForeground = null; + + oldStyleValues = null; } @Override @@ -116,10 +140,79 @@ public class FlatListUI }; } + @Override + protected PropertyChangeListener createPropertyChangeListener() { + PropertyChangeListener superListener = super.createPropertyChangeListener(); + return e -> { + superListener.propertyChange( e ); + + switch( e.getPropertyName() ) { + case FlatClientProperties.COMPONENT_FOCUS_OWNER: + toggleSelectionColors(); + break; + + case FlatClientProperties.STYLE: + case FlatClientProperties.STYLE_CLASS: + installStyle(); + list.revalidate(); + list.repaint(); + break; + } + }; + } + + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( list, "List" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + Color oldSelectionBackground = selectionBackground; + Color oldSelectionForeground = selectionForeground; + Color oldSelectionInactiveBackground = selectionInactiveBackground; + Color oldSelectionInactiveForeground = selectionInactiveForeground; + + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + + // update selection background + if( selectionBackground != oldSelectionBackground ) { + Color selBg = list.getSelectionBackground(); + if( selBg == oldSelectionBackground ) + list.setSelectionBackground( selectionBackground ); + else if( selBg == oldSelectionInactiveBackground ) + list.setSelectionBackground( selectionInactiveBackground ); + } + + // update selection foreground + if( selectionForeground != oldSelectionForeground ) { + Color selFg = list.getSelectionForeground(); + if( selFg == oldSelectionForeground ) + list.setSelectionForeground( selectionForeground ); + else if( selFg == oldSelectionInactiveForeground ) + list.setSelectionForeground( selectionInactiveForeground ); + } + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, list, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + /** * Toggle selection colors from focused to inactive and vice versa. * - * This is not a optimal solution but much easier than rewriting the whole paint methods. + * This is not an optimal solution but much easier than rewriting the whole paint methods. * * Using a LaF specific renderer was avoided because often a custom renderer is * already used in applications. Then either the inactive colors are not used, diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMarginBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMarginBorder.java index 27240fef..36b58f00 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMarginBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMarginBorder.java @@ -29,7 +29,7 @@ import javax.swing.plaf.basic.BasicBorders; public class FlatMarginBorder extends BasicBorders.MarginBorder { - private final int left, right, top, bottom; + protected int left, right, top, bottom; public FlatMarginBorder() { left = right = top = bottom = 0; diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuBarBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuBarBorder.java index 5701f935..6ba8d159 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuBarBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuBarBorder.java @@ -21,8 +21,11 @@ import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.awt.Insets; +import java.util.Map; import javax.swing.JMenuBar; import javax.swing.UIManager; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableBorder; /** * Border for {@link javax.swing.JMenuBar}. @@ -33,11 +36,26 @@ import javax.swing.UIManager; */ public class FlatMenuBarBorder extends FlatMarginBorder + implements StyleableBorder { - private final Color borderColor = UIManager.getColor( "MenuBar.borderColor" ); + @Styleable protected Color borderColor = UIManager.getColor( "MenuBar.borderColor" ); + + /** @since 2 */ + @Override + public Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObject( this, key, value ); + } + + @Override + public Map> getStyleableInfos() { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } @Override public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { + if( !showBottomSeparator( c ) ) + return; + float lineHeight = scale( (float) 1 ); FlatUIUtils.paintFilledRectangle( g, borderColor, x, y + height - lineHeight, width, lineHeight ); } @@ -53,4 +71,9 @@ public class FlatMenuBarBorder insets.right = scale( margin.right ); return insets; } + + /** @since 2 */ + protected boolean showBottomSeparator( Component c ) { + return !FlatMenuBarUI.useUnifiedBackground( c ); + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuBarUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuBarUI.java index d5e34fe7..273fb080 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuBarUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuBarUI.java @@ -17,9 +17,14 @@ package com.formdev.flatlaf.ui; import java.awt.Color; +import java.awt.Component; import java.awt.Graphics; +import java.awt.Insets; import java.awt.Window; import java.awt.event.ActionEvent; +import java.beans.PropertyChangeListener; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; import javax.swing.AbstractAction; import javax.swing.ActionMap; import javax.swing.JComponent; @@ -36,6 +41,9 @@ import javax.swing.plaf.ComponentUI; import javax.swing.plaf.UIResource; import javax.swing.plaf.basic.BasicMenuBarUI; import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.SystemInfo; /** @@ -47,13 +55,30 @@ import com.formdev.flatlaf.util.SystemInfo; * @uiDefault MenuBar.background Color * @uiDefault MenuBar.foreground Color * @uiDefault MenuBar.border Border + * + * + * * @uiDefault TitlePane.unifiedBackground boolean * * @author Karl Tauber */ public class FlatMenuBarUI extends BasicMenuBarUI + implements StyleableUI { + // used in FlatMenuItemBorder + /** @since 2 */ @Styleable protected Insets itemMargins; + + // used in FlatMenuUI + /** @since 2 */ @Styleable protected Color hoverBackground; + /** @since 2 */ @Styleable protected Color underlineSelectionBackground; + /** @since 2 */ @Styleable protected Color underlineSelectionColor; + /** @since 2 */ @Styleable protected int underlineSelectionHeight = -1; + + private PropertyChangeListener propertyChangeListener; + private Map oldStyleValues; + private AtomicBoolean borderShared; + public static ComponentUI createUI( JComponent c ) { return new FlatMenuBarUI(); } @@ -63,6 +88,13 @@ public class FlatMenuBarUI * Do not add any functionality here. */ + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installDefaults() { super.installDefaults(); @@ -70,6 +102,30 @@ public class FlatMenuBarUI LookAndFeel.installProperty( menuBar, "opaque", false ); } + @Override + protected void uninstallDefaults() { + super.uninstallDefaults(); + + oldStyleValues = null; + borderShared = null; + } + + @Override + protected void installListeners() { + super.installListeners(); + + propertyChangeListener = FlatStylingSupport.createPropertyChangeListener( menuBar, this::installStyle, null ); + menuBar.addPropertyChangeListener( propertyChangeListener ); + } + + @Override + protected void uninstallListeners() { + super.uninstallListeners(); + + menuBar.removePropertyChangeListener( propertyChangeListener ); + propertyChangeListener = null; + } + @Override protected void installKeyboardActions() { super.installKeyboardActions(); @@ -82,6 +138,33 @@ public class FlatMenuBarUI map.put( "takeFocus", new TakeFocus() ); } + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( menuBar, "MenuBar" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + if( borderShared == null ) + borderShared = new AtomicBoolean( true ); + return FlatStylingSupport.applyToAnnotatedObjectOrBorder( this, key, value, menuBar, borderShared ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this, menuBar.getBorder() ); + } + @Override public void update( Graphics g, JComponent c ) { // paint background @@ -97,20 +180,22 @@ public class FlatMenuBarUI protected Color getBackground( JComponent c ) { Color background = c.getBackground(); - // paint background if opaque or if having custom background color - if( c.isOpaque() || !(background instanceof UIResource) ) + // paint background if opaque + if( c.isOpaque() ) return background; - // paint background if menu bar is not the "main" menu bar + // do not paint background if non-opaque and having custom background color + if( !(background instanceof UIResource) ) + return null; + + // paint background if menu bar is not the "main" menu bar (e.g. in internal frame) JRootPane rootPane = SwingUtilities.getRootPane( c ); if( rootPane == null || !(rootPane.getParent() instanceof Window) || rootPane.getJMenuBar() != c ) return background; // use parent background for unified title pane - // (not storing value of "TitlePane.unifiedBackground" in class to allow changing at runtime) - if( UIManager.getBoolean( "TitlePane.unifiedBackground" ) && - FlatNativeWindowBorder.hasCustomDecoration( (Window) rootPane.getParent() ) ) - background = FlatUIUtils.getParentBackground( c ); + if( useUnifiedBackground( c ) ) + background = FlatUIUtils.getParentBackground( c ); // paint background in full screen mode if( FlatUIUtils.isFullScreen( rootPane ) ) @@ -120,6 +205,22 @@ public class FlatMenuBarUI return FlatRootPaneUI.isMenuBarEmbedded( rootPane ) ? null : background; } + /**@since 2 */ + static boolean useUnifiedBackground( Component c ) { + // check whether: + // - TitlePane.unifiedBackground is true and + // - menu bar is the "main" menu bar and + // - window root pane has custom decoration style + + JRootPane rootPane; + // (not storing value of "TitlePane.unifiedBackground" in class to allow changing at runtime) + return UIManager.getBoolean( "TitlePane.unifiedBackground" ) && + (rootPane = SwingUtilities.getRootPane( c )) != null && + rootPane.getParent() instanceof Window && + rootPane.getJMenuBar() == c && + rootPane.getWindowDecorationStyle() != JRootPane.NONE; + } + //---- class TakeFocus ---------------------------------------------------- /** diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuItemBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuItemBorder.java index aa8079a6..e601da90 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuItemBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuItemBorder.java @@ -18,9 +18,11 @@ package com.formdev.flatlaf.ui; import static com.formdev.flatlaf.util.UIScale.scale; import java.awt.Component; +import java.awt.Container; import java.awt.Insets; import javax.swing.JMenuBar; import javax.swing.UIManager; +import javax.swing.plaf.MenuBarUI; /** * Border for {@link javax.swing.JMenu}, {@link javax.swing.JMenuItem}, @@ -33,15 +35,22 @@ import javax.swing.UIManager; public class FlatMenuItemBorder extends FlatMarginBorder { + // only used if parent menubar is not an instance of FlatMenuBarUI private final Insets menuBarItemMargins = UIManager.getInsets( "MenuBar.itemMargins" ); @Override public Insets getBorderInsets( Component c, Insets insets ) { - if( c.getParent() instanceof JMenuBar ) { - insets.top = scale( menuBarItemMargins.top ); - insets.left = scale( menuBarItemMargins.left ); - insets.bottom = scale( menuBarItemMargins.bottom ); - insets.right = scale( menuBarItemMargins.right ); + Container parent = c.getParent(); + if( parent instanceof JMenuBar ) { + // get margins from FlatMenuBarUI to allow styling + MenuBarUI ui = ((JMenuBar)parent).getUI(); + Insets margins = (ui instanceof FlatMenuBarUI && ((FlatMenuBarUI)ui).itemMargins != null) + ? ((FlatMenuBarUI)ui).itemMargins + : this.menuBarItemMargins; + insets.top = scale( margins.top ); + insets.left = scale( margins.left ); + insets.bottom = scale( margins.bottom ); + insets.right = scale( margins.right ); return insets; } else return super.getBorderInsets( c, insets ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuItemRenderer.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuItemRenderer.java index 3d4deb21..a995be72 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuItemRenderer.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuItemRenderer.java @@ -19,6 +19,7 @@ package com.formdev.flatlaf.ui; import static com.formdev.flatlaf.util.UIScale.scale; import java.awt.Color; import java.awt.Component; +import java.awt.Container; import java.awt.Dimension; import java.awt.Font; import java.awt.FontMetrics; @@ -30,7 +31,9 @@ import java.awt.Rectangle; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.text.AttributedCharacterIterator; +import java.util.Map; import javax.swing.Icon; +import javax.swing.JComponent; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.KeyStroke; @@ -38,7 +41,12 @@ import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.plaf.basic.BasicHTML; import javax.swing.text.View; +import com.formdev.flatlaf.FlatClientProperties; import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.icons.FlatCheckBoxMenuItemIcon; +import com.formdev.flatlaf.icons.FlatMenuArrowIcon; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.UnknownStyleException; import com.formdev.flatlaf.util.DerivedColor; import com.formdev.flatlaf.util.Graphics2DProxy; import com.formdev.flatlaf.util.HiDPIUtils; @@ -47,43 +55,48 @@ import com.formdev.flatlaf.util.SystemInfo; /** * Renderer for menu items. * + * @uiDefault MenuItem.verticallyAlignText boolean * @uiDefault MenuItem.minimumWidth int * @uiDefault MenuItem.minimumIconSize Dimension * @uiDefault MenuItem.textAcceleratorGap int * @uiDefault MenuItem.textNoAcceleratorGap int * @uiDefault MenuItem.acceleratorArrowGap int * @uiDefault MenuItem.checkBackground Color + * @uiDefault MenuItem.checkMargins Insets + * @uiDefault MenuItem.selectionType String null (default) or underline * @uiDefault MenuItem.underlineSelectionBackground Color * @uiDefault MenuItem.underlineSelectionCheckBackground Color * @uiDefault MenuItem.underlineSelectionColor Color * @uiDefault MenuItem.underlineSelectionHeight int - * @uiDefault MenuItem.selectionBackground Color * * @author Karl Tauber */ public class FlatMenuItemRenderer { + private static final String KEY_MAX_ICONS_WIDTH = "FlatLaf.internal.FlatMenuItemRenderer.maxIconWidth"; + protected final JMenuItem menuItem; - protected final Icon checkIcon; - protected final Icon arrowIcon; - protected final Font acceleratorFont; + protected Icon checkIcon; + protected Icon arrowIcon; + @Styleable protected Font acceleratorFont; protected final String acceleratorDelimiter; - protected final int minimumWidth = UIManager.getInt( "MenuItem.minimumWidth" ); - protected final Dimension minimumIconSize; - protected final int textAcceleratorGap = FlatUIUtils.getUIInt( "MenuItem.textAcceleratorGap", 28 ); - protected final int textNoAcceleratorGap = FlatUIUtils.getUIInt( "MenuItem.textNoAcceleratorGap", 6 ); - protected final int acceleratorArrowGap = FlatUIUtils.getUIInt( "MenuItem.acceleratorArrowGap", 2 ); + /** @since 2 */ @Styleable protected boolean verticallyAlignText = FlatUIUtils.getUIBoolean( "MenuItem.verticallyAlignText", true ); + @Styleable protected int minimumWidth = UIManager.getInt( "MenuItem.minimumWidth" ); + @Styleable protected Dimension minimumIconSize; + @Styleable protected int textAcceleratorGap = FlatUIUtils.getUIInt( "MenuItem.textAcceleratorGap", 28 ); + @Styleable protected int textNoAcceleratorGap = FlatUIUtils.getUIInt( "MenuItem.textNoAcceleratorGap", 6 ); + @Styleable protected int acceleratorArrowGap = FlatUIUtils.getUIInt( "MenuItem.acceleratorArrowGap", 2 ); - protected final Color checkBackground = UIManager.getColor( "MenuItem.checkBackground" ); - protected final Insets checkMargins = UIManager.getInsets( "MenuItem.checkMargins" ); + @Styleable protected Color checkBackground = UIManager.getColor( "MenuItem.checkBackground" ); + @Styleable protected Insets checkMargins = UIManager.getInsets( "MenuItem.checkMargins" ); - protected final Color underlineSelectionBackground = UIManager.getColor( "MenuItem.underlineSelectionBackground" ); - protected final Color underlineSelectionCheckBackground = UIManager.getColor( "MenuItem.underlineSelectionCheckBackground" ); - protected final Color underlineSelectionColor = UIManager.getColor( "MenuItem.underlineSelectionColor" ); - protected final int underlineSelectionHeight = UIManager.getInt( "MenuItem.underlineSelectionHeight" ); + @Styleable protected Color underlineSelectionBackground = UIManager.getColor( "MenuItem.underlineSelectionBackground" ); + @Styleable protected Color underlineSelectionCheckBackground = UIManager.getColor( "MenuItem.underlineSelectionCheckBackground" ); + @Styleable protected Color underlineSelectionColor = UIManager.getColor( "MenuItem.underlineSelectionColor" ); + @Styleable protected int underlineSelectionHeight = UIManager.getInt( "MenuItem.underlineSelectionHeight" ); - protected final Color selectionBackground = UIManager.getColor( "MenuItem.selectionBackground" ); + private boolean iconsShared = true; protected FlatMenuItemRenderer( JMenuItem menuItem, Icon checkIcon, Icon arrowIcon, Font acceleratorFont, String acceleratorDelimiter ) @@ -98,6 +111,64 @@ public class FlatMenuItemRenderer this.minimumIconSize = (minimumIconSize != null) ? minimumIconSize : new Dimension( 16, 16 ); } + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + // style icon + if( key.startsWith( "icon." ) || key.equals( "selectionForeground" ) ) { + if( iconsShared ) { + if( checkIcon instanceof FlatCheckBoxMenuItemIcon ) + checkIcon = FlatStylingSupport.cloneIcon( checkIcon ); + if( arrowIcon instanceof FlatMenuArrowIcon ) + arrowIcon = FlatStylingSupport.cloneIcon( arrowIcon ); + iconsShared = false; + } + + if( key.startsWith( "icon." ) ) { + String key2 = key.substring( "icon.".length() ); + + try { + if( checkIcon instanceof FlatCheckBoxMenuItemIcon ) + return ((FlatCheckBoxMenuItemIcon)checkIcon).applyStyleProperty( key2, value ); + } catch ( UnknownStyleException ex ) { + // ignore + } + + try { + if( arrowIcon instanceof FlatMenuArrowIcon ) + return ((FlatMenuArrowIcon)arrowIcon).applyStyleProperty( key2, value ); + } catch ( UnknownStyleException ex ) { + // ignore + } + + // keys with prefix "icon." are only for icons + throw new UnknownStyleException( key ); + } else if( key.equals( "selectionForeground" ) ) { + // special case: same key is used in icons and in menuitem + if( checkIcon instanceof FlatCheckBoxMenuItemIcon ) + ((FlatCheckBoxMenuItemIcon)checkIcon).applyStyleProperty( key, value ); + if( arrowIcon instanceof FlatMenuArrowIcon ) + ((FlatMenuArrowIcon)arrowIcon).applyStyleProperty( key, value ); + + // throw exception because the caller should also apply this key + throw new UnknownStyleException( key ); + } + } + + return FlatStylingSupport.applyToAnnotatedObject( this, key, value ); + } + + /** @since 2 */ + public Map> getStyleableInfos() { + Map> infos = FlatStylingSupport.getAnnotatedStyleableInfos( this ); + if( checkIcon instanceof FlatCheckBoxMenuItemIcon ) + FlatStylingSupport.putAllPrefixKey( infos, "icon.", ((FlatCheckBoxMenuItemIcon)checkIcon).getStyleableInfos() ); + infos.remove( "icon.selectionForeground" ); + if( arrowIcon instanceof FlatMenuArrowIcon ) + FlatStylingSupport.putAllPrefixKey( infos, "icon.", ((FlatMenuArrowIcon)arrowIcon).getStyleableInfos() ); + infos.remove( "icon.selectionForeground" ); + return infos; + } + protected Dimension getPreferredMenuItemSize() { int width = 0; int height = 0; @@ -254,7 +325,7 @@ debug*/ paintBackground( g, underlineSelection ? underlineSelectionBackground : selectionBackground ); if( underlineSelection && isArmedOrSelected( menuItem ) ) paintUnderlineSelection( g, underlineSelectionColor, underlineSelectionHeight ); - paintIcon( g, iconRect, getIconForPainting(), underlineSelection ? underlineSelectionCheckBackground : checkBackground ); + paintIcon( g, iconRect, getIconForPainting(), underlineSelection ? underlineSelectionCheckBackground : checkBackground, selectionBackground ); paintText( g, textRect, menuItem.getText(), selectionForeground, disabledForeground ); paintAccelerator( g, accelRect, getAcceleratorText(), acceleratorForeground, acceleratorSelectionForeground, disabledForeground ); if( !isTopLevelMenu( menuItem ) ) @@ -301,7 +372,7 @@ debug*/ return FlatUIUtils.deriveColor( background, baseColor ); } - protected void paintIcon( Graphics g, Rectangle iconRect, Icon icon, Color checkBackground ) { + protected void paintIcon( Graphics g, Rectangle iconRect, Icon icon, Color checkBackground, Color selectionBackground ) { // if checkbox/radiobutton menu item is selected and also has a custom icon, // then use filled icon background to indicate selection (instead of using checkIcon) if( menuItem.isSelected() && checkIcon != null && icon != checkIcon ) { @@ -343,11 +414,10 @@ debug*/ return; // center because the real icon may be smaller than dimension in iconRect - int x = iconRect.x + centerOffset( iconRect.width, icon.getIconWidth() ); int y = iconRect.y + centerOffset( iconRect.height, icon.getIconHeight() ); // paint - icon.paintIcon( menuItem, g, x, y ); + icon.paintIcon( menuItem, g, iconRect.x, y ); } protected static void paintText( Graphics g, JMenuItem menuItem, @@ -382,6 +452,10 @@ debug*/ htmlView.paint( HiDPIUtils.createGraphicsTextYCorrection( (Graphics2D) g ), textRect ); } + /** + * Returns {@code true} if either the menu item is armed (mouse over item) + * or it is a {@code JMenu} and selected (shows submenu). + */ protected static boolean isArmedOrSelected( JMenuItem menuItem ) { return menuItem.isArmed() || (menuItem instanceof JMenu && menuItem.isSelected()); } @@ -412,6 +486,12 @@ debug*/ return pressedIcon; } + if( isArmedOrSelected( menuItem ) ) { + Icon selectedIcon = menuItem.getSelectedIcon(); + if( selectedIcon != null ) + return selectedIcon; + } + return icon; } @@ -498,6 +578,44 @@ debug*/ shiftGlyph = 0x21E7, commandGlyph = 0x2318; + /** + * Calculates the maximum width of all menu item icons in the popup. + */ + private int getMaxIconsWidth() { + if( !verticallyAlignText ) + return 0; + + Container parent = menuItem.getParent(); + if( !(parent instanceof JComponent) ) + return 0; + + int maxWidth = FlatClientProperties.clientPropertyInt( (JComponent) parent, KEY_MAX_ICONS_WIDTH, -1 ); + if( maxWidth >= 0 ) + return maxWidth; + + maxWidth = 0; + + for( Component c : parent.getComponents() ) { + if( !(c instanceof JMenuItem) ) + continue; + + Icon icon = ((JMenuItem)c).getIcon(); + if( icon != null ) + maxWidth = Math.max( maxWidth, icon.getIconWidth() ); + } + + ((JComponent)parent).putClientProperty( KEY_MAX_ICONS_WIDTH, maxWidth ); + return maxWidth; + } + + static void clearClientProperties( Component c ) { + if( !(c instanceof JComponent) ) + return; + + JComponent jc = (JComponent) c; + jc.putClientProperty( FlatMenuItemRenderer.KEY_MAX_ICONS_WIDTH, null ); + } + //---- class MinSizeIcon -------------------------------------------------- private class MinSizeIcon @@ -512,6 +630,7 @@ debug*/ @Override public int getIconWidth() { int iconWidth = (delegate != null) ? delegate.getIconWidth() : 0; + iconWidth = Math.max( iconWidth, getMaxIconsWidth() ); return Math.max( iconWidth, scale( minimumIconSize.width ) ); } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuItemUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuItemUI.java index 78ae0d9e..fdd15bac 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuItemUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuItemUI.java @@ -16,13 +16,19 @@ package com.formdev.flatlaf.ui; +import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; +import java.beans.PropertyChangeListener; +import java.util.Map; import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.LookAndFeel; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicMenuItemUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.UnknownStyleException; +import com.formdev.flatlaf.util.LoggingFacade; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JMenuItem}. @@ -54,13 +60,22 @@ import javax.swing.plaf.basic.BasicMenuItemUI; */ public class FlatMenuItemUI extends BasicMenuItemUI + implements StyleableUI { private FlatMenuItemRenderer renderer; + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { return new FlatMenuItemUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installDefaults() { super.installDefaults(); @@ -74,13 +89,72 @@ public class FlatMenuItemUI protected void uninstallDefaults() { super.uninstallDefaults(); + FlatMenuItemRenderer.clearClientProperties( menuItem.getParent() ); renderer = null; + oldStyleValues = null; } protected FlatMenuItemRenderer createRenderer() { return new FlatMenuItemRenderer( menuItem, checkIcon, arrowIcon, acceleratorFont, acceleratorDelimiter ); } + @Override + protected PropertyChangeListener createPropertyChangeListener( JComponent c ) { + return FlatStylingSupport.createPropertyChangeListener( c, this::installStyle, super.createPropertyChangeListener( c ) ); + } + + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( menuItem, "MenuItem" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + try { + return renderer.applyStyleProperty( key, value ); + } catch ( UnknownStyleException ex ) { + // ignore + } + + Object oldValue; + switch( key ) { + // BasicMenuItemUI + case "selectionBackground": oldValue = selectionBackground; selectionBackground = (Color) value; return oldValue; + case "selectionForeground": oldValue = selectionForeground; selectionForeground = (Color) value; return oldValue; + case "disabledForeground": oldValue = disabledForeground; disabledForeground = (Color) value; return oldValue; + case "acceleratorForeground": oldValue = acceleratorForeground; acceleratorForeground = (Color) value; return oldValue; + case "acceleratorSelectionForeground": oldValue = acceleratorSelectionForeground; acceleratorSelectionForeground = (Color) value; return oldValue; + } + + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, menuItem, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return getStyleableInfos( renderer ); + } + + static Map> getStyleableInfos( FlatMenuItemRenderer renderer ) { + Map> infos = new FlatStylingSupport.StyleableInfosMap<>(); + infos.put( "selectionBackground", Color.class ); + infos.put( "selectionForeground", Color.class ); + infos.put( "disabledForeground", Color.class ); + infos.put( "acceleratorForeground", Color.class ); + infos.put( "acceleratorSelectionForeground", Color.class ); + infos.putAll( renderer.getStyleableInfos() ); + return infos; + } + @Override protected Dimension getPreferredMenuItemSize( JComponent c, Icon checkIcon, Icon arrowIcon, int defaultTextIconGap ) { return renderer.getPreferredMenuItemSize(); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuUI.java index 8f80c6c2..be04f393 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatMenuUI.java @@ -21,16 +21,24 @@ import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.event.MouseEvent; +import java.beans.PropertyChangeListener; +import java.util.Map; +import java.util.function.Function; import javax.swing.ButtonModel; import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.JMenu; +import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.LookAndFeel; import javax.swing.UIManager; import javax.swing.event.MouseInputListener; import javax.swing.plaf.ComponentUI; +import javax.swing.plaf.MenuBarUI; import javax.swing.plaf.basic.BasicMenuUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.UnknownStyleException; +import com.formdev.flatlaf.util.LoggingFacade; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JMenu}. @@ -60,10 +68,10 @@ import javax.swing.plaf.basic.BasicMenuUI; * * * @uiDefault MenuItem.iconTextGap int - * @uiDefault MenuBar.hoverBackground Color * * * + * @uiDefault MenuBar.hoverBackground Color * @uiDefault MenuBar.underlineSelectionBackground Color * @uiDefault MenuBar.underlineSelectionColor Color * @uiDefault MenuBar.underlineSelectionHeight int @@ -72,14 +80,22 @@ import javax.swing.plaf.basic.BasicMenuUI; */ public class FlatMenuUI extends BasicMenuUI + implements StyleableUI { - private Color hoverBackground; private FlatMenuItemRenderer renderer; + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { return new FlatMenuUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installDefaults() { super.installDefaults(); @@ -88,7 +104,6 @@ public class FlatMenuUI menuItem.setRolloverEnabled( true ); - hoverBackground = UIManager.getColor( "MenuBar.hoverBackground" ); renderer = createRenderer(); } @@ -96,8 +111,9 @@ public class FlatMenuUI protected void uninstallDefaults() { super.uninstallDefaults(); - hoverBackground = null; + FlatMenuItemRenderer.clearClientProperties( menuItem.getParent() ); renderer = null; + oldStyleValues = null; } protected FlatMenuItemRenderer createRenderer() { @@ -129,6 +145,52 @@ public class FlatMenuUI }; } + @Override + protected PropertyChangeListener createPropertyChangeListener( JComponent c ) { + return FlatStylingSupport.createPropertyChangeListener( c, this::installStyle, super.createPropertyChangeListener( c ) ); + } + + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( menuItem, "Menu" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + try { + return renderer.applyStyleProperty( key, value ); + } catch ( UnknownStyleException ex ) { + // ignore + } + + Object oldValue; + switch( key ) { + // BasicMenuItemUI + case "selectionBackground": oldValue = selectionBackground; selectionBackground = (Color) value; return oldValue; + case "selectionForeground": oldValue = selectionForeground; selectionForeground = (Color) value; return oldValue; + case "disabledForeground": oldValue = disabledForeground; disabledForeground = (Color) value; return oldValue; + case "acceleratorForeground": oldValue = acceleratorForeground; acceleratorForeground = (Color) value; return oldValue; + case "acceleratorSelectionForeground": oldValue = acceleratorSelectionForeground; acceleratorSelectionForeground = (Color) value; return oldValue; + } + + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, menuItem, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatMenuItemUI.getStyleableInfos( renderer ); + } + @Override public Dimension getMinimumSize( JComponent c ) { // avoid that top-level menus (in menu bar) are made smaller if horizontal space is rare @@ -153,9 +215,10 @@ public class FlatMenuUI protected class FlatMenuRenderer extends FlatMenuItemRenderer { - protected final Color menuBarUnderlineSelectionBackground = FlatUIUtils.getUIColor( "MenuBar.underlineSelectionBackground", underlineSelectionBackground ); - protected final Color menuBarUnderlineSelectionColor = FlatUIUtils.getUIColor( "MenuBar.underlineSelectionColor", underlineSelectionColor ); - protected final int menuBarUnderlineSelectionHeight = FlatUIUtils.getUIInt( "MenuBar.underlineSelectionHeight", underlineSelectionHeight ); + protected Color hoverBackground = UIManager.getColor( "MenuBar.hoverBackground" ); + protected Color menuBarUnderlineSelectionBackground = FlatUIUtils.getUIColor( "MenuBar.underlineSelectionBackground", underlineSelectionBackground ); + protected Color menuBarUnderlineSelectionColor = FlatUIUtils.getUIColor( "MenuBar.underlineSelectionColor", underlineSelectionColor ); + protected int menuBarUnderlineSelectionHeight = FlatUIUtils.getUIInt( "MenuBar.underlineSelectionHeight", underlineSelectionHeight ); protected FlatMenuRenderer( JMenuItem menuItem, Icon checkIcon, Icon arrowIcon, Font acceleratorFont, String acceleratorDelimiter ) @@ -165,27 +228,39 @@ public class FlatMenuUI @Override protected void paintBackground( Graphics g, Color selectionBackground ) { - if( isUnderlineSelection() && ((JMenu)menuItem).isTopLevelMenu() ) - selectionBackground = menuBarUnderlineSelectionBackground; + if( ((JMenu)menuItem).isTopLevelMenu() ) { + if( isUnderlineSelection() ) + selectionBackground = getStyleFromMenuBarUI( ui -> ui.underlineSelectionBackground, menuBarUnderlineSelectionBackground ); - ButtonModel model = menuItem.getModel(); - if( model.isRollover() && !model.isArmed() && !model.isSelected() && - model.isEnabled() && ((JMenu)menuItem).isTopLevelMenu() ) - { - g.setColor( deriveBackground( hoverBackground ) ); - g.fillRect( 0, 0, menuItem.getWidth(), menuItem.getHeight() ); - } else - super.paintBackground( g, selectionBackground ); + ButtonModel model = menuItem.getModel(); + if( model.isRollover() && !model.isArmed() && !model.isSelected() && model.isEnabled() ) { + g.setColor( deriveBackground( getStyleFromMenuBarUI( ui -> ui.hoverBackground, hoverBackground ) ) ); + g.fillRect( 0, 0, menuItem.getWidth(), menuItem.getHeight() ); + return; + } + } + + super.paintBackground( g, selectionBackground ); } @Override protected void paintUnderlineSelection( Graphics g, Color underlineSelectionColor, int underlineSelectionHeight ) { if( ((JMenu)menuItem).isTopLevelMenu() ) { - underlineSelectionColor = menuBarUnderlineSelectionColor; - underlineSelectionHeight = menuBarUnderlineSelectionHeight; + underlineSelectionColor = getStyleFromMenuBarUI( ui -> ui.underlineSelectionColor, menuBarUnderlineSelectionColor ); + underlineSelectionHeight = getStyleFromMenuBarUI( ui -> (ui.underlineSelectionHeight != -1) + ? ui.underlineSelectionHeight : null, menuBarUnderlineSelectionHeight ); } super.paintUnderlineSelection( g, underlineSelectionColor, underlineSelectionHeight ); } + + private T getStyleFromMenuBarUI( Function f, T defaultValue ) { + MenuBarUI ui = ((JMenuBar)menuItem.getParent()).getUI(); + if( !(ui instanceof FlatMenuBarUI) ) + return defaultValue; + + T value = f.apply( (FlatMenuBarUI) ui ); + return (value != null) ? value : defaultValue; + } } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeWindowBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeWindowBorder.java index 86bc8dc4..164e4a74 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeWindowBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatNativeWindowBorder.java @@ -17,6 +17,7 @@ package com.formdev.flatlaf.ui; import java.awt.Color; +import java.awt.Container; import java.awt.Rectangle; import java.awt.Window; import java.beans.PropertyChangeListener; @@ -24,7 +25,6 @@ import java.util.List; import javax.swing.JDialog; import javax.swing.JFrame; import javax.swing.JRootPane; -import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.event.ChangeListener; import com.formdev.flatlaf.FlatClientProperties; @@ -56,7 +56,7 @@ public class FlatNativeWindowBorder private static final boolean canUseJBRCustomDecorations = canUseWindowDecorations && SystemInfo.isJetBrainsJVM_11_orLater && - FlatSystemProperties.getBoolean( FlatSystemProperties.USE_JETBRAINS_CUSTOM_DECORATIONS, true ); + FlatSystemProperties.getBoolean( FlatSystemProperties.USE_JETBRAINS_CUSTOM_DECORATIONS, false ); private static Boolean supported; private static Provider nativeProvider; @@ -76,6 +76,11 @@ public class FlatNativeWindowBorder if( !isSupported() ) return null; + // do nothing if root pane has a parent that is not a window (e.g. a JInternalFrame) + Container parent = rootPane.getParent(); + if( parent != null && !(parent instanceof Window) ) + return null; + // Check whether root pane already has a window, which is the case when // switching from another LaF to FlatLaf. // Also check whether the window is displayable, which is required to install @@ -83,9 +88,8 @@ public class FlatNativeWindowBorder // If the window is not displayable, then it was probably closed/disposed but not yet removed // from the list of windows that AWT maintains and returns with Window.getWindows(). // It could be also be a window that is currently hidden, but may be shown later. - Window window = SwingUtilities.windowForComponent( rootPane ); - if( window != null && window.isDisplayable() ) - install( window ); + if( parent instanceof Window && parent.isDisplayable() ) + install( (Window) parent ); // Install FlatLaf native window border, which must be done late, // when the native window is already created, because it needs access to the window. @@ -174,9 +178,9 @@ public class FlatNativeWindowBorder return; // uninstall native window border - Window window = SwingUtilities.windowForComponent( rootPane ); - if( window != null ) - uninstall( window ); + Container parent = rootPane.getParent(); + if( parent instanceof Window ) + uninstall( (Window) parent ); } private static void uninstall( Window window ) { @@ -231,7 +235,8 @@ public class FlatNativeWindowBorder } static void setTitleBarHeightAndHitTestSpots( Window window, int titleBarHeight, - List hitTestSpots, Rectangle appIconBounds ) + List hitTestSpots, Rectangle appIconBounds, Rectangle minimizeButtonBounds, + Rectangle maximizeButtonBounds, Rectangle closeButtonBounds ) { if( canUseJBRCustomDecorations ) { JBRCustomDecorations.setTitleBarHeightAndHitTestSpots( window, titleBarHeight, hitTestSpots ); @@ -241,9 +246,8 @@ public class FlatNativeWindowBorder if( !isSupported() ) return; - nativeProvider.setTitleBarHeight( window, titleBarHeight ); - nativeProvider.setTitleBarHitTestSpots( window, hitTestSpots ); - nativeProvider.setTitleBarAppIconBounds( window, appIconBounds ); + nativeProvider.updateTitleBarInfo( window, titleBarHeight, hitTestSpots, + appIconBounds, minimizeButtonBounds, maximizeButtonBounds, closeButtonBounds ); } static boolean showWindow( Window window, int cmd ) { @@ -264,7 +268,7 @@ public class FlatNativeWindowBorder try { /* Class cls = Class.forName( "com.formdev.flatlaf.natives.jna.windows.FlatWindowsNativeWindowBorder" ); - Method m = cls.getMethod( "getInstance" ); + java.lang.reflect.Method m = cls.getMethod( "getInstance" ); setNativeProvider( (Provider) m.invoke( null ) ); */ setNativeProvider( FlatWindowsNativeWindowBorder.getInstance() ); @@ -273,9 +277,7 @@ public class FlatNativeWindowBorder } } - /** - * @since 1.1.1 - */ + /** @since 1.1.1 */ public static void setNativeProvider( Provider provider ) { if( nativeProvider != null ) throw new IllegalStateException(); @@ -290,9 +292,9 @@ public class FlatNativeWindowBorder { boolean hasCustomDecoration( Window window ); void setHasCustomDecoration( Window window, boolean hasCustomDecoration ); - void setTitleBarHeight( Window window, int titleBarHeight ); - void setTitleBarHitTestSpots( Window window, List hitTestSpots ); - void setTitleBarAppIconBounds( Window window, Rectangle appIconBounds ); + void updateTitleBarInfo( Window window, int titleBarHeight, List hitTestSpots, + Rectangle appIconBounds, Rectangle minimizeButtonBounds, Rectangle maximizeButtonBounds, + Rectangle closeButtonBounds ); // commands for showWindow(); values must match Win32 API // https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow @@ -311,6 +313,10 @@ public class FlatNativeWindowBorder //---- class WindowTopBorder ------------------------------------------- + /** + * Window top border used on Windows 10. + * No longer needed since Windows 11. + */ static class WindowTopBorder extends JBRCustomDecorations.JBRWindowTopBorder { diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatOptionPaneUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatOptionPaneUI.java index b8e7bb20..e1c8e69a 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatOptionPaneUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatOptionPaneUI.java @@ -19,17 +19,24 @@ package com.formdev.flatlaf.ui; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; -import java.awt.Graphics; import java.awt.GridBagConstraints; -import java.awt.Insets; +import java.beans.PropertyChangeListener; +import javax.swing.Box; +import javax.swing.BoxLayout; +import javax.swing.Icon; import javax.swing.JComponent; +import javax.swing.JLabel; import javax.swing.JPanel; +import javax.swing.JRootPane; +import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.UIResource; import javax.swing.plaf.basic.BasicHTML; import javax.swing.plaf.basic.BasicOptionPaneUI; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.util.SwingUtils; import com.formdev.flatlaf.util.UIScale; /** @@ -75,6 +82,7 @@ import com.formdev.flatlaf.util.UIScale; * * * + * @uiDefault OptionPane.showIcon boolean * @uiDefault OptionPane.iconMessageGap int * @uiDefault OptionPane.messagePadding int * @uiDefault OptionPane.maxCharactersPerLine int @@ -84,10 +92,12 @@ import com.formdev.flatlaf.util.UIScale; public class FlatOptionPaneUI extends BasicOptionPaneUI { + /** @since 2 */ protected boolean showIcon; protected int iconMessageGap; protected int messagePadding; protected int maxCharactersPerLine; private int focusWidth; + private boolean sameSizeButtons; public static ComponentUI createUI( JComponent c ) { return new FlatOptionPaneUI(); @@ -97,10 +107,12 @@ public class FlatOptionPaneUI protected void installDefaults() { super.installDefaults(); + showIcon = UIManager.getBoolean( "OptionPane.showIcon" ); iconMessageGap = UIManager.getInt( "OptionPane.iconMessageGap" ); messagePadding = UIManager.getInt( "OptionPane.messagePadding" ); maxCharactersPerLine = UIManager.getInt( "OptionPane.maxCharactersPerLine" ); focusWidth = UIManager.getInt( "Component.focusWidth" ); + sameSizeButtons = FlatUIUtils.getUIBoolean( "OptionPane.sameSizeButtons", true ); } @Override @@ -110,6 +122,24 @@ public class FlatOptionPaneUI updateChildPanels( optionPane ); } + @Override + protected PropertyChangeListener createPropertyChangeListener() { + PropertyChangeListener superListener = super.createPropertyChangeListener(); + return e -> { + superListener.propertyChange( e ); + + // hide window title bar icon + // (only if showIcon is false, otherwise the default behavior is used) + if( !showIcon && "ancestor".equals( e.getPropertyName() ) && e.getNewValue() != null ) { + JRootPane rootPane = SwingUtilities.getRootPane( optionPane ); + if( rootPane != null && + rootPane.getContentPane().getComponentCount() > 0 && + rootPane.getContentPane().getComponent( 0 ) == optionPane ) + rootPane.putClientProperty( FlatClientProperties.TITLE_BAR_SHOW_ICON, false ); + } + }; + } + @Override public Dimension getMinimumOptionPaneSize() { return UIScale.scale( super.getMinimumOptionPaneSize() ); @@ -127,7 +157,7 @@ public class FlatOptionPaneUI // set icon-message gap if( iconMessageGap > 0 ) { - Component iconMessageSeparator = findByName( messageArea, "OptionPane.separator" ); + Component iconMessageSeparator = SwingUtils.getComponentByName( messageArea, "OptionPane.separator" ); if( iconMessageSeparator != null ) iconMessageSeparator.setPreferredSize( new Dimension( UIScale.scale( iconMessageGap ), 1 ) ); } @@ -157,15 +187,40 @@ public class FlatOptionPaneUI cons.insets.bottom = UIScale.scale( messagePadding ); // disable line wrapping for HTML - if( msg instanceof String && BasicHTML.isHTMLString( (String) msg ) ) - maxll = Integer.MAX_VALUE; + if( msg != null && + !(msg instanceof Component) && + !(msg instanceof Object[]) && + !(msg instanceof Icon) ) + { + msg = msg.toString(); + if( BasicHTML.isHTMLString( (String) msg ) ) + maxll = Integer.MAX_VALUE; + } + + // fix right-to-left alignment if super.addMessageComponents() breaks longer lines + // into multiple labels and puts them into a box that aligns them to the left + if( msg instanceof Box ) { + Box box = (Box) msg; + if( "OptionPane.verticalBox".equals( box.getName() ) && + box.getLayout() instanceof BoxLayout && + ((BoxLayout)box.getLayout()).getAxis() == BoxLayout.Y_AXIS ) + { + box.addPropertyChangeListener( "componentOrientation", e -> { + float alignX = box.getComponentOrientation().isLeftToRight() ? 0 : 1; + for( Component c : box.getComponents() ) { + if( c instanceof JLabel && "OptionPane.label".equals( c.getName() ) ) + ((JLabel)c).setAlignmentX( alignX ); + } + } ); + } + } super.addMessageComponents( container, cons, msg, maxll, internallyCreated ); } private void updateChildPanels( Container c ) { for( Component child : c.getComponents() ) { - if( child instanceof JPanel ) { + if( child.getClass() == JPanel.class ) { JPanel panel = (JPanel)child; // make sub-panel non-opaque for OptionPane.background @@ -174,53 +229,16 @@ public class FlatOptionPaneUI // use non-UIResource borders to avoid that they are replaced when switching LaF Border border = panel.getBorder(); if( border instanceof UIResource ) - panel.setBorder( new NonUIResourceBorder( border ) ); + panel.setBorder( FlatUIUtils.nonUIResource( border ) ); } - if( child instanceof Container ) { + if( child instanceof Container ) updateChildPanels( (Container) child ); - } } } - private Component findByName( Container c, String name ) { - for( Component child : c.getComponents() ) { - if( name.equals( child.getName() ) ) - return child; - - if( child instanceof Container ) { - Component c2 = findByName( (Container) child, name ); - if( c2 != null ) - return c2; - } - } - return null; - } - - //---- class NonUIResourceBorder ------------------------------------------ - - private static class NonUIResourceBorder - implements Border - { - private final Border delegate; - - NonUIResourceBorder( Border delegate ) { - this.delegate = delegate; - } - - @Override - public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { - delegate.paintBorder( c, g, x, y, width, height ); - } - - @Override - public Insets getBorderInsets( Component c ) { - return delegate.getBorderInsets( c ); - } - - @Override - public boolean isBorderOpaque() { - return delegate.isBorderOpaque(); - } + @Override + protected boolean getSizeButtonsToSameWidth() { + return sameSizeButtons; } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPanelUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPanelUI.java index bbf15601..5718611d 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPanelUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPanelUI.java @@ -16,9 +16,20 @@ package com.formdev.flatlaf.ui; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.Map; import javax.swing.JComponent; +import javax.swing.JPanel; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicPanelUI; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.util.LoggingFacade; +import com.formdev.flatlaf.util.UIScale; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JPanel}. @@ -27,15 +38,122 @@ import javax.swing.plaf.basic.BasicPanelUI; * * @uiDefault Panel.font Font unused * @uiDefault Panel.background Color only used if opaque - * @uiDefault Panel.foreground Color + * @uiDefault Panel.foreground Color unused * @uiDefault Panel.border Border * * @author Karl Tauber */ public class FlatPanelUI extends BasicPanelUI + implements StyleableUI, PropertyChangeListener { + // only used via styling (not in UI defaults) + /** @since 2 */ @Styleable protected int arc = -1; + + private final boolean shared; + private Map oldStyleValues; + public static ComponentUI createUI( JComponent c ) { - return FlatUIUtils.createSharedUI( FlatPanelUI.class, FlatPanelUI::new ); + return FlatUIUtils.canUseSharedUI( c ) + ? FlatUIUtils.createSharedUI( FlatPanelUI.class, () -> new FlatPanelUI( true ) ) + : new FlatPanelUI( false ); + } + + /** @since 2 */ + protected FlatPanelUI( boolean shared ) { + this.shared = shared; + } + + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + c.addPropertyChangeListener( this ); + + installStyle( (JPanel) c ); + } + + @Override + public void uninstallUI( JComponent c ) { + super.uninstallUI( c ); + + c.removePropertyChangeListener( this ); + + oldStyleValues = null; + } + + /** @since 2.0.1 */ + @Override + public void propertyChange( PropertyChangeEvent e ) { + switch( e.getPropertyName() ) { + case FlatClientProperties.STYLE: + case FlatClientProperties.STYLE_CLASS: + JPanel c = (JPanel) e.getSource(); + if( shared && FlatStylingSupport.hasStyleProperty( c ) ) { + // unshare component UI if necessary + // updateUI() invokes installStyle() from installUI() + c.updateUI(); + } else + installStyle( c ); + c.revalidate(); + c.repaint(); + break; + } + } + + /** @since 2 */ + protected void installStyle( JPanel c ) { + try { + applyStyle( c, FlatStylingSupport.getResolvedStyle( c, "Panel" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( JPanel c, Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, + (key, value) -> applyStyleProperty( c, key, value ) ); + } + + /** @since 2 */ + protected Object applyStyleProperty( JPanel c, String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, c, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + + @Override + public void update( Graphics g, JComponent c ) { + // fill background + if( c.isOpaque() ) { + int width = c.getWidth(); + int height = c.getHeight(); + int arc = (this.arc >= 0) + ? this.arc + : ((c.getBorder() instanceof FlatLineBorder) + ? ((FlatLineBorder)c.getBorder()).getArc() + : 0); + + // fill background with parent color to avoid garbage in rounded corners + if( arc > 0 ) + FlatUIUtils.paintParentBackground( g, c ); + + g.setColor( c.getBackground() ); + if( arc > 0 ) { + // fill rounded rectangle if having rounded corners + Object[] oldRenderingHints = FlatUIUtils.setRenderingHints( g ); + FlatUIUtils.paintComponentBackground( (Graphics2D) g, 0, 0, width, height, + 0, UIScale.scale( arc ) ); + FlatUIUtils.resetRenderingHints( g, oldRenderingHints ); + } else + g.fillRect( 0, 0, width, height ); + } + + paint( g, c ); } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPasswordFieldUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPasswordFieldUI.java index d338aa53..4e7c7679 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPasswordFieldUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPasswordFieldUI.java @@ -17,29 +17,37 @@ package com.formdev.flatlaf.ui; import java.awt.Color; -import java.awt.Dimension; import java.awt.Graphics; -import java.awt.Graphics2D; +import java.awt.Rectangle; import java.awt.Toolkit; -import java.awt.event.FocusListener; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; -import java.beans.PropertyChangeEvent; +import java.util.Map; +import javax.swing.Action; +import javax.swing.ActionMap; import javax.swing.Icon; import javax.swing.JComponent; +import javax.swing.JPasswordField; +import javax.swing.JToggleButton; import javax.swing.LookAndFeel; +import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.basic.BasicPasswordFieldUI; -import javax.swing.text.Caret; +import javax.swing.text.DefaultEditorKit; +import javax.swing.text.Element; import javax.swing.text.JTextComponent; -import com.formdev.flatlaf.util.HiDPIUtils; +import javax.swing.text.PasswordView; +import javax.swing.text.View; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.icons.FlatCapsLockIcon; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.util.UIScale; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JPasswordField}. * - * + * * * @uiDefault PasswordField.font Font * @uiDefault PasswordField.background Color @@ -52,74 +60,97 @@ import com.formdev.flatlaf.util.HiDPIUtils; * @uiDefault PasswordField.inactiveForeground Color used if not enabled (yes, this is confusing; this should be named disabledForeground) * @uiDefault PasswordField.border Border * @uiDefault PasswordField.margin Insets - * @uiDefault PasswordField.echoChar character * @uiDefault PasswordField.caretBlinkRate int default is 500 milliseconds * - * + * * * @uiDefault Component.minimumWidth int * @uiDefault Component.isIntelliJTheme boolean * @uiDefault PasswordField.placeholderForeground Color * @uiDefault PasswordField.focusedBackground Color optional - * @uiDefault PasswordField.showCapsLock boolean - * @uiDefault PasswordField.capsLockIcon Icon + * @uiDefault PasswordField.iconTextGap int optional, default is 4 * @uiDefault TextComponent.selectAllOnFocusPolicy String never, once (default) or always * @uiDefault TextComponent.selectAllOnMouseClick boolean * + * + * + * @uiDefault PasswordField.echoChar character + * @uiDefault PasswordField.showCapsLock boolean + * @uiDefault PasswordField.showRevealButton boolean + * @uiDefault PasswordField.capsLockIcon Icon + * @uiDefault PasswordField.revealIcon Icon + * * @author Karl Tauber */ public class FlatPasswordFieldUI - extends BasicPasswordFieldUI + extends FlatTextFieldUI { - protected int minimumWidth; - protected boolean isIntelliJTheme; - protected Color placeholderForeground; - protected Color focusedBackground; - protected boolean showCapsLock; - protected Icon capsLockIcon; + // used to preserve reveal button state when switching theme + private static final String KEY_REVEAL_SELECTED = "FlatLaf.internal.FlatPasswordFieldUI.revealSelected"; + + private Character echoChar; + + @Styleable protected boolean showCapsLock; + /** @since 2 */ @Styleable protected boolean showRevealButton; + protected Icon capsLockIcon; + /** @since 2 */ protected Icon revealIcon; - private FocusListener focusListener; private KeyListener capsLockListener; + private boolean capsLockIconShared = true; + private JToggleButton revealButton; + private boolean uninstallEchoChar; public static ComponentUI createUI( JComponent c ) { return new FlatPasswordFieldUI(); } + @Override + protected String getPropertyPrefix() { + return "PasswordField"; + } + + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installRevealButton(); + } + + @Override + public void uninstallUI( JComponent c ) { + uninstallRevealButton(); + + super.uninstallUI( c ); + } + @Override protected void installDefaults() { super.installDefaults(); String prefix = getPropertyPrefix(); - minimumWidth = UIManager.getInt( "Component.minimumWidth" ); - isIntelliJTheme = UIManager.getBoolean( "Component.isIntelliJTheme" ); - placeholderForeground = UIManager.getColor( prefix + ".placeholderForeground" ); - focusedBackground = UIManager.getColor( prefix + ".focusedBackground" ); + echoChar = (Character) UIManager.get( prefix + ".echoChar" ); + if( echoChar != null ) + LookAndFeel.installProperty( getComponent(), "echoChar", echoChar ); + showCapsLock = UIManager.getBoolean( "PasswordField.showCapsLock" ); + showRevealButton = UIManager.getBoolean( "PasswordField.showRevealButton" ); capsLockIcon = UIManager.getIcon( "PasswordField.capsLockIcon" ); - - LookAndFeel.installProperty( getComponent(), "opaque", false ); - - MigLayoutVisualPadding.install( getComponent() ); + revealIcon = UIManager.getIcon( "PasswordField.revealIcon" ); + capsLockIconShared = true; } @Override protected void uninstallDefaults() { super.uninstallDefaults(); - placeholderForeground = null; - focusedBackground = null; capsLockIcon = null; - - MigLayoutVisualPadding.uninstall( getComponent() ); + revealIcon = null; } @Override protected void installListeners() { super.installListeners(); - // necessary to update focus border and background - focusListener = new FlatUIUtils.RepaintFocusListener( getComponent(), null ); - // update caps lock indicator capsLockListener = new KeyAdapter() { @Override @@ -131,12 +162,13 @@ public class FlatPasswordFieldUI repaint( e ); } private void repaint( KeyEvent e ) { - if( e.getKeyCode() == KeyEvent.VK_CAPS_LOCK ) + if( e.getKeyCode() == KeyEvent.VK_CAPS_LOCK ) { e.getComponent().repaint(); + scrollCaretToVisible(); + } } }; - getComponent().addFocusListener( focusListener ); getComponent().addKeyListener( capsLockListener ); } @@ -144,59 +176,171 @@ public class FlatPasswordFieldUI protected void uninstallListeners() { super.uninstallListeners(); - getComponent().removeFocusListener( focusListener ); getComponent().removeKeyListener( capsLockListener ); - focusListener = null; capsLockListener = null; } @Override - protected Caret createCaret() { - return new FlatCaret( UIManager.getString( "TextComponent.selectAllOnFocusPolicy" ), - UIManager.getBoolean( "TextComponent.selectAllOnMouseClick" ) ); + protected void installKeyboardActions() { + super.installKeyboardActions(); + + // map "select-word" action (double-click) to "select-line" action + ActionMap map = SwingUtilities.getUIActionMap( getComponent() ); + if( map != null && map.get( DefaultEditorKit.selectWordAction ) != null ) { + Action selectLineAction = map.get( DefaultEditorKit.selectLineAction ); + if( selectLineAction != null ) + map.put( DefaultEditorKit.selectWordAction, selectLineAction ); + } + } + + /** @since 2 */ + @Override + String getStyleType() { + return "PasswordField"; } @Override - protected void propertyChange( PropertyChangeEvent e ) { - super.propertyChange( e ); - FlatTextFieldUI.propertyChange( getComponent(), e ); + protected void applyStyle( Object style ) { + boolean oldShowRevealButton = showRevealButton; + + super.applyStyle( style ); + + if( showRevealButton != oldShowRevealButton ) { + uninstallRevealButton(); + installRevealButton(); + } + } + + /** @since 2 */ + @Override + protected Object applyStyleProperty( String key, Object value ) { + if( key.equals( "capsLockIconColor" ) && capsLockIcon instanceof FlatCapsLockIcon ) { + if( capsLockIconShared ) { + capsLockIcon = FlatStylingSupport.cloneIcon( capsLockIcon ); + capsLockIconShared = false; + } + return ((FlatCapsLockIcon)capsLockIcon).applyStyleProperty( key, value ); + } + + return super.applyStyleProperty( key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + Map> infos = super.getStyleableInfos( c ); + infos.put( "capsLockIconColor", Color.class ); + return infos; } @Override - protected void paintSafely( Graphics g ) { - FlatTextFieldUI.paintBackground( g, getComponent(), isIntelliJTheme, focusedBackground ); - FlatTextFieldUI.paintPlaceholder( g, getComponent(), placeholderForeground ); - paintCapsLock( g ); - - super.paintSafely( HiDPIUtils.createGraphicsTextYCorrection( (Graphics2D) g ) ); + public View create( Element elem ) { + return new PasswordView( elem ); } - protected void paintCapsLock( Graphics g ) { - if( !showCapsLock ) - return; + /** @since 2 */ + @Override + protected void paintIcons( Graphics g, Rectangle r ) { + super.paintIcons( g, r ); + if( isCapsLockVisible() ) + paintCapsLock( g, r ); + } + + /** @since 2 */ + protected void paintCapsLock( Graphics g, Rectangle r ) { JTextComponent c = getComponent(); - if( !FlatUIUtils.isPermanentFocusOwner( c ) || - !Toolkit.getDefaultToolkit().getLockingKeyState( KeyEvent.VK_CAPS_LOCK ) ) - return; - - int y = (c.getHeight() - capsLockIcon.getIconHeight()) / 2; - int x = c.getWidth() - capsLockIcon.getIconWidth() - y; + int x = c.getComponentOrientation().isLeftToRight() + ? r.x + r.width - capsLockIcon.getIconWidth() + : r.x; + int y = r.y + Math.round( (r.height - capsLockIcon.getIconHeight()) / 2f ); capsLockIcon.paintIcon( c, g, x, y ); } + /** @since 2 */ @Override - protected void paintBackground( Graphics g ) { - // background is painted elsewhere + protected boolean hasTrailingIcon() { + return super.hasTrailingIcon() || isCapsLockVisible(); + } + + /** @since 2 */ + @Override + protected int getTrailingIconWidth() { + return super.getTrailingIconWidth() + + (isCapsLockVisible() ? capsLockIcon.getIconWidth() + UIScale.scale( iconTextGap ) : 0); + } + + /** @since 1.4 */ + protected boolean isCapsLockVisible() { + if( !showCapsLock ) + return false; + + return FlatUIUtils.isPermanentFocusOwner( getComponent() ) && + Toolkit.getDefaultToolkit().getLockingKeyState( KeyEvent.VK_CAPS_LOCK ); + } + + /** @since 2 */ + protected void installRevealButton() { + if( showRevealButton ) { + revealButton = createRevealButton(); + installLayout(); + getComponent().add( revealButton ); + } + } + + /** @since 2 */ + protected JToggleButton createRevealButton() { + JToggleButton button = new JToggleButton( revealIcon ); + button.setName( "PasswordField.revealButton" ); + prepareLeadingOrTrailingComponent( button ); + button.putClientProperty( FlatClientProperties.STYLE_CLASS, "inTextField revealButton" ); + if( FlatClientProperties.clientPropertyBoolean( getComponent(), KEY_REVEAL_SELECTED, false ) ) { + button.setSelected( true ); + updateEchoChar( true ); + } + button.addActionListener( e -> { + boolean selected = button.isSelected(); + updateEchoChar( selected ); + getComponent().putClientProperty( KEY_REVEAL_SELECTED, selected ); + } ); + return button; + } + + private void updateEchoChar( boolean selected ) { + char newEchoChar = selected + ? 0 + : (echoChar != null ? echoChar : '*'); + + JPasswordField c = (JPasswordField) getComponent(); + LookAndFeel.installProperty( c, "echoChar", newEchoChar ); + + // check whether was able to set echo char via LookAndFeel.installProperty() + // if not, then echo char was explicitly changed via JPasswordField.setEchoChar() + char actualEchoChar = c.getEchoChar(); + if( actualEchoChar != newEchoChar ) { + if( selected && actualEchoChar != 0 ) { + // use explicitly set echo char + echoChar = actualEchoChar; + uninstallEchoChar = true; + } + + c.setEchoChar( newEchoChar ); + } + } + + /** @since 2 */ + protected void uninstallRevealButton() { + if( revealButton != null ) { + if( uninstallEchoChar && revealButton.isSelected() ) + ((JPasswordField)getComponent()).setEchoChar( echoChar ); + + getComponent().remove( revealButton ); + revealButton = null; + } } @Override - public Dimension getPreferredSize( JComponent c ) { - return FlatTextFieldUI.applyMinimumWidth( c, super.getPreferredSize( c ), minimumWidth ); - } - - @Override - public Dimension getMinimumSize( JComponent c ) { - return FlatTextFieldUI.applyMinimumWidth( c, super.getMinimumSize( c ), minimumWidth ); + protected JComponent[] getTrailingComponents() { + return new JComponent[] { trailingComponent, revealButton, clearButton }; } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPopupFactory.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPopupFactory.java index 061d9e0a..61ebb31c 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPopupFactory.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPopupFactory.java @@ -16,10 +16,12 @@ package com.formdev.flatlaf.ui; +import java.awt.AWTEvent; import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; +import java.awt.EventQueue; import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.GraphicsEnvironment; @@ -33,6 +35,7 @@ import java.awt.Toolkit; import java.awt.Window; import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; +import java.awt.event.MouseEvent; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import javax.swing.JComponent; @@ -44,6 +47,7 @@ import javax.swing.Popup; import javax.swing.PopupFactory; import javax.swing.RootPaneContainer; import javax.swing.SwingUtilities; +import javax.swing.ToolTipManager; import javax.swing.UIManager; import javax.swing.border.Border; import com.formdev.flatlaf.FlatClientProperties; @@ -120,6 +124,10 @@ public class FlatPopupFactory popupWindow.getGraphicsConfiguration() == owner.getGraphicsConfiguration() ) return popup; + // avoid endless loop (should newer happen; PopupFactory cache size is 5) + if( ++count > 10 ) + return popup; + // remove contents component from popup window if( popupWindow instanceof JWindow ) ((JWindow)popupWindow).getContentPane().removeAll(); @@ -127,10 +135,6 @@ public class FlatPopupFactory // dispose unused popup // (do not invoke popup.hide() because this would cache the popup window) popupWindow.dispose(); - - // avoid endless loop (should newer happen; PopupFactory cache size is 5) - if( ++count > 10 ) - return popup; } } @@ -139,7 +143,7 @@ public class FlatPopupFactory *

* On a dual screen setup, where screens use different scale factors, it may happen * that the window location changes when showing a heavy weight popup window. - * E.g. when opening an dialog on the secondary screen and making combobox popup visible. + * E.g. when opening a dialog on the secondary screen and making combobox popup visible. *

* This is a workaround for https://bugs.openjdk.java.net/browse/JDK-8224608 */ @@ -218,7 +222,7 @@ public class FlatPopupFactory * and corrects the y-location so that the tooltip is placed above the mouse location. */ private Point fixToolTipLocation( Component owner, Component contents, int x, int y ) { - if( !(contents instanceof JToolTip) || !wasInvokedFromToolTipManager() ) + if( !(contents instanceof JToolTip) || !wasInvokedFromToolTipManager() || hasTipLocation( owner ) ) return null; PointerInfo pointerInfo = MouseInfo.getPointerInfo(); @@ -260,13 +264,36 @@ public class FlatPopupFactory } private boolean wasInvokedFromToolTipManager() { - StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); - for( StackTraceElement stackTraceElement : stackTrace ) { - if( "javax.swing.ToolTipManager".equals( stackTraceElement.getClassName() ) && - "showTipWindow".equals( stackTraceElement.getMethodName() ) ) - return true; + return StackUtils.wasInvokedFrom( ToolTipManager.class.getName(), "showTipWindow", 8 ); + } + + /** + * Checks whether the owner component returns a tooltip location in + * JComponent.getToolTipLocation(MouseEvent). + */ + private boolean hasTipLocation( Component owner ) { + if( !(owner instanceof JComponent) ) + return false; + + AWTEvent e = EventQueue.getCurrentEvent(); + MouseEvent me; + if( e instanceof MouseEvent ) + me = (MouseEvent) e; + else { + // no mouse event available because a timer is used to show the tooltip + // --> create mouse event from current mouse location + PointerInfo pointerInfo = MouseInfo.getPointerInfo(); + if( pointerInfo == null ) + return false; + + Point location = new Point( pointerInfo.getLocation()); + SwingUtilities.convertPointFromScreen( location, owner ); + me = new MouseEvent( owner, MouseEvent.MOUSE_MOVED, System.currentTimeMillis(), + 0, location.x, location.y, 0, false ); } - return false; + + return me.getSource() == owner && + ((JComponent)owner).getToolTipLocation( me ) != null; } //---- class NonFlashingPopup --------------------------------------------- @@ -494,6 +521,9 @@ public class FlatPopupFactory JLayeredPane layeredPane = ((RootPaneContainer)window).getLayeredPane(); layeredPane.add( dropShadowPanel, JLayeredPane.POPUP_LAYER, 0 ); + moveMediumWeightDropShadow(); + resizeMediumWeightDropShadow(); + mediumPanelListener = new ComponentListener() { @Override public void componentShown( ComponentEvent e ) { @@ -509,17 +539,12 @@ public class FlatPopupFactory @Override public void componentMoved( ComponentEvent e ) { - if( dropShadowPanel != null && mediumWeightPanel != null ) { - Point location = mediumWeightPanel.getLocation(); - Insets insets = dropShadowPanel.getInsets(); - dropShadowPanel.setLocation( location.x - insets.left, location.y - insets.top ); - } + moveMediumWeightDropShadow(); } @Override public void componentResized( ComponentEvent e ) { - if( dropShadowPanel != null ) - dropShadowPanel.setSize( FlatUIUtils.addInsets( mediumWeightPanel.getSize(), dropShadowPanel.getInsets() ) ); + resizeMediumWeightDropShadow(); } }; mediumWeightPanel.addComponentListener( mediumPanelListener ); @@ -535,5 +560,18 @@ public class FlatPopupFactory parent.repaint( bounds.x, bounds.y, bounds.width, bounds.height ); } } + + private void moveMediumWeightDropShadow() { + if( dropShadowPanel != null && mediumWeightPanel != null ) { + Point location = mediumWeightPanel.getLocation(); + Insets insets = dropShadowPanel.getInsets(); + dropShadowPanel.setLocation( location.x - insets.left, location.y - insets.top ); + } + } + + private void resizeMediumWeightDropShadow() { + if( dropShadowPanel != null && mediumWeightPanel != null ) + dropShadowPanel.setSize( FlatUIUtils.addInsets( mediumWeightPanel.getSize(), dropShadowPanel.getInsets() ) ); + } } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPopupMenuBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPopupMenuBorder.java index ce1b314e..a8cbc11e 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPopupMenuBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPopupMenuBorder.java @@ -16,11 +16,15 @@ package com.formdev.flatlaf.ui; +import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Insets; +import java.util.Map; import javax.swing.JScrollPane; import javax.swing.UIManager; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableBorder; +import com.formdev.flatlaf.ui.FlatStylingSupport.UnknownStyleException; import com.formdev.flatlaf.util.UIScale; /** @@ -33,12 +37,40 @@ import com.formdev.flatlaf.util.UIScale; */ public class FlatPopupMenuBorder extends FlatLineBorder + implements StyleableBorder { + private Color borderColor; + public FlatPopupMenuBorder() { super( UIManager.getInsets( "PopupMenu.borderInsets" ), UIManager.getColor( "PopupMenu.borderColor" ) ); } + /** @since 2 */ + @Override + public Object applyStyleProperty( String key, Object value ) { + Object oldValue; + switch( key ) { + case "borderInsets": return applyStyleProperty( (Insets) value ); + case "borderColor": oldValue = getLineColor(); borderColor = (Color) value; return oldValue; + } + throw new UnknownStyleException( key ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos() { + Map> infos = new FlatStylingSupport.StyleableInfosMap<>(); + infos.put( "borderInsets", Insets.class ); + infos.put( "borderColor", Color.class ); + return infos; + } + + @Override + public Color getLineColor() { + return (borderColor != null) ? borderColor : super.getLineColor(); + } + @Override public Insets getBorderInsets( Component c, Insets insets ) { if( c instanceof Container && diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPopupMenuSeparatorUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPopupMenuSeparatorUI.java index a51fcd54..c0837476 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPopupMenuSeparatorUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPopupMenuSeparatorUI.java @@ -24,8 +24,8 @@ import javax.swing.plaf.ComponentUI; * * * - * @uiDefault PopupMenuSeparator.background Color unused - * @uiDefault PopupMenuSeparator.foreground Color + * @uiDefault Separator.background Color unused + * @uiDefault Separator.foreground Color * * * @@ -39,11 +39,24 @@ public class FlatPopupMenuSeparatorUI extends FlatSeparatorUI { public static ComponentUI createUI( JComponent c ) { - return FlatUIUtils.createSharedUI( FlatPopupMenuSeparatorUI.class, FlatPopupMenuSeparatorUI::new ); + return FlatUIUtils.canUseSharedUI( c ) + ? FlatUIUtils.createSharedUI( FlatPopupMenuSeparatorUI.class, () -> new FlatPopupMenuSeparatorUI( true ) ) + : new FlatPopupMenuSeparatorUI( false ); + } + + /** @since 2 */ + protected FlatPopupMenuSeparatorUI( boolean shared ) { + super( shared ); } @Override protected String getPropertyPrefix() { return "PopupMenuSeparator"; } + + /** @since 2 */ + @Override + String getStyleType() { + return "PopupMenuSeparator"; + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPopupMenuUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPopupMenuUI.java index 480b0222..3c0014ab 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPopupMenuUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatPopupMenuUI.java @@ -16,9 +16,60 @@ package com.formdev.flatlaf.ui; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.EventQueue; +import java.awt.Graphics; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; +import java.awt.Insets; +import java.awt.LayoutManager; +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseWheelEvent; +import java.awt.event.MouseWheelListener; +import java.beans.PropertyChangeListener; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; +import javax.swing.BoxLayout; +import javax.swing.JButton; import javax.swing.JComponent; +import javax.swing.JMenuItem; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JScrollPane; +import javax.swing.JViewport; +import javax.swing.MenuElement; +import javax.swing.MenuSelectionManager; +import javax.swing.Popup; +import javax.swing.PopupFactory; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import javax.swing.Timer; +import javax.swing.UIManager; +import javax.swing.event.MenuKeyEvent; +import javax.swing.event.MenuKeyListener; +import javax.swing.event.PopupMenuEvent; +import javax.swing.event.PopupMenuListener; +import javax.swing.plaf.ButtonUI; import javax.swing.plaf.ComponentUI; +import javax.swing.plaf.UIResource; +import javax.swing.plaf.basic.BasicComboPopup; +import javax.swing.plaf.basic.BasicMenuItemUI; import javax.swing.plaf.basic.BasicPopupMenuUI; +import javax.swing.plaf.basic.DefaultMenuLayout; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.util.LoggingFacade; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JPopupMenu}. @@ -30,12 +81,371 @@ import javax.swing.plaf.basic.BasicPopupMenuUI; * @uiDefault PopupMenu.foreground Color * @uiDefault PopupMenu.border Border * + * + * + * @uiDefault Component.arrowType String chevron (default) or triangle + * @uiDefault PopupMenu.scrollArrowColor Color + * @uiDefault PopupMenu.hoverScrollArrowBackground Color optional + * * @author Karl Tauber */ public class FlatPopupMenuUI extends BasicPopupMenuUI + implements StyleableUI { + /** @since 2.1 */ @Styleable protected String arrowType; + /** @since 2.1 */ @Styleable protected Color scrollArrowColor; + /** @since 2.1 */ @Styleable protected Color hoverScrollArrowBackground; + + private PropertyChangeListener propertyChangeListener; + private Map oldStyleValues; + private AtomicBoolean borderShared; + public static ComponentUI createUI( JComponent c ) { return new FlatPopupMenuUI(); } + + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + + @Override + public void uninstallUI( JComponent c ) { + super.uninstallUI( c ); + + oldStyleValues = null; + borderShared = null; + } + + @Override + public void installDefaults() { + super.installDefaults(); + + arrowType = UIManager.getString( "Component.arrowType" ); + scrollArrowColor = UIManager.getColor( "PopupMenu.scrollArrowColor" ); + hoverScrollArrowBackground = UIManager.getColor( "PopupMenu.hoverScrollArrowBackground" ); + + LayoutManager layout = popupMenu.getLayout(); + if( layout == null || layout instanceof UIResource ) + popupMenu.setLayout( new FlatMenuLayout( popupMenu, BoxLayout.Y_AXIS ) ); + } + + @Override + protected void uninstallDefaults() { + super.uninstallDefaults(); + + scrollArrowColor = null; + hoverScrollArrowBackground = null; + } + + @Override + protected void installListeners() { + super.installListeners(); + + propertyChangeListener = FlatStylingSupport.createPropertyChangeListener( popupMenu, this::installStyle, null ); + popupMenu.addPropertyChangeListener( propertyChangeListener ); + } + + @Override + protected void uninstallListeners() { + super.uninstallListeners(); + + popupMenu.removePropertyChangeListener( propertyChangeListener ); + propertyChangeListener = null; + } + + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( popupMenu, "PopupMenu" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + if( borderShared == null ) + borderShared = new AtomicBoolean( true ); + return FlatStylingSupport.applyToAnnotatedObjectOrBorder( this, key, value, popupMenu, borderShared ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this, popupMenu.getBorder() ); + } + + @Override + public Popup getPopup( JPopupMenu popup, int x, int y ) { + // do not add scroller to combobox popups or to popups that already have a scroll pane + if( popup instanceof BasicComboPopup || + (popup.getComponentCount() > 0 && popup.getComponent( 0 ) instanceof JScrollPane) ) + return super.getPopup( popup, x, y ); + + // do not add scroller if popup fits into screen + Dimension prefSize = popup.getPreferredSize(); + int screenHeight = getScreenHeightAt( x, y ); + if( prefSize.height <= screenHeight ) + return super.getPopup( popup, x, y ); + + // create scroller + FlatPopupScroller scroller = new FlatPopupScroller( popup ); + scroller.setPreferredSize( new Dimension( prefSize.width, screenHeight ) ); + + // create popup + PopupFactory popupFactory = PopupFactory.getSharedInstance(); + return popupFactory.getPopup( popup.getInvoker(), scroller, x, y ); + } + + private int getScreenHeightAt( int x, int y ) { + // find GraphicsConfiguration at popup location (similar to JPopupMenu.getCurrentGraphicsConfiguration()) + GraphicsConfiguration gc = null; + for( GraphicsDevice device : GraphicsEnvironment.getLocalGraphicsEnvironment().getScreenDevices() ) { + if( device.getType() == GraphicsDevice.TYPE_RASTER_SCREEN ) { + GraphicsConfiguration dgc = device.getDefaultConfiguration(); + if( dgc.getBounds().contains( x, y ) ) { + gc = dgc; + break; + } + } + } + if( gc == null && popupMenu.getInvoker() != null ) + gc = popupMenu.getInvoker().getGraphicsConfiguration(); + + // compute screen height + // (always subtract screen insets because there is no API to detect whether + // the popup can overlap the taskbar; see JPopupMenu.canPopupOverlapTaskBar()) + Toolkit toolkit = Toolkit.getDefaultToolkit(); + Rectangle screenBounds = (gc != null) ? gc.getBounds() : new Rectangle( toolkit.getScreenSize() ); + Insets screenInsets = Toolkit.getDefaultToolkit().getScreenInsets( gc ); + return screenBounds.height - screenInsets.top - screenInsets.bottom; + } + + //---- class FlatMenuLayout ----------------------------------------------- + + protected static class FlatMenuLayout + extends DefaultMenuLayout + { + public FlatMenuLayout( Container target, int axis ) { + super( target, axis ); + } + + @Override + public Dimension preferredLayoutSize( Container target ) { + FlatMenuItemRenderer.clearClientProperties( target ); + + return super.preferredLayoutSize( target ); + } + } + + //---- class FlatPopupScroller -------------------------------------------- + + private class FlatPopupScroller + extends JPanel + implements MouseWheelListener, PopupMenuListener, MenuKeyListener + { + private final JPopupMenu popup; + + private final JScrollPane scrollPane; + private final JButton scrollUpButton; + private final JButton scrollDownButton; + private int unitIncrement; + + FlatPopupScroller( JPopupMenu popup ) { + super( new BorderLayout() ); + this.popup = popup; + + // this panel is required to avoid that JPopupMenu.setLocation() will be invoked + // while scrolling, because this would call JPopupMenu.showPopup() + JPanel view = new JPanel( new BorderLayout() ); + view.add( popup, BorderLayout.CENTER ); + + scrollPane = new JScrollPane( view, JScrollPane.VERTICAL_SCROLLBAR_NEVER, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ); + scrollPane.setBorder( null ); + + scrollUpButton = new ArrowButton( SwingConstants.NORTH ); + scrollDownButton = new ArrowButton( SwingConstants.SOUTH ); + + add( scrollPane, BorderLayout.CENTER ); + add( scrollUpButton, BorderLayout.NORTH ); + add( scrollDownButton, BorderLayout.SOUTH ); + + setBackground( popup.getBackground() ); + setBorder( popup.getBorder() ); + popup.setBorder( null ); + + popup.addPopupMenuListener( this ); + popup.addMouseWheelListener( this ); + popup.addMenuKeyListener( this ); + + updateArrowButtons(); + } + + void scroll( int unitsToScroll ) { + if( unitIncrement == 0 ) + unitIncrement = new JMenuItem( "X" ).getPreferredSize().height; + + JViewport viewport = scrollPane.getViewport(); + Point viewPosition = viewport.getViewPosition(); + int newY = viewPosition.y + (unitIncrement * unitsToScroll); + if( newY < 0 ) + newY = 0; + else + newY = Math.min( newY, viewport.getViewSize().height - viewport.getExtentSize().height ); + viewport.setViewPosition( new Point( viewPosition.x, newY ) ); + + updateArrowButtons(); + } + + void updateArrowButtons() { + JViewport viewport = scrollPane.getViewport(); + Point viewPosition = viewport.getViewPosition(); + + scrollUpButton.setVisible( viewPosition.y > 0 ); + scrollDownButton.setVisible( viewPosition.y < viewport.getViewSize().height - viewport.getExtentSize().height ); + } + + //---- interface PopupMenuListener ---- + + @Override + public void popupMenuWillBecomeInvisible( PopupMenuEvent e ) { + // restore popup border + popup.setBorder( getBorder() ); + + popup.removePopupMenuListener( this ); + popup.removeMouseWheelListener( this ); + popup.removeMenuKeyListener( this ); + } + + @Override public void popupMenuWillBecomeVisible( PopupMenuEvent e ) {} + @Override public void popupMenuCanceled( PopupMenuEvent e ) {} + + //---- interface MouseWheelListener ---- + + /** + * Scroll when user rotates mouse wheel. + */ + @Override + public void mouseWheelMoved( MouseWheelEvent e ) { + // convert mouse location before scrolling + Point mouseLocation = SwingUtilities.convertPoint( (Component) e.getSource(), e.getPoint(), this ); + + // scroll + scroll( e.getUnitsToScroll() ); + + // select menu item at mouse location + Component c = SwingUtilities.getDeepestComponentAt( this, mouseLocation.x, mouseLocation.y ); + if( c instanceof JMenuItem ) { + ButtonUI ui = ((JMenuItem)c).getUI(); + if( ui instanceof BasicMenuItemUI ) + MenuSelectionManager.defaultManager().setSelectedPath( ((BasicMenuItemUI)ui).getPath() ); + } + + // this avoids that the popup is closed when running on Java 8 + // https://bugs.openjdk.java.net/browse/JDK-8075063 + e.consume(); + } + + //---- interface MenuKeyListener ---- + + /** + * Scroll when user presses Up or Down keys. + */ + @Override + public void menuKeyPressed( MenuKeyEvent e ) { + // use invokeLater() because menu selection is not yet updated because + // this listener is invoked before another listener that updates the menu selection + EventQueue.invokeLater( () -> { + if( !isDisplayable() ) + return; + + MenuElement[] path = MenuSelectionManager.defaultManager().getSelectedPath(); + if( path.length == 0 ) + return; + + // scroll selected menu item to visible area + Component c = path[path.length - 1].getComponent(); + JViewport viewport = scrollPane.getViewport(); + Point pt = SwingUtilities.convertPoint( c, 0, 0, viewport ); + viewport.scrollRectToVisible( new Rectangle( pt, c.getSize() ) ); + + // update arrow buttons + boolean upVisible = scrollUpButton.isVisible(); + updateArrowButtons(); + if( !upVisible && scrollUpButton.isVisible() ) { + // if "up" button becomes visible, make sure that bottom menu item stays visible + Point viewPosition = viewport.getViewPosition(); + int newY = viewPosition.y + scrollUpButton.getPreferredSize().height; + viewport.setViewPosition( new Point( viewPosition.x, newY ) ); + } + } ); + } + + @Override public void menuKeyTyped( MenuKeyEvent e ) {} + @Override public void menuKeyReleased( MenuKeyEvent e ) {} + + //---- class ArrowButton ---------------------------------------------- + + private class ArrowButton + extends FlatArrowButton + implements MouseListener, ActionListener + { + private Timer timer; + + ArrowButton( int direction ) { + super( direction, arrowType, scrollArrowColor, null, null, hoverScrollArrowBackground, null, null ); + + addMouseListener( this ); + } + + @Override + public void paint( Graphics g ) { + // always fill background to paint over border on HiDPI screens + g.setColor( popup.getBackground() ); + g.fillRect( 0, 0, getWidth(), getHeight() ); + + super.paint( g ); + } + + //---- interface MouseListener ---- + + @Override public void mouseClicked( MouseEvent e ) {} + @Override public void mousePressed( MouseEvent e ) {} + @Override public void mouseReleased( MouseEvent e ) {} + + @Override + public void mouseEntered( MouseEvent e ) { + if( timer == null ) + timer = new Timer( 50, this ); + timer.start(); + } + + @Override + public void mouseExited( MouseEvent e ) { + if( timer != null ) + timer.stop(); + } + + //---- interface ActionListener ---- + + @Override + public void actionPerformed( ActionEvent e ) { + if( timer != null && !isDisplayable() ) { + timer.stop(); + return; + } + + scroll( direction == SwingConstants.NORTH ? -1 : 1 ); + } + } + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatProgressBarUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatProgressBarUI.java index dddc87b7..0d43b7fd 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatProgressBarUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatProgressBarUI.java @@ -25,13 +25,17 @@ import java.awt.Insets; import java.awt.geom.Area; import java.awt.geom.RoundRectangle2D; import java.beans.PropertyChangeListener; +import java.util.Map; import javax.swing.JComponent; import javax.swing.JProgressBar; import javax.swing.LookAndFeel; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicProgressBarUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; import com.formdev.flatlaf.util.HiDPIUtils; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.UIScale; /** @@ -58,17 +62,30 @@ import com.formdev.flatlaf.util.UIScale; */ public class FlatProgressBarUI extends BasicProgressBarUI + implements StyleableUI { - protected int arc; - protected Dimension horizontalSize; - protected Dimension verticalSize; + @Styleable protected int arc; + @Styleable protected Dimension horizontalSize; + @Styleable protected Dimension verticalSize; + + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected boolean largeHeight; + /** @since 2 */ @Styleable protected boolean square; private PropertyChangeListener propertyChangeListener; + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { return new FlatProgressBarUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installDefaults() { super.installDefaults(); @@ -80,6 +97,13 @@ public class FlatProgressBarUI verticalSize = UIManager.getDimension( "ProgressBar.verticalSize" ); } + @Override + protected void uninstallDefaults() { + super.uninstallDefaults(); + + oldStyleValues = null; + } + @Override protected void installListeners() { super.installListeners(); @@ -91,6 +115,13 @@ public class FlatProgressBarUI progressBar.revalidate(); progressBar.repaint(); break; + + case STYLE: + case STYLE_CLASS: + installStyle(); + progressBar.revalidate(); + progressBar.repaint(); + break; } }; progressBar.addPropertyChangeListener( propertyChangeListener ); @@ -104,11 +135,36 @@ public class FlatProgressBarUI propertyChangeListener = null; } + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( progressBar, "ProgressBar" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, progressBar, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + @Override public Dimension getPreferredSize( JComponent c ) { Dimension size = super.getPreferredSize( c ); - if( progressBar.isStringPainted() || clientPropertyBoolean( c, PROGRESS_BAR_LARGE_HEIGHT, false ) ) { + if( progressBar.isStringPainted() || clientPropertyBoolean( c, PROGRESS_BAR_LARGE_HEIGHT, largeHeight ) ) { // recalculate progress height/width to make it smaller Insets insets = progressBar.getInsets(); FontMetrics fm = progressBar.getFontMetrics( progressBar.getFont() ); @@ -151,7 +207,7 @@ public class FlatProgressBarUI return; boolean horizontal = (progressBar.getOrientation() == JProgressBar.HORIZONTAL); - int arc = clientPropertyBoolean( c, PROGRESS_BAR_SQUARE, false ) + int arc = clientPropertyBoolean( c, PROGRESS_BAR_SQUARE, square ) ? 0 : Math.min( UIScale.scale( this.arc ), horizontal ? height : width ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRadioButtonMenuItemUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRadioButtonMenuItemUI.java index 5f65012c..47f7ba06 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRadioButtonMenuItemUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRadioButtonMenuItemUI.java @@ -16,13 +16,19 @@ package com.formdev.flatlaf.ui; +import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; +import java.beans.PropertyChangeListener; +import java.util.Map; import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.LookAndFeel; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicRadioButtonMenuItemUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.UnknownStyleException; +import com.formdev.flatlaf.util.LoggingFacade; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JRadioButtonMenuItem}. @@ -54,13 +60,22 @@ import javax.swing.plaf.basic.BasicRadioButtonMenuItemUI; */ public class FlatRadioButtonMenuItemUI extends BasicRadioButtonMenuItemUI + implements StyleableUI { private FlatMenuItemRenderer renderer; + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { return new FlatRadioButtonMenuItemUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installDefaults() { super.installDefaults(); @@ -74,13 +89,61 @@ public class FlatRadioButtonMenuItemUI protected void uninstallDefaults() { super.uninstallDefaults(); + FlatMenuItemRenderer.clearClientProperties( menuItem.getParent() ); renderer = null; + oldStyleValues = null; } protected FlatMenuItemRenderer createRenderer() { return new FlatMenuItemRenderer( menuItem, checkIcon, arrowIcon, acceleratorFont, acceleratorDelimiter ); } + @Override + protected PropertyChangeListener createPropertyChangeListener( JComponent c ) { + return FlatStylingSupport.createPropertyChangeListener( c, this::installStyle, super.createPropertyChangeListener( c ) ); + } + + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( menuItem, "RadioButtonMenuItem" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + try { + return renderer.applyStyleProperty( key, value ); + } catch ( UnknownStyleException ex ) { + // ignore + } + + Object oldValue; + switch( key ) { + // BasicMenuItemUI + case "selectionBackground": oldValue = selectionBackground; selectionBackground = (Color) value; return oldValue; + case "selectionForeground": oldValue = selectionForeground; selectionForeground = (Color) value; return oldValue; + case "disabledForeground": oldValue = disabledForeground; disabledForeground = (Color) value; return oldValue; + case "acceleratorForeground": oldValue = acceleratorForeground; acceleratorForeground = (Color) value; return oldValue; + case "acceleratorSelectionForeground": oldValue = acceleratorSelectionForeground; acceleratorSelectionForeground = (Color) value; return oldValue; + } + + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, menuItem, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatMenuItemUI.getStyleableInfos( renderer ); + } + @Override protected Dimension getPreferredMenuItemSize( JComponent c, Icon checkIcon, Icon arrowIcon, int defaultTextIconGap ) { return renderer.getPreferredMenuItemSize(); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRadioButtonUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRadioButtonUI.java index 56450014..75aafe7b 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRadioButtonUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRadioButtonUI.java @@ -23,15 +23,24 @@ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Insets; import java.awt.Rectangle; +import java.beans.PropertyChangeEvent; +import java.util.Map; import java.util.Objects; import javax.swing.AbstractButton; import javax.swing.CellRendererPane; +import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.LookAndFeel; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; +import javax.swing.plaf.basic.BasicButtonListener; import javax.swing.plaf.basic.BasicRadioButtonUI; +import com.formdev.flatlaf.FlatClientProperties; import com.formdev.flatlaf.icons.FlatCheckBoxIcon; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.UnknownStyleException; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.UIScale; /** @@ -56,16 +65,34 @@ import com.formdev.flatlaf.util.UIScale; */ public class FlatRadioButtonUI extends BasicRadioButtonUI + implements StyleableUI { protected int iconTextGap; - protected Color disabledText; + @Styleable protected Color disabledText; private Color defaultBackground; + private final boolean shared; + private boolean iconShared = true; private boolean defaults_initialized = false; + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { - return FlatUIUtils.createSharedUI( FlatRadioButtonUI.class, FlatRadioButtonUI::new ); + return FlatUIUtils.canUseSharedUI( c ) + ? FlatUIUtils.createSharedUI( FlatRadioButtonUI.class, () -> new FlatRadioButtonUI( true ) ) + : new FlatRadioButtonUI( false ); + } + + /** @since 2 */ + protected FlatRadioButtonUI( boolean shared ) { + this.shared = shared; + } + + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle( (AbstractButton) c ); } @Override @@ -80,6 +107,7 @@ public class FlatRadioButtonUI defaultBackground = UIManager.getColor( prefix + "background" ); + iconShared = true; defaults_initialized = true; } @@ -93,11 +121,85 @@ public class FlatRadioButtonUI protected void uninstallDefaults( AbstractButton b ) { super.uninstallDefaults( b ); + oldStyleValues = null; + MigLayoutVisualPadding.uninstall( b ); defaults_initialized = false; } - private static Insets tempInsets = new Insets( 0, 0, 0, 0 ); + @Override + protected BasicButtonListener createButtonListener( AbstractButton b ) { + return new FlatRadioButtonListener( b ); + } + + /** @since 2 */ + protected void propertyChange( AbstractButton b, PropertyChangeEvent e ) { + switch( e.getPropertyName() ) { + case FlatClientProperties.STYLE: + case FlatClientProperties.STYLE_CLASS: + if( shared && FlatStylingSupport.hasStyleProperty( b ) ) { + // unshare component UI if necessary + // updateUI() invokes installStyle() from installUI() + b.updateUI(); + } else + installStyle( b ); + b.revalidate(); + b.repaint(); + break; + } + } + + /** @since 2 */ + protected void installStyle( AbstractButton b ) { + try { + applyStyle( b, FlatStylingSupport.getResolvedStyle( b, getStyleType() ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + String getStyleType() { + return "RadioButton"; + } + + /** @since 2 */ + protected void applyStyle( AbstractButton b, Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, + (key, value) -> applyStyleProperty( b, key, value ) ); + } + + /** @since 2 */ + protected Object applyStyleProperty( AbstractButton b, String key, Object value ) { + // style icon + if( key.startsWith( "icon." ) ) { + if( !(icon instanceof FlatCheckBoxIcon) ) + return new UnknownStyleException( key ); + + if( iconShared ) { + icon = FlatStylingSupport.cloneIcon( icon ); + iconShared = false; + } + + key = key.substring( "icon.".length() ); + return ((FlatCheckBoxIcon)icon).applyStyleProperty( key, value ); + } + + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, b, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + Map> infos = FlatStylingSupport.getAnnotatedStyleableInfos( this ); + if( icon instanceof FlatCheckBoxIcon ) { + for( Map.Entry> e : ((FlatCheckBoxIcon)icon).getStyleableInfos().entrySet() ) + infos.put( "icon.".concat( e.getKey() ), e.getValue() ); + } + return infos; + } + + private static final Insets tempInsets = new Insets( 0, 0, 0, 0 ); @Override public Dimension getPreferredSize( JComponent c ) { @@ -110,7 +212,7 @@ public class FlatRadioButtonUI if( focusWidth > 0 ) { // Increase preferred width and height if insets were explicitly reduced (e.g. with // an EmptyBorder) and icon has a focus width, which is not included in icon size. - // Otherwise the component may be too small and outer focus border may be cut off. + // Otherwise, the component may be too small and outer focus border may be cut off. Insets insets = c.getInsets( tempInsets ); size.width += Math.max( focusWidth - insets.left, 0 ) + Math.max( focusWidth - insets.right, 0 ); size.height += Math.max( focusWidth - insets.top, 0 ) + Math.max( focusWidth - insets.bottom, 0 ); @@ -178,8 +280,32 @@ public class FlatRadioButtonUI private int getIconFocusWidth( JComponent c ) { AbstractButton b = (AbstractButton) c; - return (b.getIcon() == null && getDefaultIcon() instanceof FlatCheckBoxIcon) - ? UIScale.scale( ((FlatCheckBoxIcon)getDefaultIcon()).focusWidth ) + Icon icon = b.getIcon(); + if( icon == null ) + icon = getDefaultIcon(); + + return (icon instanceof FlatCheckBoxIcon) + ? Math.round( UIScale.scale( ((FlatCheckBoxIcon)icon).getFocusWidth() ) ) : 0; } + + //---- class FlatRadioButtonListener -------------------------------------- + + /** @since 2 */ + protected class FlatRadioButtonListener + extends BasicButtonListener + { + private final AbstractButton b; + + protected FlatRadioButtonListener( AbstractButton b ) { + super( b ); + this.b = b; + } + + @Override + public void propertyChange( PropertyChangeEvent e ) { + super.propertyChange( e ); + FlatRadioButtonUI.this.propertyChange( b, e ); + } + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRootPaneUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRootPaneUI.java index 185e32c0..eee1b3c7 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRootPaneUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRootPaneUI.java @@ -27,9 +27,11 @@ import java.awt.Insets; import java.awt.LayoutManager; import java.awt.LayoutManager2; import java.awt.Window; -import java.awt.event.HierarchyEvent; -import java.awt.event.HierarchyListener; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.awt.event.ComponentListener; import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.function.Function; import javax.swing.JComponent; import javax.swing.JDialog; @@ -38,6 +40,7 @@ import javax.swing.JLayeredPane; import javax.swing.JMenuBar; import javax.swing.JRootPane; import javax.swing.LookAndFeel; +import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.plaf.BorderUIResource; @@ -63,6 +66,9 @@ import com.formdev.flatlaf.util.UIScale; * * * + * @uiDefault RootPane.font Font unused + * @uiDefault RootPane.background Color + * @uiDefault RootPane.foreground Color unused * @uiDefault RootPane.borderDragThickness int * @uiDefault RootPane.cornerDragWidth int * @uiDefault RootPane.honorFrameMinimumSizeOnResize boolean @@ -81,7 +87,8 @@ public class FlatRootPaneUI private Object nativeWindowBorderData; private LayoutManager oldLayout; - private HierarchyListener hierarchyListener; + private PropertyChangeListener ancestorListener; + private ComponentListener componentListener; public static ComponentUI createUI( JComponent c ) { return new FlatRootPaneUI(); @@ -122,8 +129,23 @@ public class FlatRootPaneUI protected void installDefaults( JRootPane c ) { super.installDefaults( c ); + // Give the root pane useful background, foreground and font. + // Background is used for title bar and menu bar if native window decorations + // and unified background are enabled. + // Foreground and font are usually not used, but set for completeness. + // Not using LookAndFeel.installColorsAndFont() here because it will not work + // because the properties are null by default but inherit non-null values from parent. + if( !c.isBackgroundSet() || c.getBackground() instanceof UIResource ) + c.setBackground( UIManager.getColor( "RootPane.background" ) ); + if( !c.isForegroundSet() || c.getForeground() instanceof UIResource ) + c.setForeground( UIManager.getColor( "RootPane.foreground" ) ); + if( !c.isFontSet() || c.getFont() instanceof UIResource ) + c.setFont( UIManager.getFont( "RootPane.font" ) ); + // Update background color of JFrame or JDialog parent to avoid bad border // on HiDPI screens when switching from light to dark Laf. + // Window background color is also used in native window decorations + // to fill background when window is initially shown or when resizing window. // The background of JFrame is initialized in JFrame.frameInit() and // the background of JDialog in JDialog.dialogInit(), // but it was not updated when switching Laf. @@ -139,26 +161,55 @@ public class FlatRootPaneUI c.putClientProperty( "jetbrains.awt.windowDarkAppearance", FlatLaf.isLafDark() ); } + @Override + protected void uninstallDefaults( JRootPane c ) { + super.uninstallDefaults( c ); + + // uninstall background, foreground and font because not all Lafs set them + if( c.isBackgroundSet() && c.getBackground() instanceof UIResource ) + c.setBackground( null ); + if( c.isForegroundSet() && c.getForeground() instanceof UIResource ) + c.setForeground( null ); + if( c.isFontSet() && c.getFont() instanceof UIResource ) + c.setFont( null ); + } + @Override protected void installListeners( JRootPane root ) { super.installListeners( root ); if( SystemInfo.isJava_9_orLater ) { - // On HiDPI screens, where scaling is used, there may be white lines at the - // bottom and at the right side of the window when it is initially shown. + // On HiDPI screens, where scaling is used, there may be white lines on the + // bottom and on the right side of the window when it is initially shown. // This is very disturbing in dark themes, but hard to notice in light themes. // Seems to be a rounding issue when Swing adds dirty region of window // using RepaintManager.nativeAddDirtyRegion(). - hierarchyListener = e -> { - if( (e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0 && - rootPane.getParent() instanceof Window ) - { - // add whole root pane to dirty regions when window is initially shown - rootPane.getParent().repaint( rootPane.getX(), rootPane.getY(), - rootPane.getWidth(), rootPane.getHeight() ); + // + // Note: Not using a HierarchyListener here, which would be much easier, + // because this causes problems with mouse clicks in heavy-weight popups. + // Instead, add a listener to the root pane that waits until it is added + // to a window, then add a component listener to the window. + // See: https://github.com/JFormDesigner/FlatLaf/issues/371 + ancestorListener = e -> { + Object oldValue = e.getOldValue(); + Object newValue = e.getNewValue(); + if( newValue instanceof Window ) { + if( componentListener == null ) { + componentListener = new ComponentAdapter() { + @Override + public void componentShown( ComponentEvent e ) { + // add whole root pane to dirty regions when window is initially shown + root.getParent().repaint( root.getX(), root.getY(), root.getWidth(), root.getHeight() ); + } + }; + } + ((Window)newValue).addComponentListener( componentListener ); + } else if( newValue == null && oldValue instanceof Window ) { + if( componentListener != null ) + ((Window)oldValue).removeComponentListener( componentListener ); } }; - root.addHierarchyListener( hierarchyListener ); + root.addPropertyChangeListener( "ancestor", ancestorListener ); } } @@ -167,29 +218,29 @@ public class FlatRootPaneUI super.uninstallListeners( root ); if( SystemInfo.isJava_9_orLater ) { - root.removeHierarchyListener( hierarchyListener ); - hierarchyListener = null; + if( componentListener != null ) { + Window window = SwingUtilities.windowForComponent( root ); + if( window != null ) + window.removeComponentListener( componentListener ); + componentListener = null; + } + root.removePropertyChangeListener( "ancestor", ancestorListener ); + ancestorListener = null; } } - /** - * @since 1.1.2 - */ + /** @since 1.1.2 */ protected void installNativeWindowBorder() { nativeWindowBorderData = FlatNativeWindowBorder.install( rootPane ); } - /** - * @since 1.1.2 - */ + /** @since 1.1.2 */ protected void uninstallNativeWindowBorder() { FlatNativeWindowBorder.uninstall( rootPane, nativeWindowBorderData ); nativeWindowBorderData = null; } - /** - * @since 1.1.2 - */ + /** @since 1.1.2 */ public static void updateNativeWindowBorder( JRootPane rootPane ) { RootPaneUI rui = rootPane.getUI(); if( !(rui instanceof FlatRootPaneUI) ) @@ -293,6 +344,11 @@ public class FlatRootPaneUI } break; + case FlatClientProperties.TITLE_BAR_SHOW_ICON: + if( titlePane != null ) + titlePane.updateIcon(); + break; + case FlatClientProperties.TITLE_BAR_BACKGROUND: case FlatClientProperties.TITLE_BAR_FOREGROUND: if( titlePane != null ) @@ -342,7 +398,7 @@ public class FlatRootPaneUI ? getSizeFunc.apply( rootPane.getContentPane() ) : rootPane.getSize(); - int width = Math.max( titlePaneSize.width, contentSize.width ); + int width = contentSize.width; // title pane width is not considered here int height = titlePaneSize.height + contentSize.height; if( titlePane == null || !titlePane.isMenuBarEmbedded() ) { JMenuBar menuBar = rootPane.getJMenuBar(); @@ -454,7 +510,7 @@ public class FlatRootPaneUI return; Container parent = c.getParent(); - boolean active = parent instanceof Window ? ((Window)parent).isActive() : false; + boolean active = parent instanceof Window && ((Window)parent).isActive(); g.setColor( FlatUIUtils.deriveColor( active ? activeBorderColor : inactiveBorderColor, baseBorderColor ) ); HiDPIUtils.paintAtScale1x( (Graphics2D) g, x, y, width, height, this::paintImpl ); @@ -466,9 +522,7 @@ public class FlatRootPaneUI protected boolean isWindowMaximized( Component c ) { Container parent = c.getParent(); - return parent instanceof Frame - ? (((Frame)parent).getExtendedState() & Frame.MAXIMIZED_BOTH) != 0 - : false; + return parent instanceof Frame && (((Frame)parent).getExtendedState() & Frame.MAXIMIZED_BOTH) != 0; } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRoundBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRoundBorder.java index 3703be9c..bd6e6c53 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRoundBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatRoundBorder.java @@ -18,6 +18,7 @@ package com.formdev.flatlaf.ui; import java.awt.Component; import javax.swing.UIManager; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; /** * Border for various components (e.g. {@link javax.swing.JComboBox}). @@ -29,7 +30,10 @@ import javax.swing.UIManager; public class FlatRoundBorder extends FlatBorder { - protected final int arc = UIManager.getInt( "Component.arc" ); + @Styleable protected int arc = UIManager.getInt( "Component.arc" ); + + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected Boolean roundRect; @Override protected int getArc( Component c ) { @@ -37,6 +41,8 @@ public class FlatRoundBorder return 0; Boolean roundRect = FlatUIUtils.isRoundRect( c ); + if( roundRect == null ) + roundRect = this.roundRect; return roundRect != null ? (roundRect ? Short.MAX_VALUE : 0) : arc; } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollBarUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollBarUI.java index bdc1d925..caffbfde 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollBarUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollBarUI.java @@ -24,6 +24,7 @@ import java.awt.Rectangle; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.beans.PropertyChangeListener; +import java.util.Map; import java.util.Objects; import javax.swing.InputMap; import javax.swing.JButton; @@ -35,6 +36,9 @@ import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicScrollBarUI; import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.UIScale; /** @@ -43,7 +47,7 @@ import com.formdev.flatlaf.util.UIScale; * * * @uiDefault ScrollBar.background Color - * @uiDefault ScrollBar.foreground Color + * @uiDefault ScrollBar.foreground Color unused * @uiDefault ScrollBar.track Color * @uiDefault ScrollBar.thumb Color * @uiDefault ScrollBar.width int @@ -53,6 +57,7 @@ import com.formdev.flatlaf.util.UIScale; * * * + * @uiDefault ScrollBar.minimumButtonSize Dimension * @uiDefault ScrollBar.trackInsets Insets * @uiDefault ScrollBar.thumbInsets Insets * @uiDefault ScrollBar.trackArc int @@ -74,33 +79,47 @@ import com.formdev.flatlaf.util.UIScale; */ public class FlatScrollBarUI extends BasicScrollBarUI + implements StyleableUI { - protected Insets trackInsets; - protected Insets thumbInsets; - protected int trackArc; - protected int thumbArc; - protected Color hoverTrackColor; - protected Color hoverThumbColor; - protected boolean hoverThumbWithTrack; - protected Color pressedTrackColor; - protected Color pressedThumbColor; - protected boolean pressedThumbWithTrack; + // overrides BasicScrollBarUI.supportsAbsolutePositioning (which is private) + @Styleable protected boolean allowsAbsolutePositioning; - protected boolean showButtons; - protected String arrowType; - protected Color buttonArrowColor; - protected Color buttonDisabledArrowColor; - protected Color hoverButtonBackground; - protected Color pressedButtonBackground; + /** @since 2.1 */ @Styleable protected Dimension minimumButtonSize; + @Styleable protected Insets trackInsets; + @Styleable protected Insets thumbInsets; + @Styleable protected int trackArc; + @Styleable protected int thumbArc; + @Styleable protected Color hoverTrackColor; + @Styleable protected Color hoverThumbColor; + @Styleable protected boolean hoverThumbWithTrack; + @Styleable protected Color pressedTrackColor; + @Styleable protected Color pressedThumbColor; + @Styleable protected boolean pressedThumbWithTrack; + + @Styleable protected boolean showButtons; + @Styleable protected String arrowType; + @Styleable protected Color buttonArrowColor; + @Styleable protected Color buttonDisabledArrowColor; + @Styleable protected Color hoverButtonBackground; + @Styleable protected Color pressedButtonBackground; private MouseAdapter hoverListener; protected boolean hoverTrack; protected boolean hoverThumb; + private Map oldStyleValues; + public static ComponentUI createUI( JComponent c ) { return new FlatScrollBarUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installListeners() { super.installListeners(); @@ -123,6 +142,9 @@ public class FlatScrollBarUI protected void installDefaults() { super.installDefaults(); + allowsAbsolutePositioning = super.getSupportsAbsolutePositioning(); + + minimumButtonSize = UIManager.getDimension( "ScrollBar.minimumButtonSize" ); trackInsets = UIManager.getInsets( "ScrollBar.trackInsets" ); thumbInsets = UIManager.getInsets( "ScrollBar.thumbInsets" ); trackArc = UIManager.getInt( "ScrollBar.trackArc" ); @@ -152,6 +174,7 @@ public class FlatScrollBarUI protected void uninstallDefaults() { super.uninstallDefaults(); + minimumButtonSize = null; trackInsets = null; thumbInsets = null; hoverTrackColor = null; @@ -163,6 +186,8 @@ public class FlatScrollBarUI buttonDisabledArrowColor = null; hoverButtonBackground = null; pressedButtonBackground = null; + + oldStyleValues = null; } @Override @@ -177,6 +202,13 @@ public class FlatScrollBarUI scrollbar.repaint(); break; + case FlatClientProperties.STYLE: + case FlatClientProperties.STYLE_CLASS: + installStyle(); + scrollbar.revalidate(); + scrollbar.repaint(); + break; + case "componentOrientation": // this is missing in BasicScrollBarUI.Handler.propertyChange() InputMap inputMap = (InputMap) UIManager.get( "ScrollBar.ancestorInputMap" ); @@ -193,6 +225,53 @@ public class FlatScrollBarUI }; } + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( scrollbar, "ScrollBar" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + + if( incrButton instanceof FlatScrollBarButton ) + ((FlatScrollBarButton)incrButton).updateStyle(); + if( decrButton instanceof FlatScrollBarButton ) + ((FlatScrollBarButton)decrButton).updateStyle(); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + Object oldValue; + switch( key ) { + // BasicScrollBarUI + case "track": oldValue = trackColor; trackColor = (Color) value; return oldValue; + case "thumb": oldValue = thumbColor; thumbColor = (Color) value; return oldValue; + case "width": oldValue = scrollBarWidth; scrollBarWidth = (int) value; return oldValue; + case "minimumThumbSize": oldValue = minimumThumbSize; minimumThumbSize = (Dimension) value; return oldValue; + case "maximumThumbSize": oldValue = maximumThumbSize; maximumThumbSize = (Dimension) value; return oldValue; + } + + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, scrollbar, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + Map> infos = new FlatStylingSupport.StyleableInfosMap<>(); + infos.put( "track", Color.class ); + infos.put( "thumb", Color.class ); + infos.put( "width", int.class ); + infos.put( "minimumThumbSize", Dimension.class ); + infos.put( "maximumThumbSize", Dimension.class ); + FlatStylingSupport.collectAnnotatedStyleableInfos( this, infos ); + return infos; + } + @Override public Dimension getPreferredSize( JComponent c ) { return UIScale.scale( super.getPreferredSize( c ) ); @@ -209,9 +288,17 @@ public class FlatScrollBarUI } protected boolean isShowButtons() { + // check client property on scroll bar Object showButtons = scrollbar.getClientProperty( FlatClientProperties.SCROLL_BAR_SHOW_BUTTONS ); - if( showButtons == null && scrollbar.getParent() instanceof JScrollPane ) - showButtons = ((JScrollPane)scrollbar.getParent()).getClientProperty( FlatClientProperties.SCROLL_BAR_SHOW_BUTTONS ); + if( showButtons == null && scrollbar.getParent() instanceof JScrollPane ) { + JScrollPane scrollPane = (JScrollPane) scrollbar.getParent(); + // check client property on scroll pane + showButtons = scrollPane.getClientProperty( FlatClientProperties.SCROLL_BAR_SHOW_BUTTONS ); + if( showButtons == null && scrollPane.getUI() instanceof FlatScrollPaneUI ) { + // check styling property on scroll pane + showButtons = ((FlatScrollPaneUI)scrollPane.getUI()).showButtons; + } + } return (showButtons != null) ? Objects.equals( showButtons, true ) : this.showButtons; } @@ -295,6 +382,11 @@ public class FlatScrollBarUI return UIScale.scale( FlatUIUtils.addInsets( super.getMaximumThumbSize(), thumbInsets ) ); } + @Override + public boolean getSupportsAbsolutePositioning() { + return allowsAbsolutePositioning; + } + //---- class ScrollBarHoverListener --------------------------------------- // using static field to disabling hover for other scroll bars @@ -363,11 +455,27 @@ public class FlatScrollBarUI super( direction, type, foreground, disabledForeground, hoverForeground, hoverBackground, pressedForeground, pressedBackground ); - setArrowWidth( FlatArrowButton.DEFAULT_ARROW_WIDTH - 2 ); setFocusable( false ); setRequestFocusEnabled( false ); } + protected void updateStyle() { + updateStyle( arrowType, buttonArrowColor, buttonDisabledArrowColor, + null, hoverButtonBackground, null, pressedButtonBackground ); + } + + @Override + public int getArrowWidth() { + // scale arrow size depending on scroll bar width + // (6 is default arrow width; 10 is base scroll bar width) + int arrowWidth = Math.round( 6 * (scrollBarWidth / 10f) ); + + // compute arrow size that leaves equal space on both sides (arrow is centered) + arrowWidth = scrollBarWidth - (((scrollBarWidth - arrowWidth) / 2) * 2); + + return arrowWidth; + } + @Override protected Color deriveBackground( Color background ) { return FlatUIUtils.deriveColor( background, scrollbar.getBackground() ); @@ -376,8 +484,9 @@ public class FlatScrollBarUI @Override public Dimension getPreferredSize() { if( isShowButtons() ) { - int w = UIScale.scale( scrollBarWidth ); - return new Dimension( w, w ); + int w = UIScale.scale( Math.max( scrollBarWidth, (minimumButtonSize != null) ? minimumButtonSize.width : 0 ) ); + int h = UIScale.scale( Math.max( scrollBarWidth, (minimumButtonSize != null) ? minimumButtonSize.height : 0 ) ); + return new Dimension( w, h ); } else return new Dimension(); } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollPaneUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollPaneUI.java index bd8ba14d..60144c98 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollPaneUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatScrollPaneUI.java @@ -29,6 +29,8 @@ import java.awt.event.MouseWheelEvent; import java.awt.event.MouseWheelListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JComponent; @@ -46,6 +48,9 @@ import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicScrollPaneUI; import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.util.LoggingFacade; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JScrollPane}. @@ -66,9 +71,16 @@ import com.formdev.flatlaf.FlatClientProperties; */ public class FlatScrollPaneUI extends BasicScrollPaneUI + implements StyleableUI { + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected Boolean showButtons; + private Handler handler; + private Map oldStyleValues; + private AtomicBoolean borderShared; + public static ComponentUI createUI( JComponent c ) { return new FlatScrollPaneUI(); } @@ -80,6 +92,8 @@ public class FlatScrollPaneUI int focusWidth = UIManager.getInt( "Component.focusWidth" ); LookAndFeel.installProperty( c, "opaque", focusWidth == 0 ); + installStyle(); + MigLayoutVisualPadding.install( scrollpane ); } @@ -88,6 +102,9 @@ public class FlatScrollPaneUI MigLayoutVisualPadding.uninstall( scrollpane ); super.uninstallUI( c ); + + oldStyleValues = null; + borderShared = null; } @Override @@ -272,7 +289,18 @@ public class FlatScrollPaneUI ((JButton)corner).setBorder( BorderFactory.createEmptyBorder() ); ((JButton)corner).setFocusable( false ); } - break; + break; + + case FlatClientProperties.OUTLINE: + scrollpane.repaint(); + break; + + case FlatClientProperties.STYLE: + case FlatClientProperties.STYLE_CLASS: + installStyle(); + scrollpane.revalidate(); + scrollpane.repaint(); + break; } }; } @@ -283,6 +311,38 @@ public class FlatScrollPaneUI return handler; } + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( scrollpane, "ScrollPane" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + if( key.equals( "focusWidth" ) ) { + int focusWidth = (value instanceof Integer) ? (int) value : UIManager.getInt( "Component.focusWidth" ); + LookAndFeel.installProperty( scrollpane, "opaque", focusWidth == 0 ); + } + + if( borderShared == null ) + borderShared = new AtomicBoolean( true ); + return FlatStylingSupport.applyToAnnotatedObjectOrBorder( this, key, value, scrollpane, borderShared ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this, scrollpane.getBorder() ); + } + @Override protected void updateViewport( PropertyChangeEvent e ) { super.updateViewport( e ); @@ -332,6 +392,7 @@ public class FlatScrollPaneUI paint( g, c ); } + /** @since 1.3 */ public static boolean isPermanentFocusOwner( JScrollPane scrollPane ) { JViewport viewport = scrollPane.getViewport(); Component view = (viewport != null) ? viewport.getView() : null; diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSeparatorUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSeparatorUI.java index 7ace822b..ac02e4b9 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSeparatorUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSeparatorUI.java @@ -21,11 +21,18 @@ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.Map; import javax.swing.JComponent; import javax.swing.JSeparator; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicSeparatorUI; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.util.LoggingFacade; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JSeparator}. @@ -45,15 +52,36 @@ import javax.swing.plaf.basic.BasicSeparatorUI; */ public class FlatSeparatorUI extends BasicSeparatorUI + implements StyleableUI, PropertyChangeListener { - protected int height; - protected int stripeWidth; - protected int stripeIndent; + @Styleable protected int height; + @Styleable protected int stripeWidth; + @Styleable protected int stripeIndent; + private final boolean shared; private boolean defaults_initialized = false; + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { - return FlatUIUtils.createSharedUI( FlatSeparatorUI.class, FlatSeparatorUI::new ); + return FlatUIUtils.canUseSharedUI( c ) + ? FlatUIUtils.createSharedUI( FlatSeparatorUI.class, () -> new FlatSeparatorUI( true ) ) + : new FlatSeparatorUI( false ); + } + + /** @since 2 */ + protected FlatSeparatorUI( boolean shared ) { + this.shared = shared; + } + + protected String getPropertyPrefix() { + return "Separator"; + } + + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle( (JSeparator) c ); } @Override @@ -73,13 +101,75 @@ public class FlatSeparatorUI @Override protected void uninstallDefaults( JSeparator s ) { super.uninstallDefaults( s ); + defaults_initialized = false; + oldStyleValues = null; } - protected String getPropertyPrefix() { + @Override + protected void installListeners( JSeparator s ) { + super.installListeners( s ); + + s.addPropertyChangeListener( this ); + } + + @Override + protected void uninstallListeners( JSeparator s ) { + super.uninstallListeners( s ); + + s.removePropertyChangeListener( this ); + } + + /** @since 2.0.1 */ + @Override + public void propertyChange( PropertyChangeEvent e ) { + switch( e.getPropertyName() ) { + case FlatClientProperties.STYLE: + case FlatClientProperties.STYLE_CLASS: + JSeparator s = (JSeparator) e.getSource(); + if( shared && FlatStylingSupport.hasStyleProperty( s ) ) { + // unshare component UI if necessary + // updateUI() invokes installStyle() from installUI() + s.updateUI(); + } else + installStyle( s ); + s.revalidate(); + s.repaint(); + break; + } + } + + /** @since 2 */ + protected void installStyle( JSeparator s ) { + try { + applyStyle( s, FlatStylingSupport.getResolvedStyle( s, getStyleType() ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + String getStyleType() { return "Separator"; } + /** @since 2 */ + protected void applyStyle( JSeparator s, Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, + (key, value) -> applyStyleProperty( s, key, value ) ); + } + + /** @since 2 */ + protected Object applyStyleProperty( JSeparator s, String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, s, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + @Override public void paint( Graphics g, JComponent c ) { Graphics2D g2 = (Graphics2D) g.create(); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSliderUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSliderUI.java index b44f769f..96f6b8b3 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSliderUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSliderUI.java @@ -18,15 +18,19 @@ package com.formdev.flatlaf.ui; import java.awt.Color; import java.awt.Dimension; +import java.awt.Font; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; +import java.awt.Insets; import java.awt.Rectangle; import java.awt.Shape; import java.awt.event.MouseEvent; import java.awt.geom.Ellipse2D; import java.awt.geom.Path2D; import java.awt.geom.RoundRectangle2D; +import java.beans.PropertyChangeListener; +import java.util.Map; import javax.swing.JComponent; import javax.swing.JSlider; import javax.swing.LookAndFeel; @@ -34,7 +38,11 @@ import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicSliderUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.util.Graphics2DProxy; import com.formdev.flatlaf.util.HiDPIUtils; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.UIScale; /** @@ -57,6 +65,8 @@ import com.formdev.flatlaf.util.UIScale; * @uiDefault Slider.trackWidth int * @uiDefault Slider.thumbSize Dimension * @uiDefault Slider.focusWidth int + * @uiDefault Slider.thumbBorderWidth int or float + * * @uiDefault Slider.trackValueColor Color optional; defaults to Slider.thumbColor * @uiDefault Slider.trackColor Color * @uiDefault Slider.thumbColor Color @@ -73,23 +83,26 @@ import com.formdev.flatlaf.util.UIScale; */ public class FlatSliderUI extends BasicSliderUI + implements StyleableUI { - protected int trackWidth; - protected Dimension thumbSize; - protected int focusWidth; + @Styleable protected int trackWidth; + @Styleable protected Dimension thumbSize; + @Styleable protected int focusWidth; + /** @since 2 */ @Styleable protected float thumbBorderWidth; - protected Color trackValueColor; - protected Color trackColor; - protected Color thumbColor; - protected Color thumbBorderColor; + @Styleable protected Color trackValueColor; + @Styleable protected Color trackColor; + @Styleable protected Color thumbColor; + @Styleable protected Color thumbBorderColor; protected Color focusBaseColor; - protected Color focusedColor; - protected Color focusedThumbBorderColor; - protected Color hoverThumbColor; - protected Color pressedThumbColor; - protected Color disabledTrackColor; - protected Color disabledThumbColor; - protected Color disabledThumbBorderColor; + @Styleable protected Color focusedColor; + @Styleable protected Color focusedThumbBorderColor; + @Styleable protected Color hoverThumbColor; + @Styleable protected Color pressedThumbColor; + @Styleable protected Color disabledTrackColor; + @Styleable protected Color disabledThumbColor; + @Styleable protected Color disabledThumbBorderColor; + @Styleable protected Color tickColor; private Color defaultBackground; private Color defaultForeground; @@ -98,6 +111,7 @@ public class FlatSliderUI protected boolean thumbPressed; private Object[] oldRenderingHints; + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { return new FlatSliderUI(); @@ -107,6 +121,13 @@ public class FlatSliderUI super( null ); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installDefaults( JSlider slider ) { super.installDefaults( slider ); @@ -121,6 +142,7 @@ public class FlatSliderUI thumbSize = new Dimension( thumbWidth, thumbWidth ); } focusWidth = FlatUIUtils.getUIInt( "Slider.focusWidth", 4 ); + thumbBorderWidth = FlatUIUtils.getUIFloat( "Slider.thumbBorderWidth", 1 ); trackValueColor = FlatUIUtils.getUIColor( "Slider.trackValueColor", "Slider.thumbColor" ); trackColor = UIManager.getColor( "Slider.trackColor" ); @@ -134,6 +156,7 @@ public class FlatSliderUI disabledTrackColor = UIManager.getColor( "Slider.disabledTrackColor" ); disabledThumbColor = UIManager.getColor( "Slider.disabledThumbColor" ); disabledThumbBorderColor = FlatUIUtils.getUIColor( "Slider.disabledThumbBorderColor", "Component.disabledBorderColor" ); + tickColor = FlatUIUtils.getUIColor( "Slider.tickColor", Color.BLACK ); // see BasicSliderUI.paintTicks() defaultBackground = UIManager.getColor( "Slider.background" ); defaultForeground = UIManager.getColor( "Slider.foreground" ); @@ -155,9 +178,12 @@ public class FlatSliderUI disabledTrackColor = null; disabledThumbColor = null; disabledThumbBorderColor = null; + tickColor = null; defaultBackground = null; defaultForeground = null; + + oldStyleValues = null; } @Override @@ -165,6 +191,37 @@ public class FlatSliderUI return new FlatTrackListener(); } + @Override + protected PropertyChangeListener createPropertyChangeListener( JSlider slider ) { + return FlatStylingSupport.createPropertyChangeListener( slider, this::installStyle, + super.createPropertyChangeListener( slider ) ); + } + + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( slider, "Slider" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, slider, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + @Override public int getBaseline( JComponent c, int width, int height ) { if( c == null ) @@ -176,9 +233,27 @@ public class FlatSliderUI if( slider.getOrientation() == JSlider.VERTICAL ) return -1; + // use default font (instead of slider font) because the slider font size + // may be different to label font size, but we want to align the track/thumb with labels + Font font = UIManager.getFont( "defaultFont" ); + if( font == null ) + font = slider.getFont(); + FontMetrics fm = slider.getFontMetrics( font ); + + // calculate track y coordinate and height + // (not using field trackRect here because slider size may be [0,0] + // and field trackRect may have invalid values in this case) + Insets insets = slider.getInsets(); + int thumbHeight = getThumbSize().height; + int contentHeight = height - insets.top - insets.bottom - focusInsets.top - focusInsets.bottom; + int centerSpacing = thumbHeight + + (slider.getPaintTicks() ? getTickLength() : 0) + + (slider.getPaintLabels() ? getHeightOfTallestLabel() : 0); + int trackY = insets.top + focusInsets.top + (contentHeight - centerSpacing - 1) / 2; + int trackHeight = thumbHeight; + // compute a baseline so that the track is vertically centered - FontMetrics fm = slider.getFontMetrics( slider.getFont() ); - return trackRect.y + Math.round( (trackRect.height - fm.getHeight()) / 2f ) + fm.getAscent() - 1; + return trackY + Math.round( (trackHeight - fm.getHeight()) / 2f ) + fm.getAscent() - 1; } @Override @@ -306,6 +381,19 @@ debug*/ ((Graphics2D)g).fill( track ); } + @Override + public void paintTicks( Graphics g ) { + // because BasicSliderUI.paintTicks() always uses + // g.setColor( UIManager.getColor("Slider.tickColor") ) + // we override this method and use our tickColor field to allow styling + super.paintTicks( new Graphics2DProxy( (Graphics2D) g ) { + @Override + public void setColor( Color c ) { + super.setColor( tickColor ); + } + } ); + } + @Override public void paintThumb( Graphics g ) { Color thumbColor = getThumbColor(); @@ -321,11 +409,11 @@ debug*/ Color focusedColor = FlatUIUtils.deriveColor( this.focusedColor, (foreground != defaultForeground) ? foreground : focusBaseColor ); - paintThumb( g, slider, thumbRect, isRoundThumb(), color, borderColor, focusedColor, focusWidth ); + paintThumb( g, slider, thumbRect, isRoundThumb(), color, borderColor, focusedColor, thumbBorderWidth, focusWidth ); } public static void paintThumb( Graphics g, JSlider slider, Rectangle thumbRect, boolean roundThumb, - Color thumbColor, Color thumbBorderColor, Color focusedColor, int focusWidth ) + Color thumbColor, Color thumbBorderColor, Color focusedColor, float thumbBorderWidth, int focusWidth ) { double systemScaleFactor = UIScale.getSystemScaleFactor( (Graphics2D) g ); if( systemScaleFactor != 1 && systemScaleFactor != 2 ) { @@ -334,18 +422,20 @@ debug*/ (g2d, x2, y2, width2, height2, scaleFactor) -> { paintThumbImpl( g, slider, x2, y2, width2, height2, roundThumb, thumbColor, thumbBorderColor, focusedColor, + (float) (thumbBorderWidth * scaleFactor), (float) (focusWidth * scaleFactor) ); } ); return; } paintThumbImpl( g, slider, thumbRect.x, thumbRect.y, thumbRect.width, thumbRect.height, - roundThumb, thumbColor, thumbBorderColor, focusedColor, focusWidth ); + roundThumb, thumbColor, thumbBorderColor, focusedColor, thumbBorderWidth, focusWidth ); } private static void paintThumbImpl( Graphics g, JSlider slider, int x, int y, int width, int height, - boolean roundThumb, Color thumbColor, Color thumbBorderColor, Color focusedColor, float focusWidth ) + boolean roundThumb, Color thumbColor, Color thumbBorderColor, Color focusedColor, + float thumbBorderWidth, float focusWidth ) { int fw = Math.round( UIScale.scale( focusWidth ) ); int tx = x + fw; @@ -367,7 +457,7 @@ debug*/ ((Graphics2D)g).fill( createRoundThumbShape( tx, ty, tw, th ) ); // paint thumb background - float lw = UIScale.scale( 1f ); + float lw = UIScale.scale( thumbBorderWidth ); g.setColor( thumbColor ); ((Graphics2D)g).fill( createRoundThumbShape( tx + lw, ty + lw, tw - lw - lw, th - lw - lw ) ); @@ -408,7 +498,7 @@ debug*/ g2.fill( createDirectionalThumbShape( fw, fw, tw, th, 0 ) ); // paint thumb background - float lw = UIScale.scale( 1f ); + float lw = UIScale.scale( thumbBorderWidth ); g2.setColor( thumbColor ); g2.fill( createDirectionalThumbShape( fw + lw, fw + lw, tw - lw - lw, th - lw - lw - (lw * 0.4142f), 0 ) ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSpinnerUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSpinnerUI.java index a341d0a9..0e4605e9 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSpinnerUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSpinnerUI.java @@ -21,6 +21,7 @@ import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; +import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; @@ -32,6 +33,8 @@ import java.awt.event.FocusListener; import java.awt.geom.Rectangle2D; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; import javax.swing.JComponent; import javax.swing.JSpinner; import javax.swing.JTextField; @@ -42,6 +45,9 @@ import javax.swing.plaf.ComponentUI; import javax.swing.plaf.UIResource; import javax.swing.plaf.basic.BasicSpinnerUI; import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.util.LoggingFacade; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JSpinner}. @@ -62,12 +68,13 @@ import com.formdev.flatlaf.FlatClientProperties; * @uiDefault Spinner.buttonStyle String button (default) or none * @uiDefault Component.arrowType String chevron (default) or triangle * @uiDefault Component.isIntelliJTheme boolean - * @uiDefault Component.borderColor Color - * @uiDefault Component.disabledBorderColor Color * @uiDefault Spinner.disabledBackground Color * @uiDefault Spinner.disabledForeground Color * @uiDefault Spinner.focusedBackground Color optional - * @uiDefault Spinner.buttonBackground Color + * @uiDefault Spinner.buttonBackground Color optional + * @uiDefault Spinner.buttonSeparatorWidth int or float optional; defaults to Component.borderWidth + * @uiDefault Spinner.buttonSeparatorColor Color optional + * @uiDefault Spinner.buttonDisabledSeparatorColor Color optional * @uiDefault Spinner.buttonArrowColor Color * @uiDefault Spinner.buttonDisabledArrowColor Color * @uiDefault Spinner.buttonHoverArrowColor Color @@ -78,29 +85,41 @@ import com.formdev.flatlaf.FlatClientProperties; */ public class FlatSpinnerUI extends BasicSpinnerUI + implements StyleableUI { private Handler handler; - protected int minimumWidth; - protected String buttonStyle; - protected String arrowType; + @Styleable protected int minimumWidth; + @Styleable protected String buttonStyle; + @Styleable protected String arrowType; protected boolean isIntelliJTheme; - protected Color borderColor; - protected Color disabledBorderColor; - protected Color disabledBackground; - protected Color disabledForeground; - protected Color focusedBackground; - protected Color buttonBackground; - protected Color buttonArrowColor; - protected Color buttonDisabledArrowColor; - protected Color buttonHoverArrowColor; - protected Color buttonPressedArrowColor; - protected Insets padding; + @Styleable protected Color disabledBackground; + @Styleable protected Color disabledForeground; + @Styleable protected Color focusedBackground; + @Styleable protected Color buttonBackground; + /** @since 2 */ @Styleable protected float buttonSeparatorWidth; + /** @since 2 */ @Styleable protected Color buttonSeparatorColor; + /** @since 2 */ @Styleable protected Color buttonDisabledSeparatorColor; + @Styleable protected Color buttonArrowColor; + @Styleable protected Color buttonDisabledArrowColor; + @Styleable protected Color buttonHoverArrowColor; + @Styleable protected Color buttonPressedArrowColor; + @Styleable protected Insets padding; + + private Map oldStyleValues; + private AtomicBoolean borderShared; public static ComponentUI createUI( JComponent c ) { return new FlatSpinnerUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installDefaults() { super.installDefaults(); @@ -111,21 +130,19 @@ public class FlatSpinnerUI buttonStyle = UIManager.getString( "Spinner.buttonStyle" ); arrowType = UIManager.getString( "Component.arrowType" ); isIntelliJTheme = UIManager.getBoolean( "Component.isIntelliJTheme" ); - borderColor = UIManager.getColor( "Component.borderColor" ); - disabledBorderColor = UIManager.getColor( "Component.disabledBorderColor" ); disabledBackground = UIManager.getColor( "Spinner.disabledBackground" ); disabledForeground = UIManager.getColor( "Spinner.disabledForeground" ); focusedBackground = UIManager.getColor( "Spinner.focusedBackground" ); buttonBackground = UIManager.getColor( "Spinner.buttonBackground" ); + buttonSeparatorWidth = FlatUIUtils.getUIFloat( "Spinner.buttonSeparatorWidth", FlatUIUtils.getUIFloat( "Component.borderWidth", 1 ) ); + buttonSeparatorColor = UIManager.getColor( "Spinner.buttonSeparatorColor" ); + buttonDisabledSeparatorColor = UIManager.getColor( "Spinner.buttonDisabledSeparatorColor" ); buttonArrowColor = UIManager.getColor( "Spinner.buttonArrowColor" ); buttonDisabledArrowColor = UIManager.getColor( "Spinner.buttonDisabledArrowColor" ); buttonHoverArrowColor = UIManager.getColor( "Spinner.buttonHoverArrowColor" ); buttonPressedArrowColor = UIManager.getColor( "Spinner.buttonPressedArrowColor" ); padding = UIManager.getInsets( "Spinner.padding" ); - // scale - padding = scale( padding ); - MigLayoutVisualPadding.install( spinner ); } @@ -133,18 +150,21 @@ public class FlatSpinnerUI protected void uninstallDefaults() { super.uninstallDefaults(); - borderColor = null; - disabledBorderColor = null; disabledBackground = null; disabledForeground = null; focusedBackground = null; buttonBackground = null; + buttonSeparatorColor = null; + buttonDisabledSeparatorColor = null; buttonArrowColor = null; buttonDisabledArrowColor = null; buttonHoverArrowColor = null; buttonPressedArrowColor = null; padding = null; + oldStyleValues = null; + borderShared = null; + MigLayoutVisualPadding.uninstall( spinner ); } @@ -174,17 +194,39 @@ public class FlatSpinnerUI return handler; } + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( spinner, "Spinner" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + updateEditorPadding(); + updateArrowButtonsStyle(); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + if( borderShared == null ) + borderShared = new AtomicBoolean( true ); + return FlatStylingSupport.applyToAnnotatedObjectOrBorder( this, key, value, spinner, borderShared ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this, spinner.getBorder() ); + } + @Override protected JComponent createEditor() { JComponent editor = super.createEditor(); - - // explicitly make non-opaque - editor.setOpaque( false ); - JTextField textField = getEditorTextField( editor ); - if( textField != null ) - textField.setOpaque( false ); - - updateEditorColors(); + configureEditor( editor ); return editor; } @@ -192,8 +234,21 @@ public class FlatSpinnerUI protected void replaceEditor( JComponent oldEditor, JComponent newEditor ) { super.replaceEditor( oldEditor, newEditor ); + configureEditor( newEditor ); + removeEditorFocusListener( oldEditor ); addEditorFocusListener( newEditor ); + } + + /** @since 1.6 */ + protected void configureEditor( JComponent editor ) { + // explicitly make non-opaque + editor.setOpaque( false ); + JTextField textField = getEditorTextField( editor ); + if( textField != null ) + textField.setOpaque( false ); + + updateEditorPadding(); updateEditorColors(); } @@ -209,6 +264,12 @@ public class FlatSpinnerUI textField.removeFocusListener( getHandler() ); } + private void updateEditorPadding() { + JTextField textField = getEditorTextField( spinner.getEditor() ); + if( textField != null ) + textField.putClientProperty( FlatClientProperties.TEXT_FIELD_PADDING, padding ); + } + private void updateEditorColors() { JTextField textField = getEditorTextField( spinner.getEditor() ); if( textField != null ) { @@ -226,14 +287,13 @@ public class FlatSpinnerUI : null; } + /** @since 1.3 */ public static boolean isPermanentFocusOwner( JSpinner spinner ) { if( FlatUIUtils.isPermanentFocusOwner( spinner ) ) return true; JTextField textField = getEditorTextField( spinner.getEditor() ); - return (textField != null) - ? FlatUIUtils.isPermanentFocusOwner( textField ) - : false; + return textField != null && FlatUIUtils.isPermanentFocusOwner( textField ); } protected Color getBackground( boolean enabled ) { @@ -276,7 +336,7 @@ public class FlatSpinnerUI FlatArrowButton button = new FlatArrowButton( direction, arrowType, buttonArrowColor, buttonDisabledArrowColor, buttonHoverArrowColor, null, buttonPressedArrowColor, null ); button.setName( name ); - button.setYOffset( (direction == SwingConstants.NORTH) ? 1 : -1 ); + button.setYOffset( (direction == SwingConstants.NORTH) ? 1.25f : -1.25f ); if( direction == SwingConstants.NORTH ) installNextButtonListeners( button ); else @@ -284,6 +344,15 @@ public class FlatSpinnerUI return button; } + private void updateArrowButtonsStyle() { + for( Component c : spinner.getComponents() ) { + if( c instanceof FlatArrowButton ) { + ((FlatArrowButton)c).updateStyle( arrowType, buttonArrowColor, + buttonDisabledArrowColor, buttonHoverArrowColor, null, buttonPressedArrowColor, null ); + } + } + } + @Override public void update( Graphics g, JComponent c ) { float focusWidth = FlatUIUtils.getBorderFocusWidth( c ); @@ -314,7 +383,7 @@ public class FlatSpinnerUI boolean isLeftToRight = spinner.getComponentOrientation().isLeftToRight(); // paint arrow buttons background - if( enabled ) { + if( enabled && buttonBackground != null ) { g2.setColor( buttonBackground ); Shape oldClip = g2.getClip(); if( isLeftToRight ) @@ -326,10 +395,13 @@ public class FlatSpinnerUI } // paint vertical line between value and arrow buttons - g2.setColor( enabled ? borderColor : disabledBorderColor ); - float lw = scale( 1f ); - float lx = isLeftToRight ? arrowX : arrowX + arrowWidth - lw; - g2.fill( new Rectangle2D.Float( lx, focusWidth, lw, height - 1 - (focusWidth * 2) ) ); + Color separatorColor = enabled ? buttonSeparatorColor : buttonDisabledSeparatorColor; + if( separatorColor != null && buttonSeparatorWidth > 0 ) { + g2.setColor( separatorColor ); + float lw = scale( buttonSeparatorWidth ); + float lx = isLeftToRight ? arrowX : arrowX + arrowWidth - lw; + g2.fill( new Rectangle2D.Float( lx, focusWidth, lw, height - 1 - (focusWidth * 2) ) ); + } } paint( g, c ); @@ -370,9 +442,10 @@ public class FlatSpinnerUI @Override public Dimension preferredLayoutSize( Container parent ) { Insets insets = parent.getInsets(); + Insets padding = scale( FlatSpinnerUI.this.padding ); Dimension editorSize = (editor != null) ? editor.getPreferredSize() : new Dimension( 0, 0 ); - // the arrows width is the same as the inner height so that the arrows area is square + // the arrow buttons width is the same as the inner height so that the arrow buttons area is square int minimumWidth = FlatUIUtils.minimumWidth( spinner, FlatSpinnerUI.this.minimumWidth ); int innerHeight = editorSize.height + padding.top + padding.bottom; float focusWidth = FlatUIUtils.getBorderFocusWidth( spinner ); @@ -394,15 +467,19 @@ public class FlatSpinnerUI if( nextButton == null && previousButton == null ) { if( editor != null ) - editor.setBounds( FlatUIUtils.subtractInsets( r, padding ) ); + editor.setBounds( r ); return; } Rectangle editorRect = new Rectangle( r ); Rectangle buttonsRect = new Rectangle( r ); + // limit buttons width to height of a raw spinner (without insets) + FontMetrics fm = spinner.getFontMetrics( spinner.getFont() ); + int maxButtonWidth = fm.getHeight() + scale( padding.top ) + scale( padding.bottom ); + // make button area square (if spinner has preferred height) - int buttonsWidth = parent.getPreferredSize().height - insets.top - insets.bottom; + int buttonsWidth = Math.min( parent.getPreferredSize().height - insets.top - insets.bottom, maxButtonWidth ); buttonsRect.width = buttonsWidth; if( parent.getComponentOrientation().isLeftToRight() ) { @@ -414,7 +491,7 @@ public class FlatSpinnerUI } if( editor != null ) - editor.setBounds( FlatUIUtils.subtractInsets( editorRect, padding ) ); + editor.setBounds( editorRect ); int nextHeight = (buttonsRect.height / 2) + (buttonsRect.height % 2); // round up if( nextButton != null ) @@ -459,12 +536,20 @@ public class FlatSpinnerUI break; case FlatClientProperties.COMPONENT_ROUND_RECT: + case FlatClientProperties.OUTLINE: spinner.repaint(); break; case FlatClientProperties.MINIMUM_WIDTH: spinner.revalidate(); break; + + case FlatClientProperties.STYLE: + case FlatClientProperties.STYLE_CLASS: + installStyle(); + spinner.revalidate(); + spinner.repaint(); + break; } } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSplitPaneUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSplitPaneUI.java index 16ec4eba..cec9fae1 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSplitPaneUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatSplitPaneUI.java @@ -23,6 +23,8 @@ import java.awt.Graphics; import java.awt.Insets; import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.Map; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JSplitPane; @@ -32,6 +34,10 @@ import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicSplitPaneDivider; import javax.swing.plaf.basic.BasicSplitPaneUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.UnknownStyleException; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.UIScale; /** @@ -66,16 +72,27 @@ import com.formdev.flatlaf.util.UIScale; */ public class FlatSplitPaneUI extends BasicSplitPaneUI + implements StyleableUI { - protected String arrowType; - protected Color oneTouchArrowColor; - protected Color oneTouchHoverArrowColor; - protected Color oneTouchPressedArrowColor; + @Styleable protected String arrowType; + @Styleable protected Color oneTouchArrowColor; + @Styleable protected Color oneTouchHoverArrowColor; + @Styleable protected Color oneTouchPressedArrowColor; + + private PropertyChangeListener propertyChangeListener; + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { return new FlatSplitPaneUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installDefaults() { arrowType = UIManager.getString( "Component.arrowType" ); @@ -96,6 +113,24 @@ public class FlatSplitPaneUI oneTouchArrowColor = null; oneTouchHoverArrowColor = null; oneTouchPressedArrowColor = null; + + oldStyleValues = null; + } + + @Override + protected void installListeners() { + super.installListeners(); + + propertyChangeListener = FlatStylingSupport.createPropertyChangeListener( splitPane, this::installStyle, null ); + splitPane.addPropertyChangeListener( propertyChangeListener ); + } + + @Override + protected void uninstallListeners() { + super.uninstallListeners(); + + splitPane.removePropertyChangeListener( propertyChangeListener ); + propertyChangeListener = null; } @Override @@ -103,16 +138,53 @@ public class FlatSplitPaneUI return new FlatSplitPaneDivider( this ); } + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( splitPane, "SplitPane" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + + if( divider instanceof FlatSplitPaneDivider ) + ((FlatSplitPaneDivider)divider).updateStyle(); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + try { + if( divider instanceof FlatSplitPaneDivider ) + return ((FlatSplitPaneDivider)divider).applyStyleProperty( key, value ); + } catch( UnknownStyleException ex ) { + // ignore + } + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, splitPane, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + Map> infos = FlatStylingSupport.getAnnotatedStyleableInfos( this ); + if( divider instanceof FlatSplitPaneDivider ) + infos.putAll( ((FlatSplitPaneDivider)divider).getStyleableInfos() ); + return infos; + } + //---- class FlatSplitPaneDivider ----------------------------------------- protected class FlatSplitPaneDivider extends BasicSplitPaneDivider { - protected final String style = UIManager.getString( "SplitPaneDivider.style" ); - protected final Color gripColor = UIManager.getColor( "SplitPaneDivider.gripColor" ); - protected final int gripDotCount = FlatUIUtils.getUIInt( "SplitPaneDivider.gripDotCount", 3 ); - protected final int gripDotSize = FlatUIUtils.getUIInt( "SplitPaneDivider.gripDotSize", 3 ); - protected final int gripGap = FlatUIUtils.getUIInt( "SplitPaneDivider.gripGap", 2 ); + @Styleable protected String style = UIManager.getString( "SplitPaneDivider.style" ); + @Styleable protected Color gripColor = UIManager.getColor( "SplitPaneDivider.gripColor" ); + @Styleable protected int gripDotCount = FlatUIUtils.getUIInt( "SplitPaneDivider.gripDotCount", 3 ); + @Styleable protected int gripDotSize = FlatUIUtils.getUIInt( "SplitPaneDivider.gripDotSize", 3 ); + @Styleable protected int gripGap = FlatUIUtils.getUIInt( "SplitPaneDivider.gripGap", 2 ); protected FlatSplitPaneDivider( BasicSplitPaneUI ui ) { super( ui ); @@ -120,6 +192,27 @@ public class FlatSplitPaneUI setLayout( new FlatDividerLayout() ); } + /** + * @since 2 + */ + protected Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObject( this, key, value ); + } + + /** + * @since 2 + */ + public Map> getStyleableInfos() { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + + void updateStyle() { + if( leftButton instanceof FlatOneTouchButton ) + ((FlatOneTouchButton)leftButton).updateStyle(); + if( rightButton instanceof FlatOneTouchButton ) + ((FlatOneTouchButton)rightButton).updateStyle(); + } + @Override public void setDividerSize( int newSize ) { super.setDividerSize( UIScale.scale( newSize ) ); @@ -142,7 +235,7 @@ public class FlatSplitPaneUI switch( e.getPropertyName() ) { case JSplitPane.DIVIDER_LOCATION_PROPERTY: // necessary to show/hide one-touch buttons on expand/collapse - revalidate(); + doLayout(); break; } } @@ -200,6 +293,11 @@ public class FlatSplitPaneUI this.left = left; } + protected void updateStyle() { + updateStyle( arrowType, oneTouchArrowColor, null, + oneTouchHoverArrowColor, null, oneTouchPressedArrowColor, null ); + } + @Override public int getDirection() { return (orientation == JSplitPane.VERTICAL_SPLIT) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatStylingSupport.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatStylingSupport.java new file mode 100644 index 00000000..ebe39427 --- /dev/null +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatStylingSupport.java @@ -0,0 +1,723 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.ui; + +import java.beans.PropertyChangeListener; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.BiFunction; +import java.util.function.Predicate; +import javax.swing.Icon; +import javax.swing.JComponent; +import javax.swing.UIManager; +import javax.swing.border.Border; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.util.StringUtils; +import com.formdev.flatlaf.util.SystemInfo; + +/** + * Support for styling components in CSS syntax. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatStylingSupport +{ + /** + * Indicates that a field is intended to be used by FlatLaf styling support. + *

+ * Do not rename fields annotated with this annotation. + * + * @since 2 + */ + @Target(ElementType.FIELD) + @Retention(RetentionPolicy.RUNTIME) + public @interface Styleable { + boolean dot() default false; + Class type() default Void.class; + } + + /** @since 2 */ + public interface StyleableUI { + Map> getStyleableInfos( JComponent c ); + } + + /** @since 2 */ + public interface StyleableBorder { + Object applyStyleProperty( String key, Object value ); + Map> getStyleableInfos(); + } + + + /** + * Returns the style specified in client property {@link FlatClientProperties#STYLE}. + */ + public static Object getStyle( JComponent c ) { + return c.getClientProperty( FlatClientProperties.STYLE ); + } + + /** + * Returns the style class(es) specified in client property {@link FlatClientProperties#STYLE_CLASS}. + */ + public static Object getStyleClass( JComponent c ) { + return c.getClientProperty( FlatClientProperties.STYLE_CLASS ); + } + + static boolean hasStyleProperty( JComponent c ) { + return getStyle( c ) != null || getStyleClass( c ) != null; + } + + public static Object getResolvedStyle( JComponent c, String type ) { + Object style = getStyle( c ); + Object styleClass = getStyleClass( c ); + Object styleForClasses = getStyleForClasses( styleClass, type ); + return joinStyles( styleForClasses, style ); + } + + /** + * Returns the styles for the given style class(es) and the given type. + *

+ * The style rules must be defined in UI defaults either as strings (in CSS syntax) + * or as {@link java.util.Map}<String, Object> (with binary values). + * The key must be in syntax: {@code [style]type.styleClass}, where the type is optional. + * E.g. in FlatLaf properties file: + *

{@code
+	 * [style]Button.primary = borderColor: #08f; background: #08f; foreground: #fff
+	 * [style].secondary = borderColor: #0f8; background: #0f8
+	 * }
+ * or in Java code: + *
{@code
+	 * UIManager.put( "[style]Button.primary", "borderColor: #08f; background: #08f; foreground: #fff" );
+	 * UIManager.put( "[style].secondary", "borderColor: #0f8; background: #0f8" );
+	 * }
+ * The rule "Button.primary" can be applied to buttons only. + * The rule ".secondary" can be applied to any component. + *

+ * To have similar behavior as in CSS, this method first gets the rule without type, + * then the rule with type and concatenates both rules. + * E.g. invoking this method with parameters styleClass="foo" and type="Button" does following: + *

{@code
+	 * return joinStyles(
+	 *     UIManager.get( "[style].foo" ),
+	 *     UIManager.get( "[style]Button.foo" ) );
+	 * }
+ * + * @param styleClass the style class(es) either as string (single class or multiple classes separated by space characters) + * or as {@code String[]} or {@link java.util.List}<String> (multiple classes) + * @param type the type of the component + * @return the styles + */ + public static Object getStyleForClasses( Object styleClass, String type ) { + if( styleClass == null ) + return null; + + if( styleClass instanceof String && ((String)styleClass).indexOf( ' ' ) >= 0 ) + styleClass = StringUtils.split( (String) styleClass, ' ', true, true ); + + if( styleClass instanceof String ) + return getStyleForClass( ((String)styleClass).trim(), type ); + else if( styleClass instanceof String[] ) { + Object style = null; + for( String cls : (String[]) styleClass ) + style = joinStyles( style, getStyleForClass( cls, type ) ); + return style; + } else if( styleClass instanceof List ) { + Object style = null; + for( Object cls : (List) styleClass ) + style = joinStyles( style, getStyleForClass( (String) cls, type ) ); + return style; + } else + return null; + } + + private static Object getStyleForClass( String styleClass, String type ) { + return joinStyles( + UIManager.get( "[style]." + styleClass ), + UIManager.get( "[style]" + type + '.' + styleClass ) ); + } + + /** + * Joins two styles. They can be either strings (in CSS syntax) + * or {@link java.util.Map}<String, Object> (with binary values). + *

+ * If both styles are strings, then a joined string is returned. + * If both styles are maps, then a joined map is returned. + * If one style is a map and the other style a string, then the string + * is parsed (using {@link #parse(String)}) to a map and a joined map is returned. + * + * @param style1 first style as string or map, or {@code null} + * @param style2 second style as string or map, or {@code null} + * @return new joined style + */ + @SuppressWarnings( "unchecked" ) + public static Object joinStyles( Object style1, Object style2 ) { + if( style1 == null ) + return style2; + if( style2 == null ) + return style1; + + // join two strings + if( style1 instanceof String && style2 instanceof String ) + return style1 + "; " + style2; + + // convert first style to map + Map map1 = (style1 instanceof String) + ? parse( (String) style1 ) + : (Map) style1; + if( map1 == null ) + return style2; + + // convert second style to map + Map map2 = (style2 instanceof String) + ? parse( (String) style2 ) + : (Map) style2; + if( map2 == null ) + return style1; + + // join two maps + Map map = new HashMap<>( map1 ); + map.putAll( map2 ); + return map; + } + + /** + * Concatenates two styles in CSS syntax. + * + * @param style1 first style, or {@code null} + * @param style2 second style, or {@code null} + * @return concatenation of the two styles separated by a semicolon + */ + public static String concatStyles( String style1, String style2 ) { + if( style1 == null ) + return style2; + if( style2 == null ) + return style1; + return style1 + "; " + style2; + } + + /** + * Parses styles in CSS syntax ("key1: value1; key2: value2; ..."), + * converts the value strings into binary and invokes the given function + * to apply the properties. + * + * @param oldStyleValues map of old values modified by the previous invocation, or {@code null} + * @param style the style in CSS syntax as string, or a Map, or {@code null} + * @param applyProperty function that is invoked to apply the properties; + * first parameter is the key, second the binary value; + * the function must return the old value + * @return map of old values modified by the given style, or {@code null} + * @throws UnknownStyleException on unknown style keys + * @throws IllegalArgumentException on syntax errors + * @throws ClassCastException if value type does not fit to expected type + */ + public static Map parseAndApply( Map oldStyleValues, + Object style, BiFunction applyProperty ) + throws UnknownStyleException, IllegalArgumentException + { + // restore previous values + if( oldStyleValues != null ) { + for( Map.Entry e : oldStyleValues.entrySet() ) + applyProperty.apply( e.getKey(), e.getValue() ); + } + + // ignore empty style + if( style == null ) + return null; + + if( style instanceof String ) { + // handle style in CSS syntax + String str = (String) style; + if( StringUtils.isTrimmedEmpty( str ) ) + return null; + + return applyStyle( parse( str ), applyProperty ); + } else if( style instanceof Map ) { + // handle style of type Map + @SuppressWarnings( "unchecked" ) + Map map = (Map) style; + return applyStyle( map, applyProperty ); + } else + return null; + } + + private static Map applyStyle( Map style, + BiFunction applyProperty ) + { + if( style.isEmpty() ) + return null; + + Map oldValues = new HashMap<>(); + for( Map.Entry e : style.entrySet() ) { + String key = e.getKey(); + Object newValue = e.getValue(); + + // handle key prefix + if( key.startsWith( "[" ) ) { + if( (SystemInfo.isWindows && key.startsWith( "[win]" )) || + (SystemInfo.isMacOS && key.startsWith( "[mac]" )) || + (SystemInfo.isLinux && key.startsWith( "[linux]" )) || + (key.startsWith( "[light]" ) && !FlatLaf.isLafDark()) || + (key.startsWith( "[dark]" ) && FlatLaf.isLafDark()) ) + { + // prefix is known and enabled --> remove prefix + key = key.substring( key.indexOf( ']' ) + 1 ); + } else + continue; + } + + Object oldValue = applyProperty.apply( key, newValue ); + oldValues.put( key, oldValue ); + } + return oldValues; + } + + /** + * Parses styles in CSS syntax ("key1: value1; key2: value2; ..."), + * converts the value strings into binary and returns all key/value pairs as map. + * + * @param style the style in CSS syntax, or {@code null} + * @return map of parsed styles, or {@code null} + * @throws IllegalArgumentException on syntax errors + */ + public static Map parse( String style ) + throws IllegalArgumentException + { + if( style == null || StringUtils.isTrimmedEmpty( style ) ) + return null; + + Map map = null; + + // split style into parts and process them + for( String part : StringUtils.split( style, ';', true, true ) ) { + // find separator colon + int sepIndex = part.indexOf( ':' ); + if( sepIndex < 0 ) + throw new IllegalArgumentException( "missing colon in '" + part + "'" ); + + // split into key and value + String key = StringUtils.substringTrimmed( part, 0, sepIndex ); + String value = StringUtils.substringTrimmed( part, sepIndex + 1 ); + if( key.isEmpty() ) + throw new IllegalArgumentException( "missing key in '" + part + "'" ); + if( value.isEmpty() ) + throw new IllegalArgumentException( "missing value in '" + part + "'" ); + + // parse value string and convert it into binary value + if( map == null ) + map = new LinkedHashMap<>(); + map.put( key, parseValue( key, value ) ); + } + + return map; + } + + private static Object parseValue( String key, String value ) { + // simple reference + if( value.startsWith( "$" ) ) + return UIManager.get( value.substring( 1 ) ); + + // remove key prefix for correct value type detection + // (e.g. "[light]padding" would not parse to Insets) + if( key.startsWith( "[" ) ) + key = key.substring( key.indexOf( ']' ) + 1 ); + + // parse string + return FlatLaf.parseDefaultsValue( key, value, null ); + } + + /** + * Applies the given value to an annotated field of the given object. + * The field must be annotated with {@link Styleable}. + * + * @param obj the object + * @param key the name of the field + * @param value the new value + * @return the old value of the field + * @throws UnknownStyleException if object does not have an annotated field with given name + * @throws IllegalArgumentException if value type does not fit to expected type + */ + public static Object applyToAnnotatedObject( Object obj, String key, Object value ) + throws UnknownStyleException, IllegalArgumentException + { + String fieldName = key; + int dotIndex = key.indexOf( '.' ); + if( dotIndex >= 0 ) { + // remove first dot in key and change subsequent character to uppercase + fieldName = key.substring( 0, dotIndex ) + + Character.toUpperCase( key.charAt( dotIndex + 1 ) ) + + key.substring( dotIndex + 2 ); + } + + return applyToField( obj, fieldName, key, value, field -> { + Styleable styleable = field.getAnnotation( Styleable.class ); + return styleable != null && styleable.dot() == (dotIndex >= 0); + } ); + } + + /** + * Applies the given value to a field of the given object. + * + * @param obj the object + * @param fieldName the name of the field + * @param key the key (only used for error reporting) + * @param value the new value + * @return the old value of the field + * @throws UnknownStyleException if object does not have a field with given name + * @throws IllegalArgumentException if value type does not fit to expected type + */ + static Object applyToField( Object obj, String fieldName, String key, Object value ) + throws UnknownStyleException, IllegalArgumentException + { + return applyToField( obj, fieldName, key, value, null ); + } + + private static Object applyToField( Object obj, String fieldName, String key, Object value, Predicate predicate ) + throws UnknownStyleException, IllegalArgumentException + { + Class cls = obj.getClass(); + + for(;;) { + try { + Field f = cls.getDeclaredField( fieldName ); + if( predicate == null || predicate.test( f ) ) { + if( !isValidField( f ) ) + throw new IllegalArgumentException( "field '" + cls.getName() + "." + fieldName + "' is final or static" ); + + try { + // necessary to access protected fields in other packages + f.setAccessible( true ); + + // get old value and set new value + Object oldValue = f.get( obj ); + f.set( obj, convertToEnum( value, f.getType() ) ); + return oldValue; + } catch( IllegalAccessException ex ) { + throw new IllegalArgumentException( "failed to access field '" + cls.getName() + "." + fieldName + "'", ex ); + } + } + } catch( NoSuchFieldException ex ) { + // field not found in class --> try superclass + } + + cls = cls.getSuperclass(); + if( cls == null ) + throw new UnknownStyleException( key ); + + if( predicate != null ) { + String superclassName = cls.getName(); + if( superclassName.startsWith( "java." ) || superclassName.startsWith( "javax." ) ) + throw new UnknownStyleException( key ); + } + } + } + + private static boolean isValidField( Field f ) { + int modifiers = f.getModifiers(); + return (modifiers & (Modifier.FINAL|Modifier.STATIC)) == 0 && !f.isSynthetic(); + } + + /** + * Applies the given value to a property of the given object. + * Works only for properties that have public getter and setter methods. + * First the property getter is invoked to get the old value, + * then the property setter is invoked to set the new value. + * + * @param obj the object + * @param name the name of the property + * @param value the new value + * @return the old value of the property + * @throws UnknownStyleException if object does not have a property with given name + * @throws IllegalArgumentException if value type does not fit to expected type + */ + private static Object applyToProperty( Object obj, String name, Object value ) + throws UnknownStyleException, IllegalArgumentException + { + Class cls = obj.getClass(); + String getterName = buildMethodName( "get", name ); + String setterName = buildMethodName( "set", name ); + + try { + Method getter; + try { + getter = cls.getMethod( getterName ); + } catch( NoSuchMethodException ex ) { + getter = cls.getMethod( buildMethodName( "is", name ) ); + } + Method setter = cls.getMethod( setterName, getter.getReturnType() ); + Object oldValue = getter.invoke( obj ); + setter.invoke( obj, convertToEnum( value, getter.getReturnType() ) ); + return oldValue; + } catch( NoSuchMethodException ex ) { + throw new UnknownStyleException( name ); + } catch( Exception ex ) { + throw new IllegalArgumentException( "failed to invoke property methods '" + cls.getName() + "." + + getterName + "()' or '" + setterName + "(...)'", ex ); + } + } + + private static String buildMethodName( String prefix, String name ) { + int prefixLength = prefix.length(); + int nameLength = name.length(); + char[] chars = new char[prefixLength + nameLength]; + prefix.getChars( 0, prefixLength, chars, 0 ); + name.getChars( 0, nameLength, chars, prefixLength ); + chars[prefixLength] = Character.toUpperCase( chars[prefixLength] ); + return new String( chars ); + } + + @SuppressWarnings( { "unchecked", "rawtypes" } ) + private static Object convertToEnum( Object value, Class type ) + throws IllegalArgumentException + { + // if type is an enum, convert string to enum value + if( Enum.class.isAssignableFrom( type ) && value instanceof String ) { + try { + value = Enum.valueOf( (Class) type, (String) value ); + } catch( IllegalArgumentException ex ) { + throw new IllegalArgumentException( "unknown enum value '" + value + "' in enum '" + type.getName() + "'", ex ); + } + } + return value; + } + + /** + * Applies the given value to an annotated field of the given object + * or to a property of the given component. + * The field must be annotated with {@link Styleable}. + * The component property must have public getter and setter methods. + * + * @param obj the object + * @param comp the component, or {@code null} + * @param key the name of the field + * @param value the new value + * @return the old value of the field + * @throws UnknownStyleException if object does not have an annotated field with given name + * @throws IllegalArgumentException if value type does not fit to expected type + */ + public static Object applyToAnnotatedObjectOrComponent( Object obj, Object comp, String key, Object value ) + throws UnknownStyleException, IllegalArgumentException + { + try { + return applyToAnnotatedObject( obj, key, value ); + } catch( UnknownStyleException ex ) { + try { + if( comp != null ) + return applyToProperty( comp, key, value ); + } catch( UnknownStyleException ex2 ) { + // ignore + } + throw ex; + } + } + + static Object applyToAnnotatedObjectOrBorder( Object obj, String key, Object value, + JComponent c, AtomicBoolean borderShared ) + { + try { + return applyToAnnotatedObject( obj, key, value ); + } catch( UnknownStyleException ex ) { + // apply to border + Border border = c.getBorder(); + if( border instanceof StyleableBorder ) { + if( borderShared.get() ) { + border = cloneBorder( border ); + c.setBorder( border ); + borderShared.set( false ); + } + + try { + return ((StyleableBorder)border).applyStyleProperty( key, value ); + } catch( UnknownStyleException ex2 ) { + // ignore + } + } + + // apply to component property + try { + return applyToProperty( c, key, value ); + } catch( UnknownStyleException ex2 ) { + // ignore + } + throw ex; + } + } + + static PropertyChangeListener createPropertyChangeListener( JComponent c, + Runnable installStyle, PropertyChangeListener superListener ) + { + return e -> { + if( superListener != null ) + superListener.propertyChange( e ); + + switch( e.getPropertyName() ) { + case FlatClientProperties.STYLE: + case FlatClientProperties.STYLE_CLASS: + installStyle.run(); + c.revalidate(); + c.repaint(); + break; + } + }; + } + + static Border cloneBorder( Border border ) { + Class borderClass = border.getClass(); + try { + return borderClass.getDeclaredConstructor().newInstance(); + } catch( Exception ex ) { + throw new IllegalArgumentException( "failed to clone border '" + borderClass.getName() + "'", ex ); + } + } + + static Icon cloneIcon( Icon icon ) { + Class iconClass = icon.getClass(); + try { + return iconClass.getDeclaredConstructor().newInstance(); + } catch( Exception ex ) { + throw new IllegalArgumentException( "failed to clone icon '" + iconClass.getName() + "'", ex ); + } + } + + /** + * Returns a map of all fields annotated with {@link Styleable}. + * The key is the name of the field and the value the type of the field. + */ + public static Map> getAnnotatedStyleableInfos( Object obj ) { + return getAnnotatedStyleableInfos( obj, null ); + } + + public static Map> getAnnotatedStyleableInfos( Object obj, Border border ) { + Map> infos = new StyleableInfosMap<>(); + collectAnnotatedStyleableInfos( obj, infos ); + collectStyleableInfos( border, infos ); + return infos; + } + + /** + * Search for all fields annotated with {@link Styleable} and add them to the given map. + * The key is the name of the field and the value the type of the field. + */ + public static void collectAnnotatedStyleableInfos( Object obj, Map> infos ) { + HashSet processedFields = new HashSet<>(); + Class cls = obj.getClass(); + + for(;;) { + for( Field f : cls.getDeclaredFields() ) { + if( !isValidField( f ) ) + continue; + + Styleable styleable = f.getAnnotation( Styleable.class ); + if( styleable == null ) + continue; + + String name = f.getName(); + Class type = f.getType(); + + // for the case that the same field name is used in a class and in + // one of its superclasses (e.g. field 'borderColor' in FlatButtonBorder + // and in FlatBorder), do not process field in superclass + if( processedFields.contains( name ) ) + continue; + processedFields.add( name ); + + // handle "dot" keys (e.g. change field name "iconArrowType" to style key "icon.arrowType") + if( styleable.dot() ) { + int len = name.length(); + for( int i = 0; i < len; i++ ) { + if( Character.isUpperCase( name.charAt( i ) ) ) { + name = name.substring( 0, i ) + '.' + + Character.toLowerCase( name.charAt( i ) ) + + name.substring( i + 1 ); + break; + } + } + } + + // field has a different type + if( styleable.type() != Void.class ) + type = styleable.type(); + + infos.put( name, type ); + } + + cls = cls.getSuperclass(); + if( cls == null ) + return; + + String superclassName = cls.getName(); + if( superclassName.startsWith( "java." ) || superclassName.startsWith( "javax." ) ) + return; + } + } + + public static void collectStyleableInfos( Border border, Map> infos ) { + if( border instanceof StyleableBorder ) + infos.putAll( ((StyleableBorder)border).getStyleableInfos() ); + } + + public static void putAllPrefixKey( Map> infos, String keyPrefix, Map> infos2 ) { + for( Map.Entry> e : infos2.entrySet() ) + infos.put( keyPrefix.concat( e.getKey() ), e.getValue() ); + } + + //---- class UnknownStyleException ---------------------------------------- + + public static class UnknownStyleException + extends IllegalArgumentException + { + public UnknownStyleException( String key ) { + super( key ); + } + + @Override + public String getMessage() { + return "unknown style '" + super.getMessage() + "'"; + } + } + + //---- class StyleableInfosMap -------------------------------------------- + + static class StyleableInfosMap + extends LinkedHashMap + { + @Override + public V put( K key, V value ) { + V oldValue = super.put( key, value ); + if( oldValue != null ) + throw new IllegalArgumentException( "duplicate key '" + key + "'" ); + return oldValue; + } + + @Override + public void putAll( Map m ) { + for( Map.Entry e : m.entrySet() ) + put( e.getKey(), e.getValue() ); + } + } +} diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java index c4f79435..9a2cdda7 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java @@ -40,6 +40,8 @@ import java.awt.event.ComponentEvent; import java.awt.event.ComponentListener; import java.awt.event.ContainerEvent; import java.awt.event.ContainerListener; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; @@ -53,6 +55,7 @@ import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Collections; import java.util.Locale; +import java.util.Map; import java.util.Set; import java.util.function.BiConsumer; import java.util.function.IntConsumer; @@ -84,9 +87,14 @@ import javax.swing.plaf.basic.BasicTabbedPaneUI; import javax.swing.text.JTextComponent; import javax.swing.text.View; import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.icons.FlatTabbedPaneCloseIcon; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.UnknownStyleException; import com.formdev.flatlaf.util.Animator; import com.formdev.flatlaf.util.CubicBezierEasing; import com.formdev.flatlaf.util.JavaCompatibility; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.StringUtils; import com.formdev.flatlaf.util.UIScale; @@ -101,7 +109,7 @@ import com.formdev.flatlaf.util.UIScale; * @uiDefault TabbedPane.font Font * @uiDefault TabbedPane.background Color * @uiDefault TabbedPane.foreground Color - * @uiDefault TabbedPane.shadow Color used for scroll arrows and cropped line + * @uiDefault TabbedPane.shadow Color used for cropped line * @uiDefault TabbedPane.textIconGap int * @uiDefault TabbedPane.tabInsets Insets * @uiDefault TabbedPane.selectedTabPadInsets Insets unused @@ -128,12 +136,15 @@ import com.formdev.flatlaf.util.UIScale; * @uiDefault TabbedPane.maximumTabWidth int optional * @uiDefault TabbedPane.tabHeight int * @uiDefault TabbedPane.tabSelectionHeight int + * @uiDefault TabbedPane.cardTabSelectionHeight int * @uiDefault TabbedPane.contentSeparatorHeight int * @uiDefault TabbedPane.showTabSeparators boolean * @uiDefault TabbedPane.tabSeparatorsFullHeight boolean * @uiDefault TabbedPane.hasFullBorder boolean + * @uiDefault TabbedPane.activeTabBorder boolean * * @uiDefault TabbedPane.tabLayoutPolicy String wrap (default) or scroll + * @uiDefault TabbedPane.tabType String underlined (default) or card * @uiDefault TabbedPane.tabsPopupPolicy String never or asNeeded (default) * @uiDefault TabbedPane.scrollButtonsPolicy String never, asNeeded or asNeededSingle (default) * @uiDefault TabbedPane.scrollButtonsPlacement String both (default) or trailing @@ -151,12 +162,18 @@ import com.formdev.flatlaf.util.UIScale; * @uiDefault TabbedPane.buttonPressedBackground Color * * @uiDefault TabbedPane.moreTabsButtonToolTipText String + * @uiDefault TabbedPane.tabCloseToolTipText String * * @author Karl Tauber */ public class FlatTabbedPaneUI extends BasicTabbedPaneUI + implements StyleableUI { + // tab type + /** @since 2 */ protected static final int TAB_TYPE_UNDERLINED = 0; + /** @since 2 */ protected static final int TAB_TYPE_CARD = 1; + // tabs popup policy / scroll arrows policy protected static final int NEVER = 0; // protected static final int ALWAYS = 1; @@ -177,43 +194,52 @@ public class FlatTabbedPaneUI private static Set focusBackwardTraversalKeys; protected Color foreground; - protected Color disabledForeground; - protected Color selectedBackground; - protected Color selectedForeground; - protected Color underlineColor; - protected Color disabledUnderlineColor; - protected Color hoverColor; - protected Color focusColor; - protected Color tabSeparatorColor; - protected Color contentAreaColor; + @Styleable protected Color disabledForeground; + @Styleable protected Color selectedBackground; + @Styleable protected Color selectedForeground; + @Styleable protected Color underlineColor; + @Styleable protected Color disabledUnderlineColor; + @Styleable protected Color hoverColor; + @Styleable protected Color focusColor; + @Styleable protected Color tabSeparatorColor; + @Styleable protected Color contentAreaColor; private int textIconGapUnscaled; - protected int minimumTabWidth; - protected int maximumTabWidth; - protected int tabHeight; - protected int tabSelectionHeight; - protected int contentSeparatorHeight; - protected boolean showTabSeparators; - protected boolean tabSeparatorsFullHeight; - protected boolean hasFullBorder; - protected boolean tabsOpaque = true; + @Styleable protected int minimumTabWidth; + @Styleable protected int maximumTabWidth; + @Styleable protected int tabHeight; + @Styleable protected int tabSelectionHeight; + /** @since 2 */ @Styleable protected int cardTabSelectionHeight; + @Styleable protected int contentSeparatorHeight; + @Styleable protected boolean showTabSeparators; + @Styleable protected boolean tabSeparatorsFullHeight; + @Styleable protected boolean hasFullBorder; + @Styleable protected boolean tabsOpaque = true; - private int tabsPopupPolicy; - private int scrollButtonsPolicy; - private int scrollButtonsPlacement; + @Styleable(type=String.class) private int tabType; + @Styleable(type=String.class) private int tabsPopupPolicy; + @Styleable(type=String.class) private int scrollButtonsPolicy; + @Styleable(type=String.class) private int scrollButtonsPlacement; - private int tabAreaAlignment; - private int tabAlignment; - private int tabWidthMode; + @Styleable(type=String.class) private int tabAreaAlignment; + @Styleable(type=String.class) private int tabAlignment; + @Styleable(type=String.class) private int tabWidthMode; protected Icon closeIcon; - protected String arrowType; - protected Insets buttonInsets; - protected int buttonArc; - protected Color buttonHoverBackground; - protected Color buttonPressedBackground; + @Styleable protected String arrowType; + @Styleable protected Insets buttonInsets; + @Styleable protected int buttonArc; + @Styleable protected Color buttonHoverBackground; + @Styleable protected Color buttonPressedBackground; - protected String moreTabsButtonToolTipText; + @Styleable protected String moreTabsButtonToolTipText; + /** @since 2 */ @Styleable protected String tabCloseToolTipText; + + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected boolean showContentSeparator = true; + /** @since 2 */ @Styleable protected boolean hideTabAreaWithOneTab; + /** @since 2 */ @Styleable protected boolean tabClosable; + /** @since 2 */ @Styleable protected int tabIconPlacement = LEADING; protected JViewport tabViewport; protected FlatWheelTabScroller wheelTabScroller; @@ -231,6 +257,8 @@ public class FlatTabbedPaneUI private boolean pressedTabClose; private Object[] oldRenderingHints; + private Map oldStyleValues; + private boolean closeIconShared = true; public static ComponentUI createUI( JComponent c ) { return new FlatTabbedPaneUI(); @@ -259,6 +287,8 @@ public class FlatTabbedPaneUI buttonPressedBackground = UIManager.getColor( "TabbedPane.buttonPressedBackground" ); super.installUI( c ); + + installStyle(); } @Override @@ -299,12 +329,14 @@ public class FlatTabbedPaneUI maximumTabWidth = UIManager.getInt( "TabbedPane.maximumTabWidth" ); tabHeight = UIManager.getInt( "TabbedPane.tabHeight" ); tabSelectionHeight = UIManager.getInt( "TabbedPane.tabSelectionHeight" ); + cardTabSelectionHeight = UIManager.getInt( "TabbedPane.cardTabSelectionHeight" ); contentSeparatorHeight = UIManager.getInt( "TabbedPane.contentSeparatorHeight" ); showTabSeparators = UIManager.getBoolean( "TabbedPane.showTabSeparators" ); tabSeparatorsFullHeight = UIManager.getBoolean( "TabbedPane.tabSeparatorsFullHeight" ); hasFullBorder = UIManager.getBoolean( "TabbedPane.hasFullBorder" ); tabsOpaque = UIManager.getBoolean( "TabbedPane.tabsOpaque" ); + tabType = parseTabType( UIManager.getString( "TabbedPane.tabType" ) ); tabsPopupPolicy = parseTabsPopupPolicy( UIManager.getString( "TabbedPane.tabsPopupPolicy" ) ); scrollButtonsPolicy = parseScrollButtonsPolicy( UIManager.getString( "TabbedPane.scrollButtonsPolicy" ) ); scrollButtonsPlacement = parseScrollButtonsPlacement( UIManager.getString( "TabbedPane.scrollButtonsPlacement" ) ); @@ -313,12 +345,14 @@ public class FlatTabbedPaneUI tabAlignment = parseAlignment( UIManager.getString( "TabbedPane.tabAlignment" ), CENTER ); tabWidthMode = parseTabWidthMode( UIManager.getString( "TabbedPane.tabWidthMode" ) ); closeIcon = UIManager.getIcon( "TabbedPane.closeIcon" ); + closeIconShared = true; buttonInsets = UIManager.getInsets( "TabbedPane.buttonInsets" ); buttonArc = UIManager.getInt( "TabbedPane.buttonArc" ); Locale l = tabPane.getLocale(); moreTabsButtonToolTipText = UIManager.getString( "TabbedPane.moreTabsButtonToolTipText", l ); + tabCloseToolTipText = UIManager.getString( "TabbedPane.tabCloseToolTipText", l ); // scale textIconGap = scale( textIconGapUnscaled ); @@ -361,6 +395,8 @@ public class FlatTabbedPaneUI buttonHoverBackground = null; buttonPressedBackground = null; + oldStyleValues = null; + MigLayoutVisualPadding.uninstall( tabPane ); } @@ -537,6 +573,13 @@ public class FlatTabbedPaneUI return handler; } + @Override + protected FocusListener createFocusListener() { + Handler handler = getHandler(); + handler.focusDelegate = super.createFocusListener(); + return handler; + } + @Override protected LayoutManager createLayoutManager() { if( tabPane.getTabLayoutPolicy() == JTabbedPane.WRAP_TAB_LAYOUT ) @@ -558,6 +601,84 @@ public class FlatTabbedPaneUI return new FlatScrollableTabButton( direction ); } + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( tabPane, "TabbedPane" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + + // update buttons + for( Component c : tabPane.getComponents() ) { + if( c instanceof FlatTabAreaButton ) + ((FlatTabAreaButton)c).updateStyle(); + } + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + // close icon + if( key.startsWith( "close" ) ) { + if( !(closeIcon instanceof FlatTabbedPaneCloseIcon) ) + return new UnknownStyleException( key ); + + if( closeIconShared ) { + closeIcon = FlatStylingSupport.cloneIcon( closeIcon ); + closeIconShared = false; + } + + return ((FlatTabbedPaneCloseIcon)closeIcon).applyStyleProperty( key, value ); + } + + if( value instanceof String ) { + switch( key ) { + case "tabType": value = parseTabType( (String) value ); break; + case "tabsPopupPolicy": value = parseTabsPopupPolicy( (String) value ); break; + case "scrollButtonsPolicy": value = parseScrollButtonsPolicy( (String) value ); break; + case "scrollButtonsPlacement": value = parseScrollButtonsPlacement( (String) value ); break; + + case "tabAreaAlignment": value = parseAlignment( (String) value, LEADING ); break; + case "tabAlignment": value = parseAlignment( (String) value, CENTER ); break; + case "tabWidthMode": value = parseTabWidthMode( (String) value ); break; + + case "tabIconPlacement": value = parseTabIconPlacement( (String) value ); break; + } + } else { + Object oldValue; + switch( key ) { + // BasicTabbedPaneUI + case "tabInsets": oldValue = tabInsets; tabInsets = (Insets) value; return oldValue; + case "tabAreaInsets": oldValue = tabAreaInsets; tabAreaInsets = (Insets) value; return oldValue; + case "textIconGap": + oldValue = textIconGapUnscaled; + textIconGapUnscaled = (int) value; + textIconGap = scale( textIconGapUnscaled ); + return oldValue; + } + } + + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, tabPane, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + Map> infos = new FlatStylingSupport.StyleableInfosMap<>(); + infos.put( "tabInsets", Insets.class ); + infos.put( "tabAreaInsets", Insets.class ); + infos.put( "textIconGap", int.class ); + FlatStylingSupport.collectAnnotatedStyleableInfos( this, infos ); + if( closeIcon instanceof FlatTabbedPaneCloseIcon ) + infos.putAll( ((FlatTabbedPaneCloseIcon)closeIcon).getStyleableInfos() ); + return infos; + } + protected void setRolloverTab( int x, int y ) { setRolloverTab( tabForCoordinate( tabPane, x, y ) ); } @@ -607,8 +728,25 @@ public class FlatTabbedPaneUI return; Rectangle r = getTabBounds( tabPane, tabIndex ); - if( r != null ) - tabPane.repaint( r ); + if( r == null ) + return; + + // increase size of repaint region to include part of content border + if( contentSeparatorHeight > 0 && + getTabType() == TAB_TYPE_CARD && + clientPropertyBoolean( tabPane, TABBED_PANE_SHOW_CONTENT_SEPARATOR, true ) ) + { + int sh = scale( contentSeparatorHeight ); + switch( tabPane.getTabPlacement() ) { + default: + case TOP: r.height += sh; break; + case BOTTOM: r.height += sh; r.y -= sh; break; + case LEFT: r.width += sh; break; + case RIGHT: r.width += sh; r.x -= sh; break; + } + } + + tabPane.repaint( r ); } private boolean inCalculateEqual; @@ -639,7 +777,7 @@ public class FlatTabbedPaneUI Insets tabInsets = getTabInsets( tabPlacement, tabIndex ); tabWidth = icon.getIconWidth() + tabInsets.left + tabInsets.right; } else { - int iconPlacement = clientPropertyInt( tabPane, TABBED_PANE_TAB_ICON_PLACEMENT, LEADING ); + int iconPlacement = clientPropertyInt( tabPane, TABBED_PANE_TAB_ICON_PLACEMENT, tabIconPlacement ); if( (iconPlacement == TOP || iconPlacement == BOTTOM) && tabPane.getTabComponentAt( tabIndex ) == null && (icon = getIconForTab( tabIndex )) != null ) @@ -682,7 +820,7 @@ public class FlatTabbedPaneUI int tabHeight; Icon icon; - int iconPlacement = clientPropertyInt( tabPane, TABBED_PANE_TAB_ICON_PLACEMENT, LEADING ); + int iconPlacement = clientPropertyInt( tabPane, TABBED_PANE_TAB_ICON_PLACEMENT, tabIconPlacement ); if( (iconPlacement == TOP || iconPlacement == BOTTOM) && tabPane.getTabComponentAt( tabIndex ) == null && (icon = getIconForTab( tabIndex )) != null ) @@ -790,7 +928,7 @@ public class FlatTabbedPaneUI */ @Override protected Insets getContentBorderInsets( int tabPlacement ) { - if( hideTabArea() || contentSeparatorHeight == 0 || !clientPropertyBoolean( tabPane, TABBED_PANE_SHOW_CONTENT_SEPARATOR, true ) ) + if( hideTabArea() || contentSeparatorHeight == 0 || !clientPropertyBoolean( tabPane, TABBED_PANE_SHOW_CONTENT_SEPARATOR, showContentSeparator ) ) return new Insets( 0, 0, 0, 0 ); boolean hasFullBorder = clientPropertyBoolean( tabPane, TABBED_PANE_HAS_FULL_BORDER, this.hasFullBorder ); @@ -842,6 +980,17 @@ public class FlatTabbedPaneUI paintTabArea( g, tabPlacement, selectedIndex ); } + @Override + protected void paintTabArea( Graphics g, int tabPlacement, int selectedIndex ) { + // need to set rendering hints here too because this method is also invoked + // from BasicTabbedPaneUI.ScrollableTabPanel.paintComponent() + Object[] oldHints = FlatUIUtils.setRenderingHints( g ); + + super.paintTabArea( g, tabPlacement, selectedIndex ); + + FlatUIUtils.resetRenderingHints( g, oldHints ); + } + @Override protected void paintTab( Graphics g, int tabPlacement, Rectangle[] rects, int tabIndex, Rectangle iconRect, Rectangle textRect ) @@ -934,16 +1083,21 @@ public class FlatTabbedPaneUI int x, int y, int w, int h, boolean isSelected ) { // paint tab background + Color background = getTabBackground( tabPlacement, tabIndex, isSelected ); + g.setColor( FlatUIUtils.deriveColor( background, tabPane.getBackground() ) ); + g.fillRect( x, y, w, h ); + } + + /** @since 2 */ + protected Color getTabBackground( int tabPlacement, int tabIndex, boolean isSelected ) { boolean enabled = tabPane.isEnabled(); - Color background = enabled && tabPane.isEnabledAt( tabIndex ) && getRolloverTab() == tabIndex + return enabled && tabPane.isEnabledAt( tabIndex ) && getRolloverTab() == tabIndex ? hoverColor : (enabled && isSelected && FlatUIUtils.isPermanentFocusOwner( tabPane ) ? focusColor : (selectedBackground != null && enabled && isSelected ? selectedBackground : tabPane.getBackgroundAt( tabIndex ))); - g.setColor( FlatUIUtils.deriveColor( background, tabPane.getBackground() ) ); - g.fillRect( x, y, w, h ); } @Override @@ -953,7 +1107,62 @@ public class FlatTabbedPaneUI // paint tab separators if( clientPropertyBoolean( tabPane, TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators ) && !isLastInRun( tabIndex ) ) - paintTabSeparator( g, tabPlacement, x, y, w, h ); + { + if( getTabType() == TAB_TYPE_CARD ) { + // some separators need to be omitted if selected tab is painted as card + int selectedIndex = tabPane.getSelectedIndex(); + if( tabIndex != selectedIndex - 1 && tabIndex != selectedIndex ) + paintTabSeparator( g, tabPlacement, x, y, w, h ); + } else + paintTabSeparator( g, tabPlacement, x, y, w, h ); + } + + // paint active tab border + if( isSelected && getTabType() == TAB_TYPE_CARD ) + paintCardTabBorder( g, tabPlacement, tabIndex, x, y, w, h ); + } + + /** @since 2 */ + protected void paintCardTabBorder( Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h ) { + Graphics2D g2 = (Graphics2D) g; + + float borderWidth = scale( (float) contentSeparatorHeight ); + g.setColor( (tabSeparatorColor != null) ? tabSeparatorColor : contentAreaColor ); + + switch( tabPlacement ) { + default: + case TOP: + case BOTTOM: + // paint left and right tab border + g2.fill( new Rectangle2D.Float( x, y, borderWidth, h ) ); + g2.fill( new Rectangle2D.Float( x + w - borderWidth, y, borderWidth, h ) ); + break; + case LEFT: + case RIGHT: + // paint top and bottom tab border + g2.fill( new Rectangle2D.Float( x, y, w, borderWidth ) ); + g2.fill( new Rectangle2D.Float( x, y + h - borderWidth, w, borderWidth ) ); + break; + } + + if( cardTabSelectionHeight <= 0 ) { + // if there is no tab selection indicator, paint a top border as well + switch( tabPlacement ) { + default: + case TOP: + g2.fill( new Rectangle2D.Float( x, y, w, borderWidth ) ); + break; + case BOTTOM: + g2.fill( new Rectangle2D.Float( x, y + h - borderWidth, w, borderWidth ) ); + break; + case LEFT: + g2.fill( new Rectangle2D.Float( x, y, borderWidth, h ) ); + break; + case RIGHT: + g2.fill( new Rectangle2D.Float( x + w - borderWidth, y, borderWidth, h ) ); + break; + } + } } protected void paintTabCloseButton( Graphics g, int tabIndex, int x, int y, int w, int h ) { @@ -999,26 +1208,30 @@ public class FlatTabbedPaneUI g.setColor( tabPane.isEnabled() ? underlineColor : disabledUnderlineColor ); // paint underline selection + boolean atBottom = (getTabType() != TAB_TYPE_CARD); Insets contentInsets = getContentBorderInsets( tabPlacement ); - int tabSelectionHeight = scale( this.tabSelectionHeight ); + int tabSelectionHeight = scale( atBottom ? this.tabSelectionHeight : cardTabSelectionHeight ); + int sx, sy; switch( tabPlacement ) { case TOP: default: - int sy = y + h + contentInsets.top - tabSelectionHeight; + sy = atBottom ? (y + h + contentInsets.top - tabSelectionHeight) : y; g.fillRect( x, sy, w, tabSelectionHeight ); break; case BOTTOM: - g.fillRect( x, y - contentInsets.bottom, w, tabSelectionHeight ); + sy = atBottom ? (y - contentInsets.bottom) : (y + h - tabSelectionHeight); + g.fillRect( x, sy, w, tabSelectionHeight ); break; case LEFT: - int sx = x + w + contentInsets.left - tabSelectionHeight; + sx = atBottom ? (x + w + contentInsets.left - tabSelectionHeight) : x; g.fillRect( sx, y, tabSelectionHeight, h ); break; case RIGHT: - g.fillRect( x - contentInsets.right, y, tabSelectionHeight, h ); + sx = atBottom ? (x - contentInsets.right) : (x + w - tabSelectionHeight); + g.fillRect( sx, y, tabSelectionHeight, h ); break; } } @@ -1030,12 +1243,13 @@ public class FlatTabbedPaneUI * - paint full border (if enabled) * - not invoking paintContentBorder*Edge() methods * - repaint selection + * - painting active tab border style */ @Override protected void paintContentBorder( Graphics g, int tabPlacement, int selectedIndex ) { if( tabPane.getTabCount() <= 0 || contentSeparatorHeight == 0 || - !clientPropertyBoolean( tabPane, TABBED_PANE_SHOW_CONTENT_SEPARATOR, true ) ) + !clientPropertyBoolean( tabPane, TABBED_PANE_SHOW_CONTENT_SEPARATOR, showContentSeparator ) ) return; Insets insets = tabPane.getInsets(); @@ -1078,12 +1292,49 @@ public class FlatTabbedPaneUI Insets ci = new Insets( 0, 0, 0, 0 ); rotateInsets( hasFullBorder ? new Insets( sh, sh, sh, sh ) : new Insets( sh, 0, 0, 0 ), ci, tabPlacement ); - // paint content separator or full border - g.setColor( contentAreaColor ); + // create path for content separator or full border Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD ); path.append( new Rectangle2D.Float( x, y, w, h ), false ); path.append( new Rectangle2D.Float( x + (ci.left / 100f), y + (ci.top / 100f), w - (ci.left / 100f) - (ci.right / 100f), h - (ci.top / 100f) - (ci.bottom / 100f) ), false ); + + // add gap for selected tab to path + if( getTabType() == TAB_TYPE_CARD ) { + float csh = scale( (float) contentSeparatorHeight ); + + Rectangle tabRect = getTabBounds( tabPane, selectedIndex ); + Rectangle2D.Float innerTabRect = new Rectangle2D.Float( tabRect.x + csh, tabRect.y + csh, + tabRect.width - (csh * 2), tabRect.height - (csh * 2) ); + + // Ensure that the separator outside the tabViewport is present (doesn't get cutoff by the active tab) + // If left unsolved the active tab is "visible" in the separator (the gap) even when outside the viewport + if( tabViewport != null ) + Rectangle2D.intersect( tabViewport.getBounds(), innerTabRect, innerTabRect ); + + Rectangle2D.Float gap = null; + if( isHorizontalTabPlacement() ) { + if( innerTabRect.width > 0 ) { + float y2 = (tabPlacement == TOP) ? y : y + h - csh; + gap = new Rectangle2D.Float( innerTabRect.x, y2, innerTabRect.width, csh ); + } + } else { + if( innerTabRect.height > 0 ) { + float x2 = (tabPlacement == LEFT) ? x : x + w - csh; + gap = new Rectangle2D.Float( x2, innerTabRect.y, csh, innerTabRect.height ); + } + } + + if( gap != null ) { + path.append( gap, false ); + + // fill gap in case that the tab is colored (e.g. focused or hover) + g.setColor( getTabBackground( tabPlacement, selectedIndex, true ) ); + ((Graphics2D)g).fill( gap ); + } + } + + // paint content separator or full border + g.setColor( contentAreaColor ); ((Graphics2D)g).fill( path ); // repaint selection in scroll-tab-layout because it may be painted before @@ -1126,7 +1377,7 @@ public class FlatTabbedPaneUI // icon placement int verticalTextPosition; int horizontalTextPosition; - switch( clientPropertyInt( tabPane, TABBED_PANE_TAB_ICON_PLACEMENT, LEADING ) ) { + switch( clientPropertyInt( tabPane, TABBED_PANE_TAB_ICON_PLACEMENT, tabIconPlacement ) ) { default: case LEADING: verticalTextPosition = CENTER; horizontalTextPosition = TRAILING; break; case TRAILING: verticalTextPosition = CENTER; horizontalTextPosition = LEADING; break; @@ -1207,8 +1458,11 @@ public class FlatTabbedPaneUI } protected boolean isTabClosable( int tabIndex ) { + if( tabIndex < 0 ) + return false; + Object value = getTabClientProperty( tabIndex, TABBED_PANE_TAB_CLOSABLE ); - return (value instanceof Boolean) ? (boolean) value : false; + return (value instanceof Boolean) ? (boolean) value : tabClosable; } @SuppressWarnings( { "unchecked" } ) @@ -1282,7 +1536,16 @@ public class FlatTabbedPaneUI return tabPane.getTabCount() == 1 && leadingComponent == null && trailingComponent == null && - clientPropertyBoolean( tabPane, TABBED_PANE_HIDE_TAB_AREA_WITH_ONE_TAB, false ); + clientPropertyBoolean( tabPane, TABBED_PANE_HIDE_TAB_AREA_WITH_ONE_TAB, hideTabAreaWithOneTab ); + } + + /** @since 2 */ + protected int getTabType() { + Object value = tabPane.getClientProperty( TABBED_PANE_TAB_TYPE ); + + return (value instanceof String) + ? parseTabType( (String) value ) + : tabType; } protected int getTabsPopupPolicy() { @@ -1337,6 +1600,18 @@ public class FlatTabbedPaneUI : tabWidthMode; } + /** @since 2 */ + protected static int parseTabType( String str ) { + if( str == null ) + return TAB_TYPE_UNDERLINED; + + switch( str ) { + default: + case TABBED_PANE_TAB_TYPE_UNDERLINED: return TAB_TYPE_UNDERLINED; + case TABBED_PANE_TAB_TYPE_CARD: return TAB_TYPE_CARD; + } + } + protected static int parseTabsPopupPolicy( String str ) { if( str == null ) return AS_NEEDED; @@ -1396,6 +1671,19 @@ public class FlatTabbedPaneUI } } + protected static int parseTabIconPlacement( String str ) { + if( str == null ) + return LEADING; + + switch( str ) { + default: + case "leading": return LEADING; + case "trailing": return TRAILING; + case "top": return TOP; + case "bottom": return BOTTOM; + } + } + private void runWithOriginalLayoutManager( Runnable runnable ) { LayoutManager layout = tabPane.getLayout(); if( layout instanceof FlatTabbedPaneScrollLayout ) { @@ -1553,7 +1841,13 @@ public class FlatTabbedPaneUI super( direction, arrowType, FlatTabbedPaneUI.this.foreground, FlatTabbedPaneUI.this.disabledForeground, null, buttonHoverBackground, null, buttonPressedBackground ); - setArrowWidth( 10 ); + setArrowWidth( 11 ); + } + + protected void updateStyle() { + updateStyle( arrowType, + FlatTabbedPaneUI.this.foreground, FlatTabbedPaneUI.this.disabledForeground, + null, buttonHoverBackground, null, buttonPressedBackground ); } @Override @@ -1689,7 +1983,7 @@ public class FlatTabbedPaneUI } protected JMenuItem createTabMenuItem( int tabIndex ) { - // search for tab name in this places + // search for tab name in these places // 1. tab title // 2. text of label or text component in custom tab component (including children) // 3. accessible name of tab @@ -1722,7 +2016,7 @@ public class FlatTabbedPaneUI menuItem.setOpaque( true ); } - if( !tabPane.isEnabledAt( tabIndex ) ) + if( !tabPane.isEnabled() || !tabPane.isEnabledAt( tabIndex ) ) menuItem.setEnabled( false ); menuItem.addActionListener( e -> selectTab( tabIndex ) ); @@ -2118,7 +2412,7 @@ public class FlatTabbedPaneUI if( tabPane == null || tabViewport == null ) return; - if( !scrolled || tabViewport == null ) + if( !scrolled ) return; scrolled = false; @@ -2131,11 +2425,12 @@ public class FlatTabbedPaneUI private class Handler implements MouseListener, MouseMotionListener, PropertyChangeListener, - ChangeListener, ComponentListener, ContainerListener + ChangeListener, ComponentListener, ContainerListener, FocusListener { MouseListener mouseDelegate; PropertyChangeListener propertyChangeDelegate; ChangeListener changeDelegate; + FocusListener focusDelegate; private final PropertyChangeListener contentListener = this::contentPropertyChange; @@ -2230,9 +2525,7 @@ public class FlatTabbedPaneUI setRolloverTab( tabIndex ); // check whether mouse hit tab close area - boolean hitClose = isTabClosable( tabIndex ) - ? getTabCloseHitArea( tabIndex ).contains( x, y ) - : false; + boolean hitClose = isTabClosable( tabIndex ) && getTabCloseHitArea( tabIndex ).contains( x, y ); if( e.getID() == MouseEvent.MOUSE_PRESSED ) pressedTabIndex = hitClose ? tabIndex : -1; setRolloverTabClose( hitClose ); @@ -2241,6 +2534,8 @@ public class FlatTabbedPaneUI // update tooltip if( tabIndex >= 0 && hitClose ) { Object closeTip = getTabClientProperty( tabIndex, TABBED_PANE_TAB_CLOSE_TOOLTIPTEXT ); + if( closeTip == null ) + closeTip = tabCloseToolTipText; if( closeTip instanceof String ) setCloseToolTip( tabIndex, (String) closeTip ); else @@ -2253,8 +2548,7 @@ public class FlatTabbedPaneUI if( tabIndex == lastTipTabIndex ) return; // closeTip already set - if( tabIndex != lastTipTabIndex ) - restoreTabToolTip(); + restoreTabToolTip(); lastTipTabIndex = tabIndex; lastTip = tabPane.getToolTipTextAt( lastTipTabIndex ); @@ -2303,6 +2597,10 @@ public class FlatTabbedPaneUI break; case TABBED_PANE_SHOW_TAB_SEPARATORS: + case TABBED_PANE_TAB_TYPE: + tabPane.repaint(); + break; + case TABBED_PANE_SHOW_CONTENT_SEPARATOR: case TABBED_PANE_HAS_FULL_BORDER: case TABBED_PANE_HIDE_TAB_AREA_WITH_ONE_TAB: @@ -2340,6 +2638,13 @@ public class FlatTabbedPaneUI tabPane.repaint(); ensureSelectedTabIsVisibleLater(); break; + + case STYLE: + case STYLE_CLASS: + installStyle(); + tabPane.revalidate(); + tabPane.repaint(); + break; } } @@ -2394,6 +2699,20 @@ public class FlatTabbedPaneUI if( !(c instanceof UIResource) ) c.removePropertyChangeListener( contentListener ); } + + //---- interface FocusListener ---- + + @Override + public void focusGained( FocusEvent e ) { + focusDelegate.focusGained( e ); + repaintTab( tabPane.getSelectedIndex() ); + } + + @Override + public void focusLost( FocusEvent e ) { + focusDelegate.focusLost( e ); + repaintTab( tabPane.getSelectedIndex() ); + } } //---- class FlatTabbedPaneLayout ----------------------------------------- diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableCellBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableCellBorder.java index cd25abae..254cd352 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableCellBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableCellBorder.java @@ -16,11 +16,15 @@ package com.formdev.flatlaf.ui; +import java.awt.Color; import java.awt.Component; import java.awt.Graphics; +import java.awt.Insets; +import java.util.function.Function; import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.UIManager; +import javax.swing.plaf.TableUI; /** * Cell border for {@link javax.swing.table.DefaultTableCellRenderer} @@ -33,12 +37,54 @@ import javax.swing.UIManager; public class FlatTableCellBorder extends FlatLineBorder { - final boolean showCellFocusIndicator = UIManager.getBoolean( "Table.showCellFocusIndicator" ); + /** @since 2 */ protected boolean showCellFocusIndicator = UIManager.getBoolean( "Table.showCellFocusIndicator" ); + + private Component c; protected FlatTableCellBorder() { super( UIManager.getInsets( "Table.cellMargins" ), UIManager.getColor( "Table.cellFocusColor" ) ); } + @Override + public Insets getBorderInsets( Component c, Insets insets ) { + Insets m = getStyleFromTableUI( c, ui -> ui.cellMargins ); + if( m != null ) + return scaleInsets( c, insets, m.top, m.left, m.bottom, m.right ); + + return super.getBorderInsets( c, insets ); + } + + @Override + public Color getLineColor() { + if( c != null ) { + Color color = getStyleFromTableUI( c, ui -> ui.cellFocusColor ); + if( color != null ) + return color; + } + return super.getLineColor(); + } + + @Override + public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { + this.c = c; + super.paintBorder( c, g, x, y, width, height ); + this.c = null; + } + + /** + * Because this border is always shared for all tables, + * get border specific style from FlatTableUI. + */ + static T getStyleFromTableUI( Component c, Function f ) { + JTable table = (JTable) SwingUtilities.getAncestorOfClass( JTable.class, c ); + if( table != null ) { + TableUI ui = table.getUI(); + if( ui instanceof FlatTableUI ) + return f.apply( (FlatTableUI) ui ); + } + return null; + } + //---- class Default ------------------------------------------------------ /** @@ -74,6 +120,9 @@ public class FlatTableCellBorder { @Override public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { + Boolean b = getStyleFromTableUI( c, ui -> ui.showCellFocusIndicator ); + boolean showCellFocusIndicator = (b != null) ? b : this.showCellFocusIndicator; + if( !showCellFocusIndicator ) { JTable table = (JTable) SwingUtilities.getAncestorOfClass( JTable.class, c ); if( table != null && !isSelectionEditable( table ) ) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableHeaderBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableHeaderBorder.java index d8e6e87c..d3c01011 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableHeaderBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableHeaderBorder.java @@ -21,9 +21,11 @@ import java.awt.Component; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; +import java.awt.Insets; import java.awt.geom.Rectangle2D; import javax.swing.JScrollBar; import javax.swing.JScrollPane; +import javax.swing.JViewport; import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.table.JTableHeader; @@ -44,17 +46,36 @@ public class FlatTableHeaderBorder { protected Color separatorColor = UIManager.getColor( "TableHeader.separatorColor" ); protected Color bottomSeparatorColor = UIManager.getColor( "TableHeader.bottomSeparatorColor" ); + /** @since 1.6 */ protected boolean showTrailingVerticalLine = UIManager.getBoolean( "TableHeader.showTrailingVerticalLine" ); public FlatTableHeaderBorder() { super( UIManager.getInsets( "TableHeader.cellMargins" ) ); } + @Override + public Insets getBorderInsets( Component c, Insets insets ) { + JTableHeader header = (JTableHeader) SwingUtilities.getAncestorOfClass( JTableHeader.class, c ); + if( header != null ) { + if( header.getUI() instanceof FlatTableHeaderUI ) { + FlatTableHeaderUI ui = (FlatTableHeaderUI) header.getUI(); + if( ui.cellMargins != null ) { + Insets m = ui.cellMargins; + return scaleInsets( c, insets, m.top, m.left, m.bottom, m.right ); + } + } + } + + return super.getBorderInsets( c, insets ); + } + @Override public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { JTableHeader header = (JTableHeader) SwingUtilities.getAncestorOfClass( JTableHeader.class, c ); boolean leftToRight = (header != null ? header : c).getComponentOrientation().isLeftToRight(); boolean paintLeft = !leftToRight; boolean paintRight = leftToRight; + Color separatorColor = this.separatorColor; + Color bottomSeparatorColor = this.bottomSeparatorColor; if( header != null ) { int hx = SwingUtilities.convertPoint( c, x, y, header ).x; @@ -66,6 +87,16 @@ public class FlatTableHeaderBorder if( hx + width >= header.getWidth() && leftToRight && hideTrailingVerticalLine( header ) ) paintRight = false; } + + // Because this border is always shared for all table headers, + // get border specific style from FlatTableHeaderUI. + if( header.getUI() instanceof FlatTableHeaderUI ) { + FlatTableHeaderUI ui = (FlatTableHeaderUI) header.getUI(); + if( ui.separatorColor != null ) + separatorColor = ui.separatorColor; + if( ui.bottomSeparatorColor != null ) + bottomSeparatorColor = ui.bottomSeparatorColor; + } } float lineWidth = UIScale.scale( 1f ); @@ -108,12 +139,29 @@ public class FlatTableHeaderBorder } protected boolean hideTrailingVerticalLine( JTableHeader header ) { + if( header.getUI() instanceof FlatTableHeaderUI ) { + FlatTableHeaderUI ui = (FlatTableHeaderUI) header.getUI(); + if( ui.showTrailingVerticalLine != null ) + return !ui.showTrailingVerticalLine; + } + + if( showTrailingVerticalLine ) + return false; + + // do not hide if table header is not a child of a scroll pane Container viewport = header.getParent(); Container viewportParent = (viewport != null) ? viewport.getParent() : null; if( !(viewportParent instanceof JScrollPane) ) - return true; + return false; - JScrollBar vsb = ((JScrollPane)viewportParent).getVerticalScrollBar(); + // do not hide if table header is not the column header of the scroll pane + JScrollPane scrollPane = (JScrollPane) viewportParent; + JViewport columnHeader = scrollPane.getColumnHeader(); + if( viewport != columnHeader ) + return false; + + // hide if vertical scroll bar is not shown + JScrollBar vsb = scrollPane.getVerticalScrollBar(); if( vsb == null || !vsb.isVisible() ) return true; diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableHeaderUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableHeaderUI.java index f19b5202..e85041d4 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableHeaderUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableHeaderUI.java @@ -18,12 +18,16 @@ package com.formdev.flatlaf.ui; import java.awt.Color; import java.awt.Component; +import java.awt.Cursor; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; +import java.awt.Rectangle; +import java.awt.event.MouseEvent; import java.awt.geom.Rectangle2D; -import java.util.Objects; +import java.beans.PropertyChangeListener; +import java.util.Map; import javax.swing.Icon; import javax.swing.JComponent; import javax.swing.JLabel; @@ -31,11 +35,15 @@ import javax.swing.JTable; import javax.swing.SwingConstants; import javax.swing.UIManager; import javax.swing.border.Border; +import javax.swing.event.MouseInputListener; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.UIResource; import javax.swing.plaf.basic.BasicTableHeaderUI; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumnModel; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.UIScale; /** @@ -58,33 +66,54 @@ import com.formdev.flatlaf.util.UIScale; * @uiDefault TableHeader.cellMargins Insets * @uiDefault TableHeader.separatorColor Color * @uiDefault TableHeader.bottomSeparatorColor Color + * @uiDefault TableHeader.showTrailingVerticalLine boolean + * + * + * + * @uiDefault Component.arrowType String chevron (default) or triangle + * @uiDefault Table.sortIconColor Color * * @author Karl Tauber */ public class FlatTableHeaderUI extends BasicTableHeaderUI + implements StyleableUI { - protected Color bottomSeparatorColor; - protected int height; - protected int sortIconPosition; + @Styleable protected Color bottomSeparatorColor; + @Styleable protected int height; + @Styleable(type=String.class) protected int sortIconPosition; + + // for FlatTableHeaderBorder + /** @since 2 */ @Styleable protected Insets cellMargins; + /** @since 2 */ @Styleable protected Color separatorColor; + /** @since 2 */ @Styleable protected Boolean showTrailingVerticalLine; + + // for FlatAscendingSortIcon and FlatDescendingSortIcon + // (needs to be public because icon classes are in another package) + /** @since 2 */ @Styleable public String arrowType; + /** @since 2 */ @Styleable public Color sortIconColor; + + private PropertyChangeListener propertyChangeListener; + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { return new FlatTableHeaderUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installDefaults() { super.installDefaults(); bottomSeparatorColor = UIManager.getColor( "TableHeader.bottomSeparatorColor" ); height = UIManager.getInt( "TableHeader.height" ); - switch( Objects.toString( UIManager.getString( "TableHeader.sortIconPosition" ), "right" ) ) { - default: - case "right": sortIconPosition = SwingConstants.RIGHT; break; - case "left": sortIconPosition = SwingConstants.LEFT; break; - case "top": sortIconPosition = SwingConstants.TOP; break; - case "bottom": sortIconPosition = SwingConstants.BOTTOM; break; - } + sortIconPosition = parseSortIconPosition( UIManager.getString( "TableHeader.sortIconPosition" ) ); } @Override @@ -92,6 +121,76 @@ public class FlatTableHeaderUI super.uninstallDefaults(); bottomSeparatorColor = null; + + oldStyleValues = null; + } + + @Override + protected void installListeners() { + super.installListeners(); + + propertyChangeListener = FlatStylingSupport.createPropertyChangeListener( header, this::installStyle, null ); + header.addPropertyChangeListener( propertyChangeListener ); + } + + @Override + protected void uninstallListeners() { + super.uninstallListeners(); + + header.removePropertyChangeListener( propertyChangeListener ); + propertyChangeListener = null; + } + + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( header, "TableHeader" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + if( key.equals( "sortIconPosition" ) && value instanceof String ) + value = parseSortIconPosition( (String) value ); + + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, header, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + + private static int parseSortIconPosition( String str ) { + if( str == null ) + str = ""; + + switch( str ) { + default: + case "right": return SwingConstants.RIGHT; + case "left": return SwingConstants.LEFT; + case "top": return SwingConstants.TOP; + case "bottom": return SwingConstants.BOTTOM; + } + } + + @Override + protected MouseInputListener createMouseInputListener() { + return new FlatMouseInputHandler(); + } + + // overridden and made public to allow usage in custom renderers + @Override + public int getRolloverColumn() { + return super.getRolloverColumn(); } @Override @@ -246,4 +345,52 @@ public class FlatTableHeaderUI return (origBorder != null) ? origBorder.isBorderOpaque() : false; } } + + //---- class FlatMouseInputHandler ---------------------------------------- + + /** @since 1.6 */ + protected class FlatMouseInputHandler + extends MouseInputHandler + { + Cursor oldCursor; + + @Override + public void mouseMoved( MouseEvent e ) { + // restore old cursor, which is necessary because super.mouseMoved() swaps cursors + if( oldCursor != null ) { + header.setCursor( oldCursor ); + oldCursor = null; + } + + super.mouseMoved( e ); + + // if resizing last column is not possible, then Swing still shows a resize cursor, + // which can be confusing for the user --> change cursor to standard cursor + JTable table; + int column; + if( header.isEnabled() && + (table = header.getTable()) != null && + table.getAutoResizeMode() != JTable.AUTO_RESIZE_OFF && + header.getCursor() == Cursor.getPredefinedCursor( Cursor.E_RESIZE_CURSOR ) && + (column = header.columnAtPoint( e.getPoint() )) >= 0 && + column == header.getColumnModel().getColumnCount() - 1 ) + { + // mouse is in last column + Rectangle r = header.getHeaderRect( column ); + r.grow( -3, 0 ); + if( !r.contains( e.getX(), e.getY() ) ) { + // mouse is in left or right resize area of last column + boolean isResizeLastColumn = (e.getX() >= r.x + (r.width / 2)); + if( !header.getComponentOrientation().isLeftToRight() ) + isResizeLastColumn = !isResizeLastColumn; + + if( isResizeLastColumn ) { + // resize is not possible --> change cursor to standard cursor + oldCursor = header.getCursor(); + header.setCursor( Cursor.getDefaultCursor() ); + } + } + } + } + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableUI.java index 84e4edfa..44269bd4 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableUI.java @@ -22,9 +22,12 @@ import java.awt.Dimension; import java.awt.EventQueue; import java.awt.Graphics; import java.awt.Graphics2D; +import java.awt.Insets; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.geom.Rectangle2D; +import java.beans.PropertyChangeListener; +import java.util.Map; import javax.swing.JComponent; import javax.swing.JScrollPane; import javax.swing.JViewport; @@ -34,7 +37,11 @@ import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicTableUI; import javax.swing.table.JTableHeader; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; import com.formdev.flatlaf.util.Graphics2DProxy; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.SystemInfo; import com.formdev.flatlaf.util.UIScale; @@ -69,6 +76,7 @@ import com.formdev.flatlaf.util.UIScale; * @uiDefault Table.rowHeight int * @uiDefault Table.showHorizontalLines boolean * @uiDefault Table.showVerticalLines boolean + * @uiDefault Table.showTrailingVerticalLine boolean * @uiDefault Table.intercellSpacing Dimension * @uiDefault Table.selectionInactiveBackground Color * @uiDefault Table.selectionInactiveForeground Color @@ -87,30 +95,48 @@ import com.formdev.flatlaf.util.UIScale; */ public class FlatTableUI extends BasicTableUI + implements StyleableUI { protected boolean showHorizontalLines; protected boolean showVerticalLines; + /** @since 1.6 */ @Styleable protected boolean showTrailingVerticalLine; protected Dimension intercellSpacing; - protected Color selectionBackground; - protected Color selectionForeground; - protected Color selectionInactiveBackground; - protected Color selectionInactiveForeground; + @Styleable protected Color selectionBackground; + @Styleable protected Color selectionForeground; + @Styleable protected Color selectionInactiveBackground; + @Styleable protected Color selectionInactiveForeground; + + // for FlatTableCellBorder + /** @since 2 */ @Styleable protected Insets cellMargins; + /** @since 2 */ @Styleable protected Color cellFocusColor; + /** @since 2 */ @Styleable protected Boolean showCellFocusIndicator; private boolean oldShowHorizontalLines; private boolean oldShowVerticalLines; private Dimension oldIntercellSpacing; + private PropertyChangeListener propertyChangeListener; + private Map oldStyleValues; + public static ComponentUI createUI( JComponent c ) { return new FlatTableUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installDefaults() { super.installDefaults(); showHorizontalLines = UIManager.getBoolean( "Table.showHorizontalLines" ); showVerticalLines = UIManager.getBoolean( "Table.showVerticalLines" ); + showTrailingVerticalLine = UIManager.getBoolean( "Table.showTrailingVerticalLine" ); intercellSpacing = UIManager.getDimension( "Table.intercellSpacing" ); selectionBackground = UIManager.getColor( "Table.selectionBackground" ); @@ -148,6 +174,8 @@ public class FlatTableUI selectionInactiveBackground = null; selectionInactiveForeground = null; + oldStyleValues = null; + // restore old show horizontal/vertical lines (if not modified) if( !showHorizontalLines && oldShowHorizontalLines && !table.getShowHorizontalLines() ) table.setShowHorizontalLines( true ); @@ -159,6 +187,35 @@ public class FlatTableUI table.setIntercellSpacing( oldIntercellSpacing ); } + @Override + protected void installListeners() { + super.installListeners(); + + propertyChangeListener = e -> { + switch( e.getPropertyName() ) { + case FlatClientProperties.COMPONENT_FOCUS_OWNER: + toggleSelectionColors(); + break; + + case FlatClientProperties.STYLE: + case FlatClientProperties.STYLE_CLASS: + installStyle(); + table.revalidate(); + table.repaint(); + break; + } + }; + table.addPropertyChangeListener( propertyChangeListener ); + } + + @Override + protected void uninstallListeners() { + super.uninstallListeners(); + + table.removePropertyChangeListener( propertyChangeListener ); + propertyChangeListener = null; + } + @Override protected FocusListener createFocusListener() { return new BasicTableUI.FocusHandler() { @@ -180,10 +237,58 @@ public class FlatTableUI }; } + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( table, "Table" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + Color oldSelectionBackground = selectionBackground; + Color oldSelectionForeground = selectionForeground; + Color oldSelectionInactiveBackground = selectionInactiveBackground; + Color oldSelectionInactiveForeground = selectionInactiveForeground; + + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + + // update selection background + if( selectionBackground != oldSelectionBackground ) { + Color selBg = table.getSelectionBackground(); + if( selBg == oldSelectionBackground ) + table.setSelectionBackground( selectionBackground ); + else if( selBg == oldSelectionInactiveBackground ) + table.setSelectionBackground( selectionInactiveBackground ); + } + + // update selection foreground + if( selectionForeground != oldSelectionForeground ) { + Color selFg = table.getSelectionForeground(); + if( selFg == oldSelectionForeground ) + table.setSelectionForeground( selectionForeground ); + else if( selFg == oldSelectionInactiveForeground ) + table.setSelectionForeground( selectionInactiveForeground ); + } + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, table, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + /** * Toggle selection colors from focused to inactive and vice versa. * - * This is not a optimal solution but much easier than rewriting the whole paint methods. + * This is not an optimal solution but much easier than rewriting the whole paint methods. * * Using a LaF specific renderer was avoided because often a custom renderer is * already used in applications. Then either the inactive colors are not used, @@ -240,7 +345,7 @@ public class FlatTableUI if( isDragging && SystemInfo.isJava_9_orLater && ((horizontalLines && y1 == y2) || (verticalLines && x1 == x2)) && - wasInvokedFromPaintDraggedArea() ) + wasInvokedFromMethod( "paintDraggedArea" ) ) { if( y1 == y2 ) { // horizontal grid line @@ -282,22 +387,8 @@ public class FlatTableUI return wasInvokedFromMethod( "paintGrid" ); } - private boolean wasInvokedFromPaintDraggedArea() { - return wasInvokedFromMethod( "paintDraggedArea" ); - } - private boolean wasInvokedFromMethod( String methodName ) { - StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); - for( int i = 0; i < 10 || i < stackTrace.length; i++ ) { - if( "javax.swing.plaf.basic.BasicTableUI".equals( stackTrace[i].getClassName() ) ) { - String methodName2 = stackTrace[i].getMethodName(); - if( "paintCell".equals( methodName2 ) ) - return false; - if( methodName.equals( methodName2 ) ) - return true; - } - } - return false; + return StackUtils.wasInvokedFrom( BasicTableUI.class.getName(), methodName, 8 ); } }; } @@ -306,6 +397,10 @@ public class FlatTableUI } protected boolean hideLastVerticalLine() { + if( showTrailingVerticalLine ) + return false; + + // do not hide if table is not a child of a scroll pane Container viewport = SwingUtilities.getUnwrappedParent( table ); Container viewportParent = (viewport != null) ? viewport.getParent() : null; if( !(viewportParent instanceof JScrollPane) ) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextAreaUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextAreaUI.java index 21824be5..4b8241c7 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextAreaUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextAreaUI.java @@ -20,16 +20,20 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; +import java.awt.Insets; import java.awt.event.FocusListener; import java.beans.PropertyChangeEvent; +import java.util.Map; import javax.swing.JComponent; import javax.swing.JTextArea; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.UIResource; import javax.swing.plaf.basic.BasicTextAreaUI; -import javax.swing.text.JTextComponent; +import javax.swing.text.Caret; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; import com.formdev.flatlaf.util.HiDPIUtils; +import com.formdev.flatlaf.util.LoggingFacade; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JTextArea}. @@ -59,15 +63,22 @@ import com.formdev.flatlaf.util.HiDPIUtils; */ public class FlatTextAreaUI extends BasicTextAreaUI + implements StyleableUI { - protected int minimumWidth; + @Styleable protected int minimumWidth; protected boolean isIntelliJTheme; - protected Color background; - protected Color disabledBackground; - protected Color inactiveBackground; - protected Color focusedBackground; + private Color background; + @Styleable protected Color disabledBackground; + @Styleable protected Color inactiveBackground; + @Styleable protected Color focusedBackground; + + private Color oldDisabledBackground; + private Color oldInactiveBackground; + + private Insets defaultMargin; private FocusListener focusListener; + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { return new FlatTextAreaUI(); @@ -77,7 +88,7 @@ public class FlatTextAreaUI public void installUI( JComponent c ) { super.installUI( c ); - updateBackground(); + installStyle(); } @Override @@ -90,6 +101,8 @@ public class FlatTextAreaUI disabledBackground = UIManager.getColor( "TextArea.disabledBackground" ); inactiveBackground = UIManager.getColor( "TextArea.inactiveBackground" ); focusedBackground = UIManager.getColor( "TextArea.focusedBackground" ); + + defaultMargin = UIManager.getInsets( "TextArea.margin" ); } @Override @@ -100,6 +113,11 @@ public class FlatTextAreaUI disabledBackground = null; inactiveBackground = null; focusedBackground = null; + + oldDisabledBackground = null; + oldInactiveBackground = null; + + oldStyleValues = null; } @Override @@ -120,39 +138,55 @@ public class FlatTextAreaUI } @Override - protected void propertyChange( PropertyChangeEvent e ) { - super.propertyChange( e ); - FlatEditorPaneUI.propertyChange( getComponent(), e ); + protected Caret createCaret() { + return new FlatCaret( null, false ); + } - switch( e.getPropertyName() ) { - case "editable": - case "enabled": - updateBackground(); - break; + @Override + protected void propertyChange( PropertyChangeEvent e ) { + // invoke updateBackground() before super.propertyChange() + String propertyName = e.getPropertyName(); + if( "editable".equals( propertyName ) || "enabled".equals( propertyName ) ) + updateBackground(); + + super.propertyChange( e ); + FlatEditorPaneUI.propertyChange( getComponent(), e, this::installStyle ); + } + + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( getComponent(), "TextArea" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); } } + /** @since 2 */ + protected void applyStyle( Object style ) { + oldDisabledBackground = disabledBackground; + oldInactiveBackground = inactiveBackground; + + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + + updateBackground(); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, getComponent(), key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + private void updateBackground() { - JTextComponent c = getComponent(); - - Color background = c.getBackground(); - if( !(background instanceof UIResource) ) - return; - - // do not update background if it currently has a unknown color (assigned from outside) - if( background != this.background && - background != disabledBackground && - background != inactiveBackground ) - return; - - Color newBackground = !c.isEnabled() - ? disabledBackground - : (!c.isEditable() - ? inactiveBackground - : this.background); - - if( newBackground != background ) - c.setBackground( newBackground ); + FlatTextFieldUI.updateBackground( getComponent(), background, + disabledBackground, inactiveBackground, + oldDisabledBackground, oldInactiveBackground ); } @Override @@ -170,7 +204,7 @@ public class FlatTextAreaUI if( c instanceof JTextArea && ((JTextArea)c).getColumns() > 0 ) return size; - return FlatEditorPaneUI.applyMinimumWidth( c, size, minimumWidth ); + return FlatEditorPaneUI.applyMinimumWidth( c, size, minimumWidth, defaultMargin ); } @Override diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextBorder.java index b57a1088..be152aa3 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextBorder.java @@ -18,6 +18,7 @@ package com.formdev.flatlaf.ui; import java.awt.Component; import javax.swing.UIManager; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; /** * Border for various text components (e.g. {@link javax.swing.JTextField}). @@ -29,7 +30,10 @@ import javax.swing.UIManager; public class FlatTextBorder extends FlatBorder { - protected final int arc = UIManager.getInt( "TextComponent.arc" ); + @Styleable protected int arc = UIManager.getInt( "TextComponent.arc" ); + + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected Boolean roundRect; @Override protected int getArc( Component c ) { @@ -37,6 +41,8 @@ public class FlatTextBorder return 0; Boolean roundRect = FlatUIUtils.isRoundRect( c ); + if( roundRect == null ) + roundRect = this.roundRect; return roundRect != null ? (roundRect ? Short.MAX_VALUE : 0) : arc; } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextFieldUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextFieldUI.java index d80ac851..feba4915 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextFieldUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextFieldUI.java @@ -16,30 +16,49 @@ package com.formdev.flatlaf.ui; +import static com.formdev.flatlaf.FlatClientProperties.*; import static com.formdev.flatlaf.util.UIScale.scale; import java.awt.Color; +import java.awt.Component; import java.awt.Container; +import java.awt.Cursor; import java.awt.Dimension; import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; +import java.awt.LayoutManager; +import java.awt.LayoutManager2; +import java.awt.Rectangle; import java.awt.event.FocusListener; import java.beans.PropertyChangeEvent; +import java.util.Map; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Consumer; +import javax.swing.Icon; +import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JSpinner; import javax.swing.JTextField; +import javax.swing.JToggleButton; +import javax.swing.JToolBar; import javax.swing.LookAndFeel; import javax.swing.UIManager; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.UIResource; import javax.swing.plaf.basic.BasicTextFieldUI; import javax.swing.text.Caret; +import javax.swing.text.Document; import javax.swing.text.JTextComponent; -import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; import com.formdev.flatlaf.util.HiDPIUtils; import com.formdev.flatlaf.util.JavaCompatibility; +import com.formdev.flatlaf.util.LoggingFacade; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JTextField}. @@ -65,6 +84,7 @@ import com.formdev.flatlaf.util.JavaCompatibility; * @uiDefault Component.isIntelliJTheme boolean * @uiDefault TextField.placeholderForeground Color * @uiDefault TextField.focusedBackground Color optional + * @uiDefault TextField.iconTextGap int optional, default is 4 * @uiDefault TextComponent.selectAllOnFocusPolicy String never, once (default) or always * @uiDefault TextComponent.selectAllOnMouseClick boolean * @@ -72,18 +92,66 @@ import com.formdev.flatlaf.util.JavaCompatibility; */ public class FlatTextFieldUI extends BasicTextFieldUI + implements StyleableUI { - protected int minimumWidth; + @Styleable protected int minimumWidth; protected boolean isIntelliJTheme; - protected Color placeholderForeground; - protected Color focusedBackground; + private Color background; + @Styleable protected Color disabledBackground; + @Styleable protected Color inactiveBackground; + @Styleable protected Color placeholderForeground; + @Styleable protected Color focusedBackground; + /** @since 2 */ @Styleable protected int iconTextGap; + + /** @since 2 */ @Styleable protected Icon leadingIcon; + /** @since 2 */ @Styleable protected Icon trailingIcon; + /** @since 2 */ protected JComponent leadingComponent; + /** @since 2 */ protected JComponent trailingComponent; + /** @since 2 */ protected JComponent clearButton; + + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected boolean showClearButton; + + private Color oldDisabledBackground; + private Color oldInactiveBackground; + + private Insets defaultMargin; private FocusListener focusListener; + private DocumentListener documentListener; + private Map oldStyleValues; + private AtomicBoolean borderShared; public static ComponentUI createUI( JComponent c ) { return new FlatTextFieldUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + leadingIcon = clientProperty( c, TEXT_FIELD_LEADING_ICON, null, Icon.class ); + trailingIcon = clientProperty( c, TEXT_FIELD_TRAILING_ICON, null, Icon.class ); + + installLeadingComponent(); + installTrailingComponent(); + installClearButton(); + + installStyle(); + } + + @Override + public void uninstallUI( JComponent c ) { + uninstallLeadingComponent(); + uninstallTrailingComponent(); + uninstallClearButton(); + + super.uninstallUI( c ); + + leadingIcon = null; + trailingIcon = null; + } + @Override protected void installDefaults() { super.installDefaults(); @@ -91,8 +159,14 @@ public class FlatTextFieldUI String prefix = getPropertyPrefix(); minimumWidth = UIManager.getInt( "Component.minimumWidth" ); isIntelliJTheme = UIManager.getBoolean( "Component.isIntelliJTheme" ); + background = UIManager.getColor( prefix + ".background" ); + disabledBackground = UIManager.getColor( prefix + ".disabledBackground" ); + inactiveBackground = UIManager.getColor( prefix + ".inactiveBackground" ); placeholderForeground = UIManager.getColor( prefix + ".placeholderForeground" ); focusedBackground = UIManager.getColor( prefix + ".focusedBackground" ); + iconTextGap = FlatUIUtils.getUIInt( prefix + ".iconTextGap", 4 ); + + defaultMargin = UIManager.getInsets( prefix + ".margin" ); LookAndFeel.installProperty( getComponent(), "opaque", false ); @@ -103,9 +177,18 @@ public class FlatTextFieldUI protected void uninstallDefaults() { super.uninstallDefaults(); + background = null; + disabledBackground = null; + inactiveBackground = null; placeholderForeground = null; focusedBackground = null; + oldDisabledBackground = null; + oldInactiveBackground = null; + + oldStyleValues = null; + borderShared = null; + MigLayoutVisualPadding.uninstall( getComponent() ); } @@ -124,6 +207,11 @@ public class FlatTextFieldUI getComponent().removeFocusListener( focusListener ); focusListener = null; + + if( documentListener != null ) { + getComponent().getDocument().removeDocumentListener( documentListener ); + documentListener = null; + } } @Override @@ -134,27 +222,184 @@ public class FlatTextFieldUI @Override protected void propertyChange( PropertyChangeEvent e ) { - super.propertyChange( e ); - propertyChange( getComponent(), e ); - } + String propertyName = e.getPropertyName(); + if( "editable".equals( propertyName ) || "enabled".equals( propertyName ) ) + updateBackground(); + else + super.propertyChange( e ); - static void propertyChange( JTextComponent c, PropertyChangeEvent e ) { + JTextComponent c = getComponent(); switch( e.getPropertyName() ) { - case FlatClientProperties.PLACEHOLDER_TEXT: - case FlatClientProperties.COMPONENT_ROUND_RECT: + case PLACEHOLDER_TEXT: + case COMPONENT_ROUND_RECT: + case OUTLINE: + case TEXT_FIELD_PADDING: c.repaint(); break; - case FlatClientProperties.MINIMUM_WIDTH: + case MINIMUM_WIDTH: c.revalidate(); break; + + case STYLE: + case STYLE_CLASS: + installStyle(); + c.revalidate(); + c.repaint(); + break; + + case TEXT_FIELD_LEADING_ICON: + leadingIcon = (e.getNewValue() instanceof Icon) ? (Icon) e.getNewValue() : null; + c.repaint(); + break; + + case TEXT_FIELD_TRAILING_ICON: + trailingIcon = (e.getNewValue() instanceof Icon) ? (Icon) e.getNewValue() : null; + c.repaint(); + break; + + case TEXT_FIELD_LEADING_COMPONENT: + uninstallLeadingComponent(); + installLeadingComponent(); + c.revalidate(); + c.repaint(); + break; + + case TEXT_FIELD_TRAILING_COMPONENT: + uninstallTrailingComponent(); + installTrailingComponent(); + c.revalidate(); + c.repaint(); + break; + + case TEXT_FIELD_SHOW_CLEAR_BUTTON: + uninstallClearButton(); + installClearButton(); + c.revalidate(); + c.repaint(); + break; + + case "enabled": + case "editable": + updateClearButton(); + break; + + case "document": + if( documentListener != null ) { + if( e.getOldValue() instanceof Document ) + ((Document)e.getOldValue()).removeDocumentListener( documentListener ); + if( e.getNewValue() instanceof Document ) + ((Document)e.getNewValue()).addDocumentListener( documentListener ); + + updateClearButton(); + } + break; } } + /** @since 2 */ + protected void installDocumentListener() { + if( documentListener != null ) + return; + + documentListener = new FlatDocumentListener(); + getComponent().getDocument().addDocumentListener( documentListener ); + } + + /** @since 2 */ + protected void documentChanged( DocumentEvent e ) { + if( clearButton != null ) + updateClearButton(); + } + + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( getComponent(), getStyleType() ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + String getStyleType() { + return "TextField"; + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldDisabledBackground = disabledBackground; + oldInactiveBackground = inactiveBackground; + boolean oldShowClearButton = showClearButton; + + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + + updateBackground(); + if( showClearButton != oldShowClearButton ) { + uninstallClearButton(); + installClearButton(); + } + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + if( borderShared == null ) + borderShared = new AtomicBoolean( true ); + return FlatStylingSupport.applyToAnnotatedObjectOrBorder( this, key, value, getComponent(), borderShared ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this, getComponent().getBorder() ); + } + + private void updateBackground() { + updateBackground( getComponent(), background, + disabledBackground, inactiveBackground, + oldDisabledBackground, oldInactiveBackground ); + } + + // same functionality as BasicTextUI.updateBackground() + static void updateBackground( JTextComponent c, Color background, + Color disabledBackground, Color inactiveBackground, + Color oldDisabledBackground, Color oldInactiveBackground ) + { + Color oldBackground = c.getBackground(); + if( !(oldBackground instanceof UIResource) ) + return; + + // do not update background if it currently has an unknown color (assigned from outside) + if( oldBackground != background && + oldBackground != disabledBackground && + oldBackground != inactiveBackground && + oldBackground != oldDisabledBackground && + oldBackground != oldInactiveBackground ) + return; + + Color newBackground = !c.isEnabled() + ? disabledBackground + : (!c.isEditable() + ? inactiveBackground + : background); + + if( newBackground != oldBackground ) + c.setBackground( newBackground ); + } + @Override protected void paintSafely( Graphics g ) { paintBackground( g, getComponent(), isIntelliJTheme, focusedBackground ); - paintPlaceholder( g, getComponent(), placeholderForeground ); + paintPlaceholder( g ); + + if( hasLeadingIcon() || hasTrailingIcon() ) + paintIcons( g, new Rectangle( getIconsRect() ) ); + +/*debug + Rectangle r = getVisibleEditorRect(); + g.setColor( Color.red ); + g.drawRect( r.x, r.y, r.width - 1, r.height - 1 ); +debug*/ super.paintSafely( HiDPIUtils.createGraphicsTextYCorrection( (Graphics2D) g ) ); } @@ -169,7 +414,7 @@ public class FlatTextFieldUI // - not opaque and // - border is not a flat border and // - opaque was explicitly set (to false) - // (same behaviour as in AquaTextFieldUI) + // (same behavior as in AquaTextFieldUI) if( !c.isOpaque() && FlatUIUtils.getOutsideFlatBorder( c ) == null && FlatUIUtils.hasOpaqueBeenExplicitlySet( c ) ) return; @@ -199,18 +444,20 @@ public class FlatTextFieldUI if( !(background instanceof UIResource) ) return background; + // focused + if( focusedBackground != null && FlatUIUtils.isPermanentFocusOwner( c ) ) + return focusedBackground; + // for compatibility with IntelliJ themes if( isIntelliJTheme && (!c.isEnabled() || !c.isEditable()) ) return FlatUIUtils.getParentBackground( c ); - // focused and editable - if( focusedBackground != null && c.isEditable() && FlatUIUtils.isPermanentFocusOwner( c ) ) - return focusedBackground; - return background; } - static void paintPlaceholder( Graphics g, JTextComponent c, Color placeholderForeground ) { + protected void paintPlaceholder( Graphics g ) { + JTextComponent c = getComponent(); + // check whether text component is empty if( c.getDocument().getLength() > 0 ) return; @@ -220,38 +467,94 @@ public class FlatTextFieldUI JComponent jc = (parent instanceof JComboBox) ? (JComboBox) parent : c; // get placeholder text - Object placeholder = jc.getClientProperty( FlatClientProperties.PLACEHOLDER_TEXT ); - if( !(placeholder instanceof String) ) + String placeholder = clientProperty( jc, PLACEHOLDER_TEXT, null, String.class ); + if( placeholder == null ) return; // compute placeholder location - Insets insets = c.getInsets(); + Rectangle r = getVisibleEditorRect(); FontMetrics fm = c.getFontMetrics( c.getFont() ); - int x = insets.left; - int y = insets.top + fm.getAscent() + ((c.getHeight() - insets.top - insets.bottom - fm.getHeight()) / 2); + String clippedPlaceholder = JavaCompatibility.getClippedString( c, fm, placeholder, r.width ); + int x = r.x + (isLeftToRight() ? 0 : r.width - fm.stringWidth( clippedPlaceholder )); + int y = r.y + fm.getAscent() + ((r.height - fm.getHeight()) / 2); // paint placeholder g.setColor( placeholderForeground ); - String clippedPlaceholder = JavaCompatibility.getClippedString( jc, fm, - (String) placeholder, c.getWidth() - insets.left - insets.right ); FlatUIUtils.drawString( c, g, clippedPlaceholder, x, y ); } + /** + * Paints the leading and trailing icons in the given rectangle. + * The rectangle is updated by this method so that subclasses can use it + * without painting over leading or trailing icons. + * + * @since 2 + */ + protected void paintIcons( Graphics g, Rectangle r ) { + boolean ltr = isLeftToRight(); + Icon leftIcon = ltr ? leadingIcon : trailingIcon; + Icon rightIcon = ltr ? trailingIcon : leadingIcon; + + // paint left icon + if( leftIcon != null ) { + int x = r.x; + int y = r.y + Math.round( (r.height - leftIcon.getIconHeight()) / 2f ); + leftIcon.paintIcon( getComponent(), g, x, y ); + + // update rectangle so that subclasses can use it + int w = leftIcon.getIconWidth() + scale( iconTextGap ); + r.x += w; + r.width -= w; + } + + // paint right icon + if( rightIcon != null ) { + int iconWidth = rightIcon.getIconWidth(); + int x = r.x + r.width - iconWidth; + int y = r.y + Math.round( (r.height - rightIcon.getIconHeight()) / 2f ); + rightIcon.paintIcon( getComponent(), g, x, y ); + + // update rectangle so that subclasses can use it + r.width -= iconWidth + scale( iconTextGap ); + } + } + @Override public Dimension getPreferredSize( JComponent c ) { - return applyMinimumWidth( c, super.getPreferredSize( c ), minimumWidth ); + return applyMinimumWidth( c, applyExtraSize( super.getPreferredSize( c ) ), minimumWidth ); } @Override public Dimension getMinimumSize( JComponent c ) { - return applyMinimumWidth( c, super.getMinimumSize( c ), minimumWidth ); + return applyMinimumWidth( c, applyExtraSize( super.getMinimumSize( c ) ), minimumWidth ); } - static Dimension applyMinimumWidth( JComponent c, Dimension size, int minimumWidth ) { + private Dimension applyExtraSize( Dimension size ) { + // add width of leading and trailing icons + size.width += getLeadingIconWidth() + getTrailingIconWidth(); + + // add width of leading and trailing components + for( JComponent comp : getLeadingComponents() ) { + if( comp != null && comp.isVisible() ) + size.width += comp.getPreferredSize().width; + } + for( JComponent comp : getTrailingComponents() ) { + if( comp != null && comp.isVisible() ) + size.width += comp.getPreferredSize().width; + } + + return size; + } + + private Dimension applyMinimumWidth( JComponent c, Dimension size, int minimumWidth ) { // do not apply minimum width if JTextField.columns is set if( c instanceof JTextField && ((JTextField)c).getColumns() > 0 ) return size; + // do not apply minimum width if JTextComponent.margin is set + if( !hasDefaultMargins( c, defaultMargin ) ) + return size; + // do not apply minimum width if used in combobox or spinner Container parent = c.getParent(); if( parent instanceof JComboBox || @@ -264,4 +567,402 @@ public class FlatTextFieldUI size.width = Math.max( size.width, scale( minimumWidth ) + Math.round( focusWidth * 2 ) ); return size; } + + static boolean hasDefaultMargins( JComponent c, Insets defaultMargin ) { + Insets margin = ((JTextComponent)c).getMargin(); + return margin instanceof UIResource && Objects.equals( margin, defaultMargin ); + } + + /** + * Returns the rectangle used for the root view of the text. + * This method is used to place the text. + */ + @Override + protected Rectangle getVisibleEditorRect() { + Rectangle r = getIconsRect(); + if( r == null ) + return null; + + // remove space needed for leading and trailing icons + int leading = getLeadingIconWidth(); + int trailing = getTrailingIconWidth(); + if( leading != 0 || trailing != 0 ) { + boolean ltr = isLeftToRight(); + int left = ltr ? leading : trailing; + int right = ltr ? trailing : leading; + r.x += left; + r.width -= left + right; + } + + // remove padding + Insets padding = getPadding(); + if( padding != null ) + r = FlatUIUtils.subtractInsets( r, padding ); + + // make sure that width and height are not negative + r.width = Math.max( r.width, 0 ); + r.height = Math.max( r.height, 0 ); + + return r; + } + + /** + * Returns the rectangle used to paint leading and trailing icons. + * It invokes {@code super.getVisibleEditorRect()} and reduces left and/or + * right margin if the text field has leading or trailing icons or components. + * Also, the preferred widths of leading and trailing components are removed. + * + * @since 2 + */ + protected Rectangle getIconsRect() { + Rectangle r = super.getVisibleEditorRect(); + if( r == null ) + return null; + + boolean ltr = isLeftToRight(); + + // remove width of leading/trailing components + JComponent[] leftComponents = ltr ? getLeadingComponents() : getTrailingComponents(); + JComponent[] rightComponents = ltr ? getTrailingComponents() : getLeadingComponents(); + boolean leftVisible = false; + boolean rightVisible = false; + for( JComponent leftComponent : leftComponents ) { + if( leftComponent != null && leftComponent.isVisible() ) { + int w = leftComponent.getPreferredSize().width; + r.x += w; + r.width -= w; + leftVisible = true; + } + } + for( JComponent rightComponent : rightComponents ) { + if( rightComponent != null && rightComponent.isVisible() ) { + r.width -= rightComponent.getPreferredSize().width; + rightVisible = true; + } + } + + // if a leading/trailing icons (or components) are shown, then the left/right margins are reduced + // to the top margin, which places the icon nicely centered on left/right side + if( leftVisible || (ltr ? hasLeadingIcon() : hasTrailingIcon()) ) { + // reduce left margin + Insets margin = getComponent().getMargin(); + int newLeftMargin = Math.min( margin.left, margin.top ); + if( newLeftMargin < margin.left ) { + int diff = scale( margin.left - newLeftMargin ); + r.x -= diff; + r.width += diff; + } + } + if( rightVisible || (ltr ? hasTrailingIcon() : hasLeadingIcon()) ) { + // reduce right margin + Insets margin = getComponent().getMargin(); + int newRightMargin = Math.min( margin.right, margin.top ); + if( newRightMargin < margin.left ) + r.width += scale( margin.right - newRightMargin ); + } + + // make sure that width and height are not negative + r.width = Math.max( r.width, 0 ); + r.height = Math.max( r.height, 0 ); + + return r; + } + + /** @since 2 */ + protected boolean hasLeadingIcon() { + return leadingIcon != null; + } + + /** @since 2 */ + protected boolean hasTrailingIcon() { + return trailingIcon != null; + } + + /** @since 2 */ + protected int getLeadingIconWidth() { + return (leadingIcon != null) ? leadingIcon.getIconWidth() + scale( iconTextGap ) : 0; + } + + /** @since 2 */ + protected int getTrailingIconWidth() { + return (trailingIcon != null) ? trailingIcon.getIconWidth() + scale( iconTextGap ) : 0; + } + + boolean isLeftToRight() { + return getComponent().getComponentOrientation().isLeftToRight(); + } + + /** @since 1.4 */ + protected Insets getPadding() { + return scale( clientProperty( getComponent(), TEXT_FIELD_PADDING, null, Insets.class ) ); + } + + /** @since 1.4 */ + protected void scrollCaretToVisible() { + Caret caret = getComponent().getCaret(); + if( caret instanceof FlatCaret ) + ((FlatCaret)caret).scrollCaretToVisible(); + } + + /** @since 2 */ + protected void installLeadingComponent() { + JTextComponent c = getComponent(); + leadingComponent = clientProperty( c, TEXT_FIELD_LEADING_COMPONENT, null, JComponent.class ); + if( leadingComponent != null ) { + prepareLeadingOrTrailingComponent( leadingComponent ); + installLayout(); + c.add( leadingComponent ); + } + } + + /** @since 2 */ + protected void installTrailingComponent() { + JTextComponent c = getComponent(); + trailingComponent = clientProperty( c, TEXT_FIELD_TRAILING_COMPONENT, null, JComponent.class ); + if( trailingComponent != null ) { + prepareLeadingOrTrailingComponent( trailingComponent ); + installLayout(); + c.add( trailingComponent ); + } + } + + /** @since 2 */ + protected void uninstallLeadingComponent() { + if( leadingComponent != null ) { + getComponent().remove( leadingComponent ); + leadingComponent = null; + } + } + + /** @since 2 */ + protected void uninstallTrailingComponent() { + if( trailingComponent != null ) { + getComponent().remove( trailingComponent ); + trailingComponent = null; + } + } + + /** @since 2 */ + protected void installClearButton() { + JTextComponent c = getComponent(); + if( clientPropertyBoolean( c, TEXT_FIELD_SHOW_CLEAR_BUTTON, showClearButton ) ) { + clearButton = createClearButton(); + updateClearButton(); + installDocumentListener(); + installLayout(); + c.add( clearButton ); + } + } + + /** @since 2 */ + protected void uninstallClearButton() { + if( clearButton != null ) { + getComponent().remove( clearButton ); + clearButton = null; + } + } + + /** @since 2 */ + protected JComponent createClearButton() { + JButton button = new JButton(); + button.setName( "TextField.clearButton" ); + button.putClientProperty( STYLE_CLASS, "clearButton" ); + button.putClientProperty( BUTTON_TYPE, BUTTON_TYPE_TOOLBAR_BUTTON ); + button.setCursor( Cursor.getDefaultCursor() ); + button.addActionListener( e -> clearButtonClicked() ); + return button; + } + + /** @since 2 */ + @SuppressWarnings( "unchecked" ) + protected void clearButtonClicked() { + JTextComponent c = getComponent(); + Object callback = c.getClientProperty( TEXT_FIELD_CLEAR_CALLBACK ); + if( callback instanceof Runnable ) + ((Runnable)callback).run(); + else if( callback instanceof Consumer ) + ((Consumer)callback).accept( c ); + else + c.setText( "" ); + } + + /** @since 2 */ + protected void updateClearButton() { + if( clearButton == null ) + return; + + JTextComponent c = getComponent(); + boolean visible = c.isEnabled() && c.isEditable() && c.getDocument().getLength() > 0; + if( visible != clearButton.isVisible() ) { + clearButton.setVisible( visible ); + c.revalidate(); + c.repaint(); + } + } + + /** + * Returns components placed at the leading side of the text field. + * The returned array may contain {@code null}. + * The default implementation returns {@link #leadingComponent}. + * + * @since 2 + */ + protected JComponent[] getLeadingComponents() { + return new JComponent[] { leadingComponent }; + } + + /** + * Returns components placed at the trailing side of the text field. + * The returned array may contain {@code null}. + * The default implementation returns {@link #trailingComponent} and {@link #clearButton}. + *

+ * Note: The components in the array must be in reverse (visual) order. + * + * @since 2 + */ + protected JComponent[] getTrailingComponents() { + return new JComponent[] { trailingComponent, clearButton }; + } + + /** @since 2 */ + protected void prepareLeadingOrTrailingComponent( JComponent c ) { + c.putClientProperty( STYLE_CLASS, "inTextField" ); + + if( c instanceof JButton || c instanceof JToggleButton ) { + c.putClientProperty( BUTTON_TYPE, BUTTON_TYPE_TOOLBAR_BUTTON ); + + if( !c.isCursorSet() ) + c.setCursor( Cursor.getDefaultCursor() ); + } else if( c instanceof JToolBar ) { + for( Component child : c.getComponents() ) { + if( child instanceof JComponent ) + ((JComponent)child).putClientProperty( STYLE_CLASS, "inTextField" ); + } + + if( !c.isCursorSet() ) + c.setCursor( Cursor.getDefaultCursor() ); + } + } + + /** @since 2 */ + protected void installLayout() { + JTextComponent c = getComponent(); + LayoutManager oldLayout = c.getLayout(); + if( !(oldLayout instanceof FlatTextFieldLayout) ) + c.setLayout( new FlatTextFieldLayout( oldLayout ) ); + } + + //---- class FlatTextFieldLayout ------------------------------------------ + + private class FlatTextFieldLayout + implements LayoutManager2, UIResource + { + private final LayoutManager delegate; + + FlatTextFieldLayout( LayoutManager delegate ) { + this.delegate = delegate; + } + + @Override + public void addLayoutComponent( String name, Component comp ) { + if( delegate != null ) + delegate.addLayoutComponent( name, comp ); + } + + @Override + public void removeLayoutComponent( Component comp ) { + if( delegate != null ) + delegate.removeLayoutComponent( comp ); + } + + @Override + public Dimension preferredLayoutSize( Container parent ) { + return (delegate != null) ? delegate.preferredLayoutSize( parent ) : null; + } + + @Override + public Dimension minimumLayoutSize( Container parent ) { + return (delegate != null) ? delegate.minimumLayoutSize( parent ) : null; + } + + @Override + public void layoutContainer( Container parent ) { + if( delegate != null ) + delegate.layoutContainer( parent ); + + int ow = FlatUIUtils.getBorderFocusAndLineWidth( getComponent() ); + int h = parent.getHeight() - ow - ow; + boolean ltr = isLeftToRight(); + JComponent[] leftComponents = ltr ? getLeadingComponents() : getTrailingComponents(); + JComponent[] rightComponents = ltr ? getTrailingComponents() : getLeadingComponents(); + + // layout left components + int x = ow; + for( JComponent leftComponent : leftComponents ) { + if( leftComponent != null && leftComponent.isVisible() ) { + int cw = leftComponent.getPreferredSize().width; + leftComponent.setBounds( x, ow, cw, h ); + x += cw; + } + } + + // layout right components + x = parent.getWidth() - ow; + for( JComponent rightComponent : rightComponents ) { + if( rightComponent != null && rightComponent.isVisible() ) { + int cw = rightComponent.getPreferredSize().width; + x -= cw; + rightComponent.setBounds( x, ow, cw, h ); + } + } + } + + @Override + public void addLayoutComponent( Component comp, Object constraints ) { + if( delegate instanceof LayoutManager2 ) + ((LayoutManager2)delegate).addLayoutComponent( comp, constraints ); + } + + @Override + public Dimension maximumLayoutSize( Container target ) { + return (delegate instanceof LayoutManager2) ? ((LayoutManager2)delegate).maximumLayoutSize( target ) : null; + } + + @Override + public float getLayoutAlignmentX( Container target ) { + return (delegate instanceof LayoutManager2) ? ((LayoutManager2)delegate).getLayoutAlignmentX( target ) : 0.5f; + } + + @Override + public float getLayoutAlignmentY( Container target ) { + return (delegate instanceof LayoutManager2) ? ((LayoutManager2)delegate).getLayoutAlignmentY( target ) : 0.5f; + } + + @Override + public void invalidateLayout( Container target ) { + if( delegate instanceof LayoutManager2 ) + ((LayoutManager2)delegate).invalidateLayout( target ); + } + } + + //---- class FlatDocumentListener ----------------------------------------- + + private class FlatDocumentListener + implements DocumentListener + { + @Override + public void insertUpdate( DocumentEvent e ) { + documentChanged( e ); + } + + @Override + public void removeUpdate( DocumentEvent e ) { + documentChanged( e ); + } + + @Override + public void changedUpdate( DocumentEvent e ) { + documentChanged( e ); + } + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextPaneUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextPaneUI.java index 0da0c538..bd55c311 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextPaneUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTextPaneUI.java @@ -20,14 +20,20 @@ import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; +import java.awt.Insets; import java.awt.event.FocusListener; import java.beans.PropertyChangeEvent; +import java.util.Map; import javax.swing.JComponent; import javax.swing.JEditorPane; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicTextPaneUI; +import javax.swing.text.Caret; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; import com.formdev.flatlaf.util.HiDPIUtils; +import com.formdev.flatlaf.util.LoggingFacade; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JTextPane}. @@ -57,18 +63,35 @@ import com.formdev.flatlaf.util.HiDPIUtils; */ public class FlatTextPaneUI extends BasicTextPaneUI + implements StyleableUI { - protected int minimumWidth; + @Styleable protected int minimumWidth; protected boolean isIntelliJTheme; - protected Color focusedBackground; + private Color background; + @Styleable protected Color disabledBackground; + @Styleable protected Color inactiveBackground; + @Styleable protected Color focusedBackground; + + private Color oldDisabledBackground; + private Color oldInactiveBackground; + + private Insets defaultMargin; private Object oldHonorDisplayProperties; private FocusListener focusListener; + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { return new FlatTextPaneUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installDefaults() { super.installDefaults(); @@ -76,8 +99,13 @@ public class FlatTextPaneUI String prefix = getPropertyPrefix(); minimumWidth = UIManager.getInt( "Component.minimumWidth" ); isIntelliJTheme = UIManager.getBoolean( "Component.isIntelliJTheme" ); + background = UIManager.getColor( prefix + ".background" ); + disabledBackground = UIManager.getColor( prefix + ".disabledBackground" ); + inactiveBackground = UIManager.getColor( prefix + ".inactiveBackground" ); focusedBackground = UIManager.getColor( prefix + ".focusedBackground" ); + defaultMargin = UIManager.getInsets( prefix + ".margin" ); + // use component font and foreground for HTML text oldHonorDisplayProperties = getComponent().getClientProperty( JEditorPane.HONOR_DISPLAY_PROPERTIES ); getComponent().putClientProperty( JEditorPane.HONOR_DISPLAY_PROPERTIES, true ); @@ -87,8 +115,16 @@ public class FlatTextPaneUI protected void uninstallDefaults() { super.uninstallDefaults(); + background = null; + disabledBackground = null; + inactiveBackground = null; focusedBackground = null; + oldDisabledBackground = null; + oldInactiveBackground = null; + + oldStyleValues = null; + getComponent().putClientProperty( JEditorPane.HONOR_DISPLAY_PROPERTIES, oldHonorDisplayProperties ); } @@ -109,20 +145,66 @@ public class FlatTextPaneUI focusListener = null; } + @Override + protected Caret createCaret() { + return new FlatCaret( null, false ); + } + @Override protected void propertyChange( PropertyChangeEvent e ) { + // invoke updateBackground() before super.propertyChange() + String propertyName = e.getPropertyName(); + if( "editable".equals( propertyName ) || "enabled".equals( propertyName ) ) + updateBackground(); + super.propertyChange( e ); - FlatEditorPaneUI.propertyChange( getComponent(), e ); + FlatEditorPaneUI.propertyChange( getComponent(), e, this::installStyle ); + } + + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( getComponent(), "TextPane" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldDisabledBackground = disabledBackground; + oldInactiveBackground = inactiveBackground; + + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + + updateBackground(); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, getComponent(), key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + + private void updateBackground() { + FlatTextFieldUI.updateBackground( getComponent(), background, + disabledBackground, inactiveBackground, + oldDisabledBackground, oldInactiveBackground ); } @Override public Dimension getPreferredSize( JComponent c ) { - return FlatEditorPaneUI.applyMinimumWidth( c, super.getPreferredSize( c ), minimumWidth ); + return FlatEditorPaneUI.applyMinimumWidth( c, super.getPreferredSize( c ), minimumWidth, defaultMargin ); } @Override public Dimension getMinimumSize( JComponent c ) { - return FlatEditorPaneUI.applyMinimumWidth( c, super.getMinimumSize( c ), minimumWidth ); + return FlatEditorPaneUI.applyMinimumWidth( c, super.getMinimumSize( c ), minimumWidth, defaultMargin ); } @Override diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePane.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePane.java index 207b05b2..1836da77 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePane.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePane.java @@ -50,8 +50,6 @@ import javax.accessibility.AccessibleContext; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; -import javax.swing.Icon; -import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JLabel; @@ -66,7 +64,6 @@ import javax.swing.border.Border; import com.formdev.flatlaf.FlatClientProperties; import com.formdev.flatlaf.FlatSystemProperties; import com.formdev.flatlaf.ui.FlatNativeWindowBorder.WindowTopBorder; -import com.formdev.flatlaf.util.ScaledImageIcon; import com.formdev.flatlaf.util.SystemInfo; import com.formdev.flatlaf.util.UIScale; @@ -80,6 +77,8 @@ import com.formdev.flatlaf.util.UIScale; * @uiDefault TitlePane.embeddedForeground Color * @uiDefault TitlePane.borderColor Color optional * @uiDefault TitlePane.unifiedBackground boolean + * @uiDefault TitlePane.showIcon boolean + * @uiDefault TitlePane.noIconLeftGap int * @uiDefault TitlePane.iconSize Dimension * @uiDefault TitlePane.iconMargins Insets * @uiDefault TitlePane.titleMargins Insets @@ -88,7 +87,6 @@ import com.formdev.flatlaf.util.UIScale; * @uiDefault TitlePane.centerTitle boolean * @uiDefault TitlePane.centerTitleIfMenuBarEmbedded boolean * @uiDefault TitlePane.menuBarTitleGap int - * @uiDefault TitlePane.icon Icon * @uiDefault TitlePane.closeIcon Icon * @uiDefault TitlePane.iconifyIcon Icon * @uiDefault TitlePane.maximizeIcon Icon @@ -106,6 +104,8 @@ public class FlatTitlePane protected final Color embeddedForeground = UIManager.getColor( "TitlePane.embeddedForeground" ); protected final Color borderColor = UIManager.getColor( "TitlePane.borderColor" ); + /** @since 2 */ protected final boolean showIcon = FlatUIUtils.getUIBoolean( "TitlePane.showIcon", true ); + /** @since 2 */ protected final int noIconLeftGap = FlatUIUtils.getUIInt( "TitlePane.noIconLeftGap", 8 ); protected final Dimension iconSize = UIManager.getDimension( "TitlePane.iconSize" ); protected final int buttonMaximizedHeight = UIManager.getInt( "TitlePane.buttonMaximizedHeight" ); protected final boolean centerTitle = UIManager.getBoolean( "TitlePane.centerTitle" ); @@ -224,6 +224,11 @@ public class FlatTitlePane restoreButton = createButton( "TitlePane.restoreIcon", "Restore", e -> restore() ); closeButton = createButton( "TitlePane.closeIcon", "Close", e -> close() ); + // initially hide buttons that are only supported in frames + iconifyButton.setVisible( false ); + maximizeButton.setVisible( false ); + restoreButton.setVisible( false ); + buttonPanel = new JPanel() { @Override public Dimension getPreferredSize() { @@ -243,11 +248,9 @@ public class FlatTitlePane if( rootPane.getWindowDecorationStyle() == JRootPane.FRAME ) { // JRootPane.FRAME works only for frames (and not for dialogs) // but at this time the owner window type is unknown (not yet added) - // so we add the iconify/maximize/restore buttons and they are hidden + // so we add the iconify/maximize/restore buttons, and they are shown // later in frameStateChanged(), which is invoked from addNotify() - restoreButton.setVisible( false ); - buttonPanel.add( iconifyButton ); buttonPanel.add( maximizeButton ); buttonPanel.add( restoreButton ); @@ -337,36 +340,27 @@ public class FlatTitlePane protected void updateIcon() { // get window images - List images = window.getIconImages(); - if( images.isEmpty() ) { - // search in owners - for( Window owner = window.getOwner(); owner != null; owner = owner.getOwner() ) { - images = owner.getIconImages(); - if( !images.isEmpty() ) - break; + List images = null; + if( clientPropertyBoolean( rootPane, TITLE_BAR_SHOW_ICON, showIcon ) ) { + images = window.getIconImages(); + if( images.isEmpty() ) { + // search in owners + for( Window owner = window.getOwner(); owner != null; owner = owner.getOwner() ) { + images = owner.getIconImages(); + if( !images.isEmpty() ) + break; + } } } - boolean hasIcon = true; + boolean hasIcon = (images != null && !images.isEmpty()); // set icon - if( !images.isEmpty() ) - iconLabel.setIcon( new FlatTitlePaneIcon( images, iconSize ) ); - else { - // no icon set on window --> use default icon - Icon defaultIcon = UIManager.getIcon( "TitlePane.icon" ); - if( defaultIcon != null && (defaultIcon.getIconWidth() == 0 || defaultIcon.getIconHeight() == 0) ) - defaultIcon = null; - if( defaultIcon != null ) { - if( defaultIcon instanceof ImageIcon ) - defaultIcon = new ScaledImageIcon( (ImageIcon) defaultIcon, iconSize.width, iconSize.height ); - iconLabel.setIcon( defaultIcon ); - } else - hasIcon = false; - } + iconLabel.setIcon( hasIcon ? new FlatTitlePaneIcon( images, iconSize ) : null ); // show/hide icon iconLabel.setVisible( hasIcon ); + leftPanel.setBorder( hasIcon ? null : FlatUIUtils.nonUIResource( new FlatEmptyBorder( 0, noIconLeftGap, 0, 0 ) ) ); updateNativeTitleBarHeightAndHitTestSpotsLater(); } @@ -426,7 +420,7 @@ public class FlatTitlePane } /** - * Returns whether this title pane currently has an visible and embedded menubar. + * Returns whether this title pane currently has a visible and embedded menubar. */ protected boolean hasVisibleEmbeddedMenuBar( JMenuBar menuBar ) { return menuBar != null && menuBar.isVisible() && isMenuBarEmbedded(); @@ -508,7 +502,7 @@ public class FlatTitlePane protected void menuBarLayouted() { updateNativeTitleBarHeightAndHitTestSpotsLater(); - revalidate(); + doLayout(); } /*debug @@ -521,17 +515,23 @@ public class FlatTitlePane g.drawLine( 0, debugTitleBarHeight, getWidth(), debugTitleBarHeight ); } if( debugHitTestSpots != null ) { - g.setColor( Color.red ); - Point offset = SwingUtilities.convertPoint( this, 0, 0, window ); for( Rectangle r : debugHitTestSpots ) - g.drawRect( r.x - offset.x, r.y - offset.y, r.width - 1, r.height - 1 ); - } - if( debugAppIconBounds != null ) { - g.setColor( Color.blue); - Point offset = SwingUtilities.convertPoint( this, 0, 0, window ); - Rectangle r = debugAppIconBounds; - g.drawRect( r.x - offset.x, r.y - offset.y, r.width - 1, r.height - 1 ); + paintRect( g, Color.red, r ); } + paintRect( g, Color.cyan, debugCloseButtonBounds ); + paintRect( g, Color.blue, debugAppIconBounds ); + paintRect( g, Color.blue, debugMinimizeButtonBounds ); + paintRect( g, Color.magenta, debugMaximizeButtonBounds ); + paintRect( g, Color.cyan, debugCloseButtonBounds ); + } + + private void paintRect( Graphics g, Color color, Rectangle r ) { + if( r == null ) + return; + + g.setColor( color ); + Point offset = SwingUtilities.convertPoint( this, 0, 0, window ); + g.drawRect( r.x - offset.x, r.y - offset.y, r.width - 1, r.height - 1 ); } debug*/ @@ -615,7 +615,7 @@ debug*/ int maximizedWidth = screenBounds.width; int maximizedHeight = screenBounds.height; - if( !isMaximizedBoundsFixed() ) { + if( SystemInfo.isWindows && !isMaximizedBoundsFixed() ) { // on Java 8 to 14, maximized x,y are 0,0 based on all screens in a multi-screen environment maximizedX = 0; maximizedY = 0; @@ -702,9 +702,15 @@ debug*/ return window != null && FlatNativeWindowBorder.hasCustomDecoration( window ); } + // used to invoke updateNativeTitleBarHeightAndHitTestSpots() only once from latest invokeLater() + private int laterCounter; + protected void updateNativeTitleBarHeightAndHitTestSpotsLater() { + laterCounter++; EventQueue.invokeLater( () -> { - updateNativeTitleBarHeightAndHitTestSpots(); + laterCounter--; + if( laterCounter == 0 ) + updateNativeTitleBarHeightAndHitTestSpots(); } ); } @@ -722,8 +728,9 @@ debug*/ List hitTestSpots = new ArrayList<>(); Rectangle appIconBounds = null; + if( iconLabel.isVisible() ) { - // compute real icon size (without insets; 1px wider for easier hitting) + // compute real icon size (without insets; 1px larger for easier hitting) Point location = SwingUtilities.convertPoint( iconLabel, 0, 0, window ); Insets iconInsets = iconLabel.getInsets(); Rectangle iconBounds = new Rectangle( @@ -759,27 +766,27 @@ debug*/ JMenuBar menuBar = rootPane.getJMenuBar(); if( hasVisibleEmbeddedMenuBar( menuBar ) ) { - r = getNativeHitTestSpot( menuBarPlaceholder ); + r = getNativeHitTestSpot( menuBar ); if( r != null ) { Component horizontalGlue = findHorizontalGlue( menuBar ); if( horizontalGlue != null ) { // If menu bar is embedded and contains a horizontal glue component, // then split the hit test spot into two spots so that - // the glue component area can used to move the window. + // the glue component area can be used to move the window. Point glueLocation = SwingUtilities.convertPoint( horizontalGlue, 0, 0, window ); + int x2 = glueLocation.x + horizontalGlue.getWidth(); Rectangle r2; if( getComponentOrientation().isLeftToRight() ) { - int trailingWidth = (r.x + r.width - HIT_TEST_SPOT_GROW) - glueLocation.x; - r.width -= trailingWidth; - r2 = new Rectangle( glueLocation.x + horizontalGlue.getWidth(), r.y, trailingWidth, r.height ); + r2 = new Rectangle( x2, r.y, (r.x + r.width) - x2, r.height ); + + r.width = glueLocation.x - r.x; } else { - int leadingWidth = (glueLocation.x + horizontalGlue.getWidth()) - (r.x + HIT_TEST_SPOT_GROW); - r.x += leadingWidth; - r.width -= leadingWidth; - r2 = new Rectangle( glueLocation.x -leadingWidth, r.y, leadingWidth, r.height ); + r2 = new Rectangle( r.x, r.y, glueLocation.x - r.x, r.height ); + + r.width = (r.x + r.width) - x2; + r.x = x2; } - r2.grow( HIT_TEST_SPOT_GROW, HIT_TEST_SPOT_GROW ); hitTestSpots.add( r2 ); } @@ -787,16 +794,30 @@ debug*/ } } - FlatNativeWindowBorder.setTitleBarHeightAndHitTestSpots( window, titleBarHeight, hitTestSpots, appIconBounds ); + Rectangle minimizeButtonBounds = boundsInWindow( iconifyButton ); + Rectangle maximizeButtonBounds = boundsInWindow( maximizeButton.isVisible() ? maximizeButton : restoreButton ); + Rectangle closeButtonBounds = boundsInWindow( closeButton ); + + FlatNativeWindowBorder.setTitleBarHeightAndHitTestSpots( window, titleBarHeight, + hitTestSpots, appIconBounds, minimizeButtonBounds, maximizeButtonBounds, closeButtonBounds ); /*debug debugTitleBarHeight = titleBarHeight; debugHitTestSpots = hitTestSpots; debugAppIconBounds = appIconBounds; + debugMinimizeButtonBounds = minimizeButtonBounds; + debugMaximizeButtonBounds = maximizeButtonBounds; + debugCloseButtonBounds = closeButtonBounds; repaint(); debug*/ } + private Rectangle boundsInWindow( JComponent c ) { + return c.isShowing() + ? SwingUtilities.convertRectangle( c.getParent(), c.getBounds(), window ) + : null; + } + protected Rectangle getNativeHitTestSpot( JComponent c ) { Dimension size = c.getSize(); if( size.width <= 0 || size.height <= 0 ) @@ -804,17 +825,16 @@ debug*/ Point location = SwingUtilities.convertPoint( c, 0, 0, window ); Rectangle r = new Rectangle( location, size ); - // slightly increase rectangle so that component receives mouseExit events - r.grow( HIT_TEST_SPOT_GROW, HIT_TEST_SPOT_GROW ); return r; } - private static final int HIT_TEST_SPOT_GROW = 2; - /*debug private int debugTitleBarHeight; private List debugHitTestSpots; private Rectangle debugAppIconBounds; + private Rectangle debugMinimizeButtonBounds; + private Rectangle debugMaximizeButtonBounds; + private Rectangle debugCloseButtonBounds; debug*/ //---- class FlatTitlePaneBorder ------------------------------------------ @@ -834,7 +854,7 @@ debug*/ } else if( borderColor != null && (rootPane.getJMenuBar() == null || !rootPane.getJMenuBar().isVisible()) ) insets.bottom += UIScale.scale( 1 ); - if( hasNativeCustomDecoration() && !isWindowMaximized( c ) ) + if( !SystemInfo.isWindows_11_orLater && hasNativeCustomDecoration() && !isWindowMaximized( c ) ) insets = FlatUIUtils.addInsets( insets, WindowTopBorder.getInstance().getBorderInsets() ); return insets; @@ -846,14 +866,14 @@ debug*/ Border menuBarBorder = getMenuBarBorder(); if( menuBarBorder != null ) { // if menu bar is embedded, paint menu bar border - menuBarBorder.paintBorder( c, g, x, y, width, height ); + menuBarBorder.paintBorder( rootPane.getJMenuBar(), g, x, y, width, height ); } else if( borderColor != null && (rootPane.getJMenuBar() == null || !rootPane.getJMenuBar().isVisible()) ) { // paint border between title pane and content if border color is specified float lineHeight = UIScale.scale( (float) 1 ); FlatUIUtils.paintFilledRectangle( g, borderColor, x, y + height - lineHeight, width, lineHeight ); } - if( hasNativeCustomDecoration() && !isWindowMaximized( c ) ) + if( !SystemInfo.isWindows_11_orLater && hasNativeCustomDecoration() && !isWindowMaximized( c ) ) WindowTopBorder.getInstance().paintBorder( c, g, x, y, width, height ); } @@ -863,20 +883,20 @@ debug*/ } protected boolean isWindowMaximized( Component c ) { - return window instanceof Frame - ? (((Frame)window).getExtendedState() & Frame.MAXIMIZED_BOTH) != 0 - : false; + return window instanceof Frame && (((Frame) window).getExtendedState() & Frame.MAXIMIZED_BOTH) != 0; } } //---- class FlatTitleLabelUI --------------------------------------------- - /** - * @since 1.1 - */ + /** @since 1.1 */ protected class FlatTitleLabelUI extends FlatLabelUI { + protected FlatTitleLabelUI() { + super( false ); + } + @Override protected void paintEnabledText( JLabel l, Graphics g, String s, int textX, int textY ) { boolean hasEmbeddedMenuBar = hasVisibleEmbeddedMenuBar( rootPane.getJMenuBar() ); @@ -889,7 +909,7 @@ debug*/ boolean center = hasEmbeddedMenuBar ? centerTitleIfMenuBarEmbedded : centerTitle; if( center ) { // If window is wide enough, center title within window bounds. - // Otherwise leave it centered within free space (label bounds). + // Otherwise, leave it centered within free space (label bounds). int centeredTextX = ((l.getParent().getWidth() - textWidth) / 2) - l.getX(); if( centeredTextX >= gap && centeredTextX + textWidth <= labelWidth - gap ) textX = centeredTextX; @@ -944,7 +964,7 @@ debug*/ activeChanged( true ); updateNativeTitleBarHeightAndHitTestSpots(); - if( hasNativeCustomDecoration() ) + if( !SystemInfo.isWindows_11_orLater && hasNativeCustomDecoration() ) WindowTopBorder.getInstance().repaintBorder( FlatTitlePane.this ); repaintWindowBorder(); @@ -955,7 +975,7 @@ debug*/ activeChanged( false ); updateNativeTitleBarHeightAndHitTestSpots(); - if( hasNativeCustomDecoration() ) + if( !SystemInfo.isWindows_11_orLater && hasNativeCustomDecoration() ) WindowTopBorder.getInstance().repaintBorder( FlatTitlePane.this ); repaintWindowBorder(); @@ -996,6 +1016,9 @@ debug*/ if( window == null ) return; // should newer occur + if( !SwingUtilities.isLeftMouseButton( e ) ) + return; + dragOffset = SwingUtilities.convertPoint( FlatTitlePane.this, e.getPoint(), window ); } @@ -1010,6 +1033,9 @@ debug*/ if( window == null ) return; // should newer occur + if( !SwingUtilities.isLeftMouseButton( e ) ) + return; + if( hasNativeCustomDecoration() ) return; // do nothing if having native window border diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePaneIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePaneIcon.java index de84a12e..24e74508 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePaneIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTitlePaneIcon.java @@ -31,9 +31,7 @@ public class FlatTitlePaneIcon { private final List images; - /** - * @since 1.2 - */ + /** @since 1.2 */ public FlatTitlePaneIcon( List images, Dimension size ) { super( null, size.width, size.height ); this.images = images; diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToggleButtonUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToggleButtonUI.java index 2d1a5f24..e238a4f9 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToggleButtonUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToggleButtonUI.java @@ -21,11 +21,14 @@ import java.awt.Color; import java.awt.Component; import java.awt.Graphics; import java.beans.PropertyChangeEvent; +import java.util.Map; import javax.swing.AbstractButton; import javax.swing.JComponent; import javax.swing.JToggleButton; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.UnknownStyleException; import com.formdev.flatlaf.util.UIScale; /** @@ -73,17 +76,28 @@ import com.formdev.flatlaf.util.UIScale; public class FlatToggleButtonUI extends FlatButtonUI { - protected int tabUnderlineHeight; - protected Color tabUnderlineColor; - protected Color tabDisabledUnderlineColor; - protected Color tabSelectedBackground; - protected Color tabHoverBackground; - protected Color tabFocusBackground; + @Styleable(dot=true) protected int tabUnderlineHeight; + @Styleable(dot=true) protected Color tabUnderlineColor; + @Styleable(dot=true) protected Color tabDisabledUnderlineColor; + @Styleable(dot=true) protected Color tabSelectedBackground; + @Styleable(dot=true) protected Color tabHoverBackground; + @Styleable(dot=true) protected Color tabFocusBackground; private boolean defaults_initialized = false; public static ComponentUI createUI( JComponent c ) { - return FlatUIUtils.createSharedUI( FlatToggleButtonUI.class, FlatToggleButtonUI::new ); + return FlatUIUtils.canUseSharedUI( c ) + ? FlatUIUtils.createSharedUI( FlatToggleButtonUI.class, () -> new FlatToggleButtonUI( true ) ) + : new FlatToggleButtonUI( false ); + } + + protected FlatToggleButtonUI( boolean shared ) { + super( shared ); + } + + @Override + String getStyleType() { + return "ToggleButton"; } @Override @@ -136,8 +150,25 @@ public class FlatToggleButtonUI } } + /** @since 2 */ + @Override + protected Object applyStyleProperty( AbstractButton b, String key, Object value ) { + if( key.startsWith( "help." ) ) + throw new UnknownStyleException( key ); + + return super.applyStyleProperty( b, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + Map> infos = super.getStyleableInfos( c ); + infos.keySet().removeIf( s -> s.startsWith( "help." ) ); + return infos; + } + static boolean isTabButton( Component c ) { - return c instanceof JToggleButton && clientPropertyEquals( (JToggleButton) c, BUTTON_TYPE, BUTTON_TYPE_TAB ); + return c instanceof JToggleButton && BUTTON_TYPE_TAB.equals( getButtonTypeStr( (JToggleButton) c ) ); } @Override diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarBorder.java index 5f7ffa57..68b9325d 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarBorder.java @@ -22,9 +22,11 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; import java.awt.Rectangle; +import java.util.function.Function; import javax.swing.JToolBar; import javax.swing.SwingConstants; import javax.swing.UIManager; +import javax.swing.plaf.ToolBarUI; import com.formdev.flatlaf.util.UIScale; /** @@ -42,7 +44,7 @@ public class FlatToolBarBorder private static final int DOT_SIZE = 2; private static final int GRIP_SIZE = DOT_SIZE * 3; - protected final Color gripColor = UIManager.getColor( "ToolBar.gripColor" ); + protected Color gripColor = UIManager.getColor( "ToolBar.gripColor" ); public FlatToolBarBorder() { super( UIManager.getInsets( "ToolBar.borderMargins" ) ); @@ -56,7 +58,8 @@ public class FlatToolBarBorder try { FlatUIUtils.setRenderingHints( g2 ); - g2.setColor( gripColor ); + Color color = getStyleFromToolBarUI( c, ui -> ui.gripColor ); + g2.setColor( (color != null) ? color : gripColor ); paintGrip( c, g2, x, y, width, height ); } finally { g2.dispose(); @@ -90,7 +93,14 @@ public class FlatToolBarBorder @Override public Insets getBorderInsets( Component c, Insets insets ) { - insets = super.getBorderInsets( c, insets ); + Insets m = getStyleFromToolBarUI( c, ui -> ui.borderMargins ); + if( m != null ) { + int t = top, l = left, b = bottom, r = right; + top = m.top; left = m.left; bottom = m.bottom; right = m.right; + insets = super.getBorderInsets( c, insets ); + top = t; left = l; bottom = b; right = r; + } else + insets = super.getBorderInsets( c, insets ); // add grip inset if floatable if( c instanceof JToolBar && ((JToolBar)c).isFloatable() ) { @@ -106,4 +116,17 @@ public class FlatToolBarBorder return insets; } + + /** + * Because this border is shared for all toolbars, + * get border specific style from FlatToolBarUI. + */ + static T getStyleFromToolBarUI( Component c, Function f ) { + if( c instanceof JToolBar ) { + ToolBarUI ui = ((JToolBar)c).getUI(); + if( ui instanceof FlatToolBarUI ) + return f.apply( (FlatToolBarUI) ui ); + } + return null; + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarSeparatorUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarSeparatorUI.java index d30eb30c..5f3bfa27 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarSeparatorUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarSeparatorUI.java @@ -22,6 +22,9 @@ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.geom.Rectangle2D; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.Map; import javax.swing.JComponent; import javax.swing.JSeparator; import javax.swing.JToolBar; @@ -29,6 +32,10 @@ import javax.swing.SwingConstants; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicToolBarSeparatorUI; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.util.LoggingFacade; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JToolBar.Separator}. @@ -42,16 +49,33 @@ import javax.swing.plaf.basic.BasicToolBarSeparatorUI; */ public class FlatToolBarSeparatorUI extends BasicToolBarSeparatorUI + implements StyleableUI, PropertyChangeListener { private static final int LINE_WIDTH = 1; - protected int separatorWidth; - protected Color separatorColor; + @Styleable protected int separatorWidth; + @Styleable protected Color separatorColor; + private final boolean shared; private boolean defaults_initialized = false; + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { - return FlatUIUtils.createSharedUI( FlatToolBarSeparatorUI.class, FlatToolBarSeparatorUI::new ); + return FlatUIUtils.canUseSharedUI( c ) + ? FlatUIUtils.createSharedUI( FlatToolBarSeparatorUI.class, () -> new FlatToolBarSeparatorUI( true ) ) + : new FlatToolBarSeparatorUI( false ); + } + + /** @since 2 */ + protected FlatToolBarSeparatorUI( boolean shared ) { + this.shared = shared; + } + + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle( (JSeparator) c ); } @Override @@ -73,7 +97,67 @@ public class FlatToolBarSeparatorUI @Override protected void uninstallDefaults( JSeparator s ) { super.uninstallDefaults( s ); + defaults_initialized = false; + oldStyleValues = null; + } + + @Override + protected void installListeners( JSeparator s ) { + super.installListeners( s ); + + s.addPropertyChangeListener( this ); + } + + @Override + protected void uninstallListeners( JSeparator s ) { + super.uninstallListeners( s ); + + s.removePropertyChangeListener( this ); + } + + /** @since 2.0.1 */ + @Override + public void propertyChange( PropertyChangeEvent e ) { + switch( e.getPropertyName() ) { + case FlatClientProperties.STYLE: + case FlatClientProperties.STYLE_CLASS: + JSeparator s = (JSeparator) e.getSource(); + if( shared && FlatStylingSupport.hasStyleProperty( s ) ) { + // unshare component UI if necessary + // updateUI() invokes installStyle() from installUI() + s.updateUI(); + } else + installStyle( s ); + s.revalidate(); + s.repaint(); + break; + } + } + + /** @since 2 */ + protected void installStyle( JSeparator s ) { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( s, "ToolBarSeparator" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObject( this, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); } @Override diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarUI.java index 49b00e49..fa241700 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolBarUI.java @@ -16,15 +16,27 @@ package com.formdev.flatlaf.ui; +import java.awt.Color; import java.awt.Component; +import java.awt.Container; +import java.awt.FocusTraversalPolicy; import java.awt.Insets; import java.awt.event.ContainerEvent; import java.awt.event.ContainerListener; +import java.beans.PropertyChangeListener; +import java.util.Map; import javax.swing.AbstractButton; +import javax.swing.InputMap; +import javax.swing.JComboBox; import javax.swing.JComponent; +import javax.swing.LayoutFocusTraversalPolicy; +import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicToolBarUI; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.util.LoggingFacade; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JToolBar}. @@ -41,15 +53,91 @@ import javax.swing.plaf.basic.BasicToolBarUI; * @uiDefault ToolBar.floatingForeground Color * @uiDefault ToolBar.isRollover boolean * + * + * + * @uiDefault ToolBar.focusableButtons boolean + * @uiDefault ToolBar.arrowKeysOnlyNavigation boolean + * @uiDefault ToolBar.floatable boolean + * + * + * + * @uiDefault ToolBar.borderMargins Insets + * @uiDefault ToolBar.gripColor Color + * * @author Karl Tauber */ public class FlatToolBarUI extends BasicToolBarUI + implements StyleableUI { + /** @since 1.4 */ @Styleable protected boolean focusableButtons; + /** @since 2 */ @Styleable protected boolean arrowKeysOnlyNavigation; + + // for FlatToolBarBorder + @Styleable protected Insets borderMargins; + @Styleable protected Color gripColor; + + private FocusTraversalPolicy focusTraversalPolicy; + private Boolean oldFloatable; + private Map oldStyleValues; + public static ComponentUI createUI( JComponent c ) { return new FlatToolBarUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installFocusTraversalPolicy(); + + installStyle(); + + // disable focusable state of buttons (when switching from another Laf) + // do this after applying style to avoid disabling (here) and re-enabling + // (in applyStyle()), which would transfer focus to next button + if( !focusableButtons ) + setButtonsFocusable( false ); + } + + @Override + public void uninstallUI( JComponent c ) { + super.uninstallUI( c ); + + // re-enable focusable state of buttons (when switching to another Laf) + if( !focusableButtons ) + setButtonsFocusable( true ); + + uninstallFocusTraversalPolicy(); + + oldStyleValues = null; + } + + @Override + protected void installDefaults() { + super.installDefaults(); + + focusableButtons = UIManager.getBoolean( "ToolBar.focusableButtons" ); + arrowKeysOnlyNavigation = UIManager.getBoolean( "ToolBar.arrowKeysOnlyNavigation" ); + + // floatable + if( !UIManager.getBoolean( "ToolBar.floatable" ) ) { + oldFloatable = toolBar.isFloatable(); + toolBar.setFloatable( false ); + } else + oldFloatable = null; + } + + @Override + protected void uninstallDefaults() { + super.uninstallDefaults(); + + if( oldFloatable != null ) { + toolBar.setFloatable( oldFloatable ); + oldFloatable = null; + } + } + @Override protected ContainerListener createToolBarContListener() { return new ToolBarContListener() { @@ -57,22 +145,161 @@ public class FlatToolBarUI public void componentAdded( ContainerEvent e ) { super.componentAdded( e ); - Component c = e.getChild(); - if( c instanceof AbstractButton ) - c.setFocusable( false ); + if( !focusableButtons ) + setButtonFocusable( e.getChild(), false ); } @Override public void componentRemoved( ContainerEvent e ) { super.componentRemoved( e ); - Component c = e.getChild(); - if( c instanceof AbstractButton ) - c.setFocusable( true ); + if( !focusableButtons ) + setButtonFocusable( e.getChild(), true ); } }; } + @Override + protected PropertyChangeListener createPropertyListener() { + return FlatStylingSupport.createPropertyChangeListener( toolBar, this::installStyle, super.createPropertyListener() ); + } + + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( toolBar, "ToolBar" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + boolean oldFocusableButtons = focusableButtons; + boolean oldArrowKeysOnlyNavigation = arrowKeysOnlyNavigation; + + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + + if( focusableButtons != oldFocusableButtons ) + setButtonsFocusable( focusableButtons ); + if( arrowKeysOnlyNavigation != oldArrowKeysOnlyNavigation || focusableButtons != oldFocusableButtons ) { + if( arrowKeysOnlyNavigation ) + installFocusTraversalPolicy(); + else + uninstallFocusTraversalPolicy(); + } + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, toolBar, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + + /** @since 1.4 */ + protected void setButtonsFocusable( boolean focusable ) { + for( Component c : toolBar.getComponents() ) + setButtonFocusable( c, focusable ); + } + + private void setButtonFocusable( Component c, boolean focusable ) { + if( c instanceof AbstractButton && focusable != c.isFocusable() ) + c.setFocusable( focusable ); + } + + /** @since 2 */ + protected void installFocusTraversalPolicy() { + if( !arrowKeysOnlyNavigation || !focusableButtons || toolBar.getFocusTraversalPolicy() != null ) + return; + + focusTraversalPolicy = createFocusTraversalPolicy(); + if( focusTraversalPolicy != null ) { + toolBar.setFocusTraversalPolicy( focusTraversalPolicy ); + toolBar.setFocusTraversalPolicyProvider( true ); + } + } + + /** @since 2 */ + protected void uninstallFocusTraversalPolicy() { + if( focusTraversalPolicy != null && toolBar.getFocusTraversalPolicy() == focusTraversalPolicy ) { + toolBar.setFocusTraversalPolicy( null ); + toolBar.setFocusTraversalPolicyProvider( false ); + } + focusTraversalPolicy = null; + } + + /** @since 2 */ + protected FocusTraversalPolicy createFocusTraversalPolicy() { + return new FlatToolBarFocusTraversalPolicy(); + } + + /** + * Does the same as super.navigateFocusedComp() with the exception that components + * with empty input map (e.g. JLabel) are skipped. + */ + @Override + protected void navigateFocusedComp( int direction ) { + int count = toolBar.getComponentCount(); + + if( focusedCompIndex < 0 || focusedCompIndex >= count ) + return; + + int add; + switch( direction ) { + case EAST: case SOUTH: add = 1; break; + case WEST: case NORTH: add = -1; break; + default: return; + } + + int i = focusedCompIndex; + for(;;) { + i += add; + if( i < 0 ) + i = count - 1; + else if( i >= count ) + i = 0; + if( i == focusedCompIndex ) + break; + + Component c = toolBar.getComponentAtIndex( i ); + if( canBeFocusOwner( c ) ) { + c.requestFocus(); + return; + } + } + } + + private static boolean canBeFocusOwner( Component c ) { + // see Component.canBeFocusOwner() + if( c == null || !c.isEnabled() || !c.isVisible() || !c.isDisplayable() || !c.isFocusable() ) + return false; + + // special handling for combo box + // see LayoutFocusTraversalPolicy.accept() + if( c instanceof JComboBox ) { + JComboBox comboBox = (JComboBox) c; + return comboBox.getUI().isFocusTraversable( comboBox ); + } + + // check whether component has an empty input map to skip components that + // are focusable, but do nothing when focused (e.g. JLabel) + // see LayoutFocusTraversalPolicy.accept() + if( c instanceof JComponent ) { + InputMap inputMap = ((JComponent)c).getInputMap( JComponent.WHEN_FOCUSED ); + while( inputMap != null && inputMap.size() == 0 ) + inputMap = inputMap.getParent(); + if( inputMap == null ) + return false; + } + + return true; + } + // disable rollover border @Override protected void setBorderToRollover( Component c ) {} @Override protected void setBorderToNonRollover( Component c ) {} @@ -95,4 +322,81 @@ public class FlatToolBarUI super.setOrientation( orientation ); } + + //---- class FlatToolBarFocusTraversalPolicy ------------------------------ + + /** + * Focus traversal policy used for toolbar to modify traversal behaviour: + *

    + *
  • Tab-key moves focus out of toolbar.
  • + *
  • If moving focus into the toolbar, focus recently focused toolbar button.
  • + *
+ * If the toolbar contains non-button components (e.g. combobox), then the behavior + * is slightly different. Non-button component are always included in Tab-key traversal. + * + * @since 2 + */ + protected class FlatToolBarFocusTraversalPolicy + extends LayoutFocusTraversalPolicy + { + @Override + public Component getComponentAfter( Container aContainer, Component aComponent ) { + // if currently focused component is not a button, + // then move focus to next component/button in toolbar + if( !(aComponent instanceof AbstractButton) ) + return super.getComponentAfter( aContainer, aComponent ); + + // if currently focused component is a button, + // then either move focus to next non-button component in toolbar (and skip buttons) + // or move it out of toolbar + Component c = aComponent; + while( (c = super.getComponentAfter( aContainer, c )) != null ) { + if( !(c instanceof AbstractButton) ) + return c; + } + + // move focus out of toolbar + return null; + } + + @Override + public Component getComponentBefore( Container aContainer, Component aComponent ) { + // if currently focused component is not a button, + // then move focus to previous component/button in toolbar + if( !(aComponent instanceof AbstractButton) ) + return super.getComponentBefore( aContainer, aComponent ); + + // if currently focused component is a button, + // then either move focus to previous non-button component in toolbar (and skip buttons) + // or move it out of toolbar + Component c = aComponent; + while( (c = super.getComponentBefore( aContainer, c )) != null ) { + if( !(c instanceof AbstractButton) ) + return c; + } + + // move focus out of toolbar + return null; + } + + @Override + public Component getFirstComponent( Container aContainer ) { + return getRecentComponent( aContainer, true ); + } + + @Override + public Component getLastComponent( Container aContainer ) { + return getRecentComponent( aContainer, false ); + } + + private Component getRecentComponent( Container aContainer, boolean first ) { + // if moving focus into the toolbar, focus recently focused toolbar button + if( focusedCompIndex >= 0 && focusedCompIndex < toolBar.getComponentCount() ) + return toolBar.getComponent( focusedCompIndex ); + + return first + ? super.getFirstComponent( aContainer ) + : super.getLastComponent( aContainer ); + } + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolTipUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolTipUI.java index 8428f0ae..142f2a97 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolTipUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatToolTipUI.java @@ -21,6 +21,7 @@ import java.awt.FontMetrics; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; +import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; import javax.swing.JComponent; @@ -49,9 +50,8 @@ import com.formdev.flatlaf.util.StringUtils; */ public class FlatToolTipUI extends BasicToolTipUI + implements PropertyChangeListener { - private static PropertyChangeListener sharedPropertyChangedListener; - public static ComponentUI createUI( JComponent c ) { return FlatUIUtils.createSharedUI( FlatToolTipUI.class, FlatToolTipUI::new ); } @@ -68,24 +68,24 @@ public class FlatToolTipUI protected void installListeners( JComponent c ) { super.installListeners( c ); - if( sharedPropertyChangedListener == null ) { - sharedPropertyChangedListener = e -> { - String name = e.getPropertyName(); - if( name == "tiptext" || name == "font" || name == "foreground" ) { - JToolTip toolTip = (JToolTip) e.getSource(); - FlatLabelUI.updateHTMLRenderer( toolTip, toolTip.getTipText(), false ); - } - }; - } - - c.addPropertyChangeListener( sharedPropertyChangedListener ); + c.addPropertyChangeListener( this ); } @Override protected void uninstallListeners( JComponent c ) { super.uninstallListeners( c ); - c.removePropertyChangeListener( sharedPropertyChangedListener ); + c.removePropertyChangeListener( this ); + } + + /** @since 2.0.1 */ + @Override + public void propertyChange( PropertyChangeEvent e ) { + String name = e.getPropertyName(); + if( name == "tiptext" || name == "font" || name == "foreground" ) { + JToolTip toolTip = (JToolTip) e.getSource(); + FlatLabelUI.updateHTMLRenderer( toolTip, toolTip.getTipText(), false ); + } } @Override diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTreeUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTreeUI.java index 6dd2c9c4..ee610c2d 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTreeUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTreeUI.java @@ -26,6 +26,7 @@ import java.awt.Rectangle; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.beans.PropertyChangeListener; +import java.util.Map; import javax.swing.CellRendererPane; import javax.swing.Icon; import javax.swing.JComponent; @@ -39,6 +40,9 @@ import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicTreeUI; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.TreePath; +import com.formdev.flatlaf.ui.FlatStylingSupport.Styleable; +import com.formdev.flatlaf.ui.FlatStylingSupport.StyleableUI; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.UIScale; /** @@ -48,6 +52,7 @@ import com.formdev.flatlaf.util.UIScale; * * @uiDefault Tree.font Font * @uiDefault Tree.background Color + * @uiDefault Tree.foreground Color unused * @uiDefault Tree.hash Color * @uiDefault Tree.dropLineColor Color * @uiDefault Tree.expandedIcon Icon @@ -94,25 +99,71 @@ import com.formdev.flatlaf.util.UIScale; * @uiDefault Tree.wideSelection boolean * @uiDefault Tree.showCellFocusIndicator boolean * + * + * + * @uiDefault Component.arrowType String chevron (default) or triangle + * @uiDefault Tree.icon.expandedColor Color + * + * + * + * @uiDefault Component.arrowType String chevron (default) or triangle + * @uiDefault Tree.icon.collapsedColor Color + * + * + * + * @uiDefault Tree.icon.leafColor Color + * + * + * + * @uiDefault Tree.icon.closedColor Color + * + * + * + * @uiDefault Tree.icon.openColor Color + * * @author Karl Tauber */ public class FlatTreeUI extends BasicTreeUI + implements StyleableUI { - protected Color selectionBackground; - protected Color selectionForeground; - protected Color selectionInactiveBackground; - protected Color selectionInactiveForeground; - protected Color selectionBorderColor; - protected boolean wideSelection; - protected boolean showCellFocusIndicator; + @Styleable protected Color selectionBackground; + @Styleable protected Color selectionForeground; + @Styleable protected Color selectionInactiveBackground; + @Styleable protected Color selectionInactiveForeground; + @Styleable protected Color selectionBorderColor; + @Styleable protected boolean wideSelection; + @Styleable protected boolean showCellFocusIndicator; + + // for icons + // (needs to be public because icon classes are in another package) + /** @since 2 */ @Styleable(dot=true) public String iconArrowType; + /** @since 2 */ @Styleable(dot=true) public Color iconExpandedColor; + /** @since 2 */ @Styleable(dot=true) public Color iconCollapsedColor; + /** @since 2 */ @Styleable(dot=true) public Color iconLeafColor; + /** @since 2 */ @Styleable(dot=true) public Color iconClosedColor; + /** @since 2 */ @Styleable(dot=true) public Color iconOpenColor; + + // only used via styling (not in UI defaults, but has likewise client properties) + /** @since 2 */ @Styleable protected boolean paintSelection = true; private Color defaultCellNonSelectionBackground; + private Color defaultSelectionBackground; + private Color defaultSelectionForeground; + private Color defaultSelectionBorderColor; + private Map oldStyleValues; public static ComponentUI createUI( JComponent c ) { return new FlatTreeUI(); } + @Override + public void installUI( JComponent c ) { + super.installUI( c ); + + installStyle(); + } + @Override protected void installDefaults() { super.installDefaults(); @@ -128,6 +179,9 @@ public class FlatTreeUI showCellFocusIndicator = UIManager.getBoolean( "Tree.showCellFocusIndicator" ); defaultCellNonSelectionBackground = UIManager.getColor( "Tree.textBackground" ); + defaultSelectionBackground = selectionBackground; + defaultSelectionForeground = selectionForeground; + defaultSelectionBorderColor = selectionBorderColor; // scale int rowHeight = FlatUIUtils.getUIInt( "Tree.rowHeight", 16 ); @@ -150,6 +204,10 @@ public class FlatTreeUI selectionBorderColor = null; defaultCellNonSelectionBackground = null; + defaultSelectionBackground = null; + defaultSelectionForeground = null; + defaultSelectionBorderColor = null; + oldStyleValues = null; } @Override @@ -216,6 +274,13 @@ public class FlatTreeUI repaintWideDropLocation( tree.getDropLocation() ); } break; + + case STYLE: + case STYLE_CLASS: + installStyle(); + tree.revalidate(); + tree.repaint(); + break; } } }; @@ -230,6 +295,51 @@ public class FlatTreeUI tree.repaint( 0, r.y, tree.getWidth(), r.height ); } + @Override + public Rectangle getPathBounds( JTree tree, TreePath path ) { + Rectangle bounds = super.getPathBounds( tree, path ); + + // If this method was invoked from JTree.getPathForLocation(int x, int y) to check whether + // the location is within tree node bounds, then return the bounds of a wide node. + // This changes the behavior of JTree.getPathForLocation(int x, int y) and + // JTree.getRowForLocation(int x, int y), which now return the path/row even + // if [x,y] is in the wide row area outside of the actual tree node. + if( bounds != null && + isWideSelection() && + UIManager.getBoolean( "FlatLaf.experimental.tree.widePathForLocation" ) && + StackUtils.wasInvokedFrom( JTree.class.getName(), "getPathForLocation", 5 ) ) + { + bounds.x = 0; + bounds.width = tree.getWidth(); + } + return bounds; + } + + /** @since 2 */ + protected void installStyle() { + try { + applyStyle( FlatStylingSupport.getResolvedStyle( tree, "Tree" ) ); + } catch( RuntimeException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** @since 2 */ + protected void applyStyle( Object style ) { + oldStyleValues = FlatStylingSupport.parseAndApply( oldStyleValues, style, this::applyStyleProperty ); + } + + /** @since 2 */ + protected Object applyStyleProperty( String key, Object value ) { + return FlatStylingSupport.applyToAnnotatedObjectOrComponent( this, tree, key, value ); + } + + /** @since 2 */ + @Override + public Map> getStyleableInfos( JComponent c ) { + return FlatStylingSupport.getAnnotatedStyleableInfos( this ); + } + /** * Same as super.paintRow(), but supports wide selection and uses * inactive selection background/foreground if tree is not focused. @@ -243,9 +353,19 @@ public class FlatTreeUI boolean isDropRow = isDropRow( row ); boolean needsSelectionPainting = (isSelected || isDropRow) && isPaintSelection(); - // do not paint row if editing, except if selection needs painted - if( isEditing && !needsSelectionPainting ) + // do not paint row if editing + if( isEditing ) { + // paint wide selection + // (do not access cell renderer here to avoid side effect + // if renderer component is also used as editor component) + if( isSelected && isWideSelection() ) { + Color oldColor = g.getColor(); + g.setColor( selectionInactiveBackground ); + paintWideSelection( g, clipBounds, insets, bounds, path, row, isExpanded, hasBeenExpanded, isLeaf ); + g.setColor( oldColor ); + } return; + } boolean hasFocus = FlatUIUtils.isPermanentFocusOwner( tree ); boolean cellHasFocus = hasFocus && (row == getLeadSelectionRow()); @@ -259,35 +379,32 @@ public class FlatTreeUI Component rendererComponent = currentCellRenderer.getTreeCellRendererComponent( tree, path.getLastPathComponent(), isSelected, isExpanded, isLeaf, row, cellHasFocus ); - // apply inactive selection background/foreground if tree is not focused + // renderer background/foreground Color oldBackgroundSelectionColor = null; if( isSelected && !hasFocus && !isDropRow ) { - if( rendererComponent instanceof DefaultTreeCellRenderer ) { - DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) rendererComponent; - if( renderer.getBackgroundSelectionColor() == selectionBackground ) { - oldBackgroundSelectionColor = renderer.getBackgroundSelectionColor(); - renderer.setBackgroundSelectionColor( selectionInactiveBackground ); - } - } else { - if( rendererComponent.getBackground() == selectionBackground ) - rendererComponent.setBackground( selectionInactiveBackground ); - } + // apply inactive selection background/foreground if tree is not focused + oldBackgroundSelectionColor = setRendererBackgroundSelectionColor( rendererComponent, selectionInactiveBackground ); + setRendererForeground( rendererComponent, selectionInactiveForeground ); - if( rendererComponent.getForeground() == selectionForeground ) - rendererComponent.setForeground( selectionInactiveForeground ); + } else if( isSelected ) { + // update background/foreground if set via style + if( selectionBackground != defaultSelectionBackground ) + oldBackgroundSelectionColor = setRendererBackgroundSelectionColor( rendererComponent, selectionBackground ); + if( selectionForeground != defaultSelectionForeground ) + setRendererForeground( rendererComponent, selectionForeground ); } - // remove focus selection border if exactly one item is selected + // update focus selection border Color oldBorderSelectionColor = null; if( isSelected && hasFocus && - (!showCellFocusIndicator || tree.getMinSelectionRow() == tree.getMaxSelectionRow()) && - rendererComponent instanceof DefaultTreeCellRenderer ) + (!showCellFocusIndicator || tree.getMinSelectionRow() == tree.getMaxSelectionRow()) ) { - DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) rendererComponent; - if( renderer.getBorderSelectionColor() == selectionBorderColor ) { - oldBorderSelectionColor = renderer.getBorderSelectionColor(); - renderer.setBorderSelectionColor( null ); - } + // remove focus selection border if exactly one item is selected or if showCellFocusIndicator is false + oldBorderSelectionColor = setRendererBorderSelectionColor( rendererComponent, null ); + + } else if( hasFocus && selectionBorderColor != defaultSelectionBorderColor ) { + // update focus selection border if set via style + oldBorderSelectionColor = setRendererBorderSelectionColor( rendererComponent, selectionBorderColor ); } // paint selection background @@ -302,14 +419,7 @@ public class FlatTreeUI if( isWideSelection() ) { // wide selection - g.fillRect( 0, bounds.y, tree.getWidth(), bounds.height ); - - // paint expand/collapse icon - // (was already painted before, but painted over with wide selection) - if( shouldPaintExpandControl( path, row, isExpanded, hasBeenExpanded, isLeaf ) ) { - paintExpandControl( g, clipBounds, insets, bounds, - path, row, isExpanded, hasBeenExpanded, isLeaf ); - } + paintWideSelection( g, clipBounds, insets, bounds, path, row, isExpanded, hasBeenExpanded, isLeaf ); } else { // non-wide selection paintCellBackground( g, rendererComponent, bounds ); @@ -333,8 +443,7 @@ public class FlatTreeUI } // paint renderer - if( !isEditing ) - rendererPane.paintComponent( g, rendererComponent, tree, bounds.x, bounds.y, bounds.width, bounds.height, true ); + rendererPane.paintComponent( g, rendererComponent, tree, bounds.x, bounds.y, bounds.width, bounds.height, true ); // restore background selection color and border selection color if( oldBackgroundSelectionColor != null ) @@ -343,6 +452,55 @@ public class FlatTreeUI ((DefaultTreeCellRenderer)rendererComponent).setBorderSelectionColor( oldBorderSelectionColor ); } + private Color setRendererBackgroundSelectionColor( Component rendererComponent, Color color ) { + Color oldColor = null; + + if( rendererComponent instanceof DefaultTreeCellRenderer ) { + DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) rendererComponent; + if( renderer.getBackgroundSelectionColor() == defaultSelectionBackground ) { + oldColor = renderer.getBackgroundSelectionColor(); + renderer.setBackgroundSelectionColor( color ); + } + } else { + if( rendererComponent.getBackground() == defaultSelectionBackground ) + rendererComponent.setBackground( color ); + } + + return oldColor; + } + + private void setRendererForeground( Component rendererComponent, Color color ) { + if( rendererComponent.getForeground() == defaultSelectionForeground ) + rendererComponent.setForeground( color ); + } + + private Color setRendererBorderSelectionColor( Component rendererComponent, Color color ) { + Color oldColor = null; + + if( rendererComponent instanceof DefaultTreeCellRenderer ) { + DefaultTreeCellRenderer renderer = (DefaultTreeCellRenderer) rendererComponent; + if( renderer.getBorderSelectionColor() == defaultSelectionBorderColor ) { + oldColor = renderer.getBorderSelectionColor(); + renderer.setBorderSelectionColor( color ); + } + } + + return oldColor; + } + + private void paintWideSelection( Graphics g, Rectangle clipBounds, Insets insets, Rectangle bounds, + TreePath path, int row, boolean isExpanded, boolean hasBeenExpanded, boolean isLeaf ) + { + g.fillRect( 0, bounds.y, tree.getWidth(), bounds.height ); + + // paint expand/collapse icon + // (was already painted before, but painted over with wide selection) + if( shouldPaintExpandControl( path, row, isExpanded, hasBeenExpanded, isLeaf ) ) { + paintExpandControl( g, clipBounds, insets, bounds, + path, row, isExpanded, hasBeenExpanded, isLeaf ); + } + } + private void paintCellBackground( Graphics g, Component rendererComponent, Rectangle bounds ) { int xOffset = 0; int imageOffset = 0; @@ -381,6 +539,6 @@ public class FlatTreeUI } protected boolean isPaintSelection() { - return clientPropertyBoolean( tree, TREE_PAINT_SELECTION, true ); + return clientPropertyBoolean( tree, TREE_PAINT_SELECTION, paintSelection ); } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java index 8acbdc1e..2af95f61 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatUIUtils.java @@ -28,6 +28,7 @@ import java.awt.GraphicsConfiguration; import java.awt.GraphicsDevice; import java.awt.Insets; import java.awt.KeyboardFocusManager; +import java.awt.Paint; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.Shape; @@ -69,7 +70,8 @@ public class FlatUIUtils { public static final boolean MAC_USE_QUARTZ = Boolean.getBoolean( "apple.awt.graphics.UseQuartz" ); - private static WeakHashMap> sharedUIinstances = new WeakHashMap<>(); + private static boolean useSharedUIs = true; + private static final WeakHashMap> sharedUIinstances = new WeakHashMap<>(); public static Rectangle addInsets( Rectangle r, Insets insets ) { return new Rectangle( @@ -94,6 +96,11 @@ public class FlatUIUtils } public static Insets addInsets( Insets insets1, Insets insets2 ) { + if( insets1 == null ) + return insets2; + if( insets2 == null ) + return insets1; + return new Insets( insets1.top + insets2.top, insets1.left + insets2.left, @@ -123,9 +130,7 @@ public class FlatUIUtils return (color != null) ? color : UIManager.getColor( defaultKey ); } - /** - * @since 1.1 - */ + /** @since 1.1 */ public static boolean getUIBoolean( String key, boolean defaultValue ) { Object value = UIManager.get( key ); return (value instanceof Boolean) ? (Boolean) value : defaultValue; @@ -141,9 +146,20 @@ public class FlatUIUtils return (value instanceof Number) ? ((Number)value).floatValue() : defaultValue; } - /** - * @since 1.1.2 - */ + /** @since 2 */ + public static > T getUIEnum( String key, Class enumType, T defaultValue ) { + Object value = UIManager.get( key ); + if( value instanceof String ) { + try { + return Enum.valueOf( enumType, (String) value ); + } catch( IllegalArgumentException ex ) { + // ignore + } + } + return defaultValue; + } + + /** @since 1.1.2 */ public static boolean getBoolean( JComponent c, String systemPropertyKey, String clientPropertyKey, String uiKey, boolean defaultValue ) { @@ -172,6 +188,11 @@ public class FlatUIUtils return (font instanceof UIResource) ? font.deriveFont( font.getStyle() ) : font; } + /** @since 2 */ + public static Border nonUIResource( Border border ) { + return (border instanceof UIResource) ? new NonUIResourceBorder( border ) : border; + } + public static int minimumWidth( JComponent c, int minimumWidth ) { return FlatClientProperties.clientPropertyInt( c, FlatClientProperties.MINIMUM_WIDTH, minimumWidth ); } @@ -257,6 +278,32 @@ public class FlatUIUtils : 0; } + /** + * Returns the scaled line thickness used to compute the border insets. + * + * @since 2 + */ + public static float getBorderLineWidth( JComponent c ) { + FlatBorder border = getOutsideFlatBorder( c ); + return (border != null) + ? UIScale.scale( (float) border.getLineWidth( c ) ) + : 0; + } + + /** + * Returns the scaled thickness of the border. + * This includes the outer focus border and the actual component border. + * + * @since 2 + */ + public static int getBorderFocusAndLineWidth( JComponent c ) { + FlatBorder border = getOutsideFlatBorder( c ); + return (border != null) + ? Math.round( UIScale.scale( (float) border.getFocusWidth( c ) ) + + UIScale.scale( (float) border.getLineWidth( c ) ) ) + : 0; + } + /** * Returns the scaled arc diameter of the border for the given component. */ @@ -345,104 +392,6 @@ public class FlatUIUtils : color; } - /** - * Paints an outer border, which is usually a focus border. - *

- * The outside bounds of the painted border are {@code x,y,width,height}. - * The line thickness of the painted border is {@code focusWidth + lineWidth}. - * The given arc diameter refers to the inner rectangle ({@code x,y,width,height} minus {@code focusWidth}). - * - * @see #paintComponentBorder - * @see #paintComponentBackground - */ - public static void paintComponentOuterBorder( Graphics2D g, int x, int y, int width, int height, - float focusWidth, float lineWidth, float arc ) - { - if( focusWidth + lineWidth == 0 ) - return; // nothing to paint - - double systemScaleFactor = UIScale.getSystemScaleFactor( g ); - if( systemScaleFactor != 1 && systemScaleFactor != 2 ) { - // paint at scale 1x to avoid clipping on right and bottom edges at 125%, 150% or 175% - HiDPIUtils.paintAtScale1x( g, x, y, width, height, - (g2d, x2, y2, width2, height2, scaleFactor) -> { - paintComponentOuterBorderImpl( g2d, x2, y2, width2, height2, - (float) (focusWidth * scaleFactor), (float) (lineWidth * scaleFactor), (float) (arc * scaleFactor) ); - } ); - return; - } - - paintComponentOuterBorderImpl( g, x, y, width, height, focusWidth, lineWidth, arc ); - } - - private static void paintComponentOuterBorderImpl( Graphics2D g, int x, int y, int width, int height, - float focusWidth, float lineWidth, float arc ) - { - float ow = focusWidth + lineWidth; - float outerArc = arc + (focusWidth * 2); - float innerArc = arc - (lineWidth * 2); - - // reduce outer arc slightly for small arcs to make the curve slightly wider - if( focusWidth > 0 && arc > 0 && arc < UIScale.scale( 10 ) ) - outerArc -= UIScale.scale( 2f ); - - Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD ); - path.append( createComponentRectangle( x, y, width, height, outerArc ), false ); - path.append( createComponentRectangle( x + ow, y + ow, width - (ow * 2), height - (ow * 2), innerArc ), false ); - g.fill( path ); - } - - /** - * Draws the border of a component as round rectangle. - *

- * The outside bounds of the painted border are - * {@code x + focusWidth, y + focusWidth, width - (focusWidth * 2), height - (focusWidth * 2)}. - * The line thickness of the painted border is {@code lineWidth}. - * The given arc diameter refers to the painted rectangle (and not to {@code x,y,width,height}). - * - * @see #paintComponentOuterBorder - * @see #paintComponentBackground - */ - public static void paintComponentBorder( Graphics2D g, int x, int y, int width, int height, - float focusWidth, float lineWidth, float arc ) - { - if( lineWidth == 0 ) - return; // nothing to paint - - double systemScaleFactor = UIScale.getSystemScaleFactor( g ); - if( systemScaleFactor != 1 && systemScaleFactor != 2 ) { - // paint at scale 1x to avoid clipping on right and bottom edges at 125%, 150% or 175% - HiDPIUtils.paintAtScale1x( g, x, y, width, height, - (g2d, x2, y2, width2, height2, scaleFactor) -> { - paintComponentBorderImpl( g2d, x2, y2, width2, height2, - (float) (focusWidth * scaleFactor), (float) (lineWidth * scaleFactor), (float) (arc * scaleFactor) ); - } ); - return; - } - - paintComponentBorderImpl( g, x, y, width, height, focusWidth, lineWidth, arc ); - } - - private static void paintComponentBorderImpl( Graphics2D g, int x, int y, int width, int height, - float focusWidth, float lineWidth, float arc ) - { - float x1 = x + focusWidth; - float y1 = y + focusWidth; - float width1 = width - focusWidth * 2; - float height1 = height - focusWidth * 2; - float arc2 = arc - (lineWidth * 2); - - Shape r1 = createComponentRectangle( x1, y1, width1, height1, arc ); - Shape r2 = createComponentRectangle( - x1 + lineWidth, y1 + lineWidth, - width1 - lineWidth * 2, height1 - lineWidth * 2, arc2 ); - - Path2D border = new Path2D.Float( Path2D.WIND_EVEN_ODD ); - border.append( r1, false ); - border.append( r2, false ); - g.fill( border ); - } - /** * Fills the background of a component with a round rectangle. *

@@ -450,32 +399,203 @@ public class FlatUIUtils * {@code x + focusWidth, y + focusWidth, width - (focusWidth * 2), height - (focusWidth * 2)}. * The given arc diameter refers to the painted rectangle (and not to {@code x,y,width,height}). * - * @see #paintComponentOuterBorder - * @see #paintComponentBorder + * @see #paintOutlinedComponent */ public static void paintComponentBackground( Graphics2D g, int x, int y, int width, int height, float focusWidth, float arc ) + { + paintOutlinedComponent( g, x, y, width, height, focusWidth, 0, 0, 0, arc, null, null, g.getPaint() ); + } + + /** + * Paints an outlined component with rounded corners, consisting of following parts: + *

    + *
  • an (optional) outer border, which is usually a focus indicator + *
  • an (optional) component border + *
  • the (optional) component background + *
+ *

+ * + * Each part is painted only if the corresponding part color is not {@code null}. + * The parts are painted in this order: + *

    + *
  1. background + *
  2. focus border + *
  3. border + *
+ *

+ * + * Background: + * The bounds of the filled round rectangle are + * {@code [x + focusWidth, y + focusWidth, width - (focusWidth * 2), height - (focusWidth * 2)]}. + * The focus border and the border may paint over the background. + *

+ * + * Focus border: + * The outside bounds of the painted focus border are {@code [x, y, width, height]}. + * The thickness of the painted focus border is {@code (focusWidth * focusWidthFraction) + focusInnerWidth}. + * The border may paint over the focus border if {@code focusInnerWidth > 0}. + *

+ * + * Border: + * The outside bounds of the painted border are + * {@code [x + focusWidth, y + focusWidth, width - (focusWidth * 2), height - (focusWidth * 2)]}. + * The thickness of the painted border is {@code borderWidth}. + * + * @param g the graphics context used for painting + * @param x the x coordinate of the component + * @param y the y coordinate of the component + * @param width the width of the component + * @param height the height of the component + * @param focusWidth the width of the focus border, or {@code 0} + * @param focusWidthFraction specified how much of the focus border is painted (in range 0 - 1); + * can be used for animation; + * the painted thickness of the focus border is {@code (focusWidth * focusWidthFraction) + focusInnerWidth} + * @param focusInnerWidth the inner width of the focus border, or {@code 0}; + * if a border is painted then {@code focusInnerWidth} needs to be larger + * than {@code borderWidth} to be not hidden by the border + * @param borderWidth the width of the border, or {@code 0} + * @param arc the arc diameter used for the outside shape of the component border; + * the other needed arc diameters are computed from this arc diameter + * @param focusColor the color of the focus border, or {@code null} + * @param borderColor the color of the border, or {@code null} + * @param background the background color of the component, or {@code null} + * + * @since 2 + */ + public static void paintOutlinedComponent( Graphics2D g, int x, int y, int width, int height, + float focusWidth, float focusWidthFraction, float focusInnerWidth, float borderWidth, float arc, + Paint focusColor, Paint borderColor, Paint background ) { double systemScaleFactor = UIScale.getSystemScaleFactor( g ); if( systemScaleFactor != 1 && systemScaleFactor != 2 ) { // paint at scale 1x to avoid clipping on right and bottom edges at 125%, 150% or 175% HiDPIUtils.paintAtScale1x( g, x, y, width, height, (g2d, x2, y2, width2, height2, scaleFactor) -> { - paintComponentBackgroundImpl( g2d, x2, y2, width2, height2, - (float) (focusWidth * scaleFactor), (float) (arc * scaleFactor) ); + paintOutlinedComponentImpl( g2d, x2, y2, width2, height2, + (float) (focusWidth * scaleFactor), focusWidthFraction, (float) (focusInnerWidth * scaleFactor), + (float) (borderWidth * scaleFactor), (float) (arc * scaleFactor), + focusColor, borderColor, background ); } ); return; } - paintComponentBackgroundImpl( g, x, y, width, height, focusWidth, arc ); + paintOutlinedComponentImpl( g, x, y, width, height, focusWidth, focusWidthFraction, focusInnerWidth, + borderWidth, arc, focusColor, borderColor, background ); } - private static void paintComponentBackgroundImpl( Graphics2D g, int x, int y, int width, int height, - float focusWidth, float arc ) + private static void paintOutlinedComponentImpl( Graphics2D g, int x, int y, int width, int height, + float focusWidth, float focusWidthFraction, float focusInnerWidth, float borderWidth, float arc, + Paint focusColor, Paint borderColor, Paint background ) { - g.fill( createComponentRectangle( - x + focusWidth, y + focusWidth, - width - focusWidth * 2, height - focusWidth * 2, arc ) ); + // outside bounds of the border and the background + float x1 = x + focusWidth; + float y1 = y + focusWidth; + float w1 = width - focusWidth * 2; + float h1 = height - focusWidth * 2; + + // fill background + // bounds: x + focusWidth, y + focusWidth, width - (focusWidth * 2), height - (focusWidth * 2) + // arc diameter: arc + if( background != null ) { + g.setPaint( background ); + g.fill( createComponentRectangle( x1, y1, w1, h1, arc ) ); + } + + // optimization: paint focus border and border in single operation if colors are equal + if( borderColor != null && borderColor.equals( focusColor ) ) { + borderColor = null; + focusInnerWidth = Math.max( focusInnerWidth, borderWidth ); + } + + // paint focus border + // outer bounds: x, y, width, height + // thickness: focusWidth + focusInnerWidth + // outer arc diameter: arc + (focusWidth * 2) + // inner arc diameter: arc - (focusInnerWidth * 2) + float paintedFocusWidth = (focusWidth * focusWidthFraction) + focusInnerWidth; + if( focusColor != null && paintedFocusWidth != 0 ) { + // outside bounds of the focus border + float inset = focusWidth - (focusWidth * focusWidthFraction); + float x2 = x + inset; + float y2 = y + inset; + float w2 = width - (inset * 2); + float h2 = height - (inset * 2); + + float outerArc = arc + (focusWidth * 2); + float innerArc = arc - (focusInnerWidth * 2); + + // reduce outer arc slightly for small arcs to make the curve slightly wider + if( focusWidth > 0 && arc > 0 && arc < UIScale.scale( 10 ) ) + outerArc -= UIScale.scale( 2f ); + + // consider focus width fraction + if( focusWidthFraction != 1 ) + outerArc = arc + ((outerArc - arc) * focusWidthFraction); + + g.setPaint( focusColor ); + paintOutline( g, x2, y2, w2, h2, paintedFocusWidth, outerArc, innerArc ); + } + + // paint border + // outer bounds: x + focusWidth, y + focusWidth, width - (focusWidth * 2), height - (focusWidth * 2) + // thickness: borderWidth + // outer arc diameter: arc + // inner arc diameter: arc - (borderWidth * 2) + if( borderColor != null && borderWidth != 0 ) { + g.setPaint( borderColor ); + paintOutline( g, x1, y1, w1, h1, borderWidth, arc ); + } + } + + /** + * Paints an outline at the given bounds using the given line width. + * Depending on the given arc, a rectangle, rounded rectangle or circle (if w == h) is painted. + * + * @param g the graphics context used for painting + * @param x the x coordinate of the outline + * @param y the y coordinate of the outline + * @param w the width of the outline + * @param h the height of the outline + * @param lineWidth the width of the outline + * @param arc the arc diameter used for the outside shape of the outline + * + * @since 2 + */ + public static void paintOutline( Graphics2D g, float x, float y, float w, float h, + float lineWidth, float arc ) + { + paintOutline( g, x, y, w, h, lineWidth, arc, arc - (lineWidth * 2) ); + } + + /** + * Paints an outline at the given bounds using the given line width. + * Depending on the given arc, a rectangle, rounded rectangle or circle (if w == h) is painted. + * + * @param g the graphics context used for painting + * @param x the x coordinate of the outline + * @param y the y coordinate of the outline + * @param w the width of the outline + * @param h the height of the outline + * @param lineWidth the width of the outline + * @param arc the arc diameter used for the outside shape of the outline + * @param innerArc the arc diameter used for the inside shape of the outline + * + * @since 2 + */ + public static void paintOutline( Graphics2D g, float x, float y, float w, float h, + float lineWidth, float arc, float innerArc ) + { + if( lineWidth == 0 || w <= 0 || h <= 0 ) + return; + + float t = lineWidth; + float t2x = t * 2; + + Path2D border = new Path2D.Float( Path2D.WIND_EVEN_ODD ); + border.append( createComponentRectangle( x, y, w, h, arc ), false ); + border.append( createComponentRectangle( x + t, y + t, w - t2x, h - t2x, innerArc ), false ); + g.fill( border ); } /** @@ -486,6 +606,9 @@ public class FlatUIUtils if( arc <= 0 ) return new Rectangle2D.Float( x, y, w, h ); + if( w == h && arc >= w ) + return new Ellipse2D.Float( x, y, w, h ); + arc = Math.min( arc, Math.min( w, h ) ); return new RoundRectangle2D.Float( x, y, w, h, arc, arc ); } @@ -654,22 +777,24 @@ public class FlatUIUtils * {@link SwingConstants#WEST} or {@link SwingConstants#EAST}) * @param chevron {@code true} for chevron arrow, {@code false} for triangle arrow * @param arrowSize the width of the painted arrow (for vertical direction) (will be scaled) - * @param xOffset a offset added to the x coordinate of the arrow to paint it out-of-center. Usually zero. (will be scaled) - * @param yOffset a offset added to the y coordinate of the arrow to paint it out-of-center. Usually zero. (will be scaled) + * @param xOffset an offset added to the x coordinate of the arrow to paint it out-of-center. Usually zero. (will be scaled) + * @param yOffset an offset added to the y coordinate of the arrow to paint it out-of-center. Usually zero. (will be scaled) * * @since 1.1 */ public static void paintArrow( Graphics2D g, int x, int y, int width, int height, - int direction, boolean chevron, int arrowSize, int xOffset, int yOffset ) + int direction, boolean chevron, int arrowSize, float xOffset, float yOffset ) { // compute arrow width/height - int aw = UIScale.scale( arrowSize + (chevron ? 0 : 1) ); - int ah = UIScale.scale( (arrowSize / 2) + (chevron ? 0 : 1) ); + // - make chevron arrows one pixel smaller because coordinates are based on center of pixels (0.5/0.5) + // - make triangle arrows one pixel taller (and round height up) to make them look stronger + float aw = UIScale.scale( arrowSize + (chevron ? -1 : 0) ); + float ah = chevron ? (aw / 2) : UIScale.scale( (arrowSize / 2) + 1 ); // rotate arrow width/height for horizontal directions boolean vert = (direction == SwingConstants.NORTH || direction == SwingConstants.SOUTH); if( !vert ) { - int temp = aw; + float temp = aw; aw = ah; ah = temp; } @@ -679,19 +804,21 @@ public class FlatUIUtils int extra = chevron ? 1 : 0; // compute arrow location - int ax = x + Math.round( ((width - (aw + extra)) / 2f) + UIScale.scale( (float) xOffset ) ); - int ay = y + Math.round( ((height - (ah + extra)) / 2f) + UIScale.scale( (float) yOffset ) ); + float ox = ((width - (aw + extra)) / 2f) + UIScale.scale( xOffset ); + float oy = ((height - (ah + extra)) / 2f) + UIScale.scale( yOffset ); + float ax = x + ((direction == SwingConstants.WEST) ? -Math.round( -(ox + aw) ) - aw : Math.round( ox )); + float ay = y + ((direction == SwingConstants.NORTH) ? -Math.round( -(oy + ah) ) - ah : Math.round( oy )); // paint arrow g.translate( ax, ay ); /*debug - debugPaintArrow( g, Color.red, vert, aw + extra, ah + extra ); + debugPaintArrow( g, Color.red, vert, Math.round( aw + extra ), Math.round( ah + extra ) ); debug*/ Shape arrowShape = createArrowShape( direction, chevron, aw, ah ); if( chevron ) { Stroke oldStroke = g.getStroke(); g.setStroke( new BasicStroke( UIScale.scale( 1f ) ) ); - g.draw( arrowShape ); + drawShapePure( g, arrowShape ); g.setStroke( oldStroke ); } else { // triangle @@ -703,7 +830,7 @@ debug*/ /** * Creates a chevron or triangle arrow shape for the given direction and size. *

- * The chevron shape is a open path that can be painted with {@link Graphics2D#draw(Shape)}. + * The chevron shape is an open path that can be painted with {@link Graphics2D#draw(Shape)}. * The triangle shape is a close path that can be painted with {@link Graphics2D#fill(Shape)}. * * @param direction the arrow direction ({@link SwingConstants#NORTH}, {@link SwingConstants#SOUTH} @@ -755,7 +882,7 @@ debug*/ } /** - * Creates a open or closed path for the given points. + * Creates an open or closed path for the given points. */ public static Path2D createPath( boolean close, double... points ) { Path2D path = new Path2D.Float(); @@ -767,6 +894,23 @@ debug*/ return path; } + /** + * Draws the given shape with disabled stroke normalization. + * The x/y coordinates of the shape are translated by a half pixel. + * + * @since 2.1 + */ + public static void drawShapePure( Graphics2D g, Shape shape ) { + Object oldStrokeControl = g.getRenderingHint( RenderingHints.KEY_STROKE_CONTROL ); + g.setRenderingHint( RenderingHints.KEY_STROKE_CONTROL, RenderingHints.VALUE_STROKE_PURE ); + + g.translate( 0.5, 0.5 ); + g.draw( shape ); + g.translate( -0.5, -0.5 ); + + g.setRenderingHint( RenderingHints.KEY_STROKE_CONTROL, oldStrokeControl ); + } + /** * Draws the given string at the specified location. * The provided component is used to query text properties and anti-aliasing hints. @@ -818,6 +962,27 @@ debug*/ return explicitlySet; } + /** + * Returns whether shared UI delegates are used. + * + * @since 1.6 + */ + public static boolean isUseSharedUIs() { + return useSharedUIs; + } + + /** + * Specifies whether shared UI delegates are used. + * This does not change already existing UI delegates. + * + * @since 1.6 + */ + public static boolean setUseSharedUIs( boolean useSharedUIs ) { + boolean old = FlatUIUtils.useSharedUIs; + FlatUIUtils.useSharedUIs = useSharedUIs; + return old; + } + /** * Creates a shared component UI for the given key and the current Laf. * Each Laf instance has its own shared component UI instance. @@ -826,11 +991,22 @@ debug*/ * may use multiple Laf instances at the same time. */ public static ComponentUI createSharedUI( Object key, Supplier newInstanceSupplier ) { + if( !useSharedUIs ) + return newInstanceSupplier.get(); + return sharedUIinstances .computeIfAbsent( UIManager.getLookAndFeel(), k -> new IdentityHashMap<>() ) .computeIfAbsent( key, k -> newInstanceSupplier.get() ); } + /** + * Returns whether the component UI for the given component can be shared + * with other components. This is only possible if it does not have styles. + */ + public static boolean canUseSharedUI( JComponent c ) { + return !FlatStylingSupport.hasStyleProperty( c ); + } + //---- class RepaintFocusListener ----------------------------------------- public static class RepaintFocusListener @@ -856,4 +1032,31 @@ debug*/ repaintComponent.repaint(); } } + + //---- class NonUIResourceBorder ------------------------------------------ + + private static class NonUIResourceBorder + implements Border + { + private final Border delegate; + + NonUIResourceBorder( Border delegate ) { + this.delegate = delegate; + } + + @Override + public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { + delegate.paintBorder( c, g, x, y, width, height ); + } + + @Override + public Insets getBorderInsets( Component c ) { + return delegate.getBorderInsets( c ); + } + + @Override + public boolean isBorderOpaque() { + return delegate.isBorderOpaque(); + } + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatWindowResizer.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatWindowResizer.java index 22821b11..849c0a35 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatWindowResizer.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatWindowResizer.java @@ -23,6 +23,7 @@ import java.awt.Dialog; import java.awt.Dimension; import java.awt.Frame; import java.awt.Graphics; +import java.awt.GraphicsConfiguration; import java.awt.Insets; import java.awt.Rectangle; import java.awt.Toolkit; @@ -42,7 +43,9 @@ import javax.swing.JComponent; import javax.swing.JInternalFrame; import javax.swing.JLayeredPane; import javax.swing.JRootPane; +import javax.swing.SwingUtilities; import javax.swing.UIManager; +import com.formdev.flatlaf.util.SystemInfo; import com.formdev.flatlaf.util.UIScale; /** @@ -181,8 +184,12 @@ public abstract class FlatWindowResizer protected abstract boolean isWindowResizable(); protected abstract Rectangle getWindowBounds(); protected abstract void setWindowBounds( Rectangle r ); + protected abstract boolean limitToParentBounds(); + protected abstract Rectangle getParentBounds(); protected abstract boolean honorMinimumSizeOnResize(); + protected abstract boolean honorMaximumSizeOnResize(); protected abstract Dimension getWindowMinimumSize(); + protected abstract Dimension getWindowMaximumSize(); protected void beginResizing( int direction ) {} protected void endResizing() {} @@ -227,8 +234,15 @@ public abstract class FlatWindowResizer { protected Window window; + private final boolean limitResizeToScreenBounds; + public WindowResizer( JRootPane rootPane ) { super( rootPane ); + + // On Linux, limit window resizing to screen bounds because otherwise + // there would be a strange effect when the mouse is moved over a sidebar + // while resizing and the opposite window side is also resized. + limitResizeToScreenBounds = SystemInfo.isLinux; } @Override @@ -283,6 +297,24 @@ public abstract class FlatWindowResizer } } + @Override + protected boolean limitToParentBounds() { + return limitResizeToScreenBounds && window != null; + } + + @Override + protected Rectangle getParentBounds() { + if( limitResizeToScreenBounds && window != null ) { + GraphicsConfiguration gc = window.getGraphicsConfiguration(); + Rectangle bounds = gc.getBounds(); + Insets insets = window.getToolkit().getScreenInsets( gc ); + return new Rectangle( bounds.x + insets.left, bounds.y + insets.top, + bounds.width - insets.left - insets.right, + bounds.height - insets.top - insets.bottom ); + } + return null; + } + @Override protected boolean honorMinimumSizeOnResize() { return @@ -290,11 +322,21 @@ public abstract class FlatWindowResizer (honorDialogMinimumSizeOnResize && window instanceof Dialog); } + @Override + protected boolean honorMaximumSizeOnResize() { + return false; + } + @Override protected Dimension getWindowMinimumSize() { return window.getMinimumSize(); } + @Override + protected Dimension getWindowMaximumSize() { + return window.getMaximumSize(); + } + @Override boolean isDialog() { return window instanceof Dialog; @@ -354,16 +396,36 @@ public abstract class FlatWindowResizer desktopManager.get().resizeFrame( getFrame(), r.x, r.y, r.width, r.height ); } + @Override + protected boolean limitToParentBounds() { + return true; + } + + @Override + protected Rectangle getParentBounds() { + return new Rectangle( getFrame().getParent().getSize() ); + } + @Override protected boolean honorMinimumSizeOnResize() { return true; } + @Override + protected boolean honorMaximumSizeOnResize() { + return true; + } + @Override protected Dimension getWindowMinimumSize() { return getFrame().getMinimumSize(); } + @Override + protected Dimension getWindowMaximumSize() { + return getFrame().getMaximumSize(); + } + @Override protected void beginResizing( int direction ) { desktopManager.get().beginResizingFrame( getFrame(), direction ); @@ -460,7 +522,7 @@ debug*/ @Override public void mousePressed( MouseEvent e ) { - if( !isWindowResizable() ) + if( !SwingUtilities.isLeftMouseButton( e ) || !isWindowResizable() ) return; int xOnScreen = e.getXOnScreen(); @@ -489,7 +551,7 @@ debug*/ @Override public void mouseReleased( MouseEvent e ) { - if( !isWindowResizable() ) + if( !SwingUtilities.isLeftMouseButton( e ) || !isWindowResizable() ) return; dragLeftOffset = dragRightOffset = dragTopOffset = dragBottomOffset = 0; @@ -515,13 +577,13 @@ debug*/ @Override public void mouseDragged( MouseEvent e ) { - if( !isWindowResizable() ) + if( !SwingUtilities.isLeftMouseButton( e ) || !isWindowResizable() ) return; int xOnScreen = e.getXOnScreen(); int yOnScreen = e.getYOnScreen(); - // Get current window bounds and compute new bounds based them. + // Get current window bounds and compute new bounds based on them. // This is necessary because window manager may alter window bounds while resizing. // E.g. when having two monitors with different scale factors and resizing // a window on first screen to the second screen, then the window manager may @@ -535,41 +597,72 @@ debug*/ // top if( resizeDir == N_RESIZE_CURSOR || resizeDir == NW_RESIZE_CURSOR || resizeDir == NE_RESIZE_CURSOR ) { newBounds.y = yOnScreen - dragTopOffset; + if( limitToParentBounds() ) + newBounds.y = Math.max( newBounds.y, getParentBounds().y ); newBounds.height += (oldBounds.y - newBounds.y); } // bottom - if( resizeDir == S_RESIZE_CURSOR || resizeDir == SW_RESIZE_CURSOR || resizeDir == SE_RESIZE_CURSOR ) + if( resizeDir == S_RESIZE_CURSOR || resizeDir == SW_RESIZE_CURSOR || resizeDir == SE_RESIZE_CURSOR ) { newBounds.height = (yOnScreen + dragBottomOffset) - newBounds.y; + if( limitToParentBounds() ) { + int parentHeight = getParentBounds().height; + if( newBounds.y + newBounds.height > parentHeight ) + newBounds.height = parentHeight - newBounds.y; + } + } // left if( resizeDir == W_RESIZE_CURSOR || resizeDir == NW_RESIZE_CURSOR || resizeDir == SW_RESIZE_CURSOR ) { newBounds.x = xOnScreen - dragLeftOffset; + if( limitToParentBounds() ) + newBounds.x = Math.max( newBounds.x, getParentBounds().x ); newBounds.width += (oldBounds.x - newBounds.x); } // right - if( resizeDir == E_RESIZE_CURSOR || resizeDir == NE_RESIZE_CURSOR || resizeDir == SE_RESIZE_CURSOR ) + if( resizeDir == E_RESIZE_CURSOR || resizeDir == NE_RESIZE_CURSOR || resizeDir == SE_RESIZE_CURSOR ) { newBounds.width = (xOnScreen + dragRightOffset) - newBounds.x; + if( limitToParentBounds() ) { + int parentWidth = getParentBounds().width; + if( newBounds.x + newBounds.width > parentWidth ) + newBounds.width = parentWidth - newBounds.x; + } + } // apply minimum window size Dimension minimumSize = honorMinimumSizeOnResize() ? getWindowMinimumSize() : null; if( minimumSize == null ) minimumSize = UIScale.scale( new Dimension( 150, 50 ) ); - if( newBounds.width < minimumSize.width ) { - if( newBounds.x != oldBounds.x ) - newBounds.x -= (minimumSize.width - newBounds.width); - newBounds.width = minimumSize.width; - } - if( newBounds.height < minimumSize.height ) { - if( newBounds.y != oldBounds.y ) - newBounds.y -= (minimumSize.height - newBounds.height); - newBounds.height = minimumSize.height; + if( newBounds.width < minimumSize.width ) + changeWidth( oldBounds, newBounds, minimumSize.width ); + if( newBounds.height < minimumSize.height ) + changeHeight( oldBounds, newBounds, minimumSize.height ); + + // apply maximum window size + if( honorMaximumSizeOnResize() ) { + Dimension maximumSize = getWindowMaximumSize(); + if( newBounds.width > maximumSize.width ) + changeWidth( oldBounds, newBounds, maximumSize.width ); + if( newBounds.height > maximumSize.height ) + changeHeight( oldBounds, newBounds, maximumSize.height ); } // set window bounds if( !newBounds.equals( oldBounds ) ) setWindowBounds( newBounds ); } + + private void changeWidth( Rectangle oldBounds, Rectangle newBounds, int width ) { + if( newBounds.x != oldBounds.x ) + newBounds.x -= (width - newBounds.width); + newBounds.width = width; + } + + private void changeHeight( Rectangle oldBounds, Rectangle newBounds, int height ) { + if( newBounds.y != oldBounds.y ) + newBounds.y -= (height - newBounds.height); + newBounds.height = height; + } } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatWindowsNativeWindowBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatWindowsNativeWindowBorder.java index 458877bd..587dff5e 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatWindowsNativeWindowBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatWindowsNativeWindowBorder.java @@ -25,6 +25,9 @@ import java.awt.Point; import java.awt.Rectangle; import java.awt.Window; import java.awt.geom.AffineTransform; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.io.File; import java.util.Collections; import java.util.IdentityHashMap; import java.util.List; @@ -35,6 +38,7 @@ import javax.swing.Timer; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.event.EventListenerList; +import com.formdev.flatlaf.FlatSystemProperties; import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.NativeLibrary; import com.formdev.flatlaf.util.SystemInfo; @@ -52,6 +56,10 @@ import com.formdev.flatlaf.util.SystemInfo; // https://github.com/oberth/custom-chrome // https://github.com/rossy/borderless-window // +// Windows 11 +// https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/apply-snap-layout-menu +// https://github.com/dotnet/wpf/issues/4825#issuecomment-930442736 +// /** * Native window border support for Windows 10 when using custom decorations. @@ -84,6 +92,10 @@ class FlatWindowsNativeWindowBorder if( !SystemInfo.isWindows_10_orLater ) return null; + // requires x86 architecture + if( !SystemInfo.isX86 && !SystemInfo.isX86_64 ) + return null; + // load native library if( nativeLibrary == null ) { if( !SystemInfo.isJava_9_orLater ) { @@ -94,16 +106,17 @@ class FlatWindowsNativeWindowBorder // Java 9 and later does not have this problem. try { System.loadLibrary( "jawt" ); + } catch( UnsatisfiedLinkError ex ) { + // log error only if native library jawt.dll not already loaded + String message = ex.getMessage(); + if( message == null || !message.contains( "already loaded in another classloader" ) ) + LoggingFacade.INSTANCE.logSevere( null, ex ); } catch( Exception ex ) { LoggingFacade.INSTANCE.logSevere( null, ex ); } } - String libraryName = "com/formdev/flatlaf/natives/flatlaf-windows-x86"; - if( SystemInfo.isX86_64 ) - libraryName += "_64"; - - nativeLibrary = new NativeLibrary( libraryName, null, true ); + nativeLibrary = createNativeLibrary(); } // check whether native library was successfully loaded @@ -116,6 +129,23 @@ class FlatWindowsNativeWindowBorder return instance; } + private static NativeLibrary createNativeLibrary() { + String libraryName = "flatlaf-windows-x86"; + if( SystemInfo.isX86_64 ) + libraryName += "_64"; + + String libraryPath = System.getProperty( FlatSystemProperties.NATIVE_LIBRARY_PATH ); + if( libraryPath != null ) { + File libraryFile = new File( libraryPath, System.mapLibraryName( libraryName ) ); + if( libraryFile.exists() ) + return new NativeLibrary( libraryFile, true ); + else + LoggingFacade.INSTANCE.logSevere( "Did not find external library " + libraryFile + ", using extracted library instead", null ); + } + + return new NativeLibrary( "com/formdev/flatlaf/natives/" + libraryName, null, true ); + } + private FlatWindowsNativeWindowBorder() { } @@ -125,7 +155,7 @@ class FlatWindowsNativeWindowBorder } /** - * Tell the window whether the application wants use custom decorations. + * Tell the window whether the application wants to use custom decorations. * If {@code true}, the Windows 10 title bar is hidden (including minimize, * maximize and close buttons), but not the resize borders (including drop shadow). */ @@ -156,11 +186,18 @@ class FlatWindowsNativeWindowBorder return; // install - WndProc wndProc = new WndProc( window ); - if( wndProc.hwnd == 0 ) - return; + try { + WndProc wndProc = new WndProc( window ); + if( wndProc.hwnd == 0 ) + return; - windowsMap.put( window, wndProc ); + windowsMap.put( window, wndProc ); + } catch( UnsatisfiedLinkError ex ) { + // catch for the case that the operating system prevents execution of DLL + // (e.g. if DLLs in temp folder are restricted) + // --> continue application without custom decorations + LoggingFacade.INSTANCE.logSevere( null, ex ); + } } private void uninstall( Window window ) { @@ -170,30 +207,24 @@ class FlatWindowsNativeWindowBorder } @Override - public void setTitleBarHeight( Window window, int titleBarHeight ) { + public void updateTitleBarInfo( Window window, int titleBarHeight, List hitTestSpots, + Rectangle appIconBounds, Rectangle minimizeButtonBounds, Rectangle maximizeButtonBounds, + Rectangle closeButtonBounds ) + { WndProc wndProc = windowsMap.get( window ); if( wndProc == null ) return; wndProc.titleBarHeight = titleBarHeight; - } - - @Override - public void setTitleBarHitTestSpots( Window window, List hitTestSpots ) { - WndProc wndProc = windowsMap.get( window ); - if( wndProc == null ) - return; - wndProc.hitTestSpots = hitTestSpots.toArray( new Rectangle[hitTestSpots.size()] ); + wndProc.appIconBounds = cloneRectange( appIconBounds ); + wndProc.minimizeButtonBounds = cloneRectange( minimizeButtonBounds ); + wndProc.maximizeButtonBounds = cloneRectange( maximizeButtonBounds ); + wndProc.closeButtonBounds = cloneRectange( closeButtonBounds ); } - @Override - public void setTitleBarAppIconBounds( Window window, Rectangle appIconBounds ) { - WndProc wndProc = windowsMap.get( window ); - if( wndProc == null ) - return; - - wndProc.appIconBounds = (appIconBounds != null) ? new Rectangle( appIconBounds ) : null; + private static Rectangle cloneRectange( Rectangle rect ) { + return (rect != null) ? new Rectangle( rect ) : null; } @Override @@ -289,20 +320,28 @@ class FlatWindowsNativeWindowBorder //---- class WndProc ------------------------------------------------------ private class WndProc + implements PropertyChangeListener { // WM_NCHITTEST mouse position codes private static final int HTCLIENT = 1, HTCAPTION = 2, HTSYSMENU = 3, - HTTOP = 12; + HTMINBUTTON = 8, + HTMAXBUTTON = 9, + HTTOP = 12, + HTCLOSE = 20; private Window window; private final long hwnd; + // Swing coordinates/values may be scaled on a HiDPI screen private int titleBarHeight; private Rectangle[] hitTestSpots; private Rectangle appIconBounds; + private Rectangle minimizeButtonBounds; + private Rectangle maximizeButtonBounds; + private Rectangle closeButtonBounds; WndProc( Window window ) { this.window = window; @@ -313,23 +352,41 @@ class FlatWindowsNativeWindowBorder // remove the OS window title bar updateFrame( hwnd, (window instanceof JFrame) ? ((JFrame)window).getExtendedState() : 0 ); + + // set window background (used when resizing window) + updateWindowBackground(); + window.addPropertyChangeListener( "background", this ); } void uninstall() { + window.removePropertyChangeListener( "background", this ); + uninstallImpl( hwnd ); // cleanup window = null; } + @Override + public void propertyChange( PropertyChangeEvent e ) { + updateWindowBackground(); + } + + private void updateWindowBackground() { + Color bg = window.getBackground(); + if( bg != null ) + setWindowBackground( hwnd, bg.getRed(), bg.getGreen(), bg.getBlue() ); + } + private native long installImpl( Window window ); private native void uninstallImpl( long hwnd ); private native void updateFrame( long hwnd, int state ); + private native void setWindowBackground( long hwnd, int r, int g, int b ); private native void showWindow( long hwnd, int cmd ); // invoked from native code private int onNcHitTest( int x, int y, boolean isOnResizeBorder ) { - // scale-down mouse x/y + // scale-down mouse x/y because Swing coordinates/values may be scaled on a HiDPI screen Point pt = scaleDown( x, y ); int sx = pt.x; int sy = pt.y; @@ -337,9 +394,26 @@ class FlatWindowsNativeWindowBorder // return HTSYSMENU if mouse is over application icon // - left-click on HTSYSMENU area shows system menu // - double-left-click sends WM_CLOSE - if( appIconBounds != null && appIconBounds.contains( sx, sy ) ) + if( contains( appIconBounds, sx, sy ) ) return HTSYSMENU; + // return HTMINBUTTON if mouse is over minimize button + // - hovering mouse over HTMINBUTTON area shows tooltip on Windows 10/11 + if( contains( minimizeButtonBounds, sx, sy ) ) + return HTMINBUTTON; + + // return HTMAXBUTTON if mouse is over maximize/restore button + // - hovering mouse over HTMAXBUTTON area shows tooltip on Windows 10 + // - hovering mouse over HTMAXBUTTON area shows snap layouts menu on Windows 11 + // https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/apply-snap-layout-menu + if( contains( maximizeButtonBounds, sx, sy ) ) + return HTMAXBUTTON; + + // return HTCLOSE if mouse is over close button + // - hovering mouse over HTCLOSE area shows tooltip on Windows 10/11 + if( contains( closeButtonBounds, sx, sy ) ) + return HTCLOSE; + boolean isOnTitleBar = (sy < titleBarHeight); if( isOnTitleBar ) { @@ -356,6 +430,10 @@ class FlatWindowsNativeWindowBorder return isOnResizeBorder ? HTTOP : HTCLIENT; } + private boolean contains( Rectangle rect, int x, int y ) { + return (rect != null && rect.contains( x, y ) ); + } + /** * Scales down in the same way as AWT. * See AwtWin32GraphicsDevice::ScaleDownX() and ::ScaleDownY() diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/JBRCustomDecorations.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/JBRCustomDecorations.java index 7acac163..38482637 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/JBRCustomDecorations.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/JBRCustomDecorations.java @@ -70,9 +70,10 @@ public class JBRCustomDecorations return null; // check whether root pane already has a parent, which is the case when switching LaF - Window window = SwingUtilities.windowForComponent( rootPane ); - if( window != null ) { - FlatNativeWindowBorder.install( window ); + Container parent = rootPane.getParent(); + if( parent != null ) { + if( parent instanceof Window ) + FlatNativeWindowBorder.install( (Window) parent ); return null; } @@ -110,9 +111,9 @@ public class JBRCustomDecorations // since it is actually not possible to uninstall JBR decorations, // simply reduce titleBarHeight so that it is still possible to resize window // and remove hitTestSpots - Window window = SwingUtilities.windowForComponent( rootPane ); - if( window != null ) - setHasCustomDecoration( window, false ); + Container parent = rootPane.getParent(); + if( parent instanceof Window ) + setHasCustomDecoration( (Window) parent, false ); } static boolean hasCustomDecoration( Window window ) { @@ -283,7 +284,7 @@ public class JBRCustomDecorations @Override public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { Window window = SwingUtilities.windowForComponent( c ); - boolean active = (window != null) ? window.isActive() : false; + boolean active = window != null && window.isActive(); // paint top border // - in light themes @@ -297,7 +298,7 @@ public class JBRCustomDecorations } private void paintImpl( Graphics2D g, int x, int y, int width, int height, double scaleFactor ) { - g.drawRect( x, y, width - 1, 0 ); + g.fillRect( x, y, width, 1 ); } void repaintBorder( Component c ) { diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/MigLayoutVisualPadding.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/MigLayoutVisualPadding.java index 6148f718..89389ab9 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/MigLayoutVisualPadding.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/MigLayoutVisualPadding.java @@ -21,6 +21,7 @@ import java.awt.Insets; import java.beans.PropertyChangeListener; import java.util.function.Function; import javax.swing.JComponent; +import com.formdev.flatlaf.FlatClientProperties; /** * Support for MigLayout visual paddings. @@ -80,7 +81,7 @@ public class MigLayoutVisualPadding return new Insets( focusWidth, focusWidth, focusWidth, focusWidth ); } else return null; - }, "border" ); + }, "border", FlatClientProperties.STYLE, FlatClientProperties.STYLE_CLASS ); } /** @@ -99,7 +100,7 @@ public class MigLayoutVisualPadding c.addPropertyChangeListener( (FlatMigListener) e -> { String propertyName = e.getPropertyName(); for( String name : propertyNames ) { - if( name == propertyName ) { + if( name.equals( propertyName ) ) { setVisualPadding( c, getPaddingFunction.apply( c ) ); break; } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/StackUtils.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/StackUtils.java new file mode 100644 index 00000000..0d833689 --- /dev/null +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/StackUtils.java @@ -0,0 +1,50 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.ui; + +import java.util.function.BiPredicate; + +/** + * @author Karl Tauber + */ +class StackUtils +{ + private static final StackUtils INSTANCE = new StackUtilsImpl(); + + // hide from javadoc + StackUtils() { + } + + /** + * Checks whether current method was invoked from the given class and method. + */ + public static boolean wasInvokedFrom( String className, String methodName, int limit ) { + return wasInvokedFrom( (c,m) -> c.equals( className ) && m.equals( methodName ), limit ); + } + + /** + * Checks whether current method was invoked from a class and method using the given predicate, + * which gets the class name of the stack frame as first parameter and the method name as second parameter. + */ + public static boolean wasInvokedFrom( BiPredicate predicate, int limit ) { + return INSTANCE.wasInvokedFromImpl( predicate, limit ); + } + + boolean wasInvokedFromImpl( BiPredicate predicate, int limit ) { + throw new UnsupportedOperationException(); + } +} diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/StackUtilsImpl.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/StackUtilsImpl.java new file mode 100644 index 00000000..0775c413 --- /dev/null +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/StackUtilsImpl.java @@ -0,0 +1,41 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.ui; + +import java.util.function.BiPredicate; + +/** + * @author Karl Tauber + */ +class StackUtilsImpl + extends StackUtils +{ + @Override + boolean wasInvokedFromImpl( BiPredicate predicate, int limit ) { + int count = -2; + StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); + for( StackTraceElement stackTraceElement : stackTrace ) { + if( predicate.test( stackTraceElement.getClassName(), stackTraceElement.getMethodName() ) ) + return true; + + count++; + if( limit > 0 && count > limit ) + return false; + } + return false; + } +} diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/AnimatedIcon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/AnimatedIcon.java index da0b0a1a..4f6c3c7b 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/AnimatedIcon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/AnimatedIcon.java @@ -59,7 +59,7 @@ import com.formdev.flatlaf.util.Animator.Interpolator; * * * Animation works only if the component passed to {@link #paintIcon(Component, Graphics, int, int)} - * is a instance of {@link JComponent}. + * is an instance of {@link JComponent}. * A client property is set on the component to store the animation state. * * @author Karl Tauber @@ -68,7 +68,7 @@ public interface AnimatedIcon extends Icon { @Override - public default void paintIcon( Component c, Graphics g, int x, int y ) { + default void paintIcon( Component c, Graphics g, int x, int y ) { AnimationSupport.paintIcon( this, c, g, x, y ); } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/ColorFunctions.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/ColorFunctions.java index 66c7cf20..913cf6a1 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/ColorFunctions.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/ColorFunctions.java @@ -25,27 +25,91 @@ import java.awt.Color; */ public class ColorFunctions { - public static Color applyFunctions( Color color, ColorFunction... functions ) { - float[] hsl = HSLColor.fromRGB( color ); - float alpha = color.getAlpha() / 255f; - float[] hsla = { hsl[0], hsl[1], hsl[2], alpha * 100 }; - - for( ColorFunction function : functions ) - function.apply( hsla ); - - return HSLColor.toRGB( hsla[0], hsla[1], hsla[2], hsla[3] / 100 ); + /** + * Increase the lightness of a color in HSL color space by an absolute amount. + *

+ * Consider using {@link #tint(Color, float)} as alternative. + * + * @param color base color + * @param amount the amount (in range 0-1) that is added to the lightness + * @return new color + * @since 2 + */ + public static Color lighten( Color color, float amount ) { + return hslIncreaseDecrease( color, amount, 2, true ); } - public static float clamp( float value ) { - return (value < 0) - ? 0 - : ((value > 100) - ? 100 - : value); + /** + * Decrease the lightness of a color in HSL color space by an absolute amount. + *

+ * Consider using {@link #shade(Color, float)} as alternative. + * + * @param color base color + * @param amount the amount (in range 0-1) that is subtracted from the lightness + * @return new color + * @since 2 + */ + public static Color darken( Color color, float amount ) { + return hslIncreaseDecrease( color, amount, 2, false ); + } + + /** + * Increase the saturation of a color in HSL color space by an absolute amount. + * + * @param color base color + * @param amount the amount (in range 0-1) that is added to the saturation + * @return new color + * @since 2 + */ + public static Color saturate( Color color, float amount ) { + return hslIncreaseDecrease( color, amount, 1, true ); + } + + /** + * Decrease the saturation of a color in HSL color space by an absolute amount. + * + * @param color base color + * @param amount the amount (in range 0-1) that is subtracted from the saturation + * @return new color + * @since 2 + */ + public static Color desaturate( Color color, float amount ) { + return hslIncreaseDecrease( color, amount, 1, false ); + } + + /** + * Rotate the hue angle (0-360) of a color in HSL color space in either direction. + * + * @param color base color + * @param angle the number of degrees to rotate (in range -360 - 360) + * @return new color + * @since 2 + */ + public static Color spin( Color color, float angle ) { + return hslIncreaseDecrease( color, angle, 0, true ); + } + + private static Color hslIncreaseDecrease( Color color, float amount, int hslIndex, boolean increase ) { + // convert RGB to HSL + float[] hsl = HSLColor.fromRGB( color ); + float alpha = color.getAlpha() / 255f; + + // apply HSL color change + float amount2 = increase ? amount : -amount; + if( hslIndex == 0 ) + hsl[0] = (hsl[0] + amount2) % 360; + else + hsl[hslIndex] = clamp( hsl[hslIndex] + (amount2 * 100) ); + + // convert HSL to RGB + return HSLColor.toRGB( hsl[0], hsl[1], hsl[2], alpha ); } /** * Returns a color that is a mixture of two colors. + *

+ * This can be used to animate a color change from {@code color1} to {@code color2} + * by invoking this method multiple times with growing {@code weight} (from 0 to 1). * * @param color1 first color * @param color2 second color @@ -58,6 +122,8 @@ public class ColorFunctions return color1; if( weight <= 0 ) return color2; + if( color1.equals( color2 ) ) + return color1; int r1 = color1.getRed(); int g1 = color1.getGreen(); @@ -76,6 +142,101 @@ public class ColorFunctions Math.round( a2 + ((a1 - a2) * weight) ) ); } + /** + * Mix color with white, which makes the color brighter. + * This is the same as {@link #mix}{@code (Color.white, color, weight)}. + * + * @param color second color + * @param weight the weight (in range 0-1) to mix the two colors. + * Larger weight uses more of first color, smaller weight more of second color. + * @return mixture of colors + * @since 2 + */ + public static Color tint( Color color, float weight ) { + return mix( Color.white, color, weight ); + } + + /** + * Mix color with black, which makes the color darker. + * This is the same as {@link #mix}{@code (Color.black, color, weight)}. + * + * @param color second color + * @param weight the weight (in range 0-1) to mix the two colors. + * Larger weight uses more of first color, smaller weight more of second color. + * @return mixture of colors + * @since 2 + */ + public static Color shade( Color color, float weight ) { + return mix( Color.black, color, weight ); + } + + /** + * Calculates the luma (perceptual brightness) of the given color. + *

+ * Uses SMPTE C / Rec. 709 coefficients, as recommended in + * WCAG 2.0. + * + * @param color a color + * @return the luma (in range 0-1) + * + * @see https://en.wikipedia.org/wiki/Luma_(video) + * @since 2 + */ + public static float luma( Color color ) { + // see https://en.wikipedia.org/wiki/Luma_(video) + // see https://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef + // see https://github.com/less/less.js/blob/master/packages/less/src/less/tree/color.js + float r = gammaCorrection( color.getRed() / 255f ); + float g = gammaCorrection( color.getGreen() / 255f ); + float b = gammaCorrection( color.getBlue() / 255f ); + return (0.2126f * r) + (0.7152f * g) + (0.0722f * b); + } + + private static float gammaCorrection( float value ) { + return (value <= 0.03928f) + ? value / 12.92f + : (float) Math.pow( (value + 0.055) / 1.055, 2.4 ); + } + + /** + * Applies the given color functions to the given color and returns the new color. + */ + public static Color applyFunctions( Color color, ColorFunction... functions ) { + // if having only a single function of type Mix, then avoid four unnecessary conversions: + // 1. RGB to HSL in this method + // 2. HSL to RGB in Mix.apply() + // mix + // 3. RGB to HSL in Mix.apply() + // 4. HSL to RGB in this method + if( functions.length == 1 && functions[0] instanceof Mix ) { + Mix mixFunction = (Mix) functions[0]; + return mix( color, mixFunction.color2, mixFunction.weight / 100 ); + } + + // convert RGB to HSL + float[] hsl = HSLColor.fromRGB( color ); + float alpha = color.getAlpha() / 255f; + float[] hsla = { hsl[0], hsl[1], hsl[2], alpha * 100 }; + + // apply color functions + for( ColorFunction function : functions ) + function.apply( hsla ); + + // convert HSL to RGB + return HSLColor.toRGB( hsla[0], hsla[1], hsla[2], hsla[3] / 100 ); + } + + /** + * Clamps the given value between 0 and 100. + */ + public static float clamp( float value ) { + return (value < 0) + ? 0 + : ((value > 100) + ? 100 + : value); + } + //---- interface ColorFunction -------------------------------------------- public interface ColorFunction { @@ -145,7 +306,46 @@ public class ColorFunctions } } - //---- class HSLIncreaseDecrease ------------------------------------------ + //---- class HSLChange ---------------------------------------------------- + + /** + * Set the hue, saturation, luminance or alpha of a color. + * + * @since 1.6 + */ + public static class HSLChange + implements ColorFunction + { + public final int hslIndex; + public final float value; + + public HSLChange( int hslIndex, float value ) { + this.hslIndex = hslIndex; + this.value = value; + } + + @Override + public void apply( float[] hsla ) { + hsla[hslIndex] = (hslIndex == 0) + ? value % 360 + : clamp( value ); + } + + @Override + public String toString() { + String name; + switch( hslIndex ) { + case 0: name = "changeHue"; break; + case 1: name = "changeSaturation"; break; + case 2: name = "changeLightness"; break; + case 3: name = "changeAlpha"; break; + default: throw new IllegalArgumentException(); + } + return String.format( "%s(%.0f%s)", name, value, (hslIndex == 0 ? "" : "%") ); + } + } + + //---- class Fade --------------------------------------------------------- /** * Set the alpha of a color. @@ -169,4 +369,42 @@ public class ColorFunctions return String.format( "fade(%.0f%%)", amount ); } } + + //---- class Mix ---------------------------------------------------------- + + /** + * Mix two colors. + * + * @since 1.6 + */ + public static class Mix + implements ColorFunction + { + public final Color color2; + public final float weight; + + public Mix( Color color2, float weight ) { + this.color2 = color2; + this.weight = weight; + } + + @Override + public void apply( float[] hsla ) { + // convert from HSL to RGB because color mixing is done on RGB values + Color color1 = HSLColor.toRGB( hsla[0], hsla[1], hsla[2], hsla[3] / 100 ); + + // mix + Color color = mix( color1, color2, weight / 100 ); + + // convert RGB to HSL + float[] hsl = HSLColor.fromRGB( color ); + System.arraycopy( hsl, 0, hsla, 0, hsl.length ); + hsla[3] = (color.getAlpha() / 255f) * 100; + } + + @Override + public String toString() { + return String.format( "mix(#%08x,%.0f%%)", color2.getRGB(), weight ); + } + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/DerivedColor.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/DerivedColor.java index 73b55587..c7e1fdfa 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/DerivedColor.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/DerivedColor.java @@ -47,7 +47,7 @@ public class DerivedColor Color result = ColorFunctions.applyFunctions( baseColor, functions ); // if the result is equal to the default color, then the original base color - // was passed and we can cache this to avoid color calculations + // was passed, and we can cache this to avoid color calculations if( !hasBaseOfDefaultColor && result.getRGB() == this.getRGB() ) { hasBaseOfDefaultColor = true; baseOfDefaultColorRGB = baseColor.getRGB(); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/HSLColor.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/HSLColor.java index 4ba3ebed..deb4f915 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/HSLColor.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/HSLColor.java @@ -76,7 +76,7 @@ public class HSLColor } /** - * Create a HSLColor object using an an array containing the + * Create a HSLColor object using an array containing the * individual HSL values and with a default alpha value of 1. * * @param hsl array containing HSL values @@ -87,7 +87,7 @@ public class HSLColor } /** - * Create a HSLColor object using an an array containing the + * Create a HSLColor object using an array containing the * individual HSL values. * * @param hsl array containing HSL values @@ -291,7 +291,7 @@ public class HSLColor // Calculate the Saturation - float s = 0; + float s; if (max == min) s = 0; @@ -386,7 +386,7 @@ public class HSLColor s /= 100f; l /= 100f; - float q = 0; + float q; if (l < 0.5) q = l * (1 + s); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/HiDPIUtils.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/HiDPIUtils.java index 6a67af16..07f3f7c0 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/HiDPIUtils.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/HiDPIUtils.java @@ -31,7 +31,7 @@ import com.formdev.flatlaf.FlatSystemProperties; public class HiDPIUtils { public interface Painter { - public void paint( Graphics2D g, int x, int y, int width, int height, double scaleFactor ); + void paint( Graphics2D g, int x, int y, int width, int height, double scaleFactor ); } public static void paintAtScale1x( Graphics2D g, JComponent c, Painter painter ) { @@ -114,7 +114,7 @@ public class HiDPIUtils * painted too far down on some operating systems. * The higher the system scale factor is, the more. *

- * This methods computes a correction value for the Y position. + * This method computes a correction value for the Y position. */ public static float computeTextYCorrection( Graphics2D g ) { if( !useTextYCorrection() || !SystemInfo.isWindows ) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/JavaCompatibility.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/JavaCompatibility.java index 1f94dc55..39887ecc 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/JavaCompatibility.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/JavaCompatibility.java @@ -89,7 +89,7 @@ public class JavaCompatibility getClippedStringMethod = cls.getMethod( SystemInfo.isJava_9_orLater ? "getClippedString" : "clipStringIfNecessary", - new Class[] { JComponent.class, FontMetrics.class, String.class, int.class } ); + JComponent.class, FontMetrics.class, String.class, int.class ); } catch( Exception ex ) { LoggingFacade.INSTANCE.logSevere( null, ex ); throw new RuntimeException( ex ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/MultiResolutionImageSupport.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/MultiResolutionImageSupport.java index ace4a720..cd635dbe 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/MultiResolutionImageSupport.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/MultiResolutionImageSupport.java @@ -72,7 +72,7 @@ public class MultiResolutionImageSupport *

* The given dimensions array is only used for {@link #getResolutionVariants(Image)}. * The producer function may be invoked with any dimension (that is not contained in - * dimensions array) and is expected to produce a image for the passed in dimension. + * dimensions array) and is expected to produce an image for the passed in dimension. * * @param baseImageIndex index of the base image in the dimensions array * @param dimensions dimensions of resolution variants (sorted by size; smallest first) @@ -92,7 +92,7 @@ public class MultiResolutionImageSupport * for "disabled" state. * * @param image a multi-resolution image that is mapped using the given mapper function - * @param mapper mapper function that maps a single resolution variant to a new image (e.g. applying an filter) + * @param mapper mapper function that maps a single resolution variant to a new image (e.g. applying a filter) * @return a multi-resolution image on Java 9 or later; a mapped image on Java 8 */ public static Image map( Image image, Function mapper ) { @@ -104,7 +104,7 @@ public class MultiResolutionImageSupport *

* If the given image is a multi-resolution image then invokes * {@code java.awt.image.MultiResolutionImage.getResolutionVariant(destImageWidth, destImageHeight)}. - * Otherwise returns the given image. + * Otherwise, returns the given image. */ public static Image getResolutionVariant( Image image, int destImageWidth, int destImageHeight ) { return image; @@ -115,7 +115,7 @@ public class MultiResolutionImageSupport *

* If the given image is a multi-resolution image then invokes * {@code java.awt.image.MultiResolutionImage.getResolutionVariants()}. - * Otherwise returns a list containing only the given image. + * Otherwise, returns a list containing only the given image. */ public static List getResolutionVariants( Image image ) { return Collections.singletonList( image ); diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/NativeLibrary.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/NativeLibrary.java index b77b1522..018694fb 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/NativeLibrary.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/NativeLibrary.java @@ -60,6 +60,19 @@ public class NativeLibrary : false; } + /** + * Load native library from given file. + * + * @param libraryFile the file of the native library + * @param supported whether the native library is supported on the current platform + * @since 2 + */ + public NativeLibrary( File libraryFile, boolean supported ) { + this.loaded = supported + ? loadLibraryFromFile( libraryFile ) + : false; + } + /** * Returns whether the native library is loaded. *

@@ -120,16 +133,29 @@ public class NativeLibrary } } + private boolean loadLibraryFromFile( File libraryFile ) { + try { + System.load( libraryFile.getAbsolutePath() ); + return true; + } catch( Throwable ex ) { + log( null, ex ); + return false; + } + } + + /** + * Add prefix and suffix to library name. + *

    + *
  • Windows: libraryName + ".dll" + *
  • macOS: "lib" + libraryName + ".dylib" + *
  • Linux: "lib" + libraryName + ".so" + *
+ */ private static String decorateLibraryName( String libraryName ) { - if( SystemInfo.isWindows ) - return libraryName.concat( ".dll" ); - - String suffix = SystemInfo.isMacOS ? ".dylib" : ".so"; - int sep = libraryName.lastIndexOf( '/' ); return (sep >= 0) - ? libraryName.substring( 0, sep + 1 ) + "lib" + libraryName.substring( sep + 1 ) + suffix - : "lib" + libraryName + suffix; + ? libraryName.substring( 0, sep + 1 ) + System.mapLibraryName( libraryName.substring( sep + 1 ) ) + : System.mapLibraryName( libraryName ); } private static void log( String msg, Throwable thrown ) { @@ -172,7 +198,7 @@ public class NativeLibrary // for loaded native libraries, they will be deleted on next application startup. // The default temporary directory may contain hundreds or thousands of files. // To make searching for "marked for deletion" files as fast as possible, - // use a sub directory that contains only our temporary native libraries. + // use a subdirectory that contains only our temporary native libraries. tmpdir += "\\flatlaf.temp"; } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SoftCache.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SoftCache.java new file mode 100644 index 00000000..c9f36546 --- /dev/null +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SoftCache.java @@ -0,0 +1,168 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.util; + +import java.lang.ref.Reference; +import java.lang.ref.ReferenceQueue; +import java.lang.ref.SoftReference; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; +import java.util.function.BiConsumer; +import java.util.function.BiFunction; + +/** + * A simple cache (map) that uses soft references for the values. + * + * @author Karl Tauber + * @since 2 + */ +public class SoftCache + implements Map +{ + private final Map> map; + private final ReferenceQueue queue = new ReferenceQueue<>(); + + public SoftCache() { + map = new HashMap<>(); + } + + public SoftCache( int initialCapacity ) { + map = new HashMap<>( initialCapacity ); + } + + @Override + public int size() { + expungeStaleEntries(); + return map.size(); + } + + @Override + public boolean isEmpty() { + expungeStaleEntries(); + return map.isEmpty(); + } + + @Override + public boolean containsKey( Object key ) { + expungeStaleEntries(); + return map.containsKey( key ); + } + + /** + * Not supported. Throws {@link UnsupportedOperationException}. + */ + @Override + public boolean containsValue( Object value ) { + throw new UnsupportedOperationException(); + } + + @Override + public V get( Object key ) { + expungeStaleEntries(); + return getRef( map.get( key ) ); + } + + @Override + public V put( K key, V value ) { + expungeStaleEntries(); + return getRef( map.put( key, new CacheReference<>( key, value, queue ) ) ); + } + + @Override + public V remove( Object key ) { + expungeStaleEntries(); + return getRef( map.remove( key ) ); + } + + private V getRef( CacheReference ref ) { + return (ref != null) ? ref.get() : null; + } + + @Override + public void putAll( Map m ) { + expungeStaleEntries(); + for( Entry e : m.entrySet() ) + put( e.getKey(), e.getValue() ); + } + + @Override + public void clear() { + map.clear(); + expungeStaleEntries(); + } + + @Override + public Set keySet() { + expungeStaleEntries(); + return map.keySet(); + } + + /** + * Not supported. Throws {@link UnsupportedOperationException}. + */ + @Override + public Collection values() { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. Throws {@link UnsupportedOperationException}. + */ + @Override + public Set> entrySet() { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. Throws {@link UnsupportedOperationException}. + */ + @Override + public void forEach( BiConsumer action ) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. Throws {@link UnsupportedOperationException}. + */ + @Override + public void replaceAll( BiFunction function ) { + throw new UnsupportedOperationException(); + } + + @SuppressWarnings( "unchecked" ) + private void expungeStaleEntries() { + Reference reference; + while( (reference = queue.poll()) != null ) + map.remove( ((CacheReference)reference).key ); + } + + //---- class CacheReference ---- + + private static class CacheReference + extends SoftReference + { + // needed to remove reference from map in expungeStaleEntries() + final K key; + + CacheReference( K key, V value, ReferenceQueue queue ) { + super( value, queue ); + this.key = key; + } + } +} diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/StringUtils.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/StringUtils.java index df184d1e..157e1b50 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/StringUtils.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/StringUtils.java @@ -17,6 +17,7 @@ package com.formdev.flatlaf.util; import java.util.ArrayList; +import java.util.Collections; import java.util.List; /** @@ -46,16 +47,98 @@ public class StringUtils } public static List split( String str, char delim ) { - ArrayList strs = new ArrayList<>(); + return split( str, delim, false, false ); + } + + /** + * Splits a string at the specified delimiter. + * If trimming is enabled, then leading and trailing whitespace characters are removed. + * If excludeEmpty is {@code true}, then only non-empty strings are returned. + * + * @since 2 + */ + public static List split( String str, char delim, boolean trim, boolean excludeEmpty ) { int delimIndex = str.indexOf( delim ); + if( delimIndex < 0 ) { + if( trim ) + str = str.trim(); + return !excludeEmpty || !str.isEmpty() + ? Collections.singletonList( str ) + : Collections.emptyList(); + } + + ArrayList strs = new ArrayList<>(); int index = 0; while( delimIndex >= 0 ) { - strs.add( str.substring( index, delimIndex ) ); + add( strs, str, index, delimIndex, trim, excludeEmpty ); index = delimIndex + 1; delimIndex = str.indexOf( delim, index ); } - strs.add( str.substring( index ) ); + add( strs, str, index, str.length(), trim, excludeEmpty ); return strs; } + + private static void add( List strs, String str, int beginIndex, int endIndex, + boolean trim, boolean excludeEmpty ) + { + if( trim ) { + beginIndex = trimBegin( str, beginIndex, endIndex ); + endIndex = trimEnd( str, beginIndex, endIndex ); + } + + if( !excludeEmpty || endIndex > beginIndex ) + strs.add( str.substring( beginIndex, endIndex ) ); + } + + /** + * This is equal to {@code str.substring( beginIndex, endIndex ).trim()}, + * but avoids temporary untrimmed substring allocation. + * If the trimmed string is empty, a shared empty string is returned. + * + * @since 2 + */ + public static String substringTrimmed( String str, int beginIndex ) { + return substringTrimmed( str, beginIndex, str.length() ); + } + + /** + * This is equal to {@code str.substring( beginIndex ).trim()}, + * but avoids temporary untrimmed substring allocation. + * If the trimmed string is empty, a shared empty string is returned. + * + * @since 2 + */ + public static String substringTrimmed( String str, int beginIndex, int endIndex ) { + beginIndex = trimBegin( str, beginIndex, endIndex ); + endIndex = trimEnd( str, beginIndex, endIndex ); + return (endIndex > beginIndex) ? str.substring( beginIndex, endIndex ) : ""; + } + + /** + * This is equal to {@code str.trim().isEmpty()}, + * but avoids temporary trimmed substring allocation. + * + * @since 2 + */ + public static boolean isTrimmedEmpty( String str ) { + int length = str.length(); + int beginIndex = trimBegin( str, 0, length ); + int endIndex = trimEnd( str, beginIndex, length ); + return beginIndex >= endIndex; + } + + private static int trimBegin( String str, int beginIndex, int endIndex ) { + // skip leading whitespace + while( beginIndex < endIndex && str.charAt( beginIndex ) <= ' ' ) + beginIndex++; + return beginIndex; + } + + private static int trimEnd( String str, int beginIndex, int endIndex ) { + // skip trailing whitespace + while( beginIndex < endIndex && str.charAt( endIndex - 1 ) <= ' ' ) + endIndex--; + return endIndex; + } } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SwingUtils.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SwingUtils.java new file mode 100644 index 00000000..5fd8e785 --- /dev/null +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SwingUtils.java @@ -0,0 +1,50 @@ +/* + * Copyright 2022 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.util; + +import java.awt.Component; +import java.awt.Container; + +/** + * Utility methods for Swing. + * + * @author Karl Tauber + * @since 2 + */ +public class SwingUtils +{ + /** + * Search for a (grand) child component with the given name. + * + * @return a component; or {@code null} + */ + @SuppressWarnings( "unchecked" ) + public static T getComponentByName( Container parent, String name ) { + for( Component child : parent.getComponents() ) { + if( name.equals( child.getName() ) ) + return (T) child; + + if( child instanceof Container ) { + T c = getComponentByName( (Container) child, name ); + if( c != null ) + return c; + } + } + + return null; + } +} diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SystemInfo.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SystemInfo.java index 305d4ed6..406ae9fa 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SystemInfo.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/SystemInfo.java @@ -34,18 +34,25 @@ public class SystemInfo // OS versions public static final long osVersion; public static final boolean isWindows_10_orLater; + /** Note: This requires Java 8u321, 11.0.14, 17.0.2 or 18 (or later). + * (see https://bugs.openjdk.java.net/browse/JDK-8274840) + * @since 2 */ public static final boolean isWindows_11_orLater; public static final boolean isMacOS_10_11_ElCapitan_orLater; public static final boolean isMacOS_10_14_Mojave_orLater; public static final boolean isMacOS_10_15_Catalina_orLater; // OS architecture + /** @since 2 */ public static final boolean isX86; /** @since 1.1 */ public static final boolean isX86_64; + /** @since 2 */ public static final boolean isAARCH64; // Java versions public static final long javaVersion; public static final boolean isJava_9_orLater; public static final boolean isJava_11_orLater; public static final boolean isJava_15_orLater; + /** @since 2 */ public static final boolean isJava_17_orLater; + /** @since 2 */ public static final boolean isJava_18_orLater; // Java VMs public static final boolean isJetBrainsJVM; @@ -69,19 +76,25 @@ public class SystemInfo // OS versions osVersion = scanVersion( System.getProperty( "os.version" ) ); isWindows_10_orLater = (isWindows && osVersion >= toVersion( 10, 0, 0, 0 )); + isWindows_11_orLater = (isWindows_10_orLater && osName.length() > "windows ".length() && + scanVersion( osName.substring( "windows ".length() ) ) >= toVersion( 11, 0, 0, 0 )); isMacOS_10_11_ElCapitan_orLater = (isMacOS && osVersion >= toVersion( 10, 11, 0, 0 )); isMacOS_10_14_Mojave_orLater = (isMacOS && osVersion >= toVersion( 10, 14, 0, 0 )); isMacOS_10_15_Catalina_orLater = (isMacOS && osVersion >= toVersion( 10, 15, 0, 0 )); // OS architecture String osArch = System.getProperty( "os.arch" ); + isX86 = osArch.equals( "x86" ); isX86_64 = osArch.equals( "amd64" ) || osArch.equals( "x86_64" ); + isAARCH64 = osArch.equals( "aarch64" ); // Java versions javaVersion = scanVersion( System.getProperty( "java.version" ) ); isJava_9_orLater = (javaVersion >= toVersion( 9, 0, 0, 0 )); isJava_11_orLater = (javaVersion >= toVersion( 11, 0, 0, 0 )); isJava_15_orLater = (javaVersion >= toVersion( 15, 0, 0, 0 )); + isJava_17_orLater = (javaVersion >= toVersion( 17, 0, 0, 0 )); + isJava_18_orLater = (javaVersion >= toVersion( 18, 0, 0, 0 )); // Java VMs isJetBrainsJVM = System.getProperty( "java.vm.vendor", "Unknown" ) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/UIScale.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/UIScale.java index 41f8d35c..9706d018 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/util/UIScale.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/util/UIScale.java @@ -103,7 +103,7 @@ public class UIScale // Java 9 and later supports per-monitor scaling jreHiDPI = true; } else if( SystemInfo.isJetBrainsJVM ) { - // IntelliJ IDEA ships its own JetBrains Java 8 JRE that may supports per-monitor scaling + // IntelliJ IDEA ships its own JetBrains Java 8 JRE that may support per-monitor scaling // see com.intellij.ui.JreHiDpiUtil.isJreHiDPIEnabled() try { GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); @@ -192,7 +192,15 @@ public class UIScale if( font == null ) font = UIManager.getFont( "Label.font" ); - float newScaleFactor; + setUserScaleFactor( computeFontScaleFactor( font ), true ); + } + + /** + * For internal use only. + * + * @since 2 + */ + public static float computeFontScaleFactor( Font font ) { if( SystemInfo.isWindows ) { // Special handling for Windows to be compatible with OS scaling, // which distinguish between "screen scaling" and "text scaling". @@ -204,33 +212,35 @@ public class UIScale // - Settings > Display > Scale and layout // - Settings > Ease of Access > Display > Make text bigger (100% - 225%) if( font instanceof UIResource ) { - if( isSystemScalingEnabled() ) { - // Do not apply own scaling if the JRE scales using Windows screen scale factor. - // If user increases font size in Windows 10 settings, desktop property - // "win.messagebox.font" is changed and FlatLaf uses the larger font. - newScaleFactor = 1; - } else { - // If the JRE does not scale (Java 8), the size of the UI font - // (usually from desktop property "win.messagebox.font") - // combines the Windows screen and text scale factors. - // But the font in desktop property "win.defaultGUI.font" is only - // scaled with the Windows screen scale factor. So use it to compute - // our scale factor that is equal to Windows screen scale factor. - Font winFont = (Font) Toolkit.getDefaultToolkit().getDesktopProperty( "win.defaultGUI.font" ); - newScaleFactor = computeScaleFactor( (winFont != null) ? winFont : font ); + Font uiFont = (Font) Toolkit.getDefaultToolkit().getDesktopProperty( "win.messagebox.font" ); + if( uiFont == null || uiFont.getSize() == font.getSize() ) { + if( isSystemScalingEnabled() ) { + // Do not apply own scaling if the JRE scales using Windows screen scale factor. + // If user increases font size in Windows 10 settings, desktop property + // "win.messagebox.font" is changed and FlatLaf uses the larger font. + return 1; + } else { + // If the JRE does not scale (Java 8), the size of the UI font + // (usually from desktop property "win.messagebox.font") + // combines the Windows screen and text scale factors. + // But the font in desktop property "win.defaultGUI.font" is only + // scaled with the Windows screen scale factor. So use it to compute + // our scale factor that is equal to Windows screen scale factor. + Font winFont = (Font) Toolkit.getDefaultToolkit().getDesktopProperty( "win.defaultGUI.font" ); + return computeScaleFactor( (winFont != null) ? winFont : font ); + } } - } else { - // If font was explicitly set from outside (is not a UIResource) - // use it to compute scale factor. This allows applications to - // use custom fonts (e.g. that the user can change in UI) and - // get scaling if a larger font size is used. - // E.g. FlatLaf Demo supports increasing font size in "Font" menu and UI scales. - newScaleFactor = computeScaleFactor( font ); } - } else - newScaleFactor = computeScaleFactor( font ); - setUserScaleFactor( newScaleFactor, true ); + // If font was explicitly set from outside (is not a UIResource), + // or was set in FlatLaf properties files (is a UIResource), + // use it to compute scale factor. This allows applications to + // use custom fonts (e.g. that the user can change in UI) and + // get scaling if a larger font size is used. + // E.g. FlatLaf Demo supports increasing font size in "Font" menu and UI scales. + } + + return computeScaleFactor( font ); } private static float computeScaleFactor( Font font ) { @@ -401,7 +411,7 @@ public class UIScale * Scales the given dimension with the user scale factor. *

* If user scale factor is 1, then the given dimension is simply returned. - * Otherwise a new instance of {@link Dimension} or {@link DimensionUIResource} + * Otherwise, a new instance of {@link Dimension} or {@link DimensionUIResource} * is returned, depending on whether the passed dimension implements {@link UIResource}. */ public static Dimension scale( Dimension dimension ) { @@ -417,7 +427,7 @@ public class UIScale * Scales the given insets with the user scale factor. *

* If user scale factor is 1, then the given insets is simply returned. - * Otherwise a new instance of {@link Insets} or {@link InsetsUIResource} + * Otherwise, a new instance of {@link Insets} or {@link InsetsUIResource} * is returned, depending on whether the passed dimension implements {@link UIResource}. */ public static Insets scale( Insets insets ) { diff --git a/flatlaf-core/src/main/java9/com/formdev/flatlaf/ui/StackUtilsImpl.java b/flatlaf-core/src/main/java9/com/formdev/flatlaf/ui/StackUtilsImpl.java new file mode 100644 index 00000000..0ba0fcc2 --- /dev/null +++ b/flatlaf-core/src/main/java9/com/formdev/flatlaf/ui/StackUtilsImpl.java @@ -0,0 +1,37 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.ui; + +import java.util.function.BiPredicate; + +/** + * @author Karl Tauber + */ +class StackUtilsImpl + extends StackUtils +{ + @Override + boolean wasInvokedFromImpl( BiPredicate predicate, int limit ) { + return StackWalker.getInstance().walk( stream -> { + if( limit > 0 ) + stream = stream.limit( limit + 2 ); + return stream.anyMatch( f -> { + return predicate.test( f.getClassName(), f.getMethodName() ); + } ); + } ); + } +} diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarculaLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarculaLaf.properties index 2c3d196a..07d6a181 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarculaLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarculaLaf.properties @@ -24,13 +24,19 @@ # # NOTE: Avoid copying the whole content of this file to own properties files. # This will make upgrading to newer FlatLaf versions complex and error-prone. -# Instead copy and modify only those properties that you need to alter. +# Instead, copy and modify only those properties that you need to alter. # # Colors and style mostly based on Darcula theme from IntelliJ IDEA Community Edition, # which is licensed under the Apache 2.0 license. Copyright 2000-2019 JetBrains s.r.o. # See: https://github.com/JetBrains/intellij-community/ +#---- variables ---- + +# accent colors (blueish) +@accentFocusColor = if(@accentColor, darken(@accentColor,20%), shade(spin(@accentBaseColor,-8),20%)) + + #---- Button ---- Button.innerFocusWidth = 0 @@ -40,6 +46,7 @@ Button.default.boldText = true #---- CheckBox ---- +CheckBox.icon.focusWidth = null CheckBox.icon.focusedBackground = null @@ -53,7 +60,7 @@ Component.arrowType = triangle #---- ProgressBar ---- -ProgressBar.foreground = #a0a0a0 +ProgressBar.foreground = darken(@foreground,10%) ProgressBar.selectionForeground = @background diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties index 3dcd9fd5..91126b86 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatDarkLaf.properties @@ -23,7 +23,7 @@ # # NOTE: Avoid copying the whole content of this file to own properties files. # This will make upgrading to newer FlatLaf versions complex and error-prone. -# Instead copy and modify only those properties that you need to alter. +# Instead, copy and modify only those properties that you need to alter. # # Colors and style mostly based on Darcula theme from IntelliJ IDEA Community Edition, @@ -32,24 +32,49 @@ #---- variables ---- +# general background and foreground (text color) @background = #3c3f41 @foreground = #bbb -@selectionBackground = #4B6EAF -@selectionForeground = @foreground -@selectionInactiveBackground = #0D293E -@selectionInactiveForeground = @foreground -@disabledText = #888 -@textComponentBackground = #45494A +@disabledBackground = @background +@disabledForeground = shade(@foreground,25%) + +# component background +@buttonBackground = tint(@background,9%) +@componentBackground = tint(@background,5%) @menuBackground = darken(@background,5%) + +# selection +@selectionBackground = @accentSelectionBackground +@selectionForeground = contrast(@selectionBackground, @background, @foreground, 25%) +@selectionInactiveBackground = spin(saturate(shade(@selectionBackground,70%),20%),-15) +@selectionInactiveForeground = @foreground + +# menu @menuHoverBackground = lighten(@menuBackground,10%,derived) @menuCheckBackground = darken(@selectionBackground,10%,derived noAutoInverse) @menuAcceleratorForeground = darken(@foreground,15%) @menuAcceleratorSelectionForeground = @selectionForeground + +# misc @cellFocusColor = #000 -@icon = #adadad +@icon = shade(@foreground,7%) + +# accent colors (blueish) +# set @accentColor to use single accent color or +# modify @accentBaseColor to use variations of accent base color +@accentColor = null +@accentBaseColor = #4B6EAF +@accentBase2Color = lighten(saturate(spin(@accentBaseColor,-8),13%),5%) +# accent color variations +@accentFocusColor = if(@accentColor, @accentColor, shade(spin(@accentBaseColor,-8),20%)) +@accentLinkColor = if(@accentColor, @accentColor, lighten(saturate(spin(@accentBaseColor,-5),50%),16%)) +@accentSelectionBackground = if(@accentColor, @accentColor, @accentBaseColor) +@accentSliderColor = if(@accentColor, @accentColor, @accentBase2Color) +@accentUnderlineColor = if(@accentColor, @accentColor, @accentBase2Color) +@accentButtonDefaultBackground = if(@accentColor, @accentColor, darken(spin(@accentBaseColor,-8),13%)) # for buttons within components (e.g. combobox or spinner) -@buttonArrowColor = #9A9DA1 +@buttonArrowColor = shade(@foreground,17%) @buttonDisabledArrowColor = darken(@buttonArrowColor,25%) @buttonHoverArrowColor = lighten(@buttonArrowColor,10%,derived noAutoInverse) @buttonPressedArrowColor = lighten(@buttonArrowColor,20%,derived noAutoInverse) @@ -72,28 +97,28 @@ controlDkShadow = lighten($controlShadow,10%) #---- Button ---- -Button.background = #4c5052 +Button.background = @buttonBackground Button.hoverBackground = lighten($Button.background,3%,derived) Button.pressedBackground = lighten($Button.background,6%,derived) Button.selectedBackground = lighten($Button.background,10%,derived) -Button.selectedForeground = @foreground +Button.selectedForeground = $Button.foreground Button.disabledSelectedBackground = lighten($Button.background,3%,derived) -Button.borderColor = #5e6060 +Button.borderColor = tint($Button.background,10%) Button.disabledBorderColor = $Button.borderColor Button.focusedBorderColor = $Component.focusedBorderColor Button.hoverBorderColor = $Button.focusedBorderColor Button.innerFocusWidth = 1 -Button.default.background = #365880 -Button.default.foreground = #bbb +Button.default.background = @accentButtonDefaultBackground +Button.default.foreground = contrast($Button.default.background, @background, $Button.foreground, 25%) Button.default.hoverBackground = lighten($Button.default.background,3%,derived) Button.default.pressedBackground = lighten($Button.default.background,6%,derived) -Button.default.borderColor = #4c708c -Button.default.hoverBorderColor = #537699 -Button.default.focusedBorderColor = #537699 -Button.default.focusColor = #43688c +Button.default.borderColor = tint($Button.default.background,15%) +Button.default.hoverBorderColor = tint($Button.default.background,18%) +Button.default.focusedBorderColor = $Button.default.hoverBorderColor +Button.default.focusColor = lighten($Component.focusColor,3%) Button.default.boldText = true Button.toolbar.hoverBackground = lighten($Button.background,1%,derived) @@ -103,20 +128,22 @@ Button.toolbar.selectedBackground = lighten($Button.background,7%,derived) #---- CheckBox ---- +CheckBox.icon.focusWidth = 1 + # enabled -CheckBox.icon.borderColor = #6B6B6B -CheckBox.icon.background = #43494A -CheckBox.icon.selectedBorderColor = $CheckBox.icon.borderColor +CheckBox.icon.borderColor = tint($Component.borderColor,5%) +CheckBox.icon.background = tint(@background,5%) +CheckBox.icon.selectedBorderColor = tint($CheckBox.icon.borderColor,20%) CheckBox.icon.selectedBackground = $CheckBox.icon.background -CheckBox.icon.checkmarkColor = #A7A7A7 +CheckBox.icon.checkmarkColor = shade(@foreground,10%) # disabled -CheckBox.icon.disabledBorderColor = #545556 -CheckBox.icon.disabledBackground = @background -CheckBox.icon.disabledCheckmarkColor = #606060 +CheckBox.icon.disabledBorderColor = shade($CheckBox.icon.borderColor,20%) +CheckBox.icon.disabledBackground = @disabledBackground +CheckBox.icon.disabledCheckmarkColor = darken($CheckBox.icon.checkmarkColor,25%) # focused -CheckBox.icon.focusedBorderColor = #466D94 +CheckBox.icon.focusedBorderColor = $Component.focusedBorderColor CheckBox.icon.focusedBackground = fade($CheckBox.icon.focusedBorderColor,30%) # hover @@ -124,32 +151,35 @@ CheckBox.icon.hoverBorderColor = $CheckBox.icon.focusedBorderColor CheckBox.icon.hoverBackground = lighten($CheckBox.icon.background,3%,derived) # pressed +CheckBox.icon.pressedBorderColor = $CheckBox.icon.focusedBorderColor CheckBox.icon.pressedBackground = lighten($CheckBox.icon.background,6%,derived) -# used if CheckBox.icon.style = filled +# used if CheckBox.icon.style or RadioButton.icon.style = filled # enabled CheckBox.icon[filled].selectedBorderColor = $CheckBox.icon.checkmarkColor CheckBox.icon[filled].selectedBackground = $CheckBox.icon.checkmarkColor CheckBox.icon[filled].checkmarkColor = $CheckBox.icon.background # hover -CheckBox.icon[filled].selectedHoverBackground = darken($CheckBox.icon[filled].selectedBackground,3%,derived) +CheckBox.icon[filled].hoverSelectedBackground = darken($CheckBox.icon[filled].selectedBackground,3%,derived) # pressed -CheckBox.icon[filled].selectedPressedBackground = darken($CheckBox.icon[filled].selectedBackground,6%,derived) +CheckBox.icon[filled].pressedSelectedBackground = darken($CheckBox.icon[filled].selectedBackground,6%,derived) -#---- ComboBox ---- +#---- CheckBoxMenuItem ---- -ComboBox.buttonEditableBackground = darken($ComboBox.background,2%) +CheckBoxMenuItem.icon.checkmarkColor = @buttonArrowColor +CheckBoxMenuItem.icon.disabledCheckmarkColor = @buttonDisabledArrowColor #---- Component ---- -Component.borderColor = #646464 -Component.disabledBorderColor = #646464 -Component.focusedBorderColor = #466d94 -Component.focusColor = #3d6185 -Component.linkColor = #589df6 +Component.borderColor = tint(@background,19%) +Component.disabledBorderColor = $Component.borderColor +Component.focusedBorderColor = lighten($Component.focusColor,5%) +Component.focusColor = @accentFocusColor +Component.linkColor = @accentLinkColor +Component.accentColor = if(@accentColor, @accentColor, @accentBaseColor) Component.grayFilter = -20,-70,100 Component.error.borderColor = desaturate($Component.error.focusedBorderColor,25%) @@ -169,12 +199,18 @@ Desktop.background = #3E434C DesktopIcon.background = lighten($Desktop.background,10%,derived) +#---- HelpButton ---- + +HelpButton.questionMarkColor = shade(@foreground,10%) +HelpButton.disabledQuestionMarkColor = tint(@background,30%) + + #---- InternalFrame ---- InternalFrame.activeTitleBackground = darken(@background,10%) InternalFrame.activeTitleForeground = @foreground -InternalFrame.inactiveTitleBackground = darken(@background,5%) -InternalFrame.inactiveTitleForeground = @disabledText +InternalFrame.inactiveTitleBackground = lighten($InternalFrame.activeTitleBackground,5%) +InternalFrame.inactiveTitleForeground = @disabledForeground InternalFrame.activeBorderColor = darken(@background,7%) InternalFrame.inactiveBorderColor = darken(@background,3%) @@ -192,24 +228,19 @@ InternalFrame.inactiveDropShadowOpacity = 0.75 #---- Menu ---- -Menu.icon.arrowColor = #A7A7A7 -Menu.icon.disabledArrowColor = #606060 +Menu.icon.arrowColor = @buttonArrowColor +Menu.icon.disabledArrowColor = @buttonDisabledArrowColor #---- MenuBar ---- -MenuBar.borderColor = #515151 - - -#---- MenuItemCheckBox ---- - -MenuItemCheckBox.icon.checkmarkColor = #A7A7A7 -MenuItemCheckBox.icon.disabledCheckmarkColor = #606060 +MenuBar.borderColor = $Separator.foreground #---- PasswordField ---- PasswordField.capsLockIconColor = #ffffff64 +PasswordField.revealIconColor = @foreground #---- Popup ---- @@ -220,15 +251,16 @@ Popup.dropShadowOpacity = 0.25 #---- PopupMenu ---- -PopupMenu.borderColor = #5e5e5e +PopupMenu.borderColor = tint(@background,17%) +PopupMenu.hoverScrollArrowBackground = lighten(@background,5%) #---- ProgressBar ---- -ProgressBar.background = #555 -ProgressBar.foreground = #4A88C7 -ProgressBar.selectionForeground = @foreground +ProgressBar.background = lighten(@background,8%) +ProgressBar.foreground = @accentSliderColor ProgressBar.selectionBackground = @foreground +ProgressBar.selectionForeground = contrast($ProgressBar.foreground, @background, @foreground, 25%) #---- RootPane ---- @@ -250,40 +282,40 @@ ScrollBar.pressedButtonBackground = lighten(@background,10%,derived noAutoInvers #---- Separator ---- -Separator.foreground = #515151 +Separator.foreground = tint(@background,10%) #---- Slider ---- -Slider.trackValueColor = #4A88C7 -Slider.trackColor = #646464 +Slider.trackValueColor = @accentSliderColor +Slider.trackColor = lighten(@background,15%) Slider.thumbColor = $Slider.trackValueColor -Slider.tickColor = #888 -Slider.focusedColor = fade($Component.focusColor,70%,derived) +Slider.tickColor = @disabledForeground +Slider.focusedColor = fade(changeLightness($Component.focusColor,60%,derived),30%,derived) Slider.hoverThumbColor = lighten($Slider.thumbColor,5%,derived) Slider.pressedThumbColor = lighten($Slider.thumbColor,8%,derived) -Slider.disabledTrackColor = #4c5052 +Slider.disabledTrackColor = lighten(@background,10%) Slider.disabledThumbColor = $Slider.disabledTrackColor #---- SplitPane ---- -SplitPaneDivider.draggingColor = #646464 +SplitPaneDivider.draggingColor = $Component.borderColor #---- TabbedPane ---- -TabbedPane.underlineColor = #4A88C7 -TabbedPane.disabledUnderlineColor = #7a7a7a +TabbedPane.underlineColor = @accentUnderlineColor +TabbedPane.disabledUnderlineColor = lighten(@background,23%) TabbedPane.hoverColor = darken($TabbedPane.background,5%,derived noAutoInverse) -TabbedPane.focusColor = #3d4b5c -TabbedPane.contentAreaColor = #646464 +TabbedPane.focusColor = mix(@selectionBackground,$TabbedPane.background,25%) +TabbedPane.contentAreaColor = $Component.borderColor TabbedPane.buttonHoverBackground = darken($TabbedPane.background,5%,derived noAutoInverse) TabbedPane.buttonPressedBackground = darken($TabbedPane.background,8%,derived noAutoInverse) TabbedPane.closeBackground = null -TabbedPane.closeForeground = @disabledText +TabbedPane.closeForeground = @disabledForeground TabbedPane.closeHoverBackground = lighten($TabbedPane.background,5%,derived) TabbedPane.closeHoverForeground = @foreground TabbedPane.closePressedBackground = lighten($TabbedPane.background,10%,derived) @@ -304,8 +336,8 @@ TableHeader.bottomSeparatorColor = $TableHeader.separatorColor #---- TitlePane ---- TitlePane.embeddedForeground = darken($TitlePane.foreground,15%) -TitlePane.buttonHoverBackground = lighten($TitlePane.background,10%,derived) -TitlePane.buttonPressedBackground = lighten($TitlePane.background,20%,derived) +TitlePane.buttonHoverBackground = lighten($TitlePane.background,15%,derived) +TitlePane.buttonPressedBackground = lighten($TitlePane.background,10%,derived) #---- ToggleButton ---- @@ -319,9 +351,24 @@ ToggleButton.toolbar.selectedBackground = lighten($ToggleButton.background,7%,de #---- ToolTip ---- ToolTip.border = 4,6,4,6 -ToolTip.background = #1e2123 +ToolTip.background = shade(@background,50%) #---- Tree ---- Tree.hash = lighten($Tree.background,5%) + + + +#---- Styles ------------------------------------------------------------------ + +#---- inTextField ---- +# for leading/trailing components in text fields + +[style]Button.inTextField = \ + focusable: false; \ + toolbar.margin: 1,1,1,1; \ + toolbar.spacingInsets: 1,1,1,1; \ + toolbar.hoverBackground: lighten($TextField.background,5%); \ + toolbar.pressedBackground: lighten($TextField.background,10%); \ + toolbar.selectedBackground: lighten($TextField.background,15%) diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatIntelliJLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatIntelliJLaf.properties index 550459f4..5faff48b 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatIntelliJLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatIntelliJLaf.properties @@ -24,24 +24,29 @@ # # NOTE: Avoid copying the whole content of this file to own properties files. # This will make upgrading to newer FlatLaf versions complex and error-prone. -# Instead copy and modify only those properties that you need to alter. +# Instead, copy and modify only those properties that you need to alter. # # Colors and style mostly based on IntelliJ theme from IntelliJ IDEA Community Edition, # which is licensed under the Apache 2.0 license. Copyright 2000-2019 JetBrains s.r.o. # See: https://github.com/JetBrains/intellij-community/ +#---- variables ---- + +# accent colors (blueish) +@accentFocusColor = if(@accentColor, lighten(@accentColor,20%), lighten(@accentBaseColor,31%)) +@accentButtonDefaultBackground = if(@accentColor, @accentColor, tint(@accentBaseColor,15%)) + #---- Button ---- Button.focusedBackground = null -Button.default.background = #4D8AC9 -Button.default.foreground = #fff +Button.default.background = @accentButtonDefaultBackground +Button.default.foreground = contrast($Button.default.background, tint($Button.foreground,50%), #fff, 50%) Button.default.focusedBackground = null -Button.default.borderColor = #3D75B2 -Button.default.hoverBorderColor = #A9C9F5 -Button.default.focusedBorderColor = #A9C9F5 -Button.default.focusColor = #97c3f3 +Button.default.borderColor = shade($Button.default.background,15%) +Button.default.hoverBorderColor = tint($Button.default.background,50%) +Button.default.focusedBorderColor = $Button.default.hoverBorderColor Button.default.boldText = true Button.default.borderWidth = 1 @@ -49,6 +54,8 @@ Button.default.borderWidth = 1 #---- CheckBox ---- CheckBox.icon.style = filled +CheckBox.icon.focusWidth = null +CheckBox.icon.focusedBackground = null #---- Component ---- @@ -57,3 +64,8 @@ Component.focusWidth = 2 Component.innerFocusWidth = 0 Component.innerOutlineWidth = 0 Component.arrowType = triangle + + +#---- RadioButton ---- + +RadioButton.icon.style = filled diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties index 52e8bff9..eaf3b1d9 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties @@ -23,9 +23,71 @@ # # NOTE: Avoid copying the whole content of this file to own properties files. # This will make upgrading to newer FlatLaf versions complex and error-prone. -# Instead copy and modify only those properties that you need to alter. +# Instead, copy and modify only those properties that you need to alter. # +#---- typography / fonts ---- + +# headings +h00.font = +24 +h0.font = +18 +h1.font = +12 $semibold.font +h2.font = +6 $semibold.font +h3.font = +3 $semibold.font +h4.font = bold + +h1.regular.font = +12 +h2.regular.font = +6 +h3.regular.font = +3 + +# text +large.font = +2 +medium.font = -1 +small.font = -2 +mini.font = -3 + +# default font +#defaultFont = ... + +# font weights +# Windows +[win]light.font = "Segoe UI Light" +[win]semibold.font = "Segoe UI Semibold" +# macOS +[mac]light.font = "HelveticaNeue-Thin" +[mac]semibold.font = "HelveticaNeue-Medium" +# Linux +[linux]light.font = "Lato Light", "Ubuntu Light", "Cantarell Light" +[linux]semibold.font = "Lato Semibold", "Ubuntu Medium", "Montserrat SemiBold" +# fallback for unknown platform +light.font = +0 +semibold.font = +0 + +# monospaced +[win]monospaced.font = Consolas, "Courier New", Monospaced +[mac]monospaced.font = Menlo, Monospaced +[linux]monospaced.font = "Liberation Mono", "Ubuntu Mono", Monospaced +monospaced.font = Monospaced + +# styles +[style].h00 = font: $h00.font +[style].h0 = font: $h0.font +[style].h1 = font: $h1.font +[style].h2 = font: $h2.font +[style].h3 = font: $h3.font +[style].h4 = font: $h4.font +[style].h1.regular = font: $h1.regular.font +[style].h2.regular = font: $h2.regular.font +[style].h3.regular = font: $h3.regular.font +[style].large = font: $large.font +[style].medium = font: $medium.font +[style].small = font: $small.font +[style].mini = font: $mini.font +[style].light = font: $light.font +[style].semibold = font: $semibold.font +[style].monospaced = font: $monospaced.font + + #---- UI delegates ---- ButtonUI = com.formdev.flatlaf.ui.FlatButtonUI @@ -75,7 +137,7 @@ ViewportUI = com.formdev.flatlaf.ui.FlatViewportUI #---- variables ---- -@textComponentMargin = 2,6,2,6 +@componentMargin = 2,6,2,6 @menuItemMargin = 3,6,3,6 @@ -83,21 +145,21 @@ ViewportUI = com.formdev.flatlaf.ui.FlatViewportUI *.background = @background *.foreground = @foreground -*.caretForeground = @foreground -*.inactiveBackground = @background -*.inactiveForeground = @disabledText +*.disabledBackground = @disabledBackground +*.disabledForeground = @disabledForeground +*.disabledText = @disabledForeground +*.inactiveBackground = @disabledBackground +*.inactiveForeground = @disabledForeground *.selectionBackground = @selectionBackground *.selectionForeground = @selectionForeground -*.disabledBackground = @background -*.disabledForeground = @disabledText -*.disabledText = @disabledText +*.caretForeground = @foreground *.acceleratorForeground = @menuAcceleratorForeground *.acceleratorSelectionForeground = @menuAcceleratorSelectionForeground #---- system colors ---- -desktop = @textComponentBackground +desktop = @componentBackground activeCaptionText = @foreground activeCaptionBorder = $activeCaption inactiveCaptionText = @foreground @@ -107,11 +169,11 @@ windowBorder = @foreground windowText = @foreground menu = @background menuText = @foreground -text = @textComponentBackground +text = @componentBackground textText = @foreground textHighlight = @selectionBackground textHighlightText = @selectionForeground -textInactiveText = @disabledText +textInactiveText = @disabledForeground control = @background controlText = @foreground controlShadow = $Component.borderColor @@ -165,6 +227,7 @@ Button.defaultButtonFollowsFocus = false Button.borderWidth = 1 Button.default.borderWidth = 1 +# for buttons in toolbars Button.toolbar.margin = 3,3,3,3 Button.toolbar.spacingInsets = 1,2,1,2 @@ -205,15 +268,18 @@ ColorChooser.swatchesDefaultRecentColor = $control #---- ComboBox ---- ComboBox.border = com.formdev.flatlaf.ui.FlatRoundBorder -ComboBox.padding = 2,6,2,6 +ComboBox.padding = @componentMargin ComboBox.minimumWidth = 72 ComboBox.editorColumns = 0 ComboBox.maximumRowCount = 15 [mac]ComboBox.showPopupOnNavigation = true # allowed values: auto, button or none ComboBox.buttonStyle = auto -ComboBox.background = @textComponentBackground -ComboBox.buttonBackground = @textComponentBackground +ComboBox.background = @componentBackground +ComboBox.buttonBackground = $ComboBox.background +ComboBox.buttonEditableBackground = darken($ComboBox.background,2%) +ComboBox.buttonSeparatorColor = $Component.borderColor +ComboBox.buttonDisabledSeparatorColor = $Component.disabledBorderColor ComboBox.buttonArrowColor = @buttonArrowColor ComboBox.buttonDisabledArrowColor = @buttonDisabledArrowColor ComboBox.buttonHoverArrowColor = @buttonHoverArrowColor @@ -223,8 +289,9 @@ ComboBox.buttonPressedArrowColor = @buttonPressedArrowColor #---- Component ---- Component.focusWidth = 0 -Component.innerFocusWidth = {float}0.5 -Component.innerOutlineWidth = {float}1 +Component.innerFocusWidth = 0.5 +Component.innerOutlineWidth = 1 +Component.borderWidth = 1 Component.arc = 5 Component.minimumWidth = 64 # allowed values: chevron or triangle @@ -243,8 +310,8 @@ DesktopIcon.closeIcon = com.formdev.flatlaf.icons.FlatInternalFrameCloseIcon #---- EditorPane ---- EditorPane.border = com.formdev.flatlaf.ui.FlatMarginBorder -EditorPane.margin = @textComponentMargin -EditorPane.background = @textComponentBackground +EditorPane.margin = @componentMargin +EditorPane.background = @componentBackground #---- FileChooser ---- @@ -265,30 +332,30 @@ FileView.fileIcon = com.formdev.flatlaf.icons.FlatFileViewFileIcon FileView.computerIcon = com.formdev.flatlaf.icons.FlatFileViewComputerIcon FileView.hardDriveIcon = com.formdev.flatlaf.icons.FlatFileViewHardDriveIcon FileView.floppyDriveIcon = com.formdev.flatlaf.icons.FlatFileViewFloppyDriveIcon +FileView.fullRowSelection = true #---- FormattedTextField ---- FormattedTextField.border = com.formdev.flatlaf.ui.FlatTextBorder -FormattedTextField.margin = @textComponentMargin -FormattedTextField.background = @textComponentBackground -FormattedTextField.placeholderForeground = @disabledText +FormattedTextField.margin = @componentMargin +FormattedTextField.background = @componentBackground +FormattedTextField.placeholderForeground = @disabledForeground +FormattedTextField.iconTextGap = 4 #---- HelpButton ---- HelpButton.icon = com.formdev.flatlaf.icons.FlatHelpButtonIcon -HelpButton.borderColor = $CheckBox.icon.borderColor -HelpButton.disabledBorderColor = $CheckBox.icon.disabledBorderColor -HelpButton.focusedBorderColor = $CheckBox.icon.focusedBorderColor -HelpButton.hoverBorderColor = $?CheckBox.icon.hoverBorderColor -HelpButton.background = $CheckBox.icon.background -HelpButton.disabledBackground = $CheckBox.icon.disabledBackground +HelpButton.borderColor = $Button.borderColor +HelpButton.disabledBorderColor = $Button.disabledBorderColor +HelpButton.focusedBorderColor = $Button.focusedBorderColor +HelpButton.hoverBorderColor = $?Button.hoverBorderColor +HelpButton.background = $Button.background +HelpButton.disabledBackground = $Button.disabledBackground HelpButton.focusedBackground = $?Button.focusedBackground -HelpButton.hoverBackground = $?CheckBox.icon.hoverBackground -HelpButton.pressedBackground = $?CheckBox.icon.pressedBackground -HelpButton.questionMarkColor = $CheckBox.icon.checkmarkColor -HelpButton.disabledQuestionMarkColor = $CheckBox.icon.disabledCheckmarkColor +HelpButton.hoverBackground = $?Button.hoverBackground +HelpButton.pressedBackground = $?Button.pressedBackground HelpButton.borderWidth = $?Button.borderWidth HelpButton.innerFocusWidth = $?Button.innerFocusWidth @@ -327,7 +394,7 @@ List.cellFocusColor = @cellFocusColor List.cellNoFocusBorder = com.formdev.flatlaf.ui.FlatListCellBorder$Default List.focusCellHighlightBorder = com.formdev.flatlaf.ui.FlatListCellBorder$Focused List.focusSelectedCellHighlightBorder = com.formdev.flatlaf.ui.FlatListCellBorder$Selected -List.background = @textComponentBackground +List.background = @componentBackground List.selectionInactiveBackground = @selectionInactiveBackground List.selectionInactiveForeground = @selectionInactiveForeground List.dropCellBackground = @dropCellBackground @@ -365,6 +432,7 @@ MenuItem.checkIcon = null MenuItem.margin = @menuItemMargin MenuItem.opaque = false MenuItem.borderPainted = true +MenuItem.verticallyAlignText = true MenuItem.background = @menuBackground MenuItem.checkBackground = @menuCheckBackground MenuItem.checkMargins = 2,2,2,2 @@ -374,13 +442,13 @@ MenuItem.iconTextGap = 6 MenuItem.textAcceleratorGap = 24 MenuItem.textNoAcceleratorGap = 6 MenuItem.acceleratorArrowGap = 2 -MenuItem.acceleratorDelimiter = - +MenuItem.acceleratorDelimiter = + [mac]MenuItem.acceleratorDelimiter = # for MenuItem.selectionType = underline MenuItem.underlineSelectionBackground = @menuHoverBackground MenuItem.underlineSelectionCheckBackground = @menuCheckBackground -MenuItem.underlineSelectionColor = $TabbedPane.underlineColor +MenuItem.underlineSelectionColor = @accentUnderlineColor MenuItem.underlineSelectionHeight = 3 @@ -391,6 +459,7 @@ OptionPane.messageAreaBorder = 0,0,0,0 OptionPane.buttonAreaBorder = 12,0,0,0 OptionPane.messageForeground = null +OptionPane.showIcon = false OptionPane.maxCharactersPerLine = 80 OptionPane.iconMessageGap = 16 OptionPane.messagePadding = 3 @@ -410,12 +479,15 @@ OptionPane.warningIcon = com.formdev.flatlaf.icons.FlatOptionPaneWarningIcon #---- PasswordField ---- PasswordField.border = com.formdev.flatlaf.ui.FlatTextBorder -PasswordField.margin = @textComponentMargin -PasswordField.background = @textComponentBackground -PasswordField.placeholderForeground = @disabledText +PasswordField.margin = @componentMargin +PasswordField.background = @componentBackground +PasswordField.placeholderForeground = @disabledForeground +PasswordField.iconTextGap = 4 PasswordField.echoChar = \u2022 PasswordField.showCapsLock = true +PasswordField.showRevealButton = false PasswordField.capsLockIcon = com.formdev.flatlaf.icons.FlatCapsLockIcon +PasswordField.revealIcon = com.formdev.flatlaf.icons.FlatRevealIcon #---- Popup ---- @@ -429,6 +501,7 @@ Popup.dropShadowInsets = -4,-4,4,4 PopupMenu.border = com.formdev.flatlaf.ui.FlatPopupMenuBorder PopupMenu.borderInsets = 4,1,4,1 PopupMenu.background = @menuBackground +PopupMenu.scrollArrowColor = @buttonArrowColor #---- PopupMenuSeparator ---- @@ -446,6 +519,7 @@ ProgressBar.horizontalSize = 146,4 ProgressBar.verticalSize = 4,146 ProgressBar.cycleTime = 4000 ProgressBar.repaintInterval = 15 +ProgressBar.font = -2 #---- RadioButton ---- @@ -482,6 +556,7 @@ RootPane.honorDialogMinimumSizeOnResize = true #---- ScrollBar ---- ScrollBar.width = 10 +ScrollBar.minimumButtonSize = 12,12 ScrollBar.minimumThumbSize = 10,10 ScrollBar.maximumThumbSize = 100000,100000 ScrollBar.trackInsets = 0,0,0,0 @@ -514,6 +589,17 @@ ScrollPane.fillUpperCorner = true ScrollPane.smoothScrolling = true +#---- SearchField ---- + +SearchField.searchIconColor = fade(Actions.GreyInline,90%,lazy) +SearchField.searchIconHoverColor = fade(Actions.GreyInline,70%,lazy) +SearchField.searchIconPressedColor = fade(Actions.GreyInline,50%,lazy) + +SearchField.clearIconColor = fade(Actions.GreyInline,50%,lazy) +SearchField.clearIconHoverColor = $SearchField.clearIconColor +SearchField.clearIconPressedColor = fade(Actions.GreyInline,80%,lazy) + + #---- Separator ---- Separator.height = 3 @@ -532,13 +618,15 @@ Slider.focusWidth = 4 #---- Spinner ---- Spinner.border = com.formdev.flatlaf.ui.FlatRoundBorder -Spinner.background = @textComponentBackground -Spinner.buttonBackground = $ComboBox.buttonEditableBackground +Spinner.background = @componentBackground +Spinner.buttonBackground = darken($Spinner.background,2%) +Spinner.buttonSeparatorColor = $Component.borderColor +Spinner.buttonDisabledSeparatorColor = $Component.disabledBorderColor Spinner.buttonArrowColor = @buttonArrowColor Spinner.buttonDisabledArrowColor = @buttonDisabledArrowColor Spinner.buttonHoverArrowColor = @buttonHoverArrowColor Spinner.buttonPressedArrowColor = @buttonPressedArrowColor -Spinner.padding = @textComponentMargin +Spinner.padding = @componentMargin Spinner.editorBorderPainted = false # allowed values: button or none Spinner.buttonStyle = button @@ -546,7 +634,7 @@ Spinner.buttonStyle = button #---- SplitPane ---- -SplitPane.dividerSize = {integer}5 +SplitPane.dividerSize = 5 SplitPane.continuousLayout = true SplitPane.border = null SplitPane.centerOneTouchButtons = true @@ -561,7 +649,7 @@ SplitPaneDivider.oneTouchPressedArrowColor = @buttonPressedArrowColor SplitPaneDivider.style = grip SplitPaneDivider.gripColor = @icon SplitPaneDivider.gripDotCount = 3 -SplitPaneDivider.gripDotSize = {integer}3 +SplitPaneDivider.gripDotSize = 3 SplitPaneDivider.gripGap = 2 @@ -569,6 +657,7 @@ SplitPaneDivider.gripGap = 2 TabbedPane.tabHeight = 32 TabbedPane.tabSelectionHeight = 3 +TabbedPane.cardTabSelectionHeight = 2 TabbedPane.contentSeparatorHeight = 1 TabbedPane.showTabSeparators = false TabbedPane.tabSeparatorsFullHeight = false @@ -578,7 +667,7 @@ TabbedPane.tabAreaInsets = 0,0,0,0 TabbedPane.selectedTabPadInsets = 0,0,0,0 TabbedPane.tabRunOverlay = 0 TabbedPane.tabsOverlapBorder = false -TabbedPane.disabledForeground = @disabledText +TabbedPane.disabledForeground = @disabledForeground TabbedPane.shadow = @background TabbedPane.contentBorderInsets = null # allowed values: moreTabsButton or arrowButtons @@ -590,6 +679,9 @@ TabbedPane.tabAlignment = center # allowed values: preferred, equal or compact TabbedPane.tabWidthMode = preferred +# allowed values: underlined or card +TabbedPane.tabType = underlined + # allowed values: chevron or triangle TabbedPane.arrowType = chevron TabbedPane.buttonInsets = 2,1,2,1 @@ -607,9 +699,9 @@ TabbedPane.scrollButtonsPlacement = both TabbedPane.closeIcon = com.formdev.flatlaf.icons.FlatTabbedPaneCloseIcon TabbedPane.closeSize = 16,16 TabbedPane.closeArc = 4 -TabbedPane.closeCrossPlainSize = {float}7.5 +TabbedPane.closeCrossPlainSize = 7.5 TabbedPane.closeCrossFilledSize = $TabbedPane.closeCrossPlainSize -TabbedPane.closeCrossLineWidth = {float}1 +TabbedPane.closeCrossLineWidth = 1 #---- Table ---- @@ -617,8 +709,9 @@ TabbedPane.closeCrossLineWidth = {float}1 Table.rowHeight = 20 Table.showHorizontalLines = false Table.showVerticalLines = false +Table.showTrailingVerticalLine = false Table.consistentHomeEndKeyBehavior = true -Table.intercellSpacing = {dimension}0,0 +Table.intercellSpacing = 0,0 Table.scrollPaneBorder = com.formdev.flatlaf.ui.FlatBorder Table.ascendingSortIcon = com.formdev.flatlaf.icons.FlatAscendingSortIcon Table.descendingSortIcon = com.formdev.flatlaf.icons.FlatDescendingSortIcon @@ -628,9 +721,9 @@ Table.cellFocusColor = @cellFocusColor Table.cellNoFocusBorder = com.formdev.flatlaf.ui.FlatTableCellBorder$Default Table.focusCellHighlightBorder = com.formdev.flatlaf.ui.FlatTableCellBorder$Focused Table.focusSelectedCellHighlightBorder = com.formdev.flatlaf.ui.FlatTableCellBorder$Selected -Table.focusCellBackground = @textComponentBackground -Table.focusCellForeground = @foreground -Table.background = @textComponentBackground +Table.focusCellBackground = $Table.background +Table.focusCellForeground = $Table.foreground +Table.background = @componentBackground Table.selectionInactiveBackground = @selectionInactiveBackground Table.selectionInactiveForeground = @selectionInactiveForeground Table.dropCellBackground = @dropCellBackground @@ -645,14 +738,15 @@ TableHeader.height = 25 TableHeader.cellBorder = com.formdev.flatlaf.ui.FlatTableHeaderBorder TableHeader.cellMargins = 2,3,2,3 TableHeader.focusCellBackground = $TableHeader.background -TableHeader.background = @textComponentBackground +TableHeader.background = @componentBackground +TableHeader.showTrailingVerticalLine = false #---- TextArea ---- TextArea.border = com.formdev.flatlaf.ui.FlatMarginBorder -TextArea.margin = @textComponentMargin -TextArea.background = @textComponentBackground +TextArea.margin = @componentMargin +TextArea.background = @componentBackground #---- TextComponent ---- @@ -666,16 +760,17 @@ TextComponent.arc = 0 #---- TextField ---- TextField.border = com.formdev.flatlaf.ui.FlatTextBorder -TextField.margin = @textComponentMargin -TextField.background = @textComponentBackground -TextField.placeholderForeground = @disabledText +TextField.margin = @componentMargin +TextField.background = @componentBackground +TextField.placeholderForeground = @disabledForeground +TextField.iconTextGap = 4 #---- TextPane ---- TextPane.border = com.formdev.flatlaf.ui.FlatMarginBorder -TextPane.margin = @textComponentMargin -TextPane.background = @textComponentBackground +TextPane.margin = @componentMargin +TextPane.background = @componentBackground #---- TitledBorder ---- @@ -688,7 +783,9 @@ TitledBorder.border = 1,1,1,1,$Separator.foreground TitlePane.useWindowDecorations = true TitlePane.menuBarEmbedded = true -TitlePane.unifiedBackground = false +TitlePane.unifiedBackground = true +TitlePane.showIcon = true +TitlePane.noIconLeftGap = 8 TitlePane.iconSize = 16,16 TitlePane.iconMargins = 3,8,3,8 TitlePane.titleMargins = 3,0,3,0 @@ -705,24 +802,24 @@ TitlePane.restoreIcon = com.formdev.flatlaf.icons.FlatWindowRestoreIcon TitlePane.background = $MenuBar.background TitlePane.inactiveBackground = $TitlePane.background TitlePane.foreground = @foreground -TitlePane.inactiveForeground = @disabledText +TitlePane.inactiveForeground = @disabledForeground -TitlePane.closeHoverBackground = #e81123 -TitlePane.closePressedBackground = fade($TitlePane.closeHoverBackground,60%) +TitlePane.closeHoverBackground = #c42b1c +TitlePane.closePressedBackground = fade($TitlePane.closeHoverBackground,90%) TitlePane.closeHoverForeground = #fff TitlePane.closePressedForeground = #fff #---- ToggleButton ---- -ToggleButton.border = com.formdev.flatlaf.ui.FlatButtonBorder -ToggleButton.margin = 2,14,2,14 -ToggleButton.iconTextGap = 4 -ToggleButton.rollover = true +ToggleButton.border = $Button.border +ToggleButton.margin = $Button.margin +ToggleButton.iconTextGap = $Button.iconTextGap +ToggleButton.rollover = $Button.rollover ToggleButton.background = $Button.background ToggleButton.pressedBackground = $Button.pressedBackground -ToggleButton.selectedForeground = @foreground +ToggleButton.selectedForeground = $ToggleButton.foreground ToggleButton.toolbar.hoverBackground = $Button.toolbar.hoverBackground ToggleButton.toolbar.pressedBackground = $Button.toolbar.pressedBackground @@ -741,16 +838,21 @@ ToggleButton.tab.focusBackground = $TabbedPane.focusColor ToolBar.border = com.formdev.flatlaf.ui.FlatToolBarBorder ToolBar.borderMargins = 2,2,2,2 ToolBar.isRollover = true +ToolBar.focusableButtons = false +ToolBar.arrowKeysOnlyNavigation = true +ToolBar.floatable = false ToolBar.gripColor = @icon -ToolBar.dockingBackground = @background -ToolBar.dockingForeground = @foreground -ToolBar.floatingBackground = @background -ToolBar.floatingForeground = @disabledText +ToolBar.dockingBackground = darken($ToolBar.background,5%) +ToolBar.dockingForeground = $Component.borderColor +ToolBar.floatingBackground = $ToolBar.background +ToolBar.floatingForeground = $Component.borderColor ToolBar.separatorSize = null ToolBar.separatorWidth = 7 ToolBar.separatorColor = $Separator.foreground +# not used in FlatLaf; intended for custom components in toolbar +# https://github.com/JFormDesigner/FlatLaf/issues/56#issuecomment-586297814 ToolBar.spacingBorder = $Button.toolbar.spacingInsets @@ -763,7 +865,7 @@ ToolTipManager.enableToolTipMode = activeApplication Tree.border = 1,1,1,1 Tree.editorBorder = 1,1,1,1,@cellFocusColor -Tree.background = @textComponentBackground +Tree.background = @componentBackground Tree.selectionInactiveBackground = @selectionInactiveBackground Tree.selectionInactiveForeground = @selectionInactiveForeground Tree.textBackground = $Tree.background @@ -793,3 +895,32 @@ Tree.icon.collapsedColor = @icon Tree.icon.leafColor = @icon Tree.icon.closedColor = @icon Tree.icon.openColor = @icon + + + +#---- Styles ------------------------------------------------------------------ + +#---- inTextField ---- +# for leading/trailing components in text fields + +[style]ToggleButton.inTextField = $[style]Button.inTextField + +[style]ToolBar.inTextField = \ + floatable: false; \ + opaque: false; \ + borderMargins: 0,0,0,0 + +[style]ToolBarSeparator.inTextField = \ + separatorWidth: 3 + + +#---- clearButton ---- +# for clear/cancel button in text fields + +[style]Button.clearButton = \ + icon: com.formdev.flatlaf.icons.FlatClearIcon; \ + focusable: false; \ + toolbar.margin: 1,1,1,1; \ + toolbar.spacingInsets: 1,1,1,1; \ + toolbar.hoverBackground: null; \ + toolbar.pressedBackground: null diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties index d7fbce53..488f991c 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLightLaf.properties @@ -23,7 +23,7 @@ # # NOTE: Avoid copying the whole content of this file to own properties files. # This will make upgrading to newer FlatLaf versions complex and error-prone. -# Instead copy and modify only those properties that you need to alter. +# Instead, copy and modify only those properties that you need to alter. # # Colors and style mostly based on IntelliJ theme from IntelliJ IDEA Community Edition, @@ -32,24 +32,50 @@ #---- variables ---- +# general background and foreground (text color) @background = #f2f2f2 @foreground = #000 -@selectionBackground = #2675BF -@selectionForeground = #fff -@selectionInactiveBackground = #d4d4d4 +@disabledBackground = @background +@disabledForeground = tint(@foreground,55%) + +# component background +@buttonBackground = lighten(@background,5%) +@componentBackground = lighten(@background,5%) +@menuBackground = lighten(@background,5%) + +# selection +@selectionBackground = @accentSelectionBackground +@selectionForeground = contrast(@selectionBackground, @foreground, #fff) +@selectionInactiveBackground = shade(@background,13%) @selectionInactiveForeground = @foreground -@disabledText = #8C8C8C -@textComponentBackground = #fff -@menuBackground = #fff + +# menu @menuHoverBackground = darken(@menuBackground,10%,derived) @menuCheckBackground = lighten(@selectionBackground,40%,derived noAutoInverse) @menuAcceleratorForeground = lighten(@foreground,30%) @menuAcceleratorSelectionForeground = @selectionForeground + +# misc @cellFocusColor = #000 -@icon = #afafaf +@icon = shade(@background,27%) + +# accent colors (blueish) +# set @accentColor to use single accent color or +# modify @accentBaseColor to use variations of accent base color +@accentColor = null +@accentBaseColor = #2675BF +@accentBase2Color = lighten(saturate(@accentBaseColor,10%),6%) +# accent color variations +@accentCheckmarkColor = if(@accentColor, @accentColor, tint(@accentBase2Color,20%)) +@accentFocusColor = if(@accentColor, @accentColor, lighten(@accentBaseColor,31%)) +@accentLinkColor = if(@accentColor, @accentColor, darken(@accentBaseColor,3%)) +@accentSelectionBackground = if(@accentColor, @accentColor, @accentBaseColor) +@accentSliderColor = if(@accentColor, @accentColor, @accentBase2Color) +@accentUnderlineColor = if(@accentColor, @accentColor, tint(@accentBaseColor,10%)) +@accentButtonDefaultBorderColor = if(@accentColor, @accentColor, tint(@accentBase2Color,20%)) # for buttons within components (e.g. combobox or spinner) -@buttonArrowColor = #666 +@buttonArrowColor = tint(@foreground,40%) @buttonDisabledArrowColor = lighten(@buttonArrowColor,25%) @buttonHoverArrowColor = lighten(@buttonArrowColor,20%,derived noAutoInverse) @buttonPressedArrowColor = lighten(@buttonArrowColor,30%,derived noAutoInverse) @@ -72,12 +98,12 @@ controlDkShadow = darken($controlShadow,15%) #---- Button ---- -Button.background = #fff -Button.focusedBackground = #e3f1fa +Button.background = @buttonBackground +Button.focusedBackground = changeLightness($Component.focusColor,95%) Button.hoverBackground = darken($Button.background,3%,derived) Button.pressedBackground = darken($Button.background,10%,derived) Button.selectedBackground = darken($Button.background,20%,derived) -Button.selectedForeground = @foreground +Button.selectedForeground = $Button.foreground Button.disabledSelectedBackground = darken($Button.background,13%,derived) Button.borderColor = $Component.borderColor @@ -88,11 +114,11 @@ Button.hoverBorderColor = $Button.focusedBorderColor Button.innerFocusWidth = 0 Button.default.background = $Button.background -Button.default.foreground = @foreground +Button.default.foreground = $Button.foreground Button.default.focusedBackground = $Button.focusedBackground Button.default.hoverBackground = darken($Button.default.background,3%,derived) Button.default.pressedBackground = darken($Button.default.background,10%,derived) -Button.default.borderColor = #4F9EE3 +Button.default.borderColor = @accentButtonDefaultBorderColor Button.default.hoverBorderColor = $Button.hoverBorderColor Button.default.focusedBorderColor = $Button.focusedBorderColor Button.default.focusColor = $Component.focusColor @@ -105,57 +131,62 @@ Button.toolbar.selectedBackground = $Button.selectedBackground #---- CheckBox ---- +CheckBox.icon.focusWidth = 1 + # enabled -CheckBox.icon.borderColor = #b0b0b0 -CheckBox.icon.background = #fff -CheckBox.icon.selectedBorderColor = $CheckBox.icon.borderColor +CheckBox.icon.borderColor = shade($Component.borderColor,10%) +CheckBox.icon.background = @buttonBackground +CheckBox.icon.selectedBorderColor = $CheckBox.icon.checkmarkColor CheckBox.icon.selectedBackground = $CheckBox.icon.background -CheckBox.icon.checkmarkColor = #4F9EE3 +CheckBox.icon.checkmarkColor = @accentCheckmarkColor # disabled -CheckBox.icon.disabledBorderColor = #BDBDBD -CheckBox.icon.disabledBackground = @background -CheckBox.icon.disabledCheckmarkColor = #ABABAB +CheckBox.icon.disabledBorderColor = tint($CheckBox.icon.borderColor,20%) +CheckBox.icon.disabledBackground = @disabledBackground +CheckBox.icon.disabledCheckmarkColor = lighten(changeSaturation($CheckBox.icon.checkmarkColor,0%),5%) # focused -CheckBox.icon.focusedBorderColor = #7B9FC7 -CheckBox.icon.focusedBackground = $Button.focusedBackground +CheckBox.icon.focusedBorderColor = shade($Component.focusedBorderColor,10%) +CheckBox.icon.focusedBackground = changeLightness($Component.focusColor,95%) # hover CheckBox.icon.hoverBorderColor = $CheckBox.icon.focusedBorderColor -CheckBox.icon.hoverBackground = $Button.hoverBackground +CheckBox.icon.hoverBackground = darken($CheckBox.icon.background,3%,derived) # pressed -CheckBox.icon.pressedBackground = $Button.pressedBackground +CheckBox.icon.pressedBorderColor = $CheckBox.icon.focusedBorderColor +CheckBox.icon.pressedBackground = darken($CheckBox.icon.background,10%,derived) -# used if CheckBox.icon.style = filled +# used if CheckBox.icon.style or RadioButton.icon.style = filled # enabled -CheckBox.icon[filled].selectedBorderColor = #4B97D9 -CheckBox.icon[filled].selectedBackground = #4F9EE3 -CheckBox.icon[filled].checkmarkColor = #fff +CheckBox.icon[filled].selectedBorderColor = shade($CheckBox.icon[filled].selectedBackground,5%) +CheckBox.icon[filled].selectedBackground = @accentCheckmarkColor +CheckBox.icon[filled].checkmarkColor = @buttonBackground # focused -CheckBox.icon[filled].selectedFocusedBorderColor = #ACCFF7 -CheckBox.icon[filled].selectedFocusedBackground = $CheckBox.icon[filled].selectedBackground -CheckBox.icon[filled].selectedFocusedCheckmarkColor = $CheckBox.icon.focusedBackground +CheckBox.icon[filled].focusedSelectedBorderColor = tint($CheckBox.icon[filled].selectedBackground,50%) +CheckBox.icon[filled].focusedSelectedBackground = $CheckBox.icon[filled].selectedBackground +CheckBox.icon[filled].focusedCheckmarkColor = $CheckBox.icon.focusedBackground # hover -CheckBox.icon[filled].selectedHoverBackground = darken($CheckBox.icon[filled].selectedBackground,5%,derived) +CheckBox.icon[filled].hoverSelectedBackground = darken($CheckBox.icon[filled].selectedBackground,5%,derived) # pressed -CheckBox.icon[filled].selectedPressedBackground = darken($CheckBox.icon[filled].selectedBackground,10%,derived) +CheckBox.icon[filled].pressedSelectedBackground = darken($CheckBox.icon[filled].selectedBackground,10%,derived) -#---- ComboBox ---- +#---- CheckBoxMenuItem ---- -ComboBox.buttonEditableBackground = darken($ComboBox.background,2%) +CheckBoxMenuItem.icon.checkmarkColor = @accentCheckmarkColor +CheckBoxMenuItem.icon.disabledCheckmarkColor = @buttonDisabledArrowColor #---- Component ---- -Component.borderColor = #c4c4c4 -Component.disabledBorderColor = #cfcfcf -Component.focusedBorderColor = #87afda -Component.focusColor = #97c3f3 -Component.linkColor = #2470B3 +Component.borderColor = shade(@background,20%) +Component.disabledBorderColor = tint($Component.borderColor,20%) +Component.focusedBorderColor = shade($Component.focusColor,10%) +Component.focusColor = @accentFocusColor +Component.linkColor = @accentLinkColor +Component.accentColor = if(@accentColor, @accentColor, @accentBaseColor) Component.grayFilter = 25,-25,100 Component.error.borderColor = lighten(desaturate($Component.error.focusedBorderColor,20%),25%) @@ -177,18 +208,19 @@ DesktopIcon.background = darken($Desktop.background,10%,derived) #---- HelpButton ---- -HelpButton.questionMarkColor = #4F9EE3 +HelpButton.questionMarkColor = @accentCheckmarkColor +HelpButton.disabledQuestionMarkColor = shade(@background,30%) #---- InternalFrame ---- InternalFrame.activeTitleBackground = #fff InternalFrame.activeTitleForeground = @foreground -InternalFrame.inactiveTitleBackground = #fafafa -InternalFrame.inactiveTitleForeground = @disabledText +InternalFrame.inactiveTitleBackground = darken($InternalFrame.activeTitleBackground,2%) +InternalFrame.inactiveTitleForeground = @disabledForeground -InternalFrame.activeBorderColor = darken($Component.borderColor,20%) -InternalFrame.inactiveBorderColor = $Component.borderColor +InternalFrame.activeBorderColor = shade(@background,40%) +InternalFrame.inactiveBorderColor = shade(@background,20%) InternalFrame.buttonHoverBackground = darken($InternalFrame.activeTitleBackground,10%,derived) InternalFrame.buttonPressedBackground = darken($InternalFrame.activeTitleBackground,20%,derived) @@ -203,24 +235,19 @@ InternalFrame.inactiveDropShadowOpacity = 0.5 #---- Menu ---- -Menu.icon.arrowColor = #666 -Menu.icon.disabledArrowColor = #ABABAB +Menu.icon.arrowColor = @buttonArrowColor +Menu.icon.disabledArrowColor = @buttonDisabledArrowColor #---- MenuBar ---- -MenuBar.borderColor = #cdcdcd - - -#---- MenuItemCheckBox ---- - -MenuItemCheckBox.icon.checkmarkColor = #4F9EE3 -MenuItemCheckBox.icon.disabledCheckmarkColor = #ABABAB +MenuBar.borderColor = $Separator.foreground #---- PasswordField ---- PasswordField.capsLockIconColor = #00000064 +PasswordField.revealIconColor = tint(@foreground,40%) #---- Popup ---- @@ -231,15 +258,16 @@ Popup.dropShadowOpacity = 0.15 #---- PopupMenu ---- -PopupMenu.borderColor = #adadad +PopupMenu.borderColor = shade(@background,28%) +PopupMenu.hoverScrollArrowBackground = darken(@background,5%) #---- ProgressBar ---- -ProgressBar.background = #D1D1D1 -ProgressBar.foreground = #1E82E6 -ProgressBar.selectionForeground = @textComponentBackground +ProgressBar.background = darken(@background,13%) +ProgressBar.foreground = @accentSliderColor ProgressBar.selectionBackground = @foreground +ProgressBar.selectionForeground = contrast($ProgressBar.foreground, @foreground, @componentBackground) #---- RootPane ---- @@ -261,40 +289,40 @@ ScrollBar.pressedButtonBackground = darken(@background,10%,derived noAutoInverse #---- Separator ---- -Separator.foreground = #d1d1d1 +Separator.foreground = shade(@background,15%) #---- Slider ---- -Slider.trackValueColor = #1E82E6 -Slider.trackColor = #c4c4c4 +Slider.trackValueColor = @accentSliderColor +Slider.trackColor = darken(@background,18%) Slider.thumbColor = $Slider.trackValueColor -Slider.tickColor = #888 -Slider.focusedColor = fade($Component.focusColor,50%,derived) +Slider.tickColor = @disabledForeground +Slider.focusedColor = fade(changeLightness($Component.focusColor,75%,derived),50%,derived) Slider.hoverThumbColor = darken($Slider.thumbColor,5%,derived) Slider.pressedThumbColor = darken($Slider.thumbColor,8%,derived) -Slider.disabledTrackColor = #c0c0c0 +Slider.disabledTrackColor = darken(@background,13%) Slider.disabledThumbColor = $Slider.disabledTrackColor #---- SplitPane ---- -SplitPaneDivider.draggingColor = #c4c4c4 +SplitPaneDivider.draggingColor = $Component.borderColor #---- TabbedPane ---- -TabbedPane.underlineColor = #4083C9 -TabbedPane.disabledUnderlineColor = #ababab +TabbedPane.underlineColor = @accentUnderlineColor +TabbedPane.disabledUnderlineColor = darken(@background,28%) TabbedPane.hoverColor = darken($TabbedPane.background,7%,derived) -TabbedPane.focusColor = #dae4ed -TabbedPane.contentAreaColor = #bfbfbf +TabbedPane.focusColor = mix(@selectionBackground,$TabbedPane.background,10%) +TabbedPane.contentAreaColor = $Component.borderColor TabbedPane.buttonHoverBackground = darken($TabbedPane.background,7%,derived) TabbedPane.buttonPressedBackground = darken($TabbedPane.background,10%,derived) TabbedPane.closeBackground = null -TabbedPane.closeForeground = @disabledText +TabbedPane.closeForeground = @disabledForeground TabbedPane.closeHoverBackground = darken($TabbedPane.background,20%,derived) TabbedPane.closeHoverForeground = @foreground TabbedPane.closePressedBackground = darken($TabbedPane.background,25%,derived) @@ -316,7 +344,7 @@ TableHeader.bottomSeparatorColor = $TableHeader.separatorColor TitlePane.embeddedForeground = lighten($TitlePane.foreground,35%) TitlePane.buttonHoverBackground = darken($TitlePane.background,10%,derived) -TitlePane.buttonPressedBackground = darken($TitlePane.background,20%,derived) +TitlePane.buttonPressedBackground = darken($TitlePane.background,8%,derived) #---- ToggleButton ---- @@ -329,10 +357,25 @@ ToggleButton.toolbar.selectedBackground = $ToggleButton.selectedBackground #---- ToolTip ---- -ToolTip.border = 4,6,4,6,$InternalFrame.activeBorderColor -ToolTip.background = #fafafa +ToolTip.border = 4,6,4,6,shade(@background,40%) +ToolTip.background = lighten(@background,3%) #---- Tree ---- Tree.hash = darken($Tree.background,10%) + + + +#---- Styles ------------------------------------------------------------------ + +#---- inTextField ---- +# for leading/trailing components in text fields + +[style]Button.inTextField = \ + focusable: false; \ + toolbar.margin: 1,1,1,1; \ + toolbar.spacingInsets: 1,1,1,1; \ + toolbar.hoverBackground: darken($TextField.background,4%); \ + toolbar.pressedBackground: darken($TextField.background,8%); \ + toolbar.selectedBackground: darken($TextField.background,12%) diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/IntelliJTheme$ThemeLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/IntelliJTheme$ThemeLaf.properties index 89657002..05f54d76 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/IntelliJTheme$ThemeLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/IntelliJTheme$ThemeLaf.properties @@ -60,18 +60,23 @@ Button.hoverBorderColor = null Button.default.hoverBorderColor = null +#---- CheckBoxMenuItem ---- + +# colors from intellij/checkmark.svg and darcula/checkmark.svg +[light]CheckBoxMenuItem.icon.checkmarkColor=#3E3E3C +[dark]CheckBoxMenuItem.icon.checkmarkColor=#fff9 + + +#---- Component ---- + +Component.accentColor = lazy(ProgressBar.foreground) + + #---- HelpButton ---- HelpButton.hoverBorderColor = null -#---- MenuItemCheckBox ---- - -# colors from intellij/checkmark.svg and darcula/checkmark.svg -[light]MenuItemCheckBox.icon.checkmarkColor=#3E3E3C -[dark]MenuItemCheckBox.icon.checkmarkColor=#fff9 - - #---- Slider ---- Slider.focusedColor = fade($Component.focusColor,40%,derived) @@ -91,36 +96,37 @@ ToggleButton.endBackground = $ToggleButton.background @ijMenuCheckBackgroundL20 = lighten(@selectionBackground,20%,derived noAutoInverse) @ijMenuCheckBackgroundD10 = darken(@selectionBackground,10%,derived noAutoInverse) -[Arc_Theme]CheckBoxMenuItem.foreground = lazy(MenuItem.foreground) -[Arc_Theme]PopupMenu.foreground = lazy(MenuItem.foreground) -[Arc_Theme]RadioButtonMenuItem.foreground = lazy(MenuItem.foreground) +[Arc_Theme]CheckBoxMenuItem.foreground = lazy(MenuItem.foreground) +[Arc_Theme]PopupMenu.foreground = lazy(MenuItem.foreground) +[Arc_Theme]RadioButtonMenuItem.foreground = lazy(MenuItem.foreground) [Arc_Theme]ProgressBar.selectionBackground = #000 [Arc_Theme]ProgressBar.selectionForeground = #fff [Arc_Theme]List.selectionInactiveForeground = #fff [Arc_Theme]Table.selectionInactiveForeground = #fff [Arc_Theme]Tree.selectionInactiveForeground = #fff -[Arc_Theme_-_Orange]CheckBoxMenuItem.foreground = lazy(MenuItem.foreground) -[Arc_Theme_-_Orange]PopupMenu.foreground = lazy(MenuItem.foreground) -[Arc_Theme_-_Orange]RadioButtonMenuItem.foreground = lazy(MenuItem.foreground) +[Arc_Theme_-_Orange]CheckBoxMenuItem.foreground = lazy(MenuItem.foreground) +[Arc_Theme_-_Orange]PopupMenu.foreground = lazy(MenuItem.foreground) +[Arc_Theme_-_Orange]RadioButtonMenuItem.foreground = lazy(MenuItem.foreground) [Arc_Theme_-_Orange]ProgressBar.selectionBackground = #000 [Arc_Theme_-_Orange]ProgressBar.selectionForeground = #fff [Arc_Theme_-_Orange]List.selectionInactiveForeground = #fff [Arc_Theme_-_Orange]Table.selectionInactiveForeground = #fff [Arc_Theme_-_Orange]Tree.selectionInactiveForeground = #fff -[Arc_Theme_Dark]CheckBoxMenuItem.foreground = lazy(MenuItem.foreground) -[Arc_Theme_Dark]PopupMenu.foreground = lazy(MenuItem.foreground) -[Arc_Theme_Dark]RadioButtonMenuItem.foreground = lazy(MenuItem.foreground) +[Arc_Theme_Dark]CheckBoxMenuItem.foreground = lazy(MenuItem.foreground) +[Arc_Theme_Dark]PopupMenu.foreground = lazy(MenuItem.foreground) +[Arc_Theme_Dark]RadioButtonMenuItem.foreground = lazy(MenuItem.foreground) [Arc_Theme_Dark]ProgressBar.selectionBackground = #ddd [Arc_Theme_Dark]ProgressBar.selectionForeground = #ddd -[Arc_Theme_Dark_-_Orange]CheckBoxMenuItem.foreground = lazy(MenuItem.foreground) -[Arc_Theme_Dark_-_Orange]PopupMenu.foreground = lazy(MenuItem.foreground) -[Arc_Theme_Dark_-_Orange]RadioButtonMenuItem.foreground = lazy(MenuItem.foreground) +[Arc_Theme_Dark_-_Orange]CheckBoxMenuItem.foreground = lazy(MenuItem.foreground) +[Arc_Theme_Dark_-_Orange]PopupMenu.foreground = lazy(MenuItem.foreground) +[Arc_Theme_Dark_-_Orange]RadioButtonMenuItem.foreground = lazy(MenuItem.foreground) [Arc_Theme_Dark_-_Orange]ProgressBar.selectionBackground = #ddd [Arc_Theme_Dark_-_Orange]ProgressBar.selectionForeground = #fff +[Cobalt_2]Component.accentColor = lazy(Component.focusColor) [Cobalt_2]CheckBox.icon.background = #002946 [Cobalt_2]CheckBox.icon.checkmarkColor = #002946 [Cobalt_2]MenuItem.checkBackground = @ijMenuCheckBackgroundL10 @@ -129,36 +135,48 @@ ToggleButton.endBackground = $ToggleButton.background [Cyan_light]MenuItem.checkBackground = @ijMenuCheckBackgroundL20 [Cyan_light]MenuItem.underlineSelectionCheckBackground = @ijMenuCheckBackgroundL20 +[Dark_Flat_Theme]Component.accentColor = lazy(List.selectionBackground) [Dark_Flat_Theme]TableHeader.background = #3B3B3B [Dark_purple]Slider.focusedColor = fade($Component.focusColor,70%,derived) +[Dracula---Zihan_Ma]Component.accentColor = lazy(Component.focusColor) [Dracula---Zihan_Ma]ProgressBar.selectionBackground = #fff [Dracula---Zihan_Ma]ProgressBar.selectionForeground = #fff [Gradianto_Dark_Fuchsia]MenuItem.checkBackground = @ijMenuCheckBackgroundL10 [Gradianto_Dark_Fuchsia]MenuItem.underlineSelectionCheckBackground = @ijMenuCheckBackgroundL10 +[Gruvbox_Dark_Hard]Component.accentColor = lazy(TabbedPane.underlineColor) [Gruvbox_Dark_Hard]ToggleButton.selectedBackground = $ToggleButton.selectedBackground [Gruvbox_Dark_Hard]ToggleButton.toolbar.selectedBackground = $ToggleButton.toolbar.selectedBackground +[Gruvbox_Dark_Medium]Component.accentColor = lazy(TabbedPane.underlineColor) [Gruvbox_Dark_Medium]ToggleButton.selectedBackground = $ToggleButton.selectedBackground [Gruvbox_Dark_Medium]ToggleButton.toolbar.selectedBackground = $ToggleButton.toolbar.selectedBackground +[Gruvbox_Dark_Soft]Component.accentColor = lazy(TabbedPane.underlineColor) [Gruvbox_Dark_Soft]MenuItem.checkBackground = @ijMenuCheckBackgroundL10 [Gruvbox_Dark_Soft]MenuItem.underlineSelectionCheckBackground = @ijMenuCheckBackgroundL10 [Gruvbox_Dark_Soft]ToggleButton.selectedBackground = $ToggleButton.selectedBackground [Gruvbox_Dark_Soft]ToggleButton.toolbar.selectedBackground = $ToggleButton.toolbar.selectedBackground -[Hiberbee_Dark]ToggleButton.selectedBackground = $ToggleButton.selectedBackground +[Hiberbee_Dark]TabbedPane.focusColor = #5A5A5A [Hiberbee_Dark]ToggleButton.selectedBackground = $ToggleButton.selectedBackground [Hiberbee_Dark]ToggleButton.toolbar.selectedBackground = $ToggleButton.toolbar.selectedBackground +[High_contrast]Component.accentColor = lazy(Component.focusColor) [High_contrast]ToggleButton.selectedBackground = #fff [High_contrast]ToggleButton.selectedForeground = #000 [High_contrast]ToggleButton.disabledSelectedBackground = #444 [High_contrast]ToggleButton.toolbar.selectedBackground = #fff +[High_contrast][style]Button.inTextField = \ + toolbar.hoverBackground: #444; \ + toolbar.pressedBackground: #666; \ + toolbar.selectedBackground: #fff +[High_contrast][style]ToggleButton.inTextField = $[High_contrast][style]Button.inTextField +[Light_Flat]Component.accentColor = lazy(TabbedPane.underlineColor) [Light_Flat]TableHeader.background = #E5E5E9 [Monocai]MenuItem.checkBackground = @ijMenuCheckBackgroundL10 @@ -181,8 +199,12 @@ ToggleButton.endBackground = $ToggleButton.background [One_Dark]MenuItem.underlineSelectionCheckBackground = @ijMenuCheckBackgroundL10 [One_Dark]Slider.focusedColor = fade(#568af2,40%) +[Solarized_Dark---4lex4]Component.accentColor = lazy(TabbedPane.underlineColor) [Solarized_Dark---4lex4]Slider.focusedColor = fade($Component.focusColor,80%,derived) +[Solarized_Light---4lex4]Component.accentColor = lazy(TabbedPane.underlineColor) + +[vuesion-theme]Component.accentColor = lazy(Button.default.endBackground) [vuesion-theme]MenuItem.checkBackground = @ijMenuCheckBackgroundL10 [vuesion-theme]MenuItem.underlineSelectionCheckBackground = @ijMenuCheckBackgroundL10 [vuesion-theme]Slider.trackValueColor = #ececee @@ -210,11 +232,17 @@ ToggleButton.endBackground = $ToggleButton.background [GitHub_Contrast]ProgressBar.selectionBackground = #222 [GitHub_Contrast]ProgressBar.selectionForeground = #222 +[Light_Owl]List.selectionInactiveForeground = lazy(List.foreground) [Light_Owl]ProgressBar.selectionBackground = #111 [Light_Owl]ProgressBar.selectionForeground = #fff +[Light_Owl]TabbedPane.selectedForeground = lazy(TabbedPane.foreground) +[Light_Owl]Table.selectionForeground = lazy(Table.foreground) +[Light_Owl_Contrast]List.selectionInactiveForeground = lazy(List.foreground) [Light_Owl_Contrast]ProgressBar.selectionBackground = #111 [Light_Owl_Contrast]ProgressBar.selectionForeground = #fff +[Light_Owl_Contrast]TabbedPane.selectedForeground = lazy(TabbedPane.foreground) +[Light_Owl_Contrast]Table.selectionForeground = lazy(Table.foreground) [Material_Lighter]ProgressBar.selectionBackground = #222 [Material_Lighter]ProgressBar.selectionForeground = #fff diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/natives/flatlaf-windows-x86.dll b/flatlaf-core/src/main/resources/com/formdev/flatlaf/natives/flatlaf-windows-x86.dll index 13999d84..8774733c 100644 Binary files a/flatlaf-core/src/main/resources/com/formdev/flatlaf/natives/flatlaf-windows-x86.dll and b/flatlaf-core/src/main/resources/com/formdev/flatlaf/natives/flatlaf-windows-x86.dll differ diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/natives/flatlaf-windows-x86_64.dll b/flatlaf-core/src/main/resources/com/formdev/flatlaf/natives/flatlaf-windows-x86_64.dll index ee84ce5b..391fa564 100644 Binary files a/flatlaf-core/src/main/resources/com/formdev/flatlaf/natives/flatlaf-windows-x86_64.dll and b/flatlaf-core/src/main/resources/com/formdev/flatlaf/natives/flatlaf-windows-x86_64.dll differ diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/TestUIDefaultsLoader.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/TestUIDefaultsLoader.java new file mode 100644 index 00000000..65d50ae5 --- /dev/null +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/TestUIDefaultsLoader.java @@ -0,0 +1,156 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Insets; +import javax.swing.UIManager; +import javax.swing.border.Border; +import javax.swing.UIDefaults.ActiveValue; +import javax.swing.UIDefaults.LazyValue; +import org.junit.jupiter.api.Test; +import com.formdev.flatlaf.ui.FlatEmptyBorder; +import com.formdev.flatlaf.ui.FlatLineBorder; + +/** + * @author Karl Tauber + */ +public class TestUIDefaultsLoader +{ + @Test + void parseValue() { + assertEquals( null, UIDefaultsLoader.parseValue( "dummy", "null", null ) ); + assertEquals( false, UIDefaultsLoader.parseValue( "dummy", "false", null ) ); + assertEquals( true, UIDefaultsLoader.parseValue( "dummy", "true", null ) ); + + assertEquals( "hello", UIDefaultsLoader.parseValue( "dummy", "hello", null ) ); + assertEquals( "hello", UIDefaultsLoader.parseValue( "dummy", "\"hello\"", null ) ); + assertEquals( "null", UIDefaultsLoader.parseValue( "dummy", "\"null\"", null ) ); + + assertEquals( 'a', UIDefaultsLoader.parseValue( "dummyChar", "a", null ) ); + assertEquals( 123, UIDefaultsLoader.parseValue( "dummy", "123", null ) ); + assertEquals( 123, UIDefaultsLoader.parseValue( "dummyWidth", "123", null ) ); + assertEquals( 1.23f, UIDefaultsLoader.parseValue( "dummy", "1.23", null ) ); + assertEquals( 1.23f, UIDefaultsLoader.parseValue( "dummyWidth", "1.23", null ) ); + + assertEquals( new Insets( 1,2,3,4 ), UIDefaultsLoader.parseValue( "dummyInsets", "1,2,3,4", null ) ); + assertEquals( new Dimension( 1,2 ), UIDefaultsLoader.parseValue( "dummySize", "1,2", null ) ); + assertEquals( new Color( 0xff0000 ), UIDefaultsLoader.parseValue( "dummy", "#f00", null ) ); + assertEquals( new Color( 0xff0000 ), UIDefaultsLoader.parseValue( "dummyColor", "#f00", null ) ); + } + + @Test + void parseValueWithJavaType() { + assertEquals( null, UIDefaultsLoader.parseValue( "dummy", "null", String.class ) ); + assertEquals( false, UIDefaultsLoader.parseValue( "dummy", "false", boolean.class ) ); + assertEquals( true, UIDefaultsLoader.parseValue( "dummy", "true", Boolean.class ) ); + + assertEquals( "hello", UIDefaultsLoader.parseValue( "dummy", "hello", String.class ) ); + assertEquals( "hello", UIDefaultsLoader.parseValue( "dummy", "\"hello\"", String.class ) ); + assertEquals( "null", UIDefaultsLoader.parseValue( "dummy", "\"null\"", String.class ) ); + assertEquals( null, UIDefaultsLoader.parseValue( "dummy", "null", String.class ) ); + + assertEquals( 'a', UIDefaultsLoader.parseValue( "dummy", "a", char.class ) ); + assertEquals( 'a', UIDefaultsLoader.parseValue( "dummy", "a", Character.class ) ); + assertEquals( 123, UIDefaultsLoader.parseValue( "dummy", "123", int.class ) ); + assertEquals( 123, UIDefaultsLoader.parseValue( "dummy", "123", Integer.class ) ); + assertEquals( 1.23f, UIDefaultsLoader.parseValue( "dummy", "1.23", float.class ) ); + assertEquals( 1.23f, UIDefaultsLoader.parseValue( "dummy", "1.23", Float.class ) ); + + assertEquals( new Insets( 1,2,3,4 ), UIDefaultsLoader.parseValue( "dummy", "1,2,3,4", Insets.class ) ); + assertEquals( new Dimension( 1,2 ), UIDefaultsLoader.parseValue( "dummy", "1,2", Dimension.class ) ); + assertEquals( new Color( 0xff0000 ), UIDefaultsLoader.parseValue( "dummy", "#f00", Color.class ) ); + } + + @Test + void parseBorders() { + Insets insets = new Insets( 1,2,3,4 ); + assertBorderEquals( new FlatEmptyBorder( insets ), "1,2,3,4" ); + assertBorderEquals( new FlatLineBorder( insets, Color.red ), "1,2,3,4,#f00" ); + assertBorderEquals( new FlatLineBorder( insets, Color.red, 2.5f, 0 ), "1,2,3,4,#f00,2.5" ); + assertBorderEquals( new FlatLineBorder( insets, Color.red, 2.5f, 6 ), "1,2,3,4,#f00,2.5,6" ); + assertBorderEquals( new FlatLineBorder( insets, Color.red, 1, 6 ), "1,2,3,4,#f00,,6" ); + } + + private void assertBorderEquals( Border expected, String actualStyle ) { + Border actual = (Border) ((LazyValue)UIDefaultsLoader.parseValue( "dummyBorder", actualStyle, null )).createValue( null ); + assertEquals( expected.getClass(), actual.getClass() ); + if( expected instanceof FlatEmptyBorder ) + assertEquals( ((FlatEmptyBorder)actual).getBorderInsets(), ((FlatEmptyBorder)expected).getBorderInsets() ); + if( expected instanceof FlatLineBorder ) { + FlatLineBorder a = (FlatLineBorder) actual; + FlatLineBorder e = (FlatLineBorder) expected; + assertEquals( a.getLineColor(), e.getLineColor() ); + assertEquals( a.getLineThickness(), e.getLineThickness() ); + assertEquals( a.getArc(), e.getArc() ); + } + } + + @Test + void parseFonts() { + // style + UIManager.put( "defaultFont", new Font( Font.DIALOG, Font.PLAIN, 10 ) ); + assertFontEquals( Font.DIALOG, Font.PLAIN, 10, "normal" ); + assertFontEquals( Font.DIALOG, Font.BOLD, 10, "bold" ); + assertFontEquals( Font.DIALOG, Font.ITALIC, 10, "italic" ); + assertFontEquals( Font.DIALOG, Font.BOLD|Font.ITALIC, 10, "bold italic" ); + + // derived style + assertFontEquals( Font.DIALOG, Font.BOLD, 10, "+bold" ); + assertFontEquals( Font.DIALOG, Font.ITALIC, 10, "+italic" ); + assertFontEquals( Font.DIALOG, Font.BOLD|Font.ITALIC, 10, "+bold +italic" ); + UIManager.put( "defaultFont", new Font( Font.DIALOG, Font.BOLD|Font.ITALIC, 10 ) ); + assertFontEquals( Font.DIALOG, Font.ITALIC, 10, "-bold" ); + assertFontEquals( Font.DIALOG, Font.BOLD, 10, "-italic" ); + assertFontEquals( Font.DIALOG, Font.PLAIN, 10, "-bold -italic" ); + UIManager.put( "defaultFont", new Font( Font.DIALOG, Font.BOLD, 10 ) ); + assertFontEquals( Font.DIALOG, Font.ITALIC, 10, "-bold +italic" ); + + // size + UIManager.put( "defaultFont", new Font( Font.DIALOG, Font.PLAIN, 10 ) ); + assertFontEquals( Font.DIALOG, Font.PLAIN, 12, "12" ); + assertFontEquals( Font.DIALOG, Font.PLAIN, 13, "+3" ); + assertFontEquals( Font.DIALOG, Font.PLAIN, 6, "-4" ); + assertFontEquals( Font.DIALOG, Font.PLAIN, 15, "150%" ); + + // family + assertFontEquals( Font.MONOSPACED, Font.PLAIN, 10, "Monospaced" ); + assertFontEquals( Font.MONOSPACED, Font.PLAIN, 10, "Monospaced, Dialog" ); + assertFontEquals( Font.DIALOG, Font.PLAIN, 10, "Dialog, Monospaced" ); + + // unknown family + assertFontEquals( Font.MONOSPACED, Font.PLAIN, 12, "normal 12 UnknownFamily, Monospaced" ); + assertFontEquals( Font.DIALOG, Font.PLAIN, 12, "normal 12 UnknownFamily, Dialog" ); + assertFontEquals( Font.DIALOG, Font.PLAIN, 12, "normal 12 UnknownFamily, 'Another unknown family'" ); + + // all + assertFontEquals( Font.MONOSPACED, Font.BOLD, 13, "bold 13 Monospaced" ); + assertFontEquals( Font.DIALOG, Font.ITALIC, 14, "italic 14 Dialog" ); + assertFontEquals( Font.DIALOG, Font.BOLD|Font.ITALIC, 15, "bold italic 15 Dialog" ); + + UIManager.put( "defaultFont", null ); + } + + private void assertFontEquals( String name, int style, int size, String actualStyle ) { + assertEquals( + new Font( name, style, size ), + ((ActiveValue)UIDefaultsLoader.parseValue( "dummyFont", actualStyle, null )).createValue( null ) ); + } +} diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/icons/TestFlatIconPaintingNullComponent.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/icons/TestFlatIconPaintingNullComponent.java new file mode 100644 index 00000000..a5c1ea6f --- /dev/null +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/icons/TestFlatIconPaintingNullComponent.java @@ -0,0 +1,65 @@ +/* + * Copyright 2022 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.icons; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import javax.swing.Icon; +import com.formdev.flatlaf.ui.TestUtils; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; + +class TestFlatIconPaintingNullComponent +{ + static Graphics graphics; + + @BeforeAll + static void setup() { + TestUtils.setup( false ); + graphics = new BufferedImage( 32, 32, BufferedImage.TYPE_INT_ARGB ).getGraphics(); + graphics.setColor( Color.white ); + } + + @AfterAll + static void cleanup() { + TestUtils.cleanup(); + graphics = null; + } + + @Test + void flatHelpButtonIcon() { + paintWithoutException( new FlatHelpButtonIcon() ); + } + + @Test + void flatMenuArrowIcon() { + paintWithoutException( new FlatMenuArrowIcon() ); + } + + @Test + void flatSearchIcon() { + paintWithoutException( new FlatSearchIcon() ); + } + + private void paintWithoutException( Icon icon ) { + graphics.clearRect( 0, 0, 32, 32 ); + assertDoesNotThrow( () -> icon.paintIcon( null, graphics, 0, 0 ) ); + } +} diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatComponentSizes.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatComponentSizes.java new file mode 100644 index 00000000..02f559a8 --- /dev/null +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatComponentSizes.java @@ -0,0 +1,203 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.ui; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Insets; +import javax.swing.*; +import javax.swing.border.Border; +import javax.swing.border.LineBorder; +import javax.swing.plaf.basic.BasicComboBoxEditor; +import javax.swing.plaf.basic.BasicComboBoxRenderer; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import com.formdev.flatlaf.util.UIScale; + +/** + * @author Karl Tauber + */ +public class TestFlatComponentSizes +{ + @BeforeAll + static void setup() { + TestUtils.setup( false ); + } + + @AfterAll + static void cleanup() { + TestUtils.cleanup(); + } + + static float[] factors() { + return TestUtils.FACTORS; + } + + @ParameterizedTest + @MethodSource( "factors" ) + void sizes( float factor ) { + TestUtils.scaleFont( factor ); + + + // should have same default size (minimumWidth is 64) + JTextField textField = new JTextField(); + JFormattedTextField formattedTextField = new JFormattedTextField(); + JPasswordField passwordField = new JPasswordField(); + JSpinner spinner = new JSpinner(); + + Dimension textFieldSize = textField.getPreferredSize(); + assertEquals( textFieldSize, formattedTextField.getPreferredSize() ); + assertEquals( textFieldSize, passwordField.getPreferredSize() ); + assertEquals( textFieldSize, spinner.getPreferredSize() ); + + + // should have same default size (minimumWidth is 72) + JButton button = new JButton( "text" ); + JComboBox comboBox = new JComboBox<>(); + JComboBox comboBoxEditable = new JComboBox<>(); + comboBoxEditable.setEditable( true ); + + Dimension buttonSize = button.getPreferredSize(); + assertEquals( buttonSize, comboBox.getPreferredSize() ); + assertEquals( buttonSize, comboBoxEditable.getPreferredSize() ); + + + // should have same height + JToggleButton toggleButton = new JToggleButton( "text" ); + + assertEquals( textFieldSize.height, button.getPreferredSize().height ); + assertEquals( textFieldSize.height, toggleButton.getPreferredSize().height ); + + + // should have same size + JCheckBox checkBox = new JCheckBox( "text" ); + JRadioButton radioButton = new JRadioButton( "text" ); + assertEquals( checkBox.getPreferredSize(), radioButton.getPreferredSize() ); + + + // should have same size + JMenu menu = new JMenu( "text" ); + JMenuItem menuItem = new JMenuItem( "text" ); + JCheckBoxMenuItem checkBoxMenuItem = new JCheckBoxMenuItem( "text" ); + JRadioButtonMenuItem radioButtonMenuItem = new JRadioButtonMenuItem( "text" ); + + Dimension menuSize = menu.getPreferredSize(); + assertEquals( menuSize, menuItem.getPreferredSize() ); + assertEquals( menuSize, checkBoxMenuItem.getPreferredSize() ); + assertEquals( menuSize, radioButtonMenuItem.getPreferredSize() ); + + + TestUtils.resetFont(); + } + + @ParameterizedTest + @MethodSource( "factors" ) + void comboBox( float factor ) { + TestUtils.scaleFont( factor ); + + String[] items = { "t" }; + JComboBox comboBox = new JComboBox<>( items ); + JComboBox comboBox2 = new JComboBox<>( items ); + JComboBox comboBox3 = new JComboBox<>( items ); + JComboBox comboBox4 = new JComboBox<>( items ); + + applyCustomComboBoxRendererBorder( comboBox2, new LineBorder( Color.orange, UIScale.scale( 6 ) ) ); + applyCustomComboBoxRendererBorder( comboBox3, new BorderWithIcon() ); + applyCustomComboBoxRendererBorder( comboBox4, null ); + + Dimension size = comboBox.getPreferredSize(); + assertEquals( size.width, comboBox2.getPreferredSize().width ); + assertEquals( size.height - (2 * UIScale.scale( 2 )) + (2 * UIScale.scale( 6 )), comboBox2.getPreferredSize().height ); + assertEquals( size, comboBox3.getPreferredSize() ); + assertEquals( size, comboBox4.getPreferredSize() ); + + TestUtils.resetFont(); + } + + @SuppressWarnings( "unchecked" ) + private void applyCustomComboBoxRendererBorder( JComboBox comboBox, Border border ) { + BasicComboBoxRenderer customRenderer = new BasicComboBoxRenderer(); + customRenderer.setBorder( border ); + comboBox.setRenderer( customRenderer ); + } + + @ParameterizedTest + @MethodSource( "factors" ) + void comboBoxEditable( float factor ) { + TestUtils.scaleFont( factor ); + + String[] items = { "t" }; + JComboBox comboBox = new JComboBox<>( items ); + JComboBox comboBox2 = new JComboBox<>( items ); + JComboBox comboBox3 = new JComboBox<>( items ); + JComboBox comboBox4 = new JComboBox<>( items ); + + comboBox.setEditable( true ); + comboBox2.setEditable( true ); + comboBox3.setEditable( true ); + comboBox4.setEditable( true ); + + applyCustomComboBoxEditorBorder( comboBox2, new LineBorder( Color.orange, UIScale.scale( 6 ) ) ); + applyCustomComboBoxEditorBorder( comboBox3, new BorderWithIcon() ); + applyCustomComboBoxEditorBorder( comboBox4, null ); + + Dimension size = comboBox.getPreferredSize(); + assertEquals( size.width, comboBox2.getPreferredSize().width ); + assertEquals( size.height - (2 * UIScale.scale( 2 )) + (2 * UIScale.scale( 6 )), comboBox2.getPreferredSize().height ); + assertEquals( size, comboBox3.getPreferredSize() ); + assertEquals( size, comboBox4.getPreferredSize() ); + + TestUtils.resetFont(); + } + + private void applyCustomComboBoxEditorBorder( JComboBox comboBox, Border border ) { + JTextField customTextField = new JTextField(); + if( border != null ) + customTextField.setBorder( border ); + comboBox.setEditor( new BasicComboBoxEditor() { + @Override + protected JTextField createEditorComponent() { + return customTextField; + } + } ); + } + + //---- class BorderWithIcon ----------------------------------------------- + + private static class BorderWithIcon + implements Border + { + @Override + public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { + } + + @Override + public boolean isBorderOpaque() { + return false; + } + + @Override + public Insets getBorderInsets( Component c ) { + return new Insets( 0, 0, 0, UIScale.scale( 16 ) + 4 ); + } + } +} diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatComponentSizesWithFocus.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatComponentSizesWithFocus.java new file mode 100644 index 00000000..074cacd7 --- /dev/null +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatComponentSizesWithFocus.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.ui; + +import org.junit.jupiter.api.BeforeAll; + +/** + * @author Karl Tauber + */ +public class TestFlatComponentSizesWithFocus + extends TestFlatComponentSizes +{ + @BeforeAll + static void setup() { + TestUtils.setup( true ); + } +} diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleClasses.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleClasses.java new file mode 100644 index 00000000..573e0c2b --- /dev/null +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleClasses.java @@ -0,0 +1,473 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.ui; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import java.awt.Color; +import java.awt.Dimension; +import java.util.Arrays; +import javax.swing.*; +import javax.swing.table.JTableHeader; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.FlatSystemProperties; + +/** + * @author Karl Tauber + */ +public class TestFlatStyleClasses +{ + private static final String BUTTON_PRIMARY = "borderColor: #08f; background: #08f; foreground: #fff"; + private static final String SECONDARY = "borderColor: #0f8; background: #0f8"; + private static final String TOGGLE_BUTTON_SECONDARY = "selectedBackground: #f00"; + private static final String BACKGROUND = "background: #f0f"; + + @BeforeAll + static void setup() { + System.setProperty( FlatSystemProperties.UI_SCALE, "1x" ); + TestUtils.setup( false ); + + UIManager.put( "[style]Button.primary", BUTTON_PRIMARY ); + UIManager.put( "[style].secondary", SECONDARY ); + UIManager.put( "[style]ToggleButton.secondary", TOGGLE_BUTTON_SECONDARY ); + UIManager.put( "[style].test", BACKGROUND ); + + UIManager.put( "[style]Button.test", "foreground: #000001" ); + UIManager.put( "[style]CheckBox.test", "foreground: #000002" ); + UIManager.put( "[style]ComboBox.test", "foreground: #000003" ); + UIManager.put( "[style]EditorPane.test", "foreground: #000004" ); + UIManager.put( "[style]FormattedTextField.test", "foreground: #000005" ); + UIManager.put( "[style]InternalFrame.test", "foreground: #000006" ); + UIManager.put( "[style]Label.test", "foreground: #000007" ); + UIManager.put( "[style]List.test", "foreground: #000008" ); + UIManager.put( "[style]MenuBar.test", "foreground: #000009" ); + UIManager.put( "[style]Menu.test", "foreground: #000010" ); + UIManager.put( "[style]MenuItem.test", "foreground: #000011" ); + UIManager.put( "[style]CheckBoxMenuItem.test", "foreground: #000012" ); + UIManager.put( "[style]RadioButtonMenuItem.test", "foreground: #000013" ); + UIManager.put( "[style]Panel.test", "foreground: #000034" ); + UIManager.put( "[style]PasswordField.test", "foreground: #000014" ); + UIManager.put( "[style]PopupMenu.test", "foreground: #000015" ); + UIManager.put( "[style]PopupMenuSeparator.test", "foreground: #000016" ); + UIManager.put( "[style]ProgressBar.test", "foreground: #000017" ); + UIManager.put( "[style]RadioButton.test", "foreground: #000018" ); + UIManager.put( "[style]ScrollBar.test", "foreground: #000019" ); + UIManager.put( "[style]ScrollPane.test", "foreground: #000020" ); + UIManager.put( "[style]Separator.test", "foreground: #000021" ); + UIManager.put( "[style]Slider.test", "foreground: #000022" ); + UIManager.put( "[style]Spinner.test", "foreground: #000023" ); + UIManager.put( "[style]SplitPane.test", "foreground: #000024" ); + UIManager.put( "[style]TabbedPane.test", "foreground: #000025" ); + UIManager.put( "[style]Table.test", "foreground: #000026" ); + UIManager.put( "[style]TableHeader.test", "foreground: #000027" ); + UIManager.put( "[style]TextArea.test", "foreground: #000028" ); + UIManager.put( "[style]TextField.test", "foreground: #000029" ); + UIManager.put( "[style]TextPane.test", "foreground: #000030" ); + UIManager.put( "[style]ToggleButton.test", "foreground: #000031" ); + UIManager.put( "[style]ToolBar.test", "foreground: #000032" ); + UIManager.put( "[style]Tree.test", "foreground: #000033" ); + + // for shared UIs + UIManager.put( "[style]Button.test2", "foreground: #000100" ); + UIManager.put( "[style]CheckBox.test2", "foreground: #000200" ); + UIManager.put( "[style]Label.test2", "foreground: #000700" ); + UIManager.put( "[style]PopupMenuSeparator.test2", "foreground: #001600" ); + UIManager.put( "[style]RadioButton.test2", "foreground: #001800" ); + UIManager.put( "[style]Separator.test2", "foreground: #002100" ); + UIManager.put( "[style]ToggleButton.test2", "foreground: #003100" ); + + // JToolBar.Separator + UIManager.put( "[style]ToolBarSeparator.toolbar-separator-test", "separatorWidth: 21" ); + UIManager.put( "[style]ToolBarSeparator.toolbar-separator-test2", "separatorWidth: 31" ); + } + + @AfterAll + static void cleanup() { + TestUtils.cleanup(); + System.clearProperty( FlatSystemProperties.UI_SCALE ); + } + + @Test + void styleForClass() { + assertEquals( null, FlatStylingSupport.getStyleForClasses( "foo", "Button" ) ); + + assertEquals( BUTTON_PRIMARY, FlatStylingSupport.getStyleForClasses( "primary", "Button" ) ); + assertEquals( SECONDARY, FlatStylingSupport.getStyleForClasses( "secondary", "Button" ) ); + + assertEquals( + FlatStylingSupport.concatStyles( SECONDARY, TOGGLE_BUTTON_SECONDARY ), + FlatStylingSupport.getStyleForClasses( "secondary", "ToggleButton" ) ); + + assertEquals( + FlatStylingSupport.concatStyles( BUTTON_PRIMARY, SECONDARY ), + FlatStylingSupport.getStyleForClasses( "primary secondary", "Button" ) ); + assertEquals( + FlatStylingSupport.concatStyles( SECONDARY, BUTTON_PRIMARY ), + FlatStylingSupport.getStyleForClasses( "secondary primary", "Button" ) ); + + // String + assertEquals( + FlatStylingSupport.concatStyles( SECONDARY, BUTTON_PRIMARY ), + FlatStylingSupport.getStyleForClasses( " secondary primary bla blu ", "Button" ) ); + + // String[] + assertEquals( + FlatStylingSupport.concatStyles( SECONDARY, BUTTON_PRIMARY ), + FlatStylingSupport.getStyleForClasses( new String[] { "secondary", "primary" }, "Button" ) ); + + // List + assertEquals( + FlatStylingSupport.concatStyles( SECONDARY, BUTTON_PRIMARY ), + FlatStylingSupport.getStyleForClasses( Arrays.asList( "secondary", "primary" ), "Button" ) ); + } + + @Test + void apply1() { + JButton c = new JButton(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "primary" ); + + assertEquals( new Color( 0x0088ff ), c.getBackground() ); + assertEquals( Color.white, c.getForeground() ); + } + + @Test + void apply2() { + JButton c = new JButton(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "primary secondary" ); + + assertEquals( new Color( 0x00ff88 ), c.getBackground() ); + assertEquals( Color.white, c.getForeground() ); + } + + @Test + void apply3() { + JButton c = new JButton(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "secondary primary" ); + + assertEquals( new Color( 0x0088ff ), c.getBackground() ); + assertEquals( Color.white, c.getForeground() ); + } + + //---- components --------------------------------------------------------- + + @Test + void button() { + JButton c = new JButton(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000001 ), c.getForeground() ); + + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test2" ); + assertEquals( new Color( 0x000100 ), c.getForeground() ); + } + + @Test + void checkBox() { + JCheckBox c = new JCheckBox(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000002 ), c.getForeground() ); + + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test2" ); + assertEquals( new Color( 0x000200 ), c.getForeground() ); + } + + @Test + void comboBox() { + JComboBox c = new JComboBox<>(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000003 ), c.getForeground() ); + } + + @Test + void editorPane() { + JEditorPane c = new JEditorPane(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000004 ), c.getForeground() ); + } + + @Test + void formattedTextField() { + JFormattedTextField c = new JFormattedTextField(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000005 ), c.getForeground() ); + } + + @Test + void internalFrame() { + JInternalFrame c = new JInternalFrame(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000006 ), c.getForeground() ); + } + + @Test + void label() { + JLabel c = new JLabel(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000007 ), c.getForeground() ); + + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test2" ); + assertEquals( new Color( 0x000700 ), c.getForeground() ); + } + + @Test + void list() { + JList c = new JList<>(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000008 ), c.getForeground() ); + } + + @Test + void menuBar() { + JMenuBar c = new JMenuBar(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000009 ), c.getForeground() ); + } + + @Test + void menu() { + JMenu c = new JMenu(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000010 ), c.getForeground() ); + } + + @Test + void menuItem() { + JMenuItem c = new JMenuItem(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000011 ), c.getForeground() ); + } + + @Test + void checkBoxMenuItem() { + JCheckBoxMenuItem c = new JCheckBoxMenuItem(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000012 ), c.getForeground() ); + } + + @Test + void radioButtonMenuItem() { + JRadioButtonMenuItem c = new JRadioButtonMenuItem(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000013 ), c.getForeground() ); + } + + @Test + void panel() { + JPanel c = new JPanel(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000034 ), c.getForeground() ); + } + + @Test + void passwordField() { + JPasswordField c = new JPasswordField(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000014 ), c.getForeground() ); + } + + @Test + void popupMenu() { + JPopupMenu c = new JPopupMenu(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000015 ), c.getForeground() ); + } + + @Test + void popupMenuSeparator() { + JPopupMenu.Separator c = new JPopupMenu.Separator(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000016 ), c.getForeground() ); + + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test2" ); + assertEquals( new Color( 0x001600 ), c.getForeground() ); + } + + @Test + void progressBar() { + JProgressBar c = new JProgressBar(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000017 ), c.getForeground() ); + } + + @Test + void radioButton() { + JRadioButton c = new JRadioButton(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000018 ), c.getForeground() ); + + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test2" ); + assertEquals( new Color( 0x001800 ), c.getForeground() ); + } + + @Test + void scrollBar() { + JScrollBar c = new JScrollBar(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000019 ), c.getForeground() ); + } + + @Test + void scrollPane() { + JScrollPane c = new JScrollPane(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000020 ), c.getForeground() ); + } + + @Test + void separator() { + JSeparator c = new JSeparator(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000021 ), c.getForeground() ); + + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test2" ); + assertEquals( new Color( 0x002100 ), c.getForeground() ); + } + + @Test + void slider() { + JSlider c = new JSlider(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000022 ), c.getForeground() ); + } + + @Test + void spinner() { + JSpinner c = new JSpinner(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000023 ), c.getForeground() ); + } + + @Test + void splitPane() { + JSplitPane c = new JSplitPane(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000024 ), c.getForeground() ); + } + + @Test + void tabbedPane() { + JTabbedPane c = new JTabbedPane(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000025 ), c.getForeground() ); + } + + @Test + void table() { + JTable c = new JTable(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000026 ), c.getForeground() ); + } + + @Test + void tableHeader() { + JTableHeader c = new JTableHeader(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000027 ), c.getForeground() ); + } + + @Test + void textArea() { + JTextArea c = new JTextArea(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000028 ), c.getForeground() ); + } + + @Test + void textField() { + JTextField c = new JTextField(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000029 ), c.getForeground() ); + } + + @Test + void textPane() { + JTextPane c = new JTextPane(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000030 ), c.getForeground() ); + } + + @Test + void toggleButton() { + JToggleButton c = new JToggleButton(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000031 ), c.getForeground() ); + + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test2" ); + assertEquals( new Color( 0x003100 ), c.getForeground() ); + } + + @Test + void toolBar() { + JToolBar c = new JToolBar(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000032 ), c.getForeground() ); + } + + @Test + void toolBarSeparator() { + JToolBar.Separator c = new JToolBar.Separator(); + assertEquals( new Dimension( 0, 7 ), c.getPreferredSize() ); + + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "toolbar-separator-test" ); + assertEquals( new Dimension( 0, 21 ), c.getPreferredSize() ); + + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "toolbar-separator-test2" ); + assertEquals( new Dimension( 0, 31 ), c.getPreferredSize() ); + } + + @Test + void tree() { + JTree c = new JTree(); + c.putClientProperty( FlatClientProperties.STYLE_CLASS, "test" ); + assertEquals( Color.magenta, c.getBackground() ); + assertEquals( new Color( 0x000033 ), c.getForeground() ); + } +} diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java new file mode 100644 index 00000000..1dd5c188 --- /dev/null +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java @@ -0,0 +1,1190 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.ui; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static com.formdev.flatlaf.ui.TestUtils.assertMapEquals; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.Insets; +import java.util.LinkedHashMap; +import java.util.Map; +import javax.swing.*; +import javax.swing.table.JTableHeader; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import com.formdev.flatlaf.icons.*; + +/** + * @author Karl Tauber + */ +public class TestFlatStyleableInfo +{ + @BeforeAll + static void setup() { + TestUtils.setup( false ); + } + + @AfterAll + static void cleanup() { + TestUtils.cleanup(); + } + + private Map> expectedMap( Object... keyValuePairs ) { + Map> map = new LinkedHashMap<>(); + expectedMap( map, keyValuePairs ); + return map; + } + + private void expectedMap( Map> map, Object... keyValuePairs ) { + for( int i = 0; i < keyValuePairs.length; i += 2 ) + map.put( (String) keyValuePairs[i], (Class) keyValuePairs[i+1] ); + } + + //---- components --------------------------------------------------------- + + @Test + void button() { + JButton b = new JButton(); + FlatButtonUI ui = (FlatButtonUI) b.getUI(); + + Map> expected = new LinkedHashMap<>(); + button( expected ); + + //---- FlatHelpButtonIcon ---- + + expectedMap( expected, + "help.focusWidth", int.class, + "help.focusColor", Color.class, + "help.innerFocusWidth", float.class, + "help.borderWidth", int.class, + + "help.borderColor", Color.class, + "help.disabledBorderColor", Color.class, + "help.focusedBorderColor", Color.class, + "help.hoverBorderColor", Color.class, + "help.background", Color.class, + "help.disabledBackground", Color.class, + "help.focusedBackground", Color.class, + "help.hoverBackground", Color.class, + "help.pressedBackground", Color.class, + "help.questionMarkColor", Color.class, + "help.disabledQuestionMarkColor", Color.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( b ) ); + } + + private void button( Map> expected ) { + expectedMap( expected, + "minimumWidth", int.class, + + "focusedBackground", Color.class, + "hoverBackground", Color.class, + "pressedBackground", Color.class, + "selectedBackground", Color.class, + "selectedForeground", Color.class, + "disabledBackground", Color.class, + "disabledText", Color.class, + "disabledSelectedBackground", Color.class, + + "default.background", Color.class, + "default.foreground", Color.class, + "default.focusedBackground", Color.class, + "default.hoverBackground", Color.class, + "default.pressedBackground", Color.class, + "default.boldText", boolean.class, + + "paintShadow", boolean.class, + "shadowWidth", int.class, + "shadowColor", Color.class, + "default.shadowColor", Color.class, + + "toolbar.spacingInsets", Insets.class, + "toolbar.hoverBackground", Color.class, + "toolbar.pressedBackground", Color.class, + "toolbar.selectedBackground", Color.class, + + "buttonType", String.class, + "squareSize", boolean.class, + "minimumHeight", int.class + ); + + // border + flatButtonBorder( expected ); + } + + @Test + void checkBox() { + JCheckBox c = new JCheckBox(); + FlatCheckBoxUI ui = (FlatCheckBoxUI) c.getUI(); + + assertTrue( ui.getDefaultIcon() instanceof FlatCheckBoxIcon ); + + // FlatCheckBoxUI extends FlatRadioButtonUI + Map> expected = new LinkedHashMap<>(); + radioButton( expected ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void comboBox() { + JComboBox c = new JComboBox<>(); + FlatComboBoxUI ui = (FlatComboBoxUI) c.getUI(); + + Map> expected = expectedMap( + "padding", Insets.class, + + "minimumWidth", int.class, + "editorColumns", int.class, + "buttonStyle", String.class, + "arrowType", String.class, + + "editableBackground", Color.class, + "focusedBackground", Color.class, + "disabledBackground", Color.class, + "disabledForeground", Color.class, + + "buttonBackground", Color.class, + "buttonFocusedBackground", Color.class, + "buttonEditableBackground", Color.class, + "buttonSeparatorWidth", float.class, + "buttonSeparatorColor", Color.class, + "buttonDisabledSeparatorColor", Color.class, + "buttonArrowColor", Color.class, + "buttonDisabledArrowColor", Color.class, + "buttonHoverArrowColor", Color.class, + "buttonPressedArrowColor", Color.class, + + "popupBackground", Color.class + ); + + // border + flatRoundBorder( expected ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void editorPane() { + JEditorPane c = new JEditorPane(); + FlatEditorPaneUI ui = (FlatEditorPaneUI) c.getUI(); + + Map> expected = expectedMap( + "minimumWidth", int.class, + "disabledBackground", Color.class, + "inactiveBackground", Color.class, + "focusedBackground", Color.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void formattedTextField() { + JFormattedTextField c = new JFormattedTextField(); + FlatFormattedTextFieldUI ui = (FlatFormattedTextFieldUI) c.getUI(); + + // FlatFormattedTextFieldUI extends FlatTextFieldUI + Map> expected = new LinkedHashMap<>(); + textField( expected ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void internalFrame() { + JInternalFrame c = new JInternalFrame(); + FlatInternalFrameUI ui = (FlatInternalFrameUI) c.getUI(); + + Map> expected = expectedMap( + "activeBorderColor", Color.class, + "inactiveBorderColor", Color.class, + "borderLineWidth", int.class, + "dropShadowPainted", boolean.class, + "borderMargins", Insets.class, + + "activeDropShadowColor", Color.class, + "activeDropShadowInsets", Insets.class, + "activeDropShadowOpacity", float.class, + "inactiveDropShadowColor", Color.class, + "inactiveDropShadowInsets", Insets.class, + "inactiveDropShadowOpacity", float.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void label() { + JLabel c = new JLabel(); + FlatLabelUI ui = (FlatLabelUI) c.getUI(); + + Map> expected = expectedMap( + "disabledForeground", Color.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void list() { + JList c = new JList<>(); + FlatListUI ui = (FlatListUI) c.getUI(); + + Map> expected = expectedMap( + "selectionBackground", Color.class, + "selectionForeground", Color.class, + "selectionInactiveBackground", Color.class, + "selectionInactiveForeground", Color.class, + + // FlatListCellBorder + "cellMargins", Insets.class, + "cellFocusColor", Color.class, + "showCellFocusIndicator", Boolean.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void menuBar() { + JMenuBar c = new JMenuBar(); + FlatMenuBarUI ui = (FlatMenuBarUI) c.getUI(); + + Map> expected = expectedMap( + "itemMargins", Insets.class, + "hoverBackground", Color.class, + "underlineSelectionBackground", Color.class, + "underlineSelectionColor", Color.class, + "underlineSelectionHeight", int.class, + + // FlatMenuBarBorder + "borderColor", Color.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void menu() { + JMenu c = new JMenu(); + FlatMenuUI ui = (FlatMenuUI) c.getUI(); + + Map> expected = new LinkedHashMap<>(); + menuItem( expected ); + menuItem_arrowIcon( expected ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void menuItem() { + JMenuItem c = new JMenuItem(); + FlatMenuItemUI ui = (FlatMenuItemUI) c.getUI(); + + Map> expected = new LinkedHashMap<>(); + menuItem( expected ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void checkBoxMenuItem() { + JCheckBoxMenuItem c = new JCheckBoxMenuItem(); + FlatCheckBoxMenuItemUI ui = (FlatCheckBoxMenuItemUI) c.getUI(); + + Map> expected = new LinkedHashMap<>(); + menuItem( expected ); + menuItem_checkIcon( expected ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void radioButtonMenuItem() { + JRadioButtonMenuItem c = new JRadioButtonMenuItem(); + FlatRadioButtonMenuItemUI ui = (FlatRadioButtonMenuItemUI) c.getUI(); + + Map> expected = new LinkedHashMap<>(); + menuItem( expected ); + menuItem_checkIcon( expected ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + private void menuItem( Map> expected ) { + expectedMap( expected, + "selectionBackground", Color.class, + "selectionForeground", Color.class, + "disabledForeground", Color.class, + "acceleratorForeground", Color.class, + "acceleratorSelectionForeground", Color.class, + "acceleratorFont", Font.class + ); + + menuItemRenderer( expected ); + } + + private void menuItemRenderer( Map> expected ) { + expectedMap( expected, + "verticallyAlignText", boolean.class, + "minimumWidth", int.class, + "minimumIconSize", Dimension.class, + "textAcceleratorGap", int.class, + "textNoAcceleratorGap", int.class, + "acceleratorArrowGap", int.class, + + "checkBackground", Color.class, + "checkMargins", Insets.class, + + "underlineSelectionBackground", Color.class, + "underlineSelectionCheckBackground", Color.class, + "underlineSelectionColor", Color.class, + "underlineSelectionHeight", int.class + ); + } + + private void menuItem_checkIcon( Map> expected ) { + expectedMap( expected, + "icon.checkmarkColor", Color.class, + "icon.disabledCheckmarkColor", Color.class, + "selectionForeground", Color.class + ); + } + + private void menuItem_arrowIcon( Map> expected ) { + expectedMap( expected, + "icon.arrowType", String.class, + "icon.arrowColor", Color.class, + "icon.disabledArrowColor", Color.class, + "selectionForeground", Color.class + ); + } + + @Test + void panel() { + JPanel c = new JPanel(); + FlatPanelUI ui = (FlatPanelUI) c.getUI(); + + Map> expected = expectedMap( + "arc", int.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void passwordField() { + JPasswordField c = new JPasswordField(); + FlatPasswordFieldUI ui = (FlatPasswordFieldUI) c.getUI(); + + Map> expected = new LinkedHashMap<>(); + expectedMap( expected, + "showCapsLock", boolean.class, + "showRevealButton", boolean.class + ); + + // FlatPasswordFieldUI extends FlatTextFieldUI + textField( expected ); + + expectedMap( expected, + // capsLockIcon + "capsLockIconColor", Color.class + ); + + // border + flatTextBorder( expected ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void popupMenu() { + JPopupMenu c = new JPopupMenu(); + FlatPopupMenuUI ui = (FlatPopupMenuUI) c.getUI(); + + Map> expected = expectedMap( + "arrowType", String.class, + "scrollArrowColor", Color.class, + "hoverScrollArrowBackground", Color.class, + + "borderInsets", Insets.class, + "borderColor", Color.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void popupMenuSeparator() { + JPopupMenu.Separator c = new JPopupMenu.Separator(); + FlatPopupMenuSeparatorUI ui = (FlatPopupMenuSeparatorUI) c.getUI(); + + Map> expected = new LinkedHashMap<>(); + + // FlatPopupMenuSeparatorUI extends FlatSeparatorUI + separator( expected ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void progressBar() { + JProgressBar c = new JProgressBar(); + FlatProgressBarUI ui = (FlatProgressBarUI) c.getUI(); + + Map> expected = expectedMap( + "arc", int.class, + "horizontalSize", Dimension.class, + "verticalSize", Dimension.class, + + "largeHeight", boolean.class, + "square", boolean.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void radioButton() { + JRadioButton c = new JRadioButton(); + FlatRadioButtonUI ui = (FlatRadioButtonUI) c.getUI(); + + assertTrue( ui.getDefaultIcon() instanceof FlatRadioButtonIcon ); + + Map> expected = new LinkedHashMap<>(); + radioButton( expected ); + + expectedMap( expected, + "icon.centerDiameter", float.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + private void radioButton( Map> expected ) { + expectedMap( expected, + "disabledText", Color.class, + + //---- icon ---- + + "icon.focusWidth", float.class, + "icon.focusColor", Color.class, + "icon.borderWidth", float.class, + "icon.selectedBorderWidth", float.class, + "icon.disabledSelectedBorderWidth", float.class, + "icon.arc", int.class, + + // enabled + "icon.borderColor", Color.class, + "icon.background", Color.class, + "icon.selectedBorderColor", Color.class, + "icon.selectedBackground", Color.class, + "icon.checkmarkColor", Color.class, + + // disabled + "icon.disabledBorderColor", Color.class, + "icon.disabledBackground", Color.class, + "icon.disabledSelectedBorderColor", Color.class, + "icon.disabledSelectedBackground", Color.class, + "icon.disabledCheckmarkColor", Color.class, + + // focused + "icon.focusedBorderColor", Color.class, + "icon.focusedBackground", Color.class, + "icon.focusedSelectedBorderColor", Color.class, + "icon.focusedSelectedBackground", Color.class, + "icon.focusedCheckmarkColor", Color.class, + + // hover + "icon.hoverBorderColor", Color.class, + "icon.hoverBackground", Color.class, + "icon.hoverSelectedBorderColor", Color.class, + "icon.hoverSelectedBackground", Color.class, + "icon.hoverCheckmarkColor", Color.class, + + // pressed + "icon.pressedBorderColor", Color.class, + "icon.pressedBackground", Color.class, + "icon.pressedSelectedBorderColor", Color.class, + "icon.pressedSelectedBackground", Color.class, + "icon.pressedCheckmarkColor", Color.class + ); + } + + @Test + void scrollBar() { + JScrollBar c = new JScrollBar(); + FlatScrollBarUI ui = (FlatScrollBarUI) c.getUI(); + + Map> expected = expectedMap( + "track", Color.class, + "thumb", Color.class, + "width", int.class, + "minimumThumbSize", Dimension.class, + "maximumThumbSize", Dimension.class, + "allowsAbsolutePositioning", boolean.class, + + "minimumButtonSize", Dimension.class, + "trackInsets", Insets.class, + "thumbInsets", Insets.class, + "trackArc", int.class, + "thumbArc", int.class, + "hoverTrackColor", Color.class, + "hoverThumbColor", Color.class, + "hoverThumbWithTrack", boolean.class, + "pressedTrackColor", Color.class, + "pressedThumbColor", Color.class, + "pressedThumbWithTrack", boolean.class, + + "showButtons", boolean.class, + "arrowType", String.class, + "buttonArrowColor", Color.class, + "buttonDisabledArrowColor", Color.class, + "hoverButtonBackground", Color.class, + "pressedButtonBackground", Color.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void scrollPane() { + JScrollPane c = new JScrollPane(); + FlatScrollPaneUI ui = (FlatScrollPaneUI) c.getUI(); + + Map> expected = expectedMap( + "showButtons", Boolean.class + ); + + // border + flatBorder( expected ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void separator() { + JSeparator c = new JSeparator(); + FlatSeparatorUI ui = (FlatSeparatorUI) c.getUI(); + + Map> expected = new LinkedHashMap<>(); + separator( expected ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + private void separator( Map> expected ) { + expectedMap( expected, + "height", int.class, + "stripeWidth", int.class, + "stripeIndent", int.class + ); + } + + @Test + void slider() { + JSlider c = new JSlider(); + FlatSliderUI ui = (FlatSliderUI) c.getUI(); + + Map> expected = expectedMap( + "trackWidth", int.class, + "thumbSize", Dimension.class, + "focusWidth", int.class, + "thumbBorderWidth", float.class, + + "trackValueColor", Color.class, + "trackColor", Color.class, + "thumbColor", Color.class, + "thumbBorderColor", Color.class, + "focusedColor", Color.class, + "focusedThumbBorderColor", Color.class, + "hoverThumbColor", Color.class, + "pressedThumbColor", Color.class, + "disabledTrackColor", Color.class, + "disabledThumbColor", Color.class, + "disabledThumbBorderColor", Color.class, + "tickColor", Color.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void spinner() { + JSpinner c = new JSpinner(); + FlatSpinnerUI ui = (FlatSpinnerUI) c.getUI(); + + Map> expected = expectedMap( + "minimumWidth", int.class, + "buttonStyle", String.class, + "arrowType", String.class, + "disabledBackground", Color.class, + "disabledForeground", Color.class, + "focusedBackground", Color.class, + "buttonBackground", Color.class, + "buttonSeparatorWidth", float.class, + "buttonSeparatorColor", Color.class, + "buttonDisabledSeparatorColor", Color.class, + "buttonArrowColor", Color.class, + "buttonDisabledArrowColor", Color.class, + "buttonHoverArrowColor", Color.class, + "buttonPressedArrowColor", Color.class, + "padding", Insets.class + ); + + // border + flatRoundBorder( expected ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void splitPane() { + JSplitPane c = new JSplitPane(); + FlatSplitPaneUI ui = (FlatSplitPaneUI) c.getUI(); + + Map> expected = expectedMap( + "arrowType", String.class, + "oneTouchArrowColor", Color.class, + "oneTouchHoverArrowColor", Color.class, + "oneTouchPressedArrowColor", Color.class, + + "style", String.class, + "gripColor", Color.class, + "gripDotCount", int.class, + "gripDotSize", int.class, + "gripGap", int.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void tabbedPane() { + JTabbedPane c = new JTabbedPane(); + FlatTabbedPaneUI ui = (FlatTabbedPaneUI) c.getUI(); + + Map> expected = expectedMap( + "tabInsets", Insets.class, + "tabAreaInsets", Insets.class, + "textIconGap", int.class, + + "disabledForeground", Color.class, + + "selectedBackground", Color.class, + "selectedForeground", Color.class, + "underlineColor", Color.class, + "disabledUnderlineColor", Color.class, + "hoverColor", Color.class, + "focusColor", Color.class, + "tabSeparatorColor", Color.class, + "contentAreaColor", Color.class, + + "minimumTabWidth", int.class, + "maximumTabWidth", int.class, + "tabHeight", int.class, + "tabSelectionHeight", int.class, + "cardTabSelectionHeight", int.class, + "contentSeparatorHeight", int.class, + "showTabSeparators", boolean.class, + "tabSeparatorsFullHeight", boolean.class, + "hasFullBorder", boolean.class, + "tabsOpaque", boolean.class, + + "tabType", String.class, + "tabsPopupPolicy", String.class, + "scrollButtonsPolicy", String.class, + "scrollButtonsPlacement", String.class, + + "tabAreaAlignment", String.class, + "tabAlignment", String.class, + "tabWidthMode", String.class, + + "arrowType", String.class, + "buttonInsets", Insets.class, + "buttonArc", int.class, + "buttonHoverBackground", Color.class, + "buttonPressedBackground", Color.class, + + "moreTabsButtonToolTipText", String.class, + "tabCloseToolTipText", String.class, + + "showContentSeparator", boolean.class, + "hideTabAreaWithOneTab", boolean.class, + "tabClosable", boolean.class, + "tabIconPlacement", int.class, + + // FlatTabbedPaneCloseIcon + "closeSize", Dimension.class, + "closeArc", int.class, + "closeCrossPlainSize", float.class, + "closeCrossFilledSize", float.class, + "closeCrossLineWidth", float.class, + "closeBackground", Color.class, + "closeForeground", Color.class, + "closeHoverBackground", Color.class, + "closeHoverForeground", Color.class, + "closePressedBackground", Color.class, + "closePressedForeground", Color.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void table() { + JTable c = new JTable(); + FlatTableUI ui = (FlatTableUI) c.getUI(); + + Map> expected = expectedMap( + "showTrailingVerticalLine", boolean.class, + "selectionBackground", Color.class, + "selectionForeground", Color.class, + "selectionInactiveBackground", Color.class, + "selectionInactiveForeground", Color.class, + + // FlatTableCellBorder + "cellMargins", Insets.class, + "cellFocusColor", Color.class, + "showCellFocusIndicator", Boolean.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void tableHeader() { + JTableHeader c = new JTableHeader(); + FlatTableHeaderUI ui = (FlatTableHeaderUI) c.getUI(); + + Map> expected = expectedMap( + "bottomSeparatorColor", Color.class, + "height", int.class, + "sortIconPosition", String.class, + + // FlatTableHeaderBorder + "cellMargins", Insets.class, + "separatorColor", Color.class, + "showTrailingVerticalLine", Boolean.class, + + // FlatAscendingSortIcon and FlatDescendingSortIcon + "arrowType", String.class, + "sortIconColor", Color.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void textArea() { + JTextArea c = new JTextArea(); + FlatTextAreaUI ui = (FlatTextAreaUI) c.getUI(); + + Map> expected = expectedMap( + "minimumWidth", int.class, + "disabledBackground", Color.class, + "inactiveBackground", Color.class, + "focusedBackground", Color.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void textField() { + JTextField c = new JTextField(); + FlatTextFieldUI ui = (FlatTextFieldUI) c.getUI(); + + Map> expected = new LinkedHashMap<>(); + textField( expected ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + private void textField( Map> expected ) { + expectedMap( expected, + "minimumWidth", int.class, + "disabledBackground", Color.class, + "inactiveBackground", Color.class, + "placeholderForeground", Color.class, + "focusedBackground", Color.class, + "iconTextGap", int.class, + "leadingIcon", Icon.class, + "trailingIcon", Icon.class, + "showClearButton", boolean.class + ); + + // border + flatTextBorder( expected ); + } + + @Test + void textPane() { + JTextPane c = new JTextPane(); + FlatTextPaneUI ui = (FlatTextPaneUI) c.getUI(); + + Map> expected = expectedMap( + "minimumWidth", int.class, + "disabledBackground", Color.class, + "inactiveBackground", Color.class, + "focusedBackground", Color.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void toggleButton() { + JToggleButton b = new JToggleButton(); + FlatToggleButtonUI ui = (FlatToggleButtonUI) b.getUI(); + + Map> expected = expectedMap( + "tab.underlineHeight", int.class, + "tab.underlineColor", Color.class, + "tab.disabledUnderlineColor", Color.class, + "tab.selectedBackground", Color.class, + "tab.hoverBackground", Color.class, + "tab.focusBackground", Color.class + ); + + // FlatToggleButtonUI extends FlatButtonUI + button( expected ); + + assertMapEquals( expected, ui.getStyleableInfos( b ) ); + } + + @Test + void toolBar() { + JToolBar c = new JToolBar(); + FlatToolBarUI ui = (FlatToolBarUI) c.getUI(); + + Map> expected = expectedMap( + "focusableButtons", boolean.class, + "arrowKeysOnlyNavigation", boolean.class, + + "borderMargins", Insets.class, + "gripColor", Color.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void toolBarSeparator() { + JToolBar.Separator c = new JToolBar.Separator(); + FlatToolBarSeparatorUI ui = (FlatToolBarSeparatorUI) c.getUI(); + + Map> expected = expectedMap( + "separatorWidth", int.class, + "separatorColor", Color.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + @Test + void tree() { + JTree c = new JTree(); + FlatTreeUI ui = (FlatTreeUI) c.getUI(); + + Map> expected = expectedMap( + "selectionBackground", Color.class, + "selectionForeground", Color.class, + "selectionInactiveBackground", Color.class, + "selectionInactiveForeground", Color.class, + "selectionBorderColor", Color.class, + "wideSelection", boolean.class, + "showCellFocusIndicator", boolean.class, + + "paintSelection", boolean.class, + + // icons + "icon.arrowType", String.class, + "icon.expandedColor", Color.class, + "icon.collapsedColor", Color.class, + "icon.leafColor", Color.class, + "icon.closedColor", Color.class, + "icon.openColor", Color.class + ); + + assertMapEquals( expected, ui.getStyleableInfos( c ) ); + } + + //---- component borders -------------------------------------------------- + + private void flatButtonBorder( Map> expected ) { + flatBorder( expected ); + + expectedMap( expected, + "arc", int.class, + + "borderColor", Color.class, + "disabledBorderColor", Color.class, + "focusedBorderColor", Color.class, + "hoverBorderColor", Color.class, + + "default.borderWidth", float.class, + "default.borderColor", Color.class, + "default.focusedBorderColor", Color.class, + "default.focusColor", Color.class, + "default.hoverBorderColor", Color.class, + + "toolbar.focusWidth", float.class, + "toolbar.focusColor", Color.class, + "toolbar.margin", Insets.class, + "toolbar.spacingInsets", Insets.class + ); + } + + private void flatRoundBorder( Map> expected ) { + flatBorder( expected ); + + expectedMap( expected, + "arc", int.class, + + "roundRect", Boolean.class + ); + } + + private void flatTextBorder( Map> expected ) { + flatBorder( expected ); + + expectedMap( expected, + "arc", int.class, + + "roundRect", Boolean.class + ); + } + + private void flatBorder( Map> expected ) { + expectedMap( expected, + "focusWidth", int.class, + "innerFocusWidth", float.class, + "innerOutlineWidth", float.class, + "borderWidth", float.class, + + "focusColor", Color.class, + "borderColor", Color.class, + "disabledBorderColor", Color.class, + "focusedBorderColor", Color.class, + + "error.borderColor", Color.class, + "error.focusedBorderColor", Color.class, + "warning.borderColor", Color.class, + "warning.focusedBorderColor", Color.class, + "custom.borderColor", Color.class, + + "outline", String.class, + "outlineColor", Color.class, + "outlineFocusedColor", Color.class + ); + } + + //---- borders ------------------------------------------------------------ + + @Test + void flatButtonBorder() { + FlatButtonBorder border = new FlatButtonBorder(); + + Map> expected = new LinkedHashMap<>(); + flatButtonBorder( expected ); + + assertMapEquals( expected, border.getStyleableInfos() ); + } + + @Test + void flatRoundBorder() { + FlatRoundBorder border = new FlatRoundBorder(); + + Map> expected = new LinkedHashMap<>(); + flatRoundBorder( expected ); + + assertMapEquals( expected, border.getStyleableInfos() ); + } + + @Test + void flatTextBorder() { + FlatTextBorder border = new FlatTextBorder(); + + Map> expected = new LinkedHashMap<>(); + flatTextBorder( expected ); + + assertMapEquals( expected, border.getStyleableInfos() ); + } + + @Test + void flatBorder() { + FlatBorder border = new FlatBorder(); + + Map> expected = new LinkedHashMap<>(); + flatBorder( expected ); + + assertMapEquals( expected, border.getStyleableInfos() ); + } + + //---- icons -------------------------------------------------------------- + + @Test + void flatCheckBoxIcon() { + FlatCheckBoxIcon icon = new FlatCheckBoxIcon(); + + Map> expected = new LinkedHashMap<>(); + flatCheckBoxIcon( expected ); + + assertMapEquals( expected, icon.getStyleableInfos() ); + } + + @Test + void flatRadioButtonIcon() { + FlatRadioButtonIcon icon = new FlatRadioButtonIcon(); + + // FlatRadioButtonIcon extends FlatCheckBoxIcon + Map> expected = new LinkedHashMap<>(); + flatCheckBoxIcon( expected ); + + expectedMap( expected, + "centerDiameter", float.class + ); + + assertMapEquals( expected, icon.getStyleableInfos() ); + } + + private void flatCheckBoxIcon( Map> expected ) { + expectedMap( expected, + "focusWidth", float.class, + "focusColor", Color.class, + "borderWidth", float.class, + "selectedBorderWidth", float.class, + "disabledSelectedBorderWidth", float.class, + "arc", int.class, + + // enabled + "borderColor", Color.class, + "background", Color.class, + "selectedBorderColor", Color.class, + "selectedBackground", Color.class, + "checkmarkColor", Color.class, + + // disabled + "disabledBorderColor", Color.class, + "disabledBackground", Color.class, + "disabledSelectedBorderColor", Color.class, + "disabledSelectedBackground", Color.class, + "disabledCheckmarkColor", Color.class, + + // focused + "focusedBorderColor", Color.class, + "focusedBackground", Color.class, + "focusedSelectedBorderColor", Color.class, + "focusedSelectedBackground", Color.class, + "focusedCheckmarkColor", Color.class, + + // hover + "hoverBorderColor", Color.class, + "hoverBackground", Color.class, + "hoverSelectedBorderColor", Color.class, + "hoverSelectedBackground", Color.class, + "hoverCheckmarkColor", Color.class, + + // pressed + "pressedBorderColor", Color.class, + "pressedBackground", Color.class, + "pressedSelectedBorderColor", Color.class, + "pressedSelectedBackground", Color.class, + "pressedCheckmarkColor", Color.class + ); + } + + @Test + void flatCheckBoxMenuItemIcon() { + FlatCheckBoxMenuItemIcon icon = new FlatCheckBoxMenuItemIcon(); + + Map> expected = new LinkedHashMap<>(); + flatCheckBoxMenuItemIcon( expected ); + + assertMapEquals( expected, icon.getStyleableInfos() ); + } + + @Test + void flatRadioButtonMenuItemIcon() { + FlatRadioButtonMenuItemIcon icon = new FlatRadioButtonMenuItemIcon(); + + // FlatRadioButtonMenuItemIcon extends FlatCheckBoxMenuItemIcon + Map> expected = new LinkedHashMap<>(); + flatCheckBoxMenuItemIcon( expected ); + + assertMapEquals( expected, icon.getStyleableInfos() ); + } + + private void flatCheckBoxMenuItemIcon( Map> expected ) { + expectedMap( expected, + "checkmarkColor", Color.class, + "disabledCheckmarkColor", Color.class, + "selectionForeground", Color.class + ); + } + + @Test + void flatMenuArrowIcon() { + FlatMenuArrowIcon icon = new FlatMenuArrowIcon(); + + Map> expected = new LinkedHashMap<>(); + flatMenuArrowIcon( expected ); + + assertMapEquals( expected, icon.getStyleableInfos() ); + } + + private void flatMenuArrowIcon( Map> expected ) { + expectedMap( expected, + "arrowType", String.class, + "arrowColor", Color.class, + "disabledArrowColor", Color.class, + "selectionForeground", Color.class + ); + } + + @Test + void flatHelpButtonIcon() { + FlatHelpButtonIcon icon = new FlatHelpButtonIcon(); + + Map> expected = expectedMap( + "focusWidth", int.class, + "focusColor", Color.class, + "innerFocusWidth", float.class, + "borderWidth", int.class, + + "borderColor", Color.class, + "disabledBorderColor", Color.class, + "focusedBorderColor", Color.class, + "hoverBorderColor", Color.class, + "background", Color.class, + "disabledBackground", Color.class, + "focusedBackground", Color.class, + "hoverBackground", Color.class, + "pressedBackground", Color.class, + "questionMarkColor", Color.class, + "disabledQuestionMarkColor", Color.class + ); + + assertMapEquals( expected, icon.getStyleableInfos() ); + } +} diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java new file mode 100644 index 00000000..c85be429 --- /dev/null +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java @@ -0,0 +1,1461 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.ui; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Insets; +import java.util.HashMap; +import java.util.Map; +import java.util.function.Consumer; +import javax.swing.*; +import javax.swing.table.JTableHeader; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; +import com.formdev.flatlaf.icons.*; +import com.formdev.flatlaf.util.ColorFunctions; + +/** + * @author Karl Tauber + */ +public class TestFlatStyling +{ + @BeforeAll + static void setup() { + TestUtils.setup( false ); + } + + @AfterAll + static void cleanup() { + TestUtils.cleanup(); + } + + @Test + void parse() { + assertEquals( null, FlatStylingSupport.parse( null ) ); + assertEquals( null, FlatStylingSupport.parse( "" ) ); + assertEquals( null, FlatStylingSupport.parse( " " ) ); + assertEquals( null, FlatStylingSupport.parse( ";" ) ); + assertEquals( null, FlatStylingSupport.parse( " ; ; " ) ); + + assertEquals( + expectedMap( "background", Color.WHITE ), + FlatStylingSupport.parse( "background: #fff" ) ); + assertEquals( + expectedMap( "background", Color.WHITE, "foreground", Color.BLACK ), + FlatStylingSupport.parse( "background: #fff; foreground: #000" ) ); + assertEquals( + expectedMap( "background", Color.WHITE, "foreground", Color.BLACK, "someWidth", 20 ), + FlatStylingSupport.parse( "background: #fff; foreground: #000; someWidth: 20" ) ); + } + + @Test + void parseIfFunction() { + testColorStyle( 0x00ff00, "if(#000,#0f0,#dfd)" ); + testColorStyle( 0xddffdd, "if(null,#0f0,#dfd)" ); + testColorStyle( 0x00ff00, "if(true,#0f0,#dfd)" ); + testColorStyle( 0xddffdd, "if(false,#0f0,#dfd)" ); + testColorStyle( 0x00ff00, "if(1,#0f0,#dfd)" ); + testColorStyle( 0xddffdd, "if(0,#0f0,#dfd)" ); + + // nested + testColorStyle( 0xff6666, "if(true,lighten(#f00,20%),darken(#f00,20%))" ); + testColorStyle( 0x990000, "if(false,lighten(#f00,20%),darken(#f00,20%))" ); + testColorStyle( 0xddffdd, "if($undefinedProp,#0f0,#dfd)" ); + testColorStyle( 0x33ff33, "lighten(if(#000,#0f0,#dfd), 10%)" ); + } + + @Test + void parseColorFunctions() { + // rgb, rgba, hsl, hsla + testColorStyle( 0x0c2238, "rgb(12,34,56)" ); + testColorStyle( 0x4e0c2238, "rgba(12,34,56,78)" ); + testColorStyle( 0xb57869, "hsl(12,34%,56%)" ); + testColorStyle( 0xc7b57869, "hsla(12,34%,56%,78%)" ); + + // lighten, darken + testColorStyle( 0xff6666, "lighten(#f00,20%)" ); + testColorStyle( 0x990000, "darken(#f00,20%)" ); + + // saturate, desaturate + testColorStyle( 0x9c3030, "saturate(#844,20%)" ); + testColorStyle( 0x745858, "desaturate(#844,20%)" ); + + // fadein, fadeout, fade + testColorStyle( 0x4dff0000, "fadein(#ff000000,30%)" ); + testColorStyle( 0x99ff0000, "fadeout(#ff0000,40%)" ); + testColorStyle( 0x80ff0000, "fade(#ff0000,50%)" ); + + // spin + testColorStyle( 0xffaa00, "spin(#f00,40)" ); + testColorStyle( 0xff00aa, "spin(#f00,-40)" ); + + // changeHue, changeSaturation, changeLightness, changeAlpha + testColorStyle( 0x00ffff, "changeHue(#f00,180)" ); + testColorStyle( 0xbf4040, "changeSaturation(#f00,50%)" ); + testColorStyle( 0xff9999, "changeLightness(#f00,80%)" ); + testColorStyle( 0x80ff0000, "changeAlpha(#f00,50%)" ); + + // mix + testColorStyle( 0x1ae600, "mix(#f00,#0f0,10%)" ); + testColorStyle( 0x40bf00, "mix(#f00,#0f0,25%)" ); + testColorStyle( 0x808000, "mix(#f00,#0f0)" ); + testColorStyle( 0xbf4000, "mix(#f00,#0f0,75%)" ); + testColorStyle( 0xe61a00, "mix(#f00,#0f0,90%)" ); + + // tint + testColorStyle( 0xff40ff, "tint(#f0f,25%)" ); + testColorStyle( 0xff80ff, "tint(#f0f)" ); + testColorStyle( 0xffbfff, "tint(#f0f,75%)" ); + + // shade + testColorStyle( 0xbf00bf, "shade(#f0f,25%)" ); + testColorStyle( 0x800080, "shade(#f0f)" ); + testColorStyle( 0x400040, "shade(#f0f,75%)" ); + + // contrast + testColorStyle( 0xffffff, "contrast(#111,#000,#fff)" ); + testColorStyle( 0x000000, "contrast(#eee,#000,#fff)" ); + + // nested + testColorStyle( 0xd1c7c7, "saturate(darken(#fff,20%),10%)" ); + testColorStyle( 0xcf00cf, "shade(shade(#f0f,10%),10%)" ); + testColorStyle( 0xba00ba, "shade(shade(shade(#f0f,10%),10%),10%)" ); + testColorStyle( 0x000000, "contrast(contrast(#222,#111,#eee),contrast(#eee,#000,#fff),contrast(#111,#000,#fff))" ); + } + + @Test + void parseReferences() { + UIManager.put( "Test.background", Color.white ); + assertEquals( Color.white, UIManager.getColor( "Test.background" ) ); + + testColorStyle( 0xffffff, "$Test.background" ); + testColorStyle( 0xcccccc, "darken($Test.background,20%)" ); + testColorStyle( 0xd1c7c7, "saturate(darken($Test.background,20%),10%)" ); + + testStyle( "hideMnemonics", true, "$Component.hideMnemonics" ); + testStyle( "arc", 6, "$Button.arc" ); + testStyle( "dropShadowOpacity", 0.15f, "$Popup.dropShadowOpacity" ); + testStyle( "margin", new Insets( 2, 14, 2, 14 ) , "$Button.margin" ); + testStyle( "iconSize", new Dimension( 64, 64 ), "$DesktopIcon.iconSize" ); + testStyle( "arrowType", "chevron", "$Component.arrowType" ); + } + + @Test + void parseVariables() { + Color background = UIManager.getColor( "Panel.background" ); + + testColorStyle( background.getRGB(), "@background" ); + testColorStyle( + ColorFunctions.darken( background, 0.2f ).getRGB(), + "darken(@background,20%)" ); + testColorStyle( + ColorFunctions.saturate( ColorFunctions.darken( background, 0.2f ), 0.1f ).getRGB(), + "saturate(darken(@background,20%),10%)" ); + } + + private void testColorStyle( int expectedRGB, String style ) { + testStyle( "background", new Color( expectedRGB, (expectedRGB & 0xff000000) != 0 ), style ); + } + + private void testStyle( String key, Object expected, String style ) { + assertEquals( + expectedMap( key, expected ), + FlatStylingSupport.parse( key + ": " + style ) ); + } + + private Map expectedMap( Object... keyValuePairs ) { + Map map = new HashMap<>(); + for( int i = 0; i < keyValuePairs.length; i += 2 ) + map.put( keyValuePairs[i], keyValuePairs[i+1] ); + return map; + } + + //---- components --------------------------------------------------------- + + @Test + void button() { + JButton b = new JButton(); + FlatButtonUI ui = (FlatButtonUI) b.getUI(); + + button( b, ui ); + + //---- FlatHelpButtonIcon ---- + + ui.applyStyle( b, "help.focusWidth: 2" ); + ui.applyStyle( b, "help.focusColor: #fff" ); + ui.applyStyle( b, "help.innerFocusWidth: 0.5" ); + ui.applyStyle( b, "help.borderWidth: 1" ); + + ui.applyStyle( b, "help.borderColor: #fff" ); + ui.applyStyle( b, "help.disabledBorderColor: #fff" ); + ui.applyStyle( b, "help.focusedBorderColor: #fff" ); + ui.applyStyle( b, "help.hoverBorderColor: #fff" ); + ui.applyStyle( b, "help.background: #fff" ); + ui.applyStyle( b, "help.disabledBackground: #fff" ); + ui.applyStyle( b, "help.focusedBackground: #fff" ); + ui.applyStyle( b, "help.hoverBackground: #fff" ); + ui.applyStyle( b, "help.pressedBackground: #fff" ); + ui.applyStyle( b, "help.questionMarkColor: #fff" ); + ui.applyStyle( b, "help.disabledQuestionMarkColor: #fff" ); + } + + private void button( AbstractButton b, FlatButtonUI ui ) { + ui.applyStyle( b, "minimumWidth: 100" ); + + ui.applyStyle( b, "focusedBackground: #fff" ); + ui.applyStyle( b, "hoverBackground: #fff" ); + ui.applyStyle( b, "pressedBackground: #fff" ); + ui.applyStyle( b, "selectedBackground: #fff" ); + ui.applyStyle( b, "selectedForeground: #fff" ); + ui.applyStyle( b, "disabledBackground: #fff" ); + ui.applyStyle( b, "disabledText: #fff" ); + ui.applyStyle( b, "disabledSelectedBackground: #fff" ); + + ui.applyStyle( b, "default.background: #fff" ); + ui.applyStyle( b, "default.foreground: #fff" ); + ui.applyStyle( b, "default.focusedBackground: #fff" ); + ui.applyStyle( b, "default.hoverBackground: #fff" ); + ui.applyStyle( b, "default.pressedBackground: #fff" ); + ui.applyStyle( b, "default.boldText: true" ); + + ui.applyStyle( b, "paintShadow: true" ); + ui.applyStyle( b, "shadowWidth: 2" ); + ui.applyStyle( b, "shadowColor: #fff" ); + ui.applyStyle( b, "default.shadowColor: #fff" ); + + ui.applyStyle( b, "toolbar.spacingInsets: 1,2,3,4" ); + ui.applyStyle( b, "toolbar.hoverBackground: #fff" ); + ui.applyStyle( b, "toolbar.pressedBackground: #fff" ); + ui.applyStyle( b, "toolbar.selectedBackground: #fff" ); + + ui.applyStyle( b, "buttonType: help" ); + ui.applyStyle( b, "squareSize: true" ); + ui.applyStyle( b, "minimumHeight: 100" ); + + // border + flatButtonBorder( style -> ui.applyStyle( b, style ) ); + + // JComponent properties + ui.applyStyle( b, "background: #fff" ); + ui.applyStyle( b, "foreground: #fff" ); + ui.applyStyle( b, "border: 2,2,2,2,#f00" ); + ui.applyStyle( b, "font: italic 12 monospaced" ); + + // AbstractButton properties + ui.applyStyle( b, "margin: 2,2,2,2" ); + ui.applyStyle( b, "iconTextGap: 4" ); + } + + @Test + void checkBox() { + JCheckBox c = new JCheckBox(); + FlatCheckBoxUI ui = (FlatCheckBoxUI) c.getUI(); + + assertTrue( ui.getDefaultIcon() instanceof FlatCheckBoxIcon ); + + // FlatCheckBoxUI extends FlatRadioButtonUI + radioButton( ui, c ); + } + + @Test + void comboBox() { + JComboBox c = new JComboBox<>(); + FlatComboBoxUI ui = (FlatComboBoxUI) c.getUI(); + + ui.applyStyle( "padding: 1,2,3,4" ); + + ui.applyStyle( "minimumWidth: 100" ); + ui.applyStyle( "editorColumns: 10" ); + ui.applyStyle( "buttonStyle: auto" ); + ui.applyStyle( "arrowType: chevron" ); + + ui.applyStyle( "editableBackground: #fff" ); + ui.applyStyle( "focusedBackground: #fff" ); + ui.applyStyle( "disabledBackground: #fff" ); + ui.applyStyle( "disabledForeground: #fff" ); + + ui.applyStyle( "buttonBackground: #fff" ); + ui.applyStyle( "buttonFocusedBackground: #fff" ); + ui.applyStyle( "buttonEditableBackground: #fff" ); + ui.applyStyle( "buttonSeparatorWidth: 1.5" ); + ui.applyStyle( "buttonSeparatorColor: #fff" ); + ui.applyStyle( "buttonDisabledSeparatorColor: #fff" ); + ui.applyStyle( "buttonArrowColor: #fff" ); + ui.applyStyle( "buttonDisabledArrowColor: #fff" ); + ui.applyStyle( "buttonHoverArrowColor: #fff" ); + ui.applyStyle( "buttonPressedArrowColor: #fff" ); + + ui.applyStyle( "popupBackground: #fff" ); + + // border + flatRoundBorder( style -> ui.applyStyle( style ) ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + ui.applyStyle( "font: italic 12 monospaced" ); + + // JComboBox properties + ui.applyStyle( "maximumRowCount: 20" ); + } + + @Test + void editorPane() { + JEditorPane c = new JEditorPane(); + FlatEditorPaneUI ui = (FlatEditorPaneUI) c.getUI(); + + ui.applyStyle( "minimumWidth: 100" ); + ui.applyStyle( "disabledBackground: #fff" ); + ui.applyStyle( "inactiveBackground: #fff" ); + ui.applyStyle( "focusedBackground: #fff" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + ui.applyStyle( "font: italic 12 monospaced" ); + + // JTextComponent properties + ui.applyStyle( "caretColor: #fff" ); + ui.applyStyle( "selectionColor: #fff" ); + ui.applyStyle( "selectedTextColor: #fff" ); + ui.applyStyle( "disabledTextColor: #fff" ); + ui.applyStyle( "margin: 2,2,2,2" ); + } + + @Test + void formattedTextField() { + JFormattedTextField c = new JFormattedTextField(); + FlatFormattedTextFieldUI ui = (FlatFormattedTextFieldUI) c.getUI(); + + // FlatFormattedTextFieldUI extends FlatTextFieldUI + textField( ui ); + } + + @Test + void internalFrame() { + JInternalFrame c = new JInternalFrame(); + FlatInternalFrameUI ui = (FlatInternalFrameUI) c.getUI(); + + ui.applyStyle( "activeBorderColor: #fff" ); + ui.applyStyle( "inactiveBorderColor: #fff" ); + ui.applyStyle( "borderLineWidth: 123" ); + ui.applyStyle( "dropShadowPainted: false" ); + ui.applyStyle( "borderMargins: 1,2,3,4" ); + + ui.applyStyle( "activeDropShadowColor: #fff" ); + ui.applyStyle( "activeDropShadowInsets: 1,2,3,4" ); + ui.applyStyle( "activeDropShadowOpacity: 0.5" ); + ui.applyStyle( "inactiveDropShadowColor: #fff" ); + ui.applyStyle( "inactiveDropShadowInsets: 1,2,3,4" ); + ui.applyStyle( "inactiveDropShadowOpacity: 0.5" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + } + + @Test + void label() { + JLabel c = new JLabel(); + FlatLabelUI ui = (FlatLabelUI) c.getUI(); + + ui.applyStyle( c, "disabledForeground: #fff" ); + + // JComponent properties + ui.applyStyle( c, "background: #fff" ); + ui.applyStyle( c, "foreground: #fff" ); + ui.applyStyle( c, "border: 2,2,2,2,#f00" ); + ui.applyStyle( c, "font: italic 12 monospaced" ); + + // JLabel properties + ui.applyStyle( c, "icon: com.formdev.flatlaf.icons.FlatTreeExpandedIcon" ); + } + + @Test + void list() { + JList c = new JList<>(); + FlatListUI ui = (FlatListUI) c.getUI(); + + ui.applyStyle( "selectionBackground: #fff" ); + ui.applyStyle( "selectionForeground: #fff" ); + ui.applyStyle( "selectionInactiveBackground: #fff" ); + ui.applyStyle( "selectionInactiveForeground: #fff" ); + + // FlatListCellBorder + ui.applyStyle( "cellMargins: 1,2,3,4" ); + ui.applyStyle( "cellFocusColor: #fff" ); + ui.applyStyle( "showCellFocusIndicator: true" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + ui.applyStyle( "font: italic 12 monospaced" ); + + // JList properties + ui.applyStyle( "visibleRowCount: 20" ); + } + + @Test + void menuBar() { + JMenuBar c = new JMenuBar(); + FlatMenuBarUI ui = (FlatMenuBarUI) c.getUI(); + + ui.applyStyle( "itemMargins: 1,2,3,4" ); + ui.applyStyle( "hoverBackground: #fff" ); + ui.applyStyle( "underlineSelectionBackground: #fff" ); + ui.applyStyle( "underlineSelectionColor: #fff" ); + ui.applyStyle( "underlineSelectionHeight: 3" ); + + // FlatMenuBarBorder + ui.applyStyle( "borderColor: #fff" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + ui.applyStyle( "font: italic 12 monospaced" ); + } + + @Test + void menu() { + JMenu c = new JMenu(); + FlatMenuUI ui = (FlatMenuUI) c.getUI(); + + Consumer applyStyle = style -> ui.applyStyle( style ); + menuItem( applyStyle ); + menuItem_arrowIcon( applyStyle ); + } + + @Test + void menuItem() { + JMenuItem c = new JMenuItem(); + FlatMenuItemUI ui = (FlatMenuItemUI) c.getUI(); + + Consumer applyStyle = style -> ui.applyStyle( style ); + menuItem( applyStyle ); + } + + @Test + void checkBoxMenuItem() { + JCheckBoxMenuItem c = new JCheckBoxMenuItem(); + FlatCheckBoxMenuItemUI ui = (FlatCheckBoxMenuItemUI) c.getUI(); + + Consumer applyStyle = style -> ui.applyStyle( style ); + menuItem( applyStyle ); + menuItem_checkIcon( applyStyle ); + } + + @Test + void radioButtonMenuItem() { + JRadioButtonMenuItem c = new JRadioButtonMenuItem(); + FlatRadioButtonMenuItemUI ui = (FlatRadioButtonMenuItemUI) c.getUI(); + + Consumer applyStyle = style -> ui.applyStyle( style ); + menuItem( applyStyle ); + menuItem_checkIcon( applyStyle ); + } + + private void menuItem( Consumer applyStyle ) { + applyStyle.accept( "selectionBackground: #fff" ); + applyStyle.accept( "selectionForeground: #fff" ); + applyStyle.accept( "disabledForeground: #fff" ); + applyStyle.accept( "acceleratorForeground: #fff" ); + applyStyle.accept( "acceleratorSelectionForeground: #fff" ); + applyStyle.accept( "acceleratorFont: italic 12 monospaced" ); + + menuItemRenderer( applyStyle ); + + // JComponent properties + applyStyle.accept( "background: #fff" ); + applyStyle.accept( "foreground: #fff" ); + applyStyle.accept( "border: 2,2,2,2,#f00" ); + applyStyle.accept( "font: italic 12 monospaced" ); + + // AbstractButton properties + applyStyle.accept( "margin: 2,2,2,2" ); + applyStyle.accept( "iconTextGap: 4" ); + } + + private void menuItemRenderer( Consumer applyStyle ) { + applyStyle.accept( "verticallyAlignText: false" ); + applyStyle.accept( "minimumWidth: 10" ); + applyStyle.accept( "minimumIconSize: 16,16" ); + applyStyle.accept( "textAcceleratorGap: 28" ); + applyStyle.accept( "textNoAcceleratorGap: 6" ); + applyStyle.accept( "acceleratorArrowGap: 2" ); + + applyStyle.accept( "checkBackground: #fff" ); + applyStyle.accept( "checkMargins: 1,2,3,4" ); + + applyStyle.accept( "underlineSelectionBackground: #fff" ); + applyStyle.accept( "underlineSelectionCheckBackground: #fff" ); + applyStyle.accept( "underlineSelectionColor: #fff" ); + applyStyle.accept( "underlineSelectionHeight: 3" ); + } + + private void menuItem_checkIcon( Consumer applyStyle ) { + applyStyle.accept( "icon.checkmarkColor: #fff" ); + applyStyle.accept( "icon.disabledCheckmarkColor: #fff" ); + applyStyle.accept( "selectionForeground: #fff" ); + } + + private void menuItem_arrowIcon( Consumer applyStyle ) { + applyStyle.accept( "icon.arrowType: chevron" ); + applyStyle.accept( "icon.arrowColor: #fff" ); + applyStyle.accept( "icon.disabledArrowColor: #fff" ); + applyStyle.accept( "selectionForeground: #fff" ); + } + + @Test + void panel() { + JPanel c = new JPanel(); + FlatPanelUI ui = (FlatPanelUI) c.getUI(); + + ui.applyStyle( c, "arc: 8" ); + + // JComponent properties + ui.applyStyle( c, "background: #fff" ); + ui.applyStyle( c, "foreground: #fff" ); + ui.applyStyle( c, "border: 2,2,2,2,#f00" ); + ui.applyStyle( c, "font: italic 12 monospaced" ); + } + + @Test + void passwordField() { + JPasswordField c = new JPasswordField(); + FlatPasswordFieldUI ui = (FlatPasswordFieldUI) c.getUI(); + + // FlatPasswordFieldUI extends FlatTextFieldUI + textField( ui ); + + ui.applyStyle( "showCapsLock: true" ); + ui.applyStyle( "showRevealButton: true" ); + + // capsLockIcon + ui.applyStyle( "capsLockIconColor: #fff" ); + + // border + flatTextBorder( style -> ui.applyStyle( style ) ); + } + + @Test + void popupMenu() { + JPopupMenu c = new JPopupMenu(); + FlatPopupMenuUI ui = (FlatPopupMenuUI) c.getUI(); + + ui.applyStyle( "arrowType: chevron" ); + ui.applyStyle( "scrollArrowColor: #fff" ); + ui.applyStyle( "hoverScrollArrowBackground: #fff" ); + + ui.applyStyle( "borderInsets: 1,2,3,4" ); + ui.applyStyle( "borderColor: #fff" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + } + + @Test + void popupMenuSeparator() { + JPopupMenu.Separator c = new JPopupMenu.Separator(); + FlatPopupMenuSeparatorUI ui = (FlatPopupMenuSeparatorUI) c.getUI(); + + // FlatPopupMenuSeparatorUI extends FlatSeparatorUI + separator( ui, c ); + } + + @Test + void progressBar() { + JProgressBar c = new JProgressBar(); + FlatProgressBarUI ui = (FlatProgressBarUI) c.getUI(); + + ui.applyStyle( "arc: 5" ); + ui.applyStyle( "horizontalSize: 100,12" ); + ui.applyStyle( "verticalSize: 12,100" ); + + ui.applyStyle( "largeHeight: true" ); + ui.applyStyle( "square: true" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + ui.applyStyle( "font: italic 12 monospaced" ); + } + + @Test + void radioButton() { + JRadioButton c = new JRadioButton(); + FlatRadioButtonUI ui = (FlatRadioButtonUI) c.getUI(); + + assertTrue( ui.getDefaultIcon() instanceof FlatRadioButtonIcon ); + + radioButton( ui, c ); + + ui.applyStyle( c, "icon.centerDiameter: 8" ); + } + + private void radioButton( FlatRadioButtonUI ui, AbstractButton b ) { + ui.applyStyle( b, "disabledText: #fff" ); + + // JComponent properties + ui.applyStyle( b, "background: #fff" ); + ui.applyStyle( b, "foreground: #fff" ); + ui.applyStyle( b, "border: 2,2,2,2,#f00" ); + ui.applyStyle( b, "font: italic 12 monospaced" ); + + // AbstractButton properties + ui.applyStyle( b, "margin: 2,2,2,2" ); + ui.applyStyle( b, "iconTextGap: 4" ); + + //---- icon ---- + + ui.applyStyle( b, "icon.focusWidth: 1.5" ); + ui.applyStyle( b, "icon.focusColor: #fff" ); + ui.applyStyle( b, "icon.borderWidth: 1.5" ); + ui.applyStyle( b, "icon.selectedBorderWidth: 1.5" ); + ui.applyStyle( b, "icon.disabledSelectedBorderWidth: 1.5" ); + ui.applyStyle( b, "icon.arc: 5" ); + + // enabled + ui.applyStyle( b, "icon.borderColor: #fff" ); + ui.applyStyle( b, "icon.background: #fff" ); + ui.applyStyle( b, "icon.selectedBorderColor: #fff" ); + ui.applyStyle( b, "icon.selectedBackground: #fff" ); + ui.applyStyle( b, "icon.checkmarkColor: #fff" ); + + // disabled + ui.applyStyle( b, "icon.disabledBorderColor: #fff" ); + ui.applyStyle( b, "icon.disabledBackground: #fff" ); + ui.applyStyle( b, "icon.disabledSelectedBorderColor: #fff" ); + ui.applyStyle( b, "icon.disabledSelectedBackground: #fff" ); + ui.applyStyle( b, "icon.disabledCheckmarkColor: #fff" ); + + // focused + ui.applyStyle( b, "icon.focusedBorderColor: #fff" ); + ui.applyStyle( b, "icon.focusedBackground: #fff" ); + ui.applyStyle( b, "icon.focusedSelectedBorderColor: #fff" ); + ui.applyStyle( b, "icon.focusedSelectedBackground: #fff" ); + ui.applyStyle( b, "icon.focusedCheckmarkColor: #fff" ); + + // hover + ui.applyStyle( b, "icon.hoverBorderColor: #fff" ); + ui.applyStyle( b, "icon.hoverBackground: #fff" ); + ui.applyStyle( b, "icon.hoverSelectedBorderColor: #fff" ); + ui.applyStyle( b, "icon.hoverSelectedBackground: #fff" ); + ui.applyStyle( b, "icon.hoverCheckmarkColor: #fff" ); + + // pressed + ui.applyStyle( b, "icon.pressedBorderColor: #fff" ); + ui.applyStyle( b, "icon.pressedBackground: #fff" ); + ui.applyStyle( b, "icon.pressedSelectedBorderColor: #fff" ); + ui.applyStyle( b, "icon.pressedSelectedBackground: #fff" ); + ui.applyStyle( b, "icon.pressedCheckmarkColor: #fff" ); + } + + @Test + void scrollBar() { + JScrollBar c = new JScrollBar(); + FlatScrollBarUI ui = (FlatScrollBarUI) c.getUI(); + + ui.applyStyle( "track: #fff" ); + ui.applyStyle( "thumb: #fff" ); + ui.applyStyle( "width: 10" ); + ui.applyStyle( "minimumThumbSize: 1,2" ); + ui.applyStyle( "maximumThumbSize: 1,2" ); + ui.applyStyle( "allowsAbsolutePositioning: true" ); + + ui.applyStyle( "minimumButtonSize: 1,2" ); + ui.applyStyle( "trackInsets: 1,2,3,4" ); + ui.applyStyle( "thumbInsets: 1,2,3,4" ); + ui.applyStyle( "trackArc: 5" ); + ui.applyStyle( "thumbArc: 10" ); + ui.applyStyle( "hoverTrackColor: #fff" ); + ui.applyStyle( "hoverThumbColor: #fff" ); + ui.applyStyle( "hoverThumbWithTrack: true" ); + ui.applyStyle( "pressedTrackColor: #fff" ); + ui.applyStyle( "pressedThumbColor: #fff" ); + ui.applyStyle( "pressedThumbWithTrack: true" ); + + ui.applyStyle( "showButtons: true" ); + ui.applyStyle( "arrowType: chevron" ); + ui.applyStyle( "buttonArrowColor: #fff" ); + ui.applyStyle( "buttonDisabledArrowColor: #fff" ); + ui.applyStyle( "hoverButtonBackground: #fff" ); + ui.applyStyle( "pressedButtonBackground: #fff" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + } + + @Test + void scrollPane() { + JScrollPane c = new JScrollPane(); + FlatScrollPaneUI ui = (FlatScrollPaneUI) c.getUI(); + + // border + flatBorder( style -> ui.applyStyle( style ) ); + + ui.applyStyle( "showButtons: true" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + ui.applyStyle( "viewportBorder: 2,2,2,2,#f00" ); + } + + @Test + void separator() { + JSeparator c = new JSeparator(); + FlatSeparatorUI ui = (FlatSeparatorUI) c.getUI(); + + separator( ui, c ); + } + + private void separator( FlatSeparatorUI ui, JSeparator c ) { + ui.applyStyle( c, "height: 6" ); + ui.applyStyle( c, "stripeWidth: 2" ); + ui.applyStyle( c, "stripeIndent: 10" ); + + // JComponent properties + ui.applyStyle( c, "background: #fff" ); + ui.applyStyle( c, "foreground: #fff" ); + ui.applyStyle( c, "border: 2,2,2,2,#f00" ); + } + + @Test + void slider() { + JSlider c = new JSlider(); + FlatSliderUI ui = (FlatSliderUI) c.getUI(); + + ui.applyStyle( "trackWidth: 2" ); + ui.applyStyle( "thumbSize: 12,12" ); + ui.applyStyle( "focusWidth: 4" ); + ui.applyStyle( "thumbBorderWidth: 1.5" ); + + ui.applyStyle( "trackValueColor: #fff" ); + ui.applyStyle( "trackColor: #fff" ); + ui.applyStyle( "thumbColor: #fff" ); + ui.applyStyle( "thumbBorderColor: #fff" ); + ui.applyStyle( "focusedColor: #fff" ); + ui.applyStyle( "focusedThumbBorderColor: #fff" ); + ui.applyStyle( "hoverThumbColor: #fff" ); + ui.applyStyle( "pressedThumbColor: #fff" ); + ui.applyStyle( "disabledTrackColor: #fff" ); + ui.applyStyle( "disabledThumbColor: #fff" ); + ui.applyStyle( "disabledThumbBorderColor: #fff" ); + ui.applyStyle( "tickColor: #fff" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + ui.applyStyle( "font: italic 12 monospaced" ); + + // JSlider properties + ui.applyStyle( "minimum: 0" ); + ui.applyStyle( "maximum: 50" ); + ui.applyStyle( "value: 20" ); + ui.applyStyle( "extent: 5" ); + ui.applyStyle( "majorTickSpacing: 10" ); + ui.applyStyle( "minorTickSpacing: 10" ); + ui.applyStyle( "inverted: true" ); + ui.applyStyle( "paintLabels: true" ); + ui.applyStyle( "paintTicks: true" ); + ui.applyStyle( "paintTrack: true" ); + ui.applyStyle( "snapToTicks: true" ); + } + + @Test + void spinner() { + JSpinner c = new JSpinner(); + FlatSpinnerUI ui = (FlatSpinnerUI) c.getUI(); + + ui.applyStyle( "minimumWidth: 100" ); + ui.applyStyle( "buttonStyle: button" ); + ui.applyStyle( "arrowType: chevron" ); + ui.applyStyle( "disabledBackground: #fff" ); + ui.applyStyle( "disabledForeground: #fff" ); + ui.applyStyle( "focusedBackground: #fff" ); + ui.applyStyle( "buttonBackground: #fff" ); + ui.applyStyle( "buttonSeparatorWidth: 1.5" ); + ui.applyStyle( "buttonSeparatorColor: #fff" ); + ui.applyStyle( "buttonDisabledSeparatorColor: #fff" ); + ui.applyStyle( "buttonArrowColor: #fff" ); + ui.applyStyle( "buttonDisabledArrowColor: #fff" ); + ui.applyStyle( "buttonHoverArrowColor: #fff" ); + ui.applyStyle( "buttonPressedArrowColor: #fff" ); + ui.applyStyle( "padding: 1,2,3,4" ); + + // border + flatRoundBorder( style -> ui.applyStyle( style ) ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + ui.applyStyle( "font: italic 12 monospaced" ); + } + + @Test + void splitPane() { + JSplitPane c = new JSplitPane(); + FlatSplitPaneUI ui = (FlatSplitPaneUI) c.getUI(); + + ui.applyStyle( "arrowType: chevron" ); + ui.applyStyle( "oneTouchArrowColor: #fff" ); + ui.applyStyle( "oneTouchHoverArrowColor: #fff" ); + ui.applyStyle( "oneTouchPressedArrowColor: #fff" ); + + ui.applyStyle( "style: grip" ); + ui.applyStyle( "gripColor: #fff" ); + ui.applyStyle( "gripDotCount: 3" ); + ui.applyStyle( "gripDotSize: 3" ); + ui.applyStyle( "gripGap: 2" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + + // JSplitPane properties + ui.applyStyle( "dividerSize: 20" ); + } + + @Test + void tabbedPane() { + JTabbedPane c = new JTabbedPane(); + FlatTabbedPaneUI ui = (FlatTabbedPaneUI) c.getUI(); + + ui.applyStyle( "tabInsets: 1,2,3,4" ); + ui.applyStyle( "tabAreaInsets: 1,2,3,4" ); + ui.applyStyle( "textIconGap: 4" ); + + ui.applyStyle( "disabledForeground: #fff" ); + + ui.applyStyle( "selectedBackground: #fff" ); + ui.applyStyle( "selectedForeground: #fff" ); + ui.applyStyle( "underlineColor: #fff" ); + ui.applyStyle( "disabledUnderlineColor: #fff" ); + ui.applyStyle( "hoverColor: #fff" ); + ui.applyStyle( "focusColor: #fff" ); + ui.applyStyle( "tabSeparatorColor: #fff" ); + ui.applyStyle( "contentAreaColor: #fff" ); + + ui.applyStyle( "minimumTabWidth: 50" ); + ui.applyStyle( "maximumTabWidth: 100" ); + ui.applyStyle( "tabHeight: 30" ); + ui.applyStyle( "tabSelectionHeight: 3" ); + ui.applyStyle( "cardTabSelectionHeight: 2" ); + ui.applyStyle( "contentSeparatorHeight: 1" ); + ui.applyStyle( "showTabSeparators: false" ); + ui.applyStyle( "tabSeparatorsFullHeight: false" ); + ui.applyStyle( "hasFullBorder: false" ); + ui.applyStyle( "tabsOpaque: false" ); + + ui.applyStyle( "tabType: card" ); + ui.applyStyle( "tabsPopupPolicy: asNeeded" ); + ui.applyStyle( "scrollButtonsPolicy: asNeeded" ); + ui.applyStyle( "scrollButtonsPlacement: both" ); + + ui.applyStyle( "tabAreaAlignment: leading" ); + ui.applyStyle( "tabAlignment: center" ); + ui.applyStyle( "tabWidthMode: preferred" ); + + ui.applyStyle( "arrowType: chevron" ); + ui.applyStyle( "buttonInsets: 1,2,3,4" ); + ui.applyStyle( "buttonArc: 3" ); + ui.applyStyle( "buttonHoverBackground: #fff" ); + ui.applyStyle( "buttonPressedBackground: #fff" ); + + ui.applyStyle( "moreTabsButtonToolTipText: Gimme more" ); + ui.applyStyle( "tabCloseToolTipText: Close me" ); + + ui.applyStyle( "showContentSeparator: true" ); + ui.applyStyle( "hideTabAreaWithOneTab: true" ); + ui.applyStyle( "tabClosable: true" ); + ui.applyStyle( "tabIconPlacement: top" ); + + // FlatTabbedPaneCloseIcon + ui.applyStyle( "closeSize: 16,16" ); + ui.applyStyle( "closeArc: 4" ); + ui.applyStyle( "closeCrossPlainSize: 7.5" ); + ui.applyStyle( "closeCrossFilledSize: 7.5" ); + ui.applyStyle( "closeCrossLineWidth: 1" ); + ui.applyStyle( "closeBackground: #fff" ); + ui.applyStyle( "closeForeground: #fff" ); + ui.applyStyle( "closeHoverBackground: #fff" ); + ui.applyStyle( "closeHoverForeground: #fff" ); + ui.applyStyle( "closePressedBackground: #fff" ); + ui.applyStyle( "closePressedForeground: #fff" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + ui.applyStyle( "font: italic 12 monospaced" ); + } + + @Test + void table() { + JTable c = new JTable(); + FlatTableUI ui = (FlatTableUI) c.getUI(); + + ui.applyStyle( "showTrailingVerticalLine: true" ); + ui.applyStyle( "selectionBackground: #fff" ); + ui.applyStyle( "selectionForeground: #fff" ); + ui.applyStyle( "selectionInactiveBackground: #fff" ); + ui.applyStyle( "selectionInactiveForeground: #fff" ); + + // FlatTableCellBorder + ui.applyStyle( "cellMargins: 1,2,3,4" ); + ui.applyStyle( "cellFocusColor: #fff" ); + ui.applyStyle( "showCellFocusIndicator: true" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "font: italic 12 monospaced" ); + + // JTable properties + ui.applyStyle( "fillsViewportHeight: true" ); + ui.applyStyle( "rowHeight: 30" ); + ui.applyStyle( "showHorizontalLines: true" ); + ui.applyStyle( "showVerticalLines: true" ); + ui.applyStyle( "intercellSpacing: 1,1" ); + } + + @Test + void tableHeader() { + JTableHeader c = new JTableHeader(); + FlatTableHeaderUI ui = (FlatTableHeaderUI) c.getUI(); + + ui.applyStyle( "bottomSeparatorColor: #fff" ); + ui.applyStyle( "height: 20" ); + ui.applyStyle( "sortIconPosition: top" ); + + // FlatTableHeaderBorder + ui.applyStyle( "cellMargins: 1,2,3,4" ); + ui.applyStyle( "separatorColor: #fff" ); + ui.applyStyle( "showTrailingVerticalLine: true" ); + + // FlatAscendingSortIcon and FlatDescendingSortIcon + ui.applyStyle( "arrowType: chevron" ); + ui.applyStyle( "sortIconColor: #fff" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "font: italic 12 monospaced" ); + } + + @Test + void textArea() { + JTextArea c = new JTextArea(); + FlatTextAreaUI ui = (FlatTextAreaUI) c.getUI(); + + ui.applyStyle( "minimumWidth: 100" ); + ui.applyStyle( "disabledBackground: #fff" ); + ui.applyStyle( "inactiveBackground: #fff" ); + ui.applyStyle( "focusedBackground: #fff" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + ui.applyStyle( "font: italic 12 monospaced" ); + + // JTextComponent properties + ui.applyStyle( "caretColor: #fff" ); + ui.applyStyle( "selectionColor: #fff" ); + ui.applyStyle( "selectedTextColor: #fff" ); + ui.applyStyle( "disabledTextColor: #fff" ); + ui.applyStyle( "margin: 2,2,2,2" ); + } + + @Test + void textField() { + JTextField c = new JTextField(); + FlatTextFieldUI ui = (FlatTextFieldUI) c.getUI(); + + textField( ui ); + } + + private void textField( FlatTextFieldUI ui ) { + ui.applyStyle( "minimumWidth: 100" ); + ui.applyStyle( "disabledBackground: #fff" ); + ui.applyStyle( "inactiveBackground: #fff" ); + ui.applyStyle( "placeholderForeground: #fff" ); + ui.applyStyle( "focusedBackground: #fff" ); + ui.applyStyle( "iconTextGap: 4" ); + ui.applyStyle( "leadingIcon: com.formdev.flatlaf.icons.FlatSearchIcon" ); + ui.applyStyle( "trailingIcon: com.formdev.flatlaf.icons.FlatClearIcon" ); + + ui.applyStyle( "showClearButton: true" ); + + // border + flatTextBorder( style -> ui.applyStyle( style ) ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + ui.applyStyle( "font: italic 12 monospaced" ); + + // JTextComponent properties + ui.applyStyle( "caretColor: #fff" ); + ui.applyStyle( "selectionColor: #fff" ); + ui.applyStyle( "selectedTextColor: #fff" ); + ui.applyStyle( "disabledTextColor: #fff" ); + ui.applyStyle( "margin: 2,2,2,2" ); + } + + @Test + void textPane() { + JTextPane c = new JTextPane(); + FlatTextPaneUI ui = (FlatTextPaneUI) c.getUI(); + + ui.applyStyle( "minimumWidth: 100" ); + ui.applyStyle( "disabledBackground: #fff" ); + ui.applyStyle( "inactiveBackground: #fff" ); + ui.applyStyle( "focusedBackground: #fff" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + ui.applyStyle( "font: italic 12 monospaced" ); + + // JTextComponent properties + ui.applyStyle( "caretColor: #fff" ); + ui.applyStyle( "selectionColor: #fff" ); + ui.applyStyle( "selectedTextColor: #fff" ); + ui.applyStyle( "disabledTextColor: #fff" ); + ui.applyStyle( "margin: 2,2,2,2" ); + } + + @Test + void toggleButton() { + JToggleButton b = new JToggleButton(); + FlatToggleButtonUI ui = (FlatToggleButtonUI) b.getUI(); + + // FlatToggleButtonUI extends FlatButtonUI + button( b, ui ); + + ui.applyStyle( b, "tab.underlineHeight: 3" ); + ui.applyStyle( b, "tab.underlineColor: #fff" ); + ui.applyStyle( b, "tab.disabledUnderlineColor: #fff" ); + ui.applyStyle( b, "tab.selectedBackground: #fff" ); + ui.applyStyle( b, "tab.hoverBackground: #fff" ); + ui.applyStyle( b, "tab.focusBackground: #fff" ); + } + + @Test + void toolBar() { + JToolBar c = new JToolBar(); + FlatToolBarUI ui = (FlatToolBarUI) c.getUI(); + + ui.applyStyle( "focusableButtons: true" ); + ui.applyStyle( "arrowKeysOnlyNavigation: true" ); + + ui.applyStyle( "borderMargins: 1,2,3,4" ); + ui.applyStyle( "gripColor: #fff" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + + // JToolBar properties + ui.applyStyle( "borderPainted: true" ); + ui.applyStyle( "floatable: true" ); + ui.applyStyle( "margin: 2,2,2,2" ); + ui.applyStyle( "rollover: true" ); + } + + @Test + void toolBarSeparator() { + JToolBar.Separator c = new JToolBar.Separator(); + FlatToolBarSeparatorUI ui = (FlatToolBarSeparatorUI) c.getUI(); + + ui.applyStyle( "separatorWidth: 6" ); + ui.applyStyle( "separatorColor: #fff" ); + } + + @Test + void tree() { + JTree c = new JTree(); + FlatTreeUI ui = (FlatTreeUI) c.getUI(); + + ui.applyStyle( "selectionBackground: #fff" ); + ui.applyStyle( "selectionForeground: #fff" ); + ui.applyStyle( "selectionInactiveBackground: #fff" ); + ui.applyStyle( "selectionInactiveForeground: #fff" ); + ui.applyStyle( "selectionBorderColor: #fff" ); + ui.applyStyle( "wideSelection: true" ); + ui.applyStyle( "showCellFocusIndicator: true" ); + + ui.applyStyle( "paintSelection: false" ); + + // icons + ui.applyStyle( "icon.arrowType: chevron" ); + ui.applyStyle( "icon.expandedColor: #fff" ); + ui.applyStyle( "icon.collapsedColor: #fff" ); + ui.applyStyle( "icon.leafColor: #fff" ); + ui.applyStyle( "icon.closedColor: #fff" ); + ui.applyStyle( "icon.openColor: #fff" ); + + // JComponent properties + ui.applyStyle( "background: #fff" ); + ui.applyStyle( "foreground: #fff" ); + ui.applyStyle( "border: 2,2,2,2,#f00" ); + ui.applyStyle( "font: italic 12 monospaced" ); + + // JTree properties + ui.applyStyle( "rootVisible: true" ); + ui.applyStyle( "rowHeight: 30" ); + ui.applyStyle( "scrollsOnExpand: true" ); + ui.applyStyle( "showsRootHandles: true" ); + ui.applyStyle( "visibleRowCount: 20" ); + } + + //---- component borders -------------------------------------------------- + + private void flatButtonBorder( Consumer applyStyle ) { + flatBorder( applyStyle ); + + applyStyle.accept( "arc: 6" ); + + applyStyle.accept( "borderColor: #fff" ); + applyStyle.accept( "disabledBorderColor: #fff" ); + applyStyle.accept( "focusedBorderColor: #fff" ); + applyStyle.accept( "hoverBorderColor: #fff" ); + + applyStyle.accept( "default.borderWidth: 2" ); + applyStyle.accept( "default.borderColor: #fff" ); + applyStyle.accept( "default.focusedBorderColor: #fff" ); + applyStyle.accept( "default.focusColor: #fff" ); + applyStyle.accept( "default.hoverBorderColor: #fff" ); + + applyStyle.accept( "toolbar.focusWidth: 1.5" ); + applyStyle.accept( "toolbar.focusColor: #fff" ); + applyStyle.accept( "toolbar.margin: 1,2,3,4" ); + applyStyle.accept( "toolbar.spacingInsets: 1,2,3,4" ); + } + + private void flatRoundBorder( Consumer applyStyle ) { + flatBorder( applyStyle ); + + applyStyle.accept( "arc: 6" ); + + applyStyle.accept( "roundRect: true" ); + } + + private void flatTextBorder( Consumer applyStyle ) { + flatBorder( applyStyle ); + + applyStyle.accept( "arc: 6" ); + + applyStyle.accept( "roundRect: true" ); + } + + private void flatBorder( Consumer applyStyle ) { + applyStyle.accept( "focusWidth: 2" ); + applyStyle.accept( "innerFocusWidth: 0.5" ); + applyStyle.accept( "innerOutlineWidth: 1.5" ); + applyStyle.accept( "borderWidth: 1" ); + + applyStyle.accept( "focusColor: #fff" ); + applyStyle.accept( "borderColor: #fff" ); + applyStyle.accept( "disabledBorderColor: #fff" ); + applyStyle.accept( "focusedBorderColor: #fff" ); + + applyStyle.accept( "error.borderColor: #fff" ); + applyStyle.accept( "error.focusedBorderColor: #fff" ); + applyStyle.accept( "warning.borderColor: #fff" ); + applyStyle.accept( "warning.focusedBorderColor: #fff" ); + applyStyle.accept( "custom.borderColor: desaturate(#f00,50%,relative derived noAutoInverse)" ); + + applyStyle.accept( "outline: error" ); + applyStyle.accept( "outlineColor: #fff" ); + applyStyle.accept( "outlineFocusedColor: #fff" ); + } + + //---- borders ------------------------------------------------------------ + + @Test + void flatButtonBorder() { + FlatButtonBorder border = new FlatButtonBorder(); + + // FlatButtonBorder extends FlatBorder + flatBorder( border ); + + border.applyStyleProperty( "arc", 6 ); + + border.applyStyleProperty( "borderColor", Color.WHITE ); + border.applyStyleProperty( "disabledBorderColor", Color.WHITE ); + border.applyStyleProperty( "focusedBorderColor", Color.WHITE ); + border.applyStyleProperty( "hoverBorderColor", Color.WHITE ); + + border.applyStyleProperty( "default.borderWidth", 2 ); + border.applyStyleProperty( "default.borderColor", Color.WHITE ); + border.applyStyleProperty( "default.focusedBorderColor", Color.WHITE ); + border.applyStyleProperty( "default.focusColor", Color.WHITE ); + border.applyStyleProperty( "default.hoverBorderColor", Color.WHITE ); + + border.applyStyleProperty( "toolbar.focusWidth", 1.5f ); + border.applyStyleProperty( "toolbar.focusColor", Color.WHITE ); + border.applyStyleProperty( "toolbar.margin", new Insets( 1, 2, 3, 4 ) ); + border.applyStyleProperty( "toolbar.spacingInsets", new Insets( 1, 2, 3, 4 ) ); + } + + @Test + void flatRoundBorder() { + FlatRoundBorder border = new FlatRoundBorder(); + + // FlatRoundBorder extends FlatBorder + flatBorder( border ); + + border.applyStyleProperty( "arc", 6 ); + } + + @Test + void flatTextBorder() { + FlatTextBorder border = new FlatTextBorder(); + + // FlatTextBorder extends FlatBorder + flatBorder( border ); + + border.applyStyleProperty( "arc", 6 ); + } + + @Test + void flatBorder() { + FlatBorder border = new FlatBorder(); + + flatBorder( border ); + } + + private void flatBorder( FlatBorder border ) { + border.applyStyleProperty( "focusWidth", 2 ); + border.applyStyleProperty( "innerFocusWidth", 0.5f ); + border.applyStyleProperty( "innerOutlineWidth", 1.5f ); + border.applyStyleProperty( "borderWidth", 1 ); + + border.applyStyleProperty( "focusColor", Color.WHITE ); + border.applyStyleProperty( "borderColor", Color.WHITE ); + border.applyStyleProperty( "disabledBorderColor", Color.WHITE ); + border.applyStyleProperty( "focusedBorderColor", Color.WHITE ); + + border.applyStyleProperty( "error.borderColor", Color.WHITE ); + border.applyStyleProperty( "error.focusedBorderColor", Color.WHITE ); + border.applyStyleProperty( "warning.borderColor", Color.WHITE ); + border.applyStyleProperty( "warning.focusedBorderColor", Color.WHITE ); + border.applyStyleProperty( "custom.borderColor", Color.WHITE ); + } + + //---- icons -------------------------------------------------------------- + + @Test + void flatCheckBoxIcon() { + FlatCheckBoxIcon icon = new FlatCheckBoxIcon(); + + flatCheckBoxIcon( icon ); + } + + @Test + void flatRadioButtonIcon() { + FlatRadioButtonIcon icon = new FlatRadioButtonIcon(); + + // FlatRadioButtonIcon extends FlatCheckBoxIcon + flatCheckBoxIcon( icon ); + + icon.applyStyleProperty( "centerDiameter", 8f ); + } + + private void flatCheckBoxIcon( FlatCheckBoxIcon icon ) { + icon.applyStyleProperty( "focusWidth", 1.5f ); + icon.applyStyleProperty( "focusColor", Color.WHITE ); + icon.applyStyleProperty( "borderWidth", 1.5f ); + icon.applyStyleProperty( "selectedBorderWidth", 1.5f ); + icon.applyStyleProperty( "disabledSelectedBorderWidth", 1.5f ); + icon.applyStyleProperty( "arc", 5 ); + + // enabled + icon.applyStyleProperty( "borderColor", Color.WHITE ); + icon.applyStyleProperty( "background", Color.WHITE ); + icon.applyStyleProperty( "selectedBorderColor", Color.WHITE ); + icon.applyStyleProperty( "selectedBackground", Color.WHITE ); + icon.applyStyleProperty( "checkmarkColor", Color.WHITE ); + + // disabled + icon.applyStyleProperty( "disabledBorderColor", Color.WHITE ); + icon.applyStyleProperty( "disabledBackground", Color.WHITE ); + icon.applyStyleProperty( "disabledSelectedBorderColor", Color.WHITE ); + icon.applyStyleProperty( "disabledSelectedBackground", Color.WHITE ); + icon.applyStyleProperty( "disabledCheckmarkColor", Color.WHITE ); + + // focused + icon.applyStyleProperty( "focusedBorderColor", Color.WHITE ); + icon.applyStyleProperty( "focusedBackground", Color.WHITE ); + icon.applyStyleProperty( "focusedSelectedBorderColor", Color.WHITE ); + icon.applyStyleProperty( "focusedSelectedBackground", Color.WHITE ); + icon.applyStyleProperty( "focusedCheckmarkColor", Color.WHITE ); + + // hover + icon.applyStyleProperty( "hoverBorderColor", Color.WHITE ); + icon.applyStyleProperty( "hoverBackground", Color.WHITE ); + icon.applyStyleProperty( "hoverSelectedBorderColor", Color.WHITE ); + icon.applyStyleProperty( "hoverSelectedBackground", Color.WHITE ); + icon.applyStyleProperty( "hoverCheckmarkColor", Color.WHITE ); + + // pressed + icon.applyStyleProperty( "pressedBorderColor", Color.WHITE ); + icon.applyStyleProperty( "pressedBackground", Color.WHITE ); + icon.applyStyleProperty( "pressedSelectedBorderColor", Color.WHITE ); + icon.applyStyleProperty( "pressedSelectedBackground", Color.WHITE ); + icon.applyStyleProperty( "pressedCheckmarkColor", Color.WHITE ); + } + + @Test + void flatCheckBoxMenuItemIcon() { + FlatCheckBoxMenuItemIcon icon = new FlatCheckBoxMenuItemIcon(); + + flatCheckBoxMenuItemIcon( icon ); + } + + @Test + void flatRadioButtonMenuItemIcon() { + FlatRadioButtonMenuItemIcon icon = new FlatRadioButtonMenuItemIcon(); + + // FlatRadioButtonMenuItemIcon extends FlatCheckBoxMenuItemIcon + flatCheckBoxMenuItemIcon( icon ); + } + + private void flatCheckBoxMenuItemIcon( FlatCheckBoxMenuItemIcon icon ) { + icon.applyStyleProperty( "checkmarkColor", Color.WHITE ); + icon.applyStyleProperty( "disabledCheckmarkColor", Color.WHITE ); + icon.applyStyleProperty( "selectionForeground", Color.WHITE ); + } + + @Test + void flatMenuArrowIcon() { + FlatMenuArrowIcon icon = new FlatMenuArrowIcon(); + + icon.applyStyleProperty( "arrowType", "chevron" ); + icon.applyStyleProperty( "arrowColor", Color.WHITE ); + icon.applyStyleProperty( "disabledArrowColor", Color.WHITE ); + icon.applyStyleProperty( "selectionForeground", Color.WHITE ); + } + + @Test + void flatHelpButtonIcon() { + FlatHelpButtonIcon icon = new FlatHelpButtonIcon(); + + icon.applyStyleProperty( "focusWidth", 2 ); + icon.applyStyleProperty( "focusColor", Color.WHITE ); + icon.applyStyleProperty( "innerFocusWidth", 0.5f ); + icon.applyStyleProperty( "borderWidth", 1 ); + + icon.applyStyleProperty( "borderColor", Color.WHITE ); + icon.applyStyleProperty( "disabledBorderColor", Color.WHITE ); + icon.applyStyleProperty( "focusedBorderColor", Color.WHITE ); + icon.applyStyleProperty( "hoverBorderColor", Color.WHITE ); + icon.applyStyleProperty( "background", Color.WHITE ); + icon.applyStyleProperty( "disabledBackground", Color.WHITE ); + icon.applyStyleProperty( "focusedBackground", Color.WHITE ); + icon.applyStyleProperty( "hoverBackground", Color.WHITE ); + icon.applyStyleProperty( "pressedBackground", Color.WHITE ); + icon.applyStyleProperty( "questionMarkColor", Color.WHITE ); + icon.applyStyleProperty( "disabledQuestionMarkColor", Color.WHITE ); + } + + @Test + void flatClearIcon() { + FlatClearIcon icon = new FlatClearIcon(); + + icon.applyStyleProperty( "clearIconColor", Color.WHITE ); + icon.applyStyleProperty( "clearIconHoverColor", Color.WHITE ); + icon.applyStyleProperty( "clearIconPressedColor", Color.WHITE ); + } + + @Test + void flatSearchIcon() { + FlatSearchIcon icon = new FlatSearchIcon(); + + flatSearchIcon( icon ); + } + + @Test + void flatSearchWithHistoryIcon() { + FlatSearchWithHistoryIcon icon = new FlatSearchWithHistoryIcon(); + + flatSearchIcon( icon ); + } + + private void flatSearchIcon( FlatSearchIcon icon ) { + icon.applyStyleProperty( "searchIconColor", Color.WHITE ); + icon.applyStyleProperty( "searchIconHoverColor", Color.WHITE ); + icon.applyStyleProperty( "searchIconPressedColor", Color.WHITE ); + } + + //---- enums -------------------------------------------------------------- + + enum SomeEnum { enumValue1, enumValue2 } + + static class ClassWithEnum { + SomeEnum enum1; + } + + @Test + void enumField() { + ClassWithEnum c = new ClassWithEnum(); + FlatStylingSupport.applyToField( c, "enum1", "enum1", "enumValue1" ); + FlatStylingSupport.applyToField( c, "enum1", "enum1", "enumValue2" ); + } + + @Test + void enumProperty() { + JList c = new JList<>(); + FlatListUI ui = (FlatListUI) c.getUI(); + ui.applyStyle( "dropMode: INSERT" ); + } + + @Test + void enumUIDefaults() { + UIManager.put( "test.enum", SomeEnum.enumValue1.toString() ); + assertEquals( SomeEnum.enumValue1, FlatUIUtils.getUIEnum( "test.enum", SomeEnum.class, null ) ); + + UIManager.put( "test.enum", "unknown" ); + assertEquals( null, FlatUIUtils.getUIEnum( "test.enum", SomeEnum.class, null ) ); + + UIManager.put( "test.enum", null ); + assertEquals( SomeEnum.enumValue1, FlatUIUtils.getUIEnum( "test.enum", SomeEnum.class, SomeEnum.enumValue1 ) ); + } +} diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatTextComponents.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatTextComponents.java new file mode 100644 index 00000000..7b70d134 --- /dev/null +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatTextComponents.java @@ -0,0 +1,157 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.ui; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static com.formdev.flatlaf.FlatClientProperties.STYLE; +import java.util.function.Supplier; +import javax.swing.JEditorPane; +import javax.swing.JFormattedTextField; +import javax.swing.JPasswordField; +import javax.swing.JTextArea; +import javax.swing.JTextField; +import javax.swing.JTextPane; +import javax.swing.UIManager; +import javax.swing.plaf.ColorUIResource; +import javax.swing.plaf.basic.BasicTextFieldUI; +import javax.swing.text.JTextComponent; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +/** + * @author Karl Tauber + */ +public class TestFlatTextComponents +{ + @BeforeAll + static void setup() { + TestUtils.setup( false ); + } + + @AfterAll + static void cleanup() { + TestUtils.cleanup(); + } + + @Test + void editorPane_updateBackground() { + textComponent_updateBackground( "EditorPane", JEditorPane::new ); + } + + @Test + void formattedTextField_updateBackground() { + textComponent_updateBackground( "FormattedTextField", JFormattedTextField::new ); + } + + @Test + void passwordField_updateBackground() { + textComponent_updateBackground( "PasswordField", JPasswordField::new ); + } + + @Test + void textArea_updateBackground() { + textComponent_updateBackground( "TextArea", JTextArea::new ); + } + + @Test + void textField_updateBackground() { + textComponent_updateBackground( "TextField", JTextField::new ); + } + + @Test + void textPane_updateBackground() { + textComponent_updateBackground( "TextPane", JTextPane::new ); + } + + @Test + void basicTextField_updateBackground() { + textComponent_updateBackground( "TextField", () -> { + JTextField c = new JTextField(); + c.setUI( new BasicTextFieldUI() ); + return c; + } ); + } + + private void textComponent_updateBackground( String prefix, Supplier createTextComponent ) { + ColorUIResource background = new ColorUIResource( 0xff0000 ); + ColorUIResource inactiveBackground = new ColorUIResource( 0x00ff00 ); + ColorUIResource disabledBackground = new ColorUIResource( 0x0000ff ); + + UIManager.put( prefix + ".background", background ); + UIManager.put( prefix + ".inactiveBackground", inactiveBackground ); + UIManager.put( prefix + ".disabledBackground", disabledBackground ); + + JTextComponent c = createTextComponent.get(); + + // without styling + assertEquals( background, c.getBackground() ); + c.setEditable( false ); assertEquals( inactiveBackground, c.getBackground() ); + c.setEnabled( false ); assertEquals( disabledBackground, c.getBackground() ); + c.setEditable( true ); assertEquals( disabledBackground, c.getBackground() ); + c.setEnabled( true ); assertEquals( background, c.getBackground() ); + + + if( !c.getUI().getClass().getSimpleName().startsWith( "Flat" ) ) + return; + + + // with styling + + ColorUIResource inactiveBackground1 = new ColorUIResource( 0x00ee00 ); + ColorUIResource disabledBackground1 = new ColorUIResource( 0x0000ee ); + ColorUIResource inactiveBackground2 = new ColorUIResource( 0x00dd00 ); + ColorUIResource disabledBackground2 = new ColorUIResource( 0x0000dd ); + String style1 = "inactiveBackground: #00ee00; disabledBackground: #0000ee"; + String style2 = "inactiveBackground: #00dd00; disabledBackground: #0000dd"; + + c.putClientProperty( STYLE, style1 ); + + assertEquals( background, c.getBackground() ); + c.setEditable( false ); assertEquals( inactiveBackground1, c.getBackground() ); + c.setEnabled( false ); assertEquals( disabledBackground1, c.getBackground() ); + c.setEditable( true ); assertEquals( disabledBackground1, c.getBackground() ); + c.setEnabled( true ); assertEquals( background, c.getBackground() ); + + c.putClientProperty( STYLE, null ); + assertEquals( background, c.getBackground() ); + + c.setEditable( false ); + c.putClientProperty( STYLE, style1 ); + assertEquals( inactiveBackground1, c.getBackground() ); + + c.putClientProperty( STYLE, null ); + assertEquals( inactiveBackground, c.getBackground() ); + + c.setEnabled( false ); + c.putClientProperty( STYLE, style1 ); + assertEquals( disabledBackground1, c.getBackground() ); + + + // change from style1 to style2 + c.putClientProperty( STYLE, style2 ); + assertEquals( disabledBackground2, c.getBackground() ); + + c.setEnabled( true ); + assertEquals( inactiveBackground2, c.getBackground() ); + + + // remove style + c.putClientProperty( STYLE, null ); + assertEquals( inactiveBackground, c.getBackground() ); + } +} diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestUtils.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestUtils.java new file mode 100644 index 00000000..d9399383 --- /dev/null +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestUtils.java @@ -0,0 +1,67 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.ui; + +import java.awt.Font; +import java.util.Map; +import java.util.Objects; +import javax.swing.UIManager; +import org.opentest4j.AssertionFailedError; +import com.formdev.flatlaf.FlatIntelliJLaf; +import com.formdev.flatlaf.FlatLightLaf; +import com.formdev.flatlaf.FlatSystemProperties; + +/** + * @author Karl Tauber + */ +public class TestUtils +{ + public static final float[] FACTORS = new float[] { 1f, 1.25f, 1.5f, 1.75f, 2f, 2.25f, 2.5f, 2.75f, 3f, 3.25f, 3.5f, 3.75f, 4f, 5f, 6f }; + + public static void setup( boolean withFocus ) { + System.setProperty( FlatSystemProperties.UI_SCALE, "1x" ); + if( withFocus ) + FlatIntelliJLaf.setup(); + else + FlatLightLaf.setup(); + System.clearProperty( FlatSystemProperties.UI_SCALE ); + } + + public static void cleanup() { + UIManager.put( "defaultFont", null ); + } + + public static void scaleFont( float factor ) { + Font defaultFont = UIManager.getLookAndFeelDefaults().getFont( "defaultFont" ); + UIManager.put( "defaultFont", defaultFont.deriveFont( (float) Math.round( defaultFont.getSize() * factor ) ) ); + } + + public static void resetFont() { + UIManager.put( "defaultFont", null ); + } + + public static void assertMapEquals( Map expected, Map actual ) { + if( !Objects.equals( expected, actual ) ) { + String expectedStr = String.valueOf( expected ).replace( ", ", ",\n" ); + String actualStr = String.valueOf( actual ).replace( ", ", ",\n" ); + String msg = String.format( "expected: <%s> but was: <%s>", expectedStr, actualStr ); + + // pass expected/actual strings to exception for nice diff in IDE + throw new AssertionFailedError( msg, expectedStr, actualStr ); + } + } +} diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/util/TestColorFunctions.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/util/TestColorFunctions.java new file mode 100644 index 00000000..960ff57a --- /dev/null +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/util/TestColorFunctions.java @@ -0,0 +1,75 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.util; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import java.awt.Color; +import org.junit.jupiter.api.Test; + +/** + * @author Karl Tauber + */ +public class TestColorFunctions +{ + @Test + void colorFunctions() { + assertEquals( new Color( 0xff6666 ), ColorFunctions.lighten( Color.red, 0.2f ) ); + assertEquals( new Color( 0x990000 ), ColorFunctions.darken( Color.red, 0.2f ) ); + + // saturate, desaturate + assertEquals( new Color( 0x9c3030 ), ColorFunctions.saturate( new Color( 0x884444 ), 0.2f ) ); + assertEquals( new Color( 0x745858 ), ColorFunctions.desaturate( new Color( 0x884444 ), 0.2f ) ); + + // spin + assertEquals( new Color( 0xffaa00 ), ColorFunctions.spin( Color.red,40 ) ); + assertEquals( new Color( 0xff00aa ), ColorFunctions.spin( Color.red,-40 ) ); + + // mix + assertEquals( new Color( 0x1ae600 ), ColorFunctions.mix( Color.red, Color.green, 0.1f ) ); + assertEquals( new Color( 0x40bf00 ), ColorFunctions.mix( Color.red, Color.green, 0.25f ) ); + assertEquals( new Color( 0x808000 ), ColorFunctions.mix( Color.red, Color.green, 0.5f ) ); + assertEquals( new Color( 0xbf4000 ), ColorFunctions.mix( Color.red, Color.green, 0.75f ) ); + assertEquals( new Color( 0xe61a00 ), ColorFunctions.mix( Color.red, Color.green, 0.9f ) ); + + // tint + assertEquals( new Color( 0xff40ff ), ColorFunctions.tint( Color.magenta, 0.25f ) ); + assertEquals( new Color( 0xff80ff ), ColorFunctions.tint( Color.magenta, 0.5f ) ); + assertEquals( new Color( 0xffbfff ), ColorFunctions.tint( Color.magenta, 0.75f ) ); + + // shade + assertEquals( new Color( 0xbf00bf ), ColorFunctions.shade( Color.magenta, 0.25f ) ); + assertEquals( new Color( 0x800080 ), ColorFunctions.shade( Color.magenta, 0.5f ) ); + assertEquals( new Color( 0x400040 ), ColorFunctions.shade( Color.magenta, 0.75f ) ); + } + + @Test + void luma() { + assertEquals( 0, ColorFunctions.luma( Color.black ) ); + assertEquals( 1, ColorFunctions.luma( Color.white ) ); + + assertEquals( 0.2126f, ColorFunctions.luma( Color.red ) ); + assertEquals( 0.7152f, ColorFunctions.luma( Color.green ) ); + assertEquals( 0.0722f, ColorFunctions.luma( Color.blue ) ); + + assertEquals( 0.9278f, ColorFunctions.luma( Color.yellow ) ); + assertEquals( 0.7874f, ColorFunctions.luma( Color.cyan ) ); + + assertEquals( 0.051269464f, ColorFunctions.luma( Color.darkGray ) ); + assertEquals( 0.21586052f, ColorFunctions.luma( Color.gray ) ); + assertEquals( 0.52711517f, ColorFunctions.luma( Color.lightGray ) ); + } +} diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/util/TestStringUtils.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/util/TestStringUtils.java new file mode 100644 index 00000000..189741b0 --- /dev/null +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/util/TestStringUtils.java @@ -0,0 +1,240 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.util; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.Arrays; +import org.junit.jupiter.api.Test; + +/** + * @author Karl Tauber + */ +public class TestStringUtils +{ + @Test + void split() { + // empty + assertEquals( + Arrays.asList( "" ), + StringUtils.split( "", ',' ) ); + + // not empty + assertEquals( + Arrays.asList( "a" ), + StringUtils.split( "a", ',' ) ); + assertEquals( + Arrays.asList( "a", "b" ), + StringUtils.split( "a,b", ',' ) ); + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( "a,b,c", ',' ) ); + + // empty parts + assertEquals( + Arrays.asList( "", "b", "c" ), + StringUtils.split( ",b,c", ',' ) ); + assertEquals( + Arrays.asList( "a", "", "c" ), + StringUtils.split( "a,,c", ',' ) ); + assertEquals( + Arrays.asList( "a", "b", "" ), + StringUtils.split( "a,b,", ',' ) ); + + // parts with leading/trailing spaces + assertEquals( + Arrays.asList( "a", " b", " c" ), + StringUtils.split( "a, b, c", ',' ) ); + assertEquals( + Arrays.asList( " a", "b", "c " ), + StringUtils.split( " a,b,c ", ',' ) ); + assertEquals( + Arrays.asList( " a", " b ", "c " ), + StringUtils.split( " a, b ,c ", ',' ) ); + + // space delimiter + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( "a b c", ' ' ) ); + assertEquals( + Arrays.asList( "a", "", "", "b", "", "c" ), + StringUtils.split( "a b c", ' ' ) ); + + // new line delimiter + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( "a\nb\nc", '\n' ) ); + assertEquals( + Arrays.asList( "a", "", "", "b", "", "c" ), + StringUtils.split( "a\n\n\nb\n\nc", '\n' ) ); + } + + @Test + void splitTrim() { + // empty + assertEquals( + Arrays.asList( "" ), + StringUtils.split( "", ',', true, false ) ); + + // not empty + assertEquals( + Arrays.asList( "a" ), + StringUtils.split( "a", ',', true, false ) ); + assertEquals( + Arrays.asList( "a", "b" ), + StringUtils.split( "a,b", ',', true, false ) ); + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( "a,b,c", ',', true, false ) ); + + // empty parts + assertEquals( + Arrays.asList( "", "b", "c" ), + StringUtils.split( ",b,c", ',', true, false ) ); + assertEquals( + Arrays.asList( "a", "", "c" ), + StringUtils.split( "a,,c", ',', true, false ) ); + assertEquals( + Arrays.asList( "a", "b", "" ), + StringUtils.split( "a,b,", ',', true, false ) ); + + // parts with leading/trailing spaces + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( "a, b, c", ',', true, false ) ); + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( " a,b,c ", ',', true, false ) ); + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( " a, b ,c ", ',', true, false ) ); + + // space delimiter + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( "a b c", ' ', true, false ) ); + assertEquals( + Arrays.asList( "a", "", "", "b", "", "c" ), + StringUtils.split( "a b c", ' ', true, false ) ); + + // new line delimiter + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( "a\nb\nc", '\n', true, false ) ); + assertEquals( + Arrays.asList( "a", "", "", "b", "", "c" ), + StringUtils.split( "a\n\n\nb\n\nc", '\n', true, false ) ); + } + + @Test + void splitTrimAndExcludeEmpty() { + // empty + assertEquals( + Arrays.asList(), + StringUtils.split( "", ',', true, true ) ); + + // not empty + assertEquals( + Arrays.asList( "a" ), + StringUtils.split( "a", ',', true, true ) ); + assertEquals( + Arrays.asList( "a", "b" ), + StringUtils.split( "a,b", ',', true, true ) ); + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( "a,b,c", ',', true, true ) ); + + // empty parts + assertEquals( + Arrays.asList( "b", "c" ), + StringUtils.split( ",b,c", ',', true, true ) ); + assertEquals( + Arrays.asList( "a", "c" ), + StringUtils.split( "a,,c", ',', true, true ) ); + assertEquals( + Arrays.asList( "a", "b" ), + StringUtils.split( "a,b,", ',', true, true ) ); + + // parts with leading/trailing spaces + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( "a, b, c", ',', true, true ) ); + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( " a,b,c ", ',', true, true ) ); + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( " a, b ,c ", ',', true, true ) ); + + // space delimiter + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( "a b c", ' ', true, true ) ); + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( "a b c", ' ', true, true ) ); + + // new line delimiter + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( "a\nb\nc", '\n', true, true ) ); + assertEquals( + Arrays.asList( "a", "b", "c" ), + StringUtils.split( "a\n\n\nb\n\nc", '\n', true, true ) ); + } + + @Test + void substringTrimmed() { + testSubstringTrimmed( "", 0 ); + + testSubstringTrimmed( "a", 0 ); + testSubstringTrimmed( "a", 1 ); + + testSubstringTrimmed( "a ", 0 ); + testSubstringTrimmed( " a", 0 ); + testSubstringTrimmed( " a ", 0 ); + + testSubstringTrimmed( " a ", 1 ); + + testSubstringTrimmed( " a ", 0, 3 ); + testSubstringTrimmed( " a ", 1, 4 ); + } + + private void testSubstringTrimmed( String str, int beginIndex ) { + assertEquals( + str.substring( beginIndex ).trim(), + StringUtils.substringTrimmed( str, beginIndex ) ); + } + + private void testSubstringTrimmed( String str, int beginIndex, int endIndex ) { + assertEquals( + str.substring( beginIndex, endIndex ).trim(), + StringUtils.substringTrimmed( str, beginIndex, endIndex ) ); + } + + @Test + void trimmedEmpty() { + testTrimmedEmpty( "" ); + testTrimmedEmpty( "a" ); + testTrimmedEmpty( " a " ); + testTrimmedEmpty( " " ); + testTrimmedEmpty( " " ); + } + + private void testTrimmedEmpty( String str ) { + assertEquals( str.trim().isEmpty(), StringUtils.isTrimmedEmpty( str ) ); + } +} diff --git a/flatlaf-core/svg/CapsLockIcon.svg b/flatlaf-core/svg/CapsLockIcon.svg index 1c45373d..a81e218e 100644 --- a/flatlaf-core/svg/CapsLockIcon.svg +++ b/flatlaf-core/svg/CapsLockIcon.svg @@ -1,7 +1,7 @@ - + diff --git a/flatlaf-core/svg/ClearHoveredIcon.svg b/flatlaf-core/svg/ClearHoveredIcon.svg new file mode 100644 index 00000000..21a9bf01 --- /dev/null +++ b/flatlaf-core/svg/ClearHoveredIcon.svg @@ -0,0 +1,3 @@ + + + diff --git a/flatlaf-core/svg/ClearIcon.svg b/flatlaf-core/svg/ClearIcon.svg new file mode 100644 index 00000000..092f8b4e --- /dev/null +++ b/flatlaf-core/svg/ClearIcon.svg @@ -0,0 +1,3 @@ + + + diff --git a/flatlaf-core/svg/FlatLaf Icons.sketch b/flatlaf-core/svg/FlatLaf Icons.sketch index 708e7fd1..3f5c46d7 100644 Binary files a/flatlaf-core/svg/FlatLaf Icons.sketch and b/flatlaf-core/svg/FlatLaf Icons.sketch differ diff --git a/flatlaf-core/svg/SearchIcon.svg b/flatlaf-core/svg/SearchIcon.svg new file mode 100644 index 00000000..08fb4505 --- /dev/null +++ b/flatlaf-core/svg/SearchIcon.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flatlaf-core/svg/SearchWithHistoryIcon.svg b/flatlaf-core/svg/SearchWithHistoryIcon.svg new file mode 100644 index 00000000..23903a08 --- /dev/null +++ b/flatlaf-core/svg/SearchWithHistoryIcon.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/BasicComponentsPanel.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/BasicComponentsPanel.java index b545ba2e..7a7e2d61 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/BasicComponentsPanel.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/BasicComponentsPanel.java @@ -19,6 +19,14 @@ package com.formdev.flatlaf.demo; import java.awt.Component; import javax.swing.*; import javax.swing.text.DefaultEditorKit; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.extras.FlatSVGIcon; +import com.formdev.flatlaf.icons.FlatSearchIcon; +import com.formdev.flatlaf.icons.FlatSearchWithHistoryIcon; +import net.miginfocom.layout.AC; +import net.miginfocom.layout.BoundSize; +import net.miginfocom.layout.ConstraintParser; +import net.miginfocom.layout.DimConstraint; import net.miginfocom.swing.*; /** @@ -29,6 +37,62 @@ class BasicComponentsPanel { BasicComponentsPanel() { initComponents(); + + // show reveal button for password field + // to enable this for all password fields use: + // UIManager.put( "PasswordField.showRevealButton", true ); + passwordField1.putClientProperty( FlatClientProperties.STYLE, "showRevealButton: true" ); + + // add leading/trailing icons to text fields + leadingIconTextField.putClientProperty( FlatClientProperties.PLACEHOLDER_TEXT, "Search" ); + leadingIconTextField.putClientProperty( FlatClientProperties.TEXT_FIELD_LEADING_ICON, + new FlatSearchIcon() ); + trailingIconTextField.putClientProperty( FlatClientProperties.TEXT_FIELD_TRAILING_ICON, + new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/DataTables.svg" ) ); + iconsTextField.putClientProperty( FlatClientProperties.TEXT_FIELD_LEADING_ICON, + new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/user.svg" ) ); + iconsTextField.putClientProperty( FlatClientProperties.TEXT_FIELD_TRAILING_ICON, + new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/bookmarkGroup.svg" ) ); + + // search history button + JButton searchHistoryButton = new JButton( new FlatSearchWithHistoryIcon( true ) ); + searchHistoryButton.setToolTipText( "Search History" ); + searchHistoryButton.addActionListener( e -> { + JPopupMenu popupMenu = new JPopupMenu(); + popupMenu.add( "(empty)" ); + popupMenu.show( searchHistoryButton, 0, searchHistoryButton.getHeight() ); + } ); + compsTextField.putClientProperty( FlatClientProperties.TEXT_FIELD_LEADING_COMPONENT, searchHistoryButton ); + + // match case button + JToggleButton matchCaseButton = new JToggleButton( new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/matchCase.svg" ) ); + matchCaseButton.setRolloverIcon( new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/matchCaseHovered.svg" ) ); + matchCaseButton.setSelectedIcon( new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/matchCaseSelected.svg" ) ); + matchCaseButton.setToolTipText( "Match Case" ); + + // whole words button + JToggleButton wordsButton = new JToggleButton( new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/words.svg" ) ); + wordsButton.setRolloverIcon( new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/wordsHovered.svg" ) ); + wordsButton.setSelectedIcon( new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/wordsSelected.svg" ) ); + wordsButton.setToolTipText( "Whole Words" ); + + // regex button + JToggleButton regexButton = new JToggleButton( new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/regex.svg" ) ); + regexButton.setRolloverIcon( new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/regexHovered.svg" ) ); + regexButton.setSelectedIcon( new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/regexSelected.svg" ) ); + regexButton.setToolTipText( "Regular Expression" ); + + // search toolbar + JToolBar searchToolbar = new JToolBar(); + searchToolbar.add( matchCaseButton ); + searchToolbar.add( wordsButton ); + searchToolbar.addSeparator(); + searchToolbar.add( regexButton ); + compsTextField.putClientProperty( FlatClientProperties.TEXT_FIELD_TRAILING_COMPONENT, searchToolbar ); + + // show clear button (if text field is not empty) + compsTextField.putClientProperty( FlatClientProperties.TEXT_FIELD_SHOW_CLEAR_BUTTON, true ); + clearTextField.putClientProperty( FlatClientProperties.TEXT_FIELD_SHOW_CLEAR_BUTTON, true ); } private void initComponents() { @@ -80,7 +144,7 @@ class BasicComponentsPanel JFormattedTextField formattedTextField4 = new JFormattedTextField(); JFormattedTextField formattedTextField5 = new JFormattedTextField(); JLabel passwordFieldLabel = new JLabel(); - JPasswordField passwordField1 = new JPasswordField(); + passwordField1 = new JPasswordField(); JPasswordField passwordField2 = new JPasswordField(); JPasswordField passwordField3 = new JPasswordField(); JPasswordField passwordField4 = new JPasswordField(); @@ -123,6 +187,29 @@ class BasicComponentsPanel JTextField warningHintsTextField = new JTextField(); JComboBox warningHintsComboBox = new JComboBox<>(); JSpinner warningHintsSpinner = new JSpinner(); + JLabel iconsLabel = new JLabel(); + leadingIconTextField = new JTextField(); + trailingIconTextField = new JTextField(); + iconsTextField = new JTextField(); + JLabel compsLabel = new JLabel(); + compsTextField = new JTextField(); + clearTextField = new JTextField(); + JLabel fontsLabel = new JLabel(); + JLabel h00Label = new JLabel(); + JLabel h0Label = new JLabel(); + JLabel h1Label = new JLabel(); + JLabel h2Label = new JLabel(); + JLabel h3Label = new JLabel(); + JLabel h4Label = new JLabel(); + JLabel lightLabel = new JLabel(); + JLabel semiboldLabel = new JLabel(); + JLabel fontZoomLabel = new JLabel(); + JLabel largeLabel = new JLabel(); + JLabel defaultLabel = new JLabel(); + JLabel mediumLabel = new JLabel(); + JLabel smallLabel = new JLabel(); + JLabel miniLabel = new JLabel(); + JLabel monospacedLabel = new JLabel(); JPopupMenu popupMenu1 = new JPopupMenu(); JMenuItem cutMenuItem = new JMenuItem(); JMenuItem copyMenuItem = new JMenuItem(); @@ -132,7 +219,7 @@ class BasicComponentsPanel setLayout(new MigLayout( "insets dialog,hidemode 3", // columns - "[sizegroup 1]" + + "[]" + "[sizegroup 1]" + "[sizegroup 1]" + "[sizegroup 1]" + @@ -152,6 +239,10 @@ class BasicComponentsPanel "[]" + "[]para" + "[]" + + "[]" + + "[]" + + "[]" + + "[]0" + "[]")); //---- labelLabel ---- @@ -646,6 +737,107 @@ class BasicComponentsPanel warningHintsSpinner.putClientProperty("JComponent.outline", "warning"); add(warningHintsSpinner, "cell 3 13,growx"); + //---- iconsLabel ---- + iconsLabel.setText("Leading/trailing icons:"); + add(iconsLabel, "cell 0 14"); + add(leadingIconTextField, "cell 1 14,growx"); + + //---- trailingIconTextField ---- + trailingIconTextField.setText("text"); + add(trailingIconTextField, "cell 2 14,growx"); + + //---- iconsTextField ---- + iconsTextField.setText("text"); + add(iconsTextField, "cell 3 14,growx"); + + //---- compsLabel ---- + compsLabel.setText("Leading/trailing comp.:"); + add(compsLabel, "cell 0 15"); + add(compsTextField, "cell 1 15 2 1,growx"); + + //---- clearTextField ---- + clearTextField.setText("clear me"); + add(clearTextField, "cell 3 15,growx"); + + //---- fontsLabel ---- + fontsLabel.setText("Typography / Fonts:"); + add(fontsLabel, "cell 0 16"); + + //---- h00Label ---- + h00Label.setText("H00"); + h00Label.putClientProperty("FlatLaf.styleClass", "h00"); + add(h00Label, "cell 1 16 5 1"); + + //---- h0Label ---- + h0Label.setText("H0"); + h0Label.putClientProperty("FlatLaf.styleClass", "h0"); + add(h0Label, "cell 1 16 5 1"); + + //---- h1Label ---- + h1Label.setText("H1"); + h1Label.putClientProperty("FlatLaf.styleClass", "h1"); + add(h1Label, "cell 1 16 5 1"); + + //---- h2Label ---- + h2Label.setText("H2"); + h2Label.putClientProperty("FlatLaf.styleClass", "h2"); + add(h2Label, "cell 1 16 5 1"); + + //---- h3Label ---- + h3Label.setText("H3"); + h3Label.putClientProperty("FlatLaf.styleClass", "h3"); + add(h3Label, "cell 1 16 5 1"); + + //---- h4Label ---- + h4Label.setText("H4"); + h4Label.putClientProperty("FlatLaf.styleClass", "h4"); + add(h4Label, "cell 1 16 5 1"); + + //---- lightLabel ---- + lightLabel.setText("light"); + lightLabel.putClientProperty("FlatLaf.style", "font: 200% $light.font"); + add(lightLabel, "cell 1 16 5 1,gapx 30"); + + //---- semiboldLabel ---- + semiboldLabel.setText("semibold"); + semiboldLabel.putClientProperty("FlatLaf.style", "font: 200% $semibold.font"); + add(semiboldLabel, "cell 1 16 5 1"); + + //---- fontZoomLabel ---- + fontZoomLabel.setText("(200%)"); + fontZoomLabel.putClientProperty("FlatLaf.styleClass", "small"); + fontZoomLabel.setEnabled(false); + add(fontZoomLabel, "cell 1 16 5 1"); + + //---- largeLabel ---- + largeLabel.setText("large"); + largeLabel.putClientProperty("FlatLaf.styleClass", "large"); + add(largeLabel, "cell 1 17 5 1"); + + //---- defaultLabel ---- + defaultLabel.setText("default"); + add(defaultLabel, "cell 1 17 5 1"); + + //---- mediumLabel ---- + mediumLabel.setText("medium"); + mediumLabel.putClientProperty("FlatLaf.styleClass", "medium"); + add(mediumLabel, "cell 1 17 5 1"); + + //---- smallLabel ---- + smallLabel.setText("small"); + smallLabel.putClientProperty("FlatLaf.styleClass", "small"); + add(smallLabel, "cell 1 17 5 1"); + + //---- miniLabel ---- + miniLabel.setText("mini"); + miniLabel.putClientProperty("FlatLaf.styleClass", "mini"); + add(miniLabel, "cell 1 17 5 1"); + + //---- monospacedLabel ---- + monospacedLabel.setText("monospaced"); + monospacedLabel.putClientProperty("FlatLaf.styleClass", "monospaced"); + add(monospacedLabel, "cell 1 17 5 1,gapx 30"); + //======== popupMenu1 ======== { @@ -671,33 +863,66 @@ class BasicComponentsPanel pasteMenuItem.addActionListener( new DefaultEditorKit.PasteAction() ); if( FlatLafDemo.screenshotsMode ) { - Component[] components = { + // hide some components + Component[] hiddenComponents = { + labelLabel, label1, label2, button13, button14, button15, button16, comboBox5, comboBox6, - textField6, passwordField5, + textFieldLabel, textField2, textField4, textField6, formattedTextFieldLabel, formattedTextField1, formattedTextField2, formattedTextField3, formattedTextField4, formattedTextField5, + passwordFieldLabel, passwordField1, passwordField2, passwordField3, passwordField4, passwordField5, textAreaLabel, scrollPane1, scrollPane2, scrollPane3, scrollPane4, textArea5, editorPaneLabel, scrollPane5, scrollPane6, scrollPane7, scrollPane8, editorPane5, textPaneLabel, scrollPane9, scrollPane10, scrollPane11, scrollPane12, textPane5, errorHintsLabel, errorHintsTextField, errorHintsComboBox, errorHintsSpinner, warningHintsLabel, warningHintsTextField, warningHintsComboBox, warningHintsSpinner, - }; - for( Component c : components ) + fontZoomLabel, + }; + for( Component c : hiddenComponents ) c.setVisible( false ); - // move password fields one row up - Component[] formattedTextFields = { formattedTextFieldLabel, formattedTextField1, formattedTextField2, formattedTextField3, formattedTextField4 }; - Component[] passwordFields = { passwordFieldLabel, passwordField1, passwordField2, passwordField3, passwordField4 }; + // update layout (change row gaps to zero) MigLayout layout = (MigLayout) getLayout(); - for( int i = 0; i < passwordFields.length; i++ ) { - Object cons = layout.getComponentConstraints( formattedTextFields[i] ); - layout.setComponentConstraints( passwordFields[i], cons ); - } + Object rowCons = layout.getRowConstraints(); + AC ac = (rowCons instanceof String) + ? ConstraintParser.parseColumnConstraints( (String) rowCons ) + : (AC) rowCons; + BoundSize zeroGap = ConstraintParser.parseBoundSize( "0", true, true ); + DimConstraint[] rows = ac.getConstaints(); + rows[6].setGapBefore( zeroGap ); + rows[7].setGapBefore( zeroGap ); + rows[8].setGapBefore( zeroGap ); + rows[9].setGapBefore( zeroGap ); + rows[10].setGapBefore( zeroGap ); + rows[11].setGapBefore( zeroGap ); + rows[11].setGapAfter( zeroGap ); + rows[12].setGapBefore( zeroGap ); + rows[13].setGapBefore( zeroGap ); + rows[16].setGapBefore( zeroGap ); + layout.setRowConstraints( ac ); + + // move two text field into same row as spinners + spinnerLabel.setText( "JSpinner / JTextField:" ); + layout.setComponentConstraints( textField1, "cell 3 5,growx" ); + layout.setComponentConstraints( textField3, "cell 4 5,growx" ); + + // make "Not editable disabled" combobox smaller + Object cons = layout.getComponentConstraints( comboBox4 ); + layout.setComponentConstraints( comboBox4, cons + ",width 50:50" ); + + revalidate(); + repaint(); } } // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + private JPasswordField passwordField1; + private JTextField leadingIconTextField; + private JTextField trailingIconTextField; + private JTextField iconsTextField; + private JTextField compsTextField; + private JTextField clearTextField; // JFormDesigner - End of variables declaration //GEN-END:variables } diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/BasicComponentsPanel.jfd b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/BasicComponentsPanel.jfd index 75ed432e..a7e257b3 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/BasicComponentsPanel.jfd +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/BasicComponentsPanel.jfd @@ -1,4 +1,4 @@ -JFDML JFormDesigner: "7.0.2.0.298" Java: "14" encoding: "UTF-8" +JFDML JFormDesigner: "7.0.5.0.404" Java: "17" encoding: "UTF-8" new FormModel { contentType: "form/swing" @@ -8,8 +8,8 @@ new FormModel { } add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { "$layoutConstraints": "insets dialog,hidemode 3" - "$columnConstraints": "[sizegroup 1][sizegroup 1][sizegroup 1][sizegroup 1][][]" - "$rowConstraints": "[][][][][][][][][][][][]para[][]" + "$columnConstraints": "[][sizegroup 1][sizegroup 1][sizegroup 1][][]" + "$rowConstraints": "[][][][][][][][][][][][]para[][][][][]0[]" } ) { name: "this" add( new FormComponent( "javax.swing.JLabel" ) { @@ -375,6 +375,9 @@ new FormModel { add( new FormComponent( "javax.swing.JPasswordField" ) { name: "passwordField1" "text": "Editable" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 8,growx" } ) @@ -648,9 +651,175 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 3 13,growx" } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "iconsLabel" + "text": "Leading/trailing icons:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 14" + } ) + add( new FormComponent( "javax.swing.JTextField" ) { + name: "leadingIconTextField" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 14,growx" + } ) + add( new FormComponent( "javax.swing.JTextField" ) { + name: "trailingIconTextField" + "text": "text" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 14,growx" + } ) + add( new FormComponent( "javax.swing.JTextField" ) { + name: "iconsTextField" + "text": "text" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 14,growx" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "compsLabel" + "text": "Leading/trailing comp.:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 15" + } ) + add( new FormComponent( "javax.swing.JTextField" ) { + name: "compsTextField" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 15 2 1,growx" + } ) + add( new FormComponent( "javax.swing.JTextField" ) { + name: "clearTextField" + "text": "clear me" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 15,growx" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "fontsLabel" + "text": "Typography / Fonts:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 16" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "h00Label" + "text": "H00" + "$client.FlatLaf.styleClass": "h00" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 16 5 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "h0Label" + "text": "H0" + "$client.FlatLaf.styleClass": "h0" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 16 5 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "h1Label" + "text": "H1" + "$client.FlatLaf.styleClass": "h1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 16 5 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "h2Label" + "text": "H2" + "$client.FlatLaf.styleClass": "h2" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 16 5 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "h3Label" + "text": "H3" + "$client.FlatLaf.styleClass": "h3" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 16 5 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "h4Label" + "text": "H4" + "$client.FlatLaf.styleClass": "h4" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 16 5 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "lightLabel" + "text": "light" + "$client.FlatLaf.style": "font: 200% $light.font" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 16 5 1,gapx 30" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "semiboldLabel" + "text": "semibold" + "$client.FlatLaf.style": "font: 200% $semibold.font" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 16 5 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "fontZoomLabel" + "text": "(200%)" + "$client.FlatLaf.styleClass": "small" + "enabled": false + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 16 5 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "largeLabel" + "text": "large" + "$client.FlatLaf.styleClass": "large" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 17 5 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "defaultLabel" + "text": "default" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 17 5 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "mediumLabel" + "text": "medium" + "$client.FlatLaf.styleClass": "medium" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 17 5 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "smallLabel" + "text": "small" + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 17 5 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "miniLabel" + "text": "mini" + "$client.FlatLaf.styleClass": "mini" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 17 5 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "monospacedLabel" + "text": "monospaced" + "$client.FlatLaf.styleClass": "monospaced" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 17 5 1,gapx 30" + } ) }, new FormLayoutConstraints( null ) { "location": new java.awt.Point( 0, 0 ) - "size": new java.awt.Dimension( 920, 440 ) + "size": new java.awt.Dimension( 920, 550 ) } ) add( new FormContainer( "javax.swing.JPopupMenu", new FormLayoutManager( class javax.swing.JPopupMenu ) ) { name: "popupMenu1" @@ -670,7 +839,7 @@ new FormModel { "mnemonic": 80 } ) }, new FormLayoutConstraints( null ) { - "location": new java.awt.Point( 0, 500 ) + "location": new java.awt.Point( 0, 570 ) "size": new java.awt.Dimension( 91, 87 ) } ) } diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/ControlBar.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/ControlBar.java index 534c5570..bb35a39c 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/ControlBar.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/ControlBar.java @@ -28,6 +28,7 @@ import javax.swing.plaf.metal.MetalLookAndFeel; import javax.swing.plaf.nimbus.NimbusLookAndFeel; import com.formdev.flatlaf.*; import com.formdev.flatlaf.extras.FlatAnimatedLafChange; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.SystemInfo; import com.formdev.flatlaf.util.UIScale; import net.miginfocom.layout.ConstraintParser; @@ -61,10 +62,10 @@ class ControlBar // initialize look and feels combo box DefaultComboBoxModel lafModel = new DefaultComboBoxModel<>(); - lafModel.addElement( new LookAndFeelInfo( "Flat Light (F1)", FlatLightLaf.class.getName() ) ); - lafModel.addElement( new LookAndFeelInfo( "Flat Dark (F2)", FlatDarkLaf.class.getName() ) ); - lafModel.addElement( new LookAndFeelInfo( "Flat IntelliJ (F3)", FlatIntelliJLaf.class.getName() ) ); - lafModel.addElement( new LookAndFeelInfo( "Flat Darcula (F4)", FlatDarculaLaf.class.getName() ) ); + lafModel.addElement( new LookAndFeelInfo( "FlatLaf Light (F1)", FlatLightLaf.class.getName() ) ); + lafModel.addElement( new LookAndFeelInfo( "FlatLaf Dark (F2)", FlatDarkLaf.class.getName() ) ); + lafModel.addElement( new LookAndFeelInfo( "FlatLaf IntelliJ (F3)", FlatIntelliJLaf.class.getName() ) ); + lafModel.addElement( new LookAndFeelInfo( "FlatLaf Darcula (F4)", FlatDarculaLaf.class.getName() ) ); UIManager.LookAndFeelInfo[] lookAndFeels = UIManager.getInstalledLookAndFeels(); for( UIManager.LookAndFeelInfo lookAndFeel : lookAndFeels ) { @@ -240,7 +241,7 @@ class ControlBar frame.setSize( Math.max( prefSize.width, width ), Math.max( prefSize.height, height ) ); } catch( Exception ex ) { - ex.printStackTrace(); + LoggingFacade.INSTANCE.logSevere( null, ex ); } } ); } diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.java index 6ab88a5e..8aa4acb9 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.java @@ -18,23 +18,38 @@ package com.formdev.flatlaf.demo; import java.awt.*; import java.awt.event.*; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.time.Year; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.prefs.Preferences; import javax.swing.*; import javax.swing.text.DefaultEditorKit; import javax.swing.text.StyleContext; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.FlatDarculaLaf; +import com.formdev.flatlaf.FlatDarkLaf; +import com.formdev.flatlaf.FlatIntelliJLaf; import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.FlatLightLaf; import com.formdev.flatlaf.demo.HintManager.Hint; import com.formdev.flatlaf.demo.extras.*; import com.formdev.flatlaf.demo.intellijthemes.*; +import com.formdev.flatlaf.extras.FlatDesktop; import com.formdev.flatlaf.extras.FlatAnimatedLafChange; import com.formdev.flatlaf.extras.FlatSVGIcon; import com.formdev.flatlaf.extras.FlatUIDefaultsInspector; import com.formdev.flatlaf.extras.components.FlatButton; import com.formdev.flatlaf.extras.components.FlatButton.ButtonType; +import com.formdev.flatlaf.icons.FlatAbstractIcon; import com.formdev.flatlaf.extras.FlatSVGUtils; +import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.ui.JBRCustomDecorations; +import com.formdev.flatlaf.util.ColorFunctions; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.SystemInfo; import net.miginfocom.layout.ConstraintParser; import net.miginfocom.layout.LC; @@ -59,6 +74,7 @@ class DemoFrame initComponents(); updateFontMenuItems(); + initAccentColors(); controlBar.initialize( this, tabbedPane ); setIconImages( FlatSVGUtils.createWindowIconImages( "/com/formdev/flatlaf/demo/FlatLaf.svg" ) ); @@ -66,6 +82,22 @@ class DemoFrame if( tabIndex >= 0 && tabIndex < tabbedPane.getTabCount() && tabIndex != tabbedPane.getSelectedIndex() ) tabbedPane.setSelectedIndex( tabIndex ); + // hide some menu items on macOS + if( SystemInfo.isMacOS ) { + exitMenuItem.setVisible( false ); + aboutMenuItem.setVisible( false ); + + // do not use HTML text on macOS + htmlMenuItem.setText( "some text" ); + } + + // integrate into macOS screen menu + FlatDesktop.setAboutHandler( this::aboutActionPerformed ); + FlatDesktop.setPreferencesHandler( this::showPreferences ); + FlatDesktop.setQuitHandler( response -> { + response.performQuit(); + } ); + SwingUtilities.invokeLater( () -> { showHints(); } ); @@ -127,7 +159,42 @@ class DemoFrame } private void aboutActionPerformed() { - JOptionPane.showMessageDialog( this, "FlatLaf Demo", "About", JOptionPane.PLAIN_MESSAGE ); + JLabel titleLabel = new JLabel( "FlatLaf Demo" ); + titleLabel.putClientProperty( FlatClientProperties.STYLE_CLASS, "h1" ); + + String link = "https://www.formdev.com/flatlaf/"; + JLabel linkLabel = new JLabel( "" + link + "" ); + linkLabel.setCursor( Cursor.getPredefinedCursor( Cursor.HAND_CURSOR ) ); + linkLabel.addMouseListener( new MouseAdapter() { + @Override + public void mouseClicked( MouseEvent e ) { + try { + Desktop.getDesktop().browse( new URI( link ) ); + } catch( IOException | URISyntaxException ex ) { + JOptionPane.showMessageDialog( linkLabel, + "Failed to open '" + link + "' in browser.", + "About", JOptionPane.PLAIN_MESSAGE ); + } + } + } ); + + + JOptionPane.showMessageDialog( this, + new Object[] { + titleLabel, + "Demonstrates FlatLaf Swing look and feel", + " ", + "Copyright 2019-" + Year.now() + " FormDev Software GmbH", + linkLabel, + }, + "About", JOptionPane.PLAIN_MESSAGE ); + } + + private void showPreferences() { + JOptionPane.showMessageDialog( this, + "Sorry, but FlatLaf Demo does not have preferences. :(\n" + + "This dialog is here to demonstrate usage of class 'FlatDesktop' on macOS.", + "Preferences", JOptionPane.PLAIN_MESSAGE ); } private void selectedTabChanged() { @@ -148,6 +215,7 @@ class DemoFrame menuBarEmbeddedCheckBoxMenuItem.setEnabled( windowDecorations ); unifiedTitleBarMenuItem.setEnabled( windowDecorations ); + showTitleBarIconMenuItem.setEnabled( windowDecorations ); } private void menuBarEmbeddedChanged() { @@ -160,6 +228,16 @@ class DemoFrame FlatLaf.repaintAllFramesAndDialogs(); } + private void showTitleBarIcon() { + boolean showIcon = showTitleBarIconMenuItem.isSelected(); + + // for main frame (because already created) + getRootPane().putClientProperty( FlatClientProperties.TITLE_BAR_SHOW_ICON, showIcon ); + + // for other not yet created frames/dialogs + UIManager.put( "TitlePane.showIcon", showIcon ); + } + private void underlineMenuSelection() { UIManager.put( "MenuItem.selectionType", underlineMenuSelectionMenuItem.isSelected() ? "underline" : null ); } @@ -185,6 +263,8 @@ class DemoFrame Font font = UIManager.getFont( "defaultFont" ); Font newFont = StyleContext.getDefaultStyleContext().getFont( fontFamily, font.getStyle(), font.getSize() ); + // StyleContext.getFont() may return a UIResource, which would cause loosing user scale factor on Windows + newFont = FlatUIUtils.nonUIResource( newFont ); UIManager.put( "defaultFont", newFont ); FlatLaf.updateUI(); @@ -286,6 +366,78 @@ class DemoFrame item.setEnabled( enabled ); } + // the real colors are defined in + // flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/FlatLightLaf.properties and + // flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/FlatDarkLaf.properties + private static String[] accentColorKeys = { + "Demo.accent.default", "Demo.accent.blue", "Demo.accent.purple", "Demo.accent.red", + "Demo.accent.orange", "Demo.accent.yellow", "Demo.accent.green", + }; + private static String[] accentColorNames = { + "Default", "Blue", "Purple", "Red", "Orange", "Yellow", "Green", + }; + private final JToggleButton[] accentColorButtons = new JToggleButton[accentColorKeys.length]; + private JLabel accentColorLabel; + + private void initAccentColors() { + accentColorLabel = new JLabel( "Accent color: " ); + + toolBar.add( Box.createHorizontalGlue() ); + toolBar.add( accentColorLabel ); + + ButtonGroup group = new ButtonGroup(); + for( int i = 0; i < accentColorButtons.length; i++ ) { + accentColorButtons[i] = new JToggleButton( new AccentColorIcon( accentColorKeys[i] ) ); + accentColorButtons[i].setToolTipText( accentColorNames[i] ); + accentColorButtons[i].addActionListener( this::accentColorChanged ); + toolBar.add( accentColorButtons[i] ); + group.add( accentColorButtons[i] ); + } + + accentColorButtons[0].setSelected( true ); + + UIManager.addPropertyChangeListener( e -> { + if( "lookAndFeel".equals( e.getPropertyName() ) ) + updateAccentColorButtons(); + } ); + updateAccentColorButtons(); + } + + private void accentColorChanged( ActionEvent e ) { + String accentColor = accentColorKeys[0]; + for( int i = 0; i < accentColorButtons.length; i++ ) { + if( accentColorButtons[i].isSelected() ) { + accentColor = accentColorKeys[i]; + break; + } + } + + FlatLaf.setGlobalExtraDefaults( (accentColor != accentColorKeys[0]) + ? Collections.singletonMap( "@accentColor", "$" + accentColor ) + : null ); + + Class lafClass = UIManager.getLookAndFeel().getClass(); + try { + FlatLaf.setup( lafClass.newInstance() ); + FlatLaf.updateUI(); + } catch( InstantiationException | IllegalAccessException ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + private void updateAccentColorButtons() { + Class lafClass = UIManager.getLookAndFeel().getClass(); + boolean isAccentColorSupported = + lafClass == FlatLightLaf.class || + lafClass == FlatDarkLaf.class || + lafClass == FlatIntelliJLaf.class || + lafClass == FlatDarculaLaf.class; + + accentColorLabel.setEnabled( isAccentColorSupported ); + for( int i = 0; i < accentColorButtons.length; i++ ) + accentColorButtons[i].setEnabled( isAccentColorSupported ); + } + private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents JMenuBar menuBar1 = new JMenuBar(); @@ -294,7 +446,7 @@ class DemoFrame JMenuItem openMenuItem = new JMenuItem(); JMenuItem saveAsMenuItem = new JMenuItem(); JMenuItem closeMenuItem = new JMenuItem(); - JMenuItem exitMenuItem = new JMenuItem(); + exitMenuItem = new JMenuItem(); JMenu editMenu = new JMenu(); JMenuItem undoMenuItem = new JMenuItem(); JMenuItem redoMenuItem = new JMenuItem(); @@ -312,8 +464,9 @@ class DemoFrame JMenuItem projectViewMenuItem = new JMenuItem(); JMenuItem structureViewMenuItem = new JMenuItem(); JMenuItem propertiesViewMenuItem = new JMenuItem(); + scrollingPopupMenu = new JMenu(); JMenuItem menuItem2 = new JMenuItem(); - JMenuItem menuItem1 = new JMenuItem(); + htmlMenuItem = new JMenuItem(); JRadioButtonMenuItem radioButtonMenuItem1 = new JRadioButtonMenuItem(); JRadioButtonMenuItem radioButtonMenuItem2 = new JRadioButtonMenuItem(); JRadioButtonMenuItem radioButtonMenuItem3 = new JRadioButtonMenuItem(); @@ -325,14 +478,15 @@ class DemoFrame windowDecorationsCheckBoxMenuItem = new JCheckBoxMenuItem(); menuBarEmbeddedCheckBoxMenuItem = new JCheckBoxMenuItem(); unifiedTitleBarMenuItem = new JCheckBoxMenuItem(); + showTitleBarIconMenuItem = new JCheckBoxMenuItem(); underlineMenuSelectionMenuItem = new JCheckBoxMenuItem(); alwaysShowMnemonicsMenuItem = new JCheckBoxMenuItem(); animatedLafChangeMenuItem = new JCheckBoxMenuItem(); JMenuItem showHintsMenuItem = new JMenuItem(); JMenuItem showUIDefaultsInspectorMenuItem = new JMenuItem(); JMenu helpMenu = new JMenu(); - JMenuItem aboutMenuItem = new JMenuItem(); - JToolBar toolBar1 = new JToolBar(); + aboutMenuItem = new JMenuItem(); + toolBar = new JToolBar(); JButton backButton = new JButton(); JButton forwardButton = new JButton(); JButton cutButton = new JButton(); @@ -515,14 +669,20 @@ class DemoFrame } viewMenu.add(menu1); + //======== scrollingPopupMenu ======== + { + scrollingPopupMenu.setText("Scrolling Popup Menu"); + } + viewMenu.add(scrollingPopupMenu); + //---- menuItem2 ---- menuItem2.setText("Disabled Item"); menuItem2.setEnabled(false); viewMenu.add(menuItem2); - //---- menuItem1 ---- - menuItem1.setText("some HTML text"); - viewMenu.add(menuItem1); + //---- htmlMenuItem ---- + htmlMenuItem.setText("some HTML text"); + viewMenu.add(htmlMenuItem); viewMenu.addSeparator(); //---- radioButtonMenuItem1 ---- @@ -576,13 +736,11 @@ class DemoFrame //---- windowDecorationsCheckBoxMenuItem ---- windowDecorationsCheckBoxMenuItem.setText("Window decorations"); - windowDecorationsCheckBoxMenuItem.setSelected(true); windowDecorationsCheckBoxMenuItem.addActionListener(e -> windowDecorationsChanged()); optionsMenu.add(windowDecorationsCheckBoxMenuItem); //---- menuBarEmbeddedCheckBoxMenuItem ---- menuBarEmbeddedCheckBoxMenuItem.setText("Embedded menu bar"); - menuBarEmbeddedCheckBoxMenuItem.setSelected(true); menuBarEmbeddedCheckBoxMenuItem.addActionListener(e -> menuBarEmbeddedChanged()); optionsMenu.add(menuBarEmbeddedCheckBoxMenuItem); @@ -591,6 +749,11 @@ class DemoFrame unifiedTitleBarMenuItem.addActionListener(e -> unifiedTitleBar()); optionsMenu.add(unifiedTitleBarMenuItem); + //---- showTitleBarIconMenuItem ---- + showTitleBarIconMenuItem.setText("Show window title bar icon"); + showTitleBarIconMenuItem.addActionListener(e -> showTitleBarIcon()); + optionsMenu.add(showTitleBarIconMenuItem); + //---- underlineMenuSelectionMenuItem ---- underlineMenuSelectionMenuItem.setText("Use underline menu selection"); underlineMenuSelectionMenuItem.addActionListener(e -> underlineMenuSelection()); @@ -634,43 +797,43 @@ class DemoFrame } setJMenuBar(menuBar1); - //======== toolBar1 ======== + //======== toolBar ======== { - toolBar1.setMargin(new Insets(3, 3, 3, 3)); + toolBar.setMargin(new Insets(3, 3, 3, 3)); //---- backButton ---- backButton.setToolTipText("Back"); - toolBar1.add(backButton); + toolBar.add(backButton); //---- forwardButton ---- forwardButton.setToolTipText("Forward"); - toolBar1.add(forwardButton); - toolBar1.addSeparator(); + toolBar.add(forwardButton); + toolBar.addSeparator(); //---- cutButton ---- cutButton.setToolTipText("Cut"); - toolBar1.add(cutButton); + toolBar.add(cutButton); //---- copyButton ---- copyButton.setToolTipText("Copy"); - toolBar1.add(copyButton); + toolBar.add(copyButton); //---- pasteButton ---- pasteButton.setToolTipText("Paste"); - toolBar1.add(pasteButton); - toolBar1.addSeparator(); + toolBar.add(pasteButton); + toolBar.addSeparator(); //---- refreshButton ---- refreshButton.setToolTipText("Refresh"); - toolBar1.add(refreshButton); - toolBar1.addSeparator(); + toolBar.add(refreshButton); + toolBar.addSeparator(); //---- showToggleButton ---- showToggleButton.setSelected(true); showToggleButton.setToolTipText("Show Details"); - toolBar1.add(showToggleButton); + toolBar.add(showToggleButton); } - contentPane.add(toolBar1, BorderLayout.NORTH); + contentPane.add(toolBar, BorderLayout.NORTH); //======== contentPanel ======== { @@ -733,7 +896,21 @@ class DemoFrame copyMenuItem.addActionListener( new DefaultEditorKit.CopyAction() ); pasteMenuItem.addActionListener( new DefaultEditorKit.PasteAction() ); - if( FlatLaf.supportsNativeWindowDecorations() ) { + scrollingPopupMenu.add( "Large menus are scrollable" ); + scrollingPopupMenu.add( "Use mouse wheel to scroll" ); + scrollingPopupMenu.add( "Or use up/down arrows at top/bottom" ); + for( int i = 1; i <= 100; i++ ) + scrollingPopupMenu.add( "Item " + i ); + + if( FlatLaf.supportsNativeWindowDecorations() || (SystemInfo.isLinux && JFrame.isDefaultLookAndFeelDecorated()) ) { + if( SystemInfo.isLinux ) + unsupported( windowDecorationsCheckBoxMenuItem ); + else + windowDecorationsCheckBoxMenuItem.setSelected( FlatLaf.isUseNativeWindowDecorations() ); + menuBarEmbeddedCheckBoxMenuItem.setSelected( UIManager.getBoolean( "TitlePane.menuBarEmbedded" ) ); + unifiedTitleBarMenuItem.setSelected( UIManager.getBoolean( "TitlePane.unifiedBackground" ) ); + showTitleBarIconMenuItem.setSelected( UIManager.getBoolean( "TitlePane.showIcon" ) ); + if( JBRCustomDecorations.isSupported() ) { // If the JetBrains Runtime is used, it forces the use of it's own custom // window decoration, which can not disabled. @@ -743,6 +920,7 @@ class DemoFrame unsupported( windowDecorationsCheckBoxMenuItem ); unsupported( menuBarEmbeddedCheckBoxMenuItem ); unsupported( unifiedTitleBarMenuItem ); + unsupported( showTitleBarIconMenuItem ); } if( SystemInfo.isMacOS ) @@ -768,16 +946,50 @@ class DemoFrame } // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + private JMenuItem exitMenuItem; + private JMenu scrollingPopupMenu; + private JMenuItem htmlMenuItem; private JMenu fontMenu; private JMenu optionsMenu; private JCheckBoxMenuItem windowDecorationsCheckBoxMenuItem; private JCheckBoxMenuItem menuBarEmbeddedCheckBoxMenuItem; private JCheckBoxMenuItem unifiedTitleBarMenuItem; + private JCheckBoxMenuItem showTitleBarIconMenuItem; private JCheckBoxMenuItem underlineMenuSelectionMenuItem; private JCheckBoxMenuItem alwaysShowMnemonicsMenuItem; private JCheckBoxMenuItem animatedLafChangeMenuItem; + private JMenuItem aboutMenuItem; + private JToolBar toolBar; private JTabbedPane tabbedPane; private ControlBar controlBar; IJThemesPanel themesPanel; // JFormDesigner - End of variables declaration //GEN-END:variables + + //---- class AccentColorIcon ---------------------------------------------- + + private static class AccentColorIcon + extends FlatAbstractIcon + { + private final String colorKey; + + AccentColorIcon( String colorKey ) { + super( 16, 16, null ); + this.colorKey = colorKey; + } + + @Override + protected void paintIcon( Component c, Graphics2D g ) { + Color color = UIManager.getColor( colorKey ); + if( color == null ) + color = Color.lightGray; + else if( !c.isEnabled() ) { + color = FlatLaf.isLafDark() + ? ColorFunctions.shade( color, 0.5f ) + : ColorFunctions.tint( color, 0.6f ); + } + + g.setColor( color ); + g.fillRoundRect( 1, 1, width - 2, height - 2, 5, 5 ); + } + } } diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.jfd b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.jfd index 4087ab97..f561a71a 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.jfd +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoFrame.jfd @@ -1,4 +1,4 @@ -JFDML JFormDesigner: "7.0.3.1.342" Java: "16" encoding: "UTF-8" +JFDML JFormDesigner: "7.0.4.0.360" Java: "17" encoding: "UTF-8" new FormModel { contentType: "form/swing" @@ -13,8 +13,11 @@ new FormModel { "$locationPolicy": 2 "$sizePolicy": 2 add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { - name: "toolBar1" + name: "toolBar" "margin": new java.awt.Insets( 3, 3, 3, 3 ) + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } add( new FormComponent( "javax.swing.JButton" ) { name: "backButton" "toolTipText": "Back" @@ -167,6 +170,9 @@ new FormModel { "text": "Exit" "accelerator": static javax.swing.KeyStroke getKeyStroke( 81, 4226, false ) "mnemonic": 88 + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "exitActionPerformed", false ) ) } ) } ) @@ -276,14 +282,24 @@ new FormModel { addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuItemActionPerformed", true ) ) } ) } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "scrollingPopupMenu" + "text": "Scrolling Popup Menu" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + } ) add( new FormComponent( "javax.swing.JMenuItem" ) { name: "menuItem2" "text": "Disabled Item" "enabled": false } ) add( new FormComponent( "javax.swing.JMenuItem" ) { - name: "menuItem1" + name: "htmlMenuItem" "text": "some HTML text" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } } ) add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) { name: "separator8" @@ -345,7 +361,6 @@ new FormModel { add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) { name: "windowDecorationsCheckBoxMenuItem" "text": "Window decorations" - "selected": true auxiliary() { "JavaCodeGenerator.variableLocal": false } @@ -354,7 +369,6 @@ new FormModel { add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) { name: "menuBarEmbeddedCheckBoxMenuItem" "text": "Embedded menu bar" - "selected": true auxiliary() { "JavaCodeGenerator.variableLocal": false } @@ -368,6 +382,14 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "unifiedTitleBar", false ) ) } ) + add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) { + name: "showTitleBarIconMenuItem" + "text": "Show window title bar icon" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showTitleBarIcon", false ) ) + } ) add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) { name: "underlineMenuSelectionMenuItem" "text": "Use underline menu selection" @@ -412,6 +434,9 @@ new FormModel { name: "aboutMenuItem" "text": "About" "mnemonic": 65 + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "aboutActionPerformed", false ) ) } ) } ) diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoPrefs.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoPrefs.java index 893cb429..52626d16 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoPrefs.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/DemoPrefs.java @@ -25,6 +25,7 @@ import com.formdev.flatlaf.FlatLightLaf; import com.formdev.flatlaf.FlatPropertiesLaf; import com.formdev.flatlaf.IntelliJTheme; import com.formdev.flatlaf.demo.intellijthemes.IJThemesPanel; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.StringUtils; /** @@ -83,7 +84,7 @@ public class DemoPrefs UIManager.setLookAndFeel( lafClassName ); } } catch( Throwable ex ) { - ex.printStackTrace(); + LoggingFacade.INSTANCE.logSevere( null, ex ); // fallback FlatLightLaf.setup(); diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/FlatLafDemo.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/FlatLafDemo.java index b6e7c186..9a9bad68 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/FlatLafDemo.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/FlatLafDemo.java @@ -17,6 +17,8 @@ package com.formdev.flatlaf.demo; import java.awt.Dimension; +import javax.swing.JDialog; +import javax.swing.JFrame; import javax.swing.SwingUtilities; import com.formdev.flatlaf.FlatLaf; import com.formdev.flatlaf.extras.FlatInspector; @@ -34,10 +36,31 @@ public class FlatLafDemo static boolean screenshotsMode = Boolean.parseBoolean( System.getProperty( "flatlaf.demo.screenshotsMode" ) ); public static void main( String[] args ) { - // on macOS enable screen menu bar - if( SystemInfo.isMacOS && System.getProperty( "apple.laf.useScreenMenuBar" ) == null ) + // macOS + if( SystemInfo.isMacOS ) { + // enable screen menu bar + // (moves menu bar from JFrame window to top of screen) System.setProperty( "apple.laf.useScreenMenuBar", "true" ); + // application name used in screen menu bar + // (in first menu after the "apple" menu) + System.setProperty( "apple.awt.application.name", "FlatLaf Demo" ); + + // appearance of window title bars + // possible values: + // - "system": use current macOS appearance (light or dark) + // - "NSAppearanceNameAqua": use light appearance + // - "NSAppearanceNameDarkAqua": use dark appearance + System.setProperty( "apple.awt.application.appearance", "system" ); + } + + // Linux + if( SystemInfo.isLinux ) { + // enable custom window decorations + JFrame.setDefaultLookAndFeelDecorated( true ); + JDialog.setDefaultLookAndFeelDecorated( true ); + } + if( FlatLafDemo.screenshotsMode && !SystemInfo.isJava_9_orLater && System.getProperty( "flatlaf.uiScale" ) == null ) System.setProperty( "flatlaf.uiScale", "2x" ); @@ -57,8 +80,11 @@ public class FlatLafDemo // create frame DemoFrame frame = new DemoFrame(); - if( FlatLafDemo.screenshotsMode ) - frame.setPreferredSize( new Dimension( 1660, 840 ) ); + if( FlatLafDemo.screenshotsMode ) { + frame.setPreferredSize( SystemInfo.isJava_9_orLater + ? new Dimension( 830, 440 ) + : new Dimension( 1660, 880 ) ); + } // show frame frame.pack(); diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/HintManager.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/HintManager.java index 9a336f37..50a4b54e 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/HintManager.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/HintManager.java @@ -18,11 +18,15 @@ package com.formdev.flatlaf.demo; import java.awt.*; import java.awt.event.MouseAdapter; +import java.awt.geom.Area; +import java.awt.geom.RoundRectangle2D; import java.util.ArrayList; import java.util.List; import javax.swing.*; +import javax.swing.border.Border; +import com.formdev.flatlaf.FlatLaf; import com.formdev.flatlaf.ui.FlatDropShadowBorder; -import com.formdev.flatlaf.ui.FlatPopupMenuBorder; +import com.formdev.flatlaf.ui.FlatEmptyBorder; import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.util.UIScale; import net.miginfocom.swing.*; @@ -87,6 +91,9 @@ class HintManager initComponents(); + setOpaque( false ); + updateBalloonBorder(); + hintLabel.setText( "" + hint.message + "" ); // grab all mouse events to avoid that components overlapped @@ -98,8 +105,28 @@ class HintManager public void updateUI() { super.updateUI(); - setBackground( UIManager.getColor( "HintPanel.backgroundColor" ) ); - setBorder( new FlatPopupMenuBorder() ); + if( UIManager.getLookAndFeel() instanceof FlatLaf ) + setBackground( UIManager.getColor( "HintPanel.backgroundColor" ) ); + else { + // using nonUIResource() because otherwise Nimbus does not fill the background + setBackground( FlatUIUtils.nonUIResource( UIManager.getColor( "info" ) ) ); + } + + if( hint != null ) + updateBalloonBorder(); + } + + private void updateBalloonBorder() { + int direction; + switch( hint.position ) { + case SwingConstants.LEFT: direction = SwingConstants.RIGHT; break; + case SwingConstants.TOP: direction = SwingConstants.BOTTOM; break; + case SwingConstants.RIGHT: direction = SwingConstants.LEFT; break; + case SwingConstants.BOTTOM: direction = SwingConstants.TOP; break; + default: throw new IllegalArgumentException(); + } + + setBorder( new BalloonBorder( direction, FlatUIUtils.getUIColor( "PopupMenu.borderColor", Color.gray ) ) ); } void showHint() { @@ -115,11 +142,6 @@ class HintManager public void updateUI() { super.updateUI(); - setBorder( new FlatDropShadowBorder( - UIManager.getColor( "Popup.dropShadowColor" ), - UIManager.getInsets( "Popup.dropShadowInsets" ), - FlatUIUtils.getUIFloat( "Popup.dropShadowOpacity", 0.5f ) ) ); - // use invokeLater because at this time the UI delegates // of child components are not yet updated EventQueue.invokeLater( () -> { @@ -216,4 +238,127 @@ class HintManager private JButton gotItButton; // JFormDesigner - End of variables declaration //GEN-END:variables } + + //---- class BalloonBorder ------------------------------------------------ + + private static class BalloonBorder + extends FlatEmptyBorder + { + private static int ARC = 8; + private static int ARROW_XY = 16; + private static int ARROW_SIZE = 8; + private static int SHADOW_SIZE = 6; + private static int SHADOW_TOP_SIZE = 3; + private static int SHADOW_SIZE2 = SHADOW_SIZE + 2; + + private final int direction; + private final Color borderColor; + + private final Border shadowBorder; + + public BalloonBorder( int direction, Color borderColor ) { + super( 1 + SHADOW_TOP_SIZE, 1 + SHADOW_SIZE, 1 + SHADOW_SIZE, 1 + SHADOW_SIZE ); + + this.direction = direction; + this.borderColor = borderColor; + + switch( direction ) { + case SwingConstants.LEFT: left += ARROW_SIZE; break; + case SwingConstants.TOP: top += ARROW_SIZE; break; + case SwingConstants.RIGHT: right += ARROW_SIZE; break; + case SwingConstants.BOTTOM: bottom += ARROW_SIZE; break; + } + + shadowBorder = UIManager.getLookAndFeel() instanceof FlatLaf + ? new FlatDropShadowBorder( + UIManager.getColor( "Popup.dropShadowColor" ), + new Insets( SHADOW_SIZE2, SHADOW_SIZE2, SHADOW_SIZE2, SHADOW_SIZE2 ), + FlatUIUtils.getUIFloat( "Popup.dropShadowOpacity", 0.5f ) ) + : null; + } + + @Override + public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { + Graphics2D g2 = (Graphics2D) g.create(); + try { + FlatUIUtils.setRenderingHints( g2 ); + g2.translate( x, y ); + + // shadow coordinates + int sx = 0; + int sy = 0; + int sw = width; + int sh = height; + int arrowSize = UIScale.scale( ARROW_SIZE ); + switch( direction ) { + case SwingConstants.LEFT: sx += arrowSize; sw -= arrowSize; break; + case SwingConstants.TOP: sy += arrowSize; sh -= arrowSize; break; + case SwingConstants.RIGHT: sw -= arrowSize; break; + case SwingConstants.BOTTOM: sh -= arrowSize; break; + } + + // paint shadow + if( shadowBorder != null ) + shadowBorder.paintBorder( c, g2, sx, sy, sw, sh ); + + // create balloon shape + int bx = UIScale.scale( SHADOW_SIZE ); + int by = UIScale.scale( SHADOW_TOP_SIZE ); + int bw = width - UIScale.scale( SHADOW_SIZE + SHADOW_SIZE ); + int bh = height - UIScale.scale( SHADOW_TOP_SIZE + SHADOW_SIZE ); + g2.translate( bx, by ); + Shape shape = createBalloonShape( bw, bh ); + + // fill balloon background + g2.setColor( c.getBackground() ); + g2.fill( shape ); + + // paint balloon border + g2.setColor( borderColor ); + g2.setStroke( new BasicStroke( UIScale.scale( 1f ) ) ); + g2.draw( shape ); + } finally { + g2.dispose(); + } + } + + private Shape createBalloonShape( int width, int height ) { + int arc = UIScale.scale( ARC ); + int xy = UIScale.scale( ARROW_XY ); + int awh = UIScale.scale( ARROW_SIZE ); + + Shape rect; + Shape arrow; + switch( direction ) { + case SwingConstants.LEFT: + rect = new RoundRectangle2D.Float( awh, 0, width - 1 - awh, height - 1, arc, arc ); + arrow = FlatUIUtils.createPath( awh,xy, 0,xy+awh, awh,xy+awh+awh ); + break; + + case SwingConstants.TOP: + rect = new RoundRectangle2D.Float( 0, awh, width - 1, height - 1 - awh, arc, arc ); + arrow = FlatUIUtils.createPath( xy,awh, xy+awh,0, xy+awh+awh,awh ); + break; + + case SwingConstants.RIGHT: + rect = new RoundRectangle2D.Float( 0, 0, width - 1 - awh, height - 1, arc, arc ); + int x = width - 1 - awh; + arrow = FlatUIUtils.createPath( x,xy, x+awh,xy+awh, x,xy+awh+awh ); + break; + + case SwingConstants.BOTTOM: + rect = new RoundRectangle2D.Float( 0, 0, width - 1, height - 1 - awh, arc, arc ); + int y = height - 1 - awh; + arrow = FlatUIUtils.createPath( xy,y, xy+awh,y+awh, xy+awh+awh,y ); + break; + + default: + throw new RuntimeException(); + } + + Area area = new Area( rect ); + area.add( new Area( arrow ) ); + return area; + } + } } diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/OptionPanePanel.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/OptionPanePanel.java index 98de9d00..d1622644 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/OptionPanePanel.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/OptionPanePanel.java @@ -21,6 +21,7 @@ import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.*; import javax.swing.border.*; +import com.formdev.flatlaf.FlatLaf; import net.miginfocom.swing.*; /** @@ -44,6 +45,29 @@ class OptionPanePanel "OK", "Cancel", } ); + + if( FlatLaf.supportsNativeWindowDecorations() ) { + updateShowTitleBarIcon(); + + UIManager.getDefaults().addPropertyChangeListener( e -> { + switch( e.getPropertyName() ) { + case "TitlePane.showIcon": + case "TitlePane.useWindowDecorations": + updateShowTitleBarIcon(); + break; + } + } ); + } else + showTitleBarIconCheckBox.setEnabled( false ); + } + + private void updateShowTitleBarIcon() { + showTitleBarIconCheckBox.setEnabled( UIManager.getBoolean( "TitlePane.showIcon" ) && + FlatLaf.isUseNativeWindowDecorations() ); + } + + private void showTitleBarIcon() { + UIManager.put( "OptionPane.showIcon", showTitleBarIconCheckBox.isSelected() ); } private void initComponents() { @@ -54,6 +78,7 @@ class OptionPanePanel JPanel panel1 = new JPanel(); JOptionPane plainOptionPane = new JOptionPane(); plainShowDialogLabel = new OptionPanePanel.ShowDialogLinkLabel(); + showTitleBarIconCheckBox = new JCheckBox(); JLabel errorLabel = new JLabel(); JPanel panel2 = new JPanel(); JOptionPane errorOptionPane = new JOptionPane(); @@ -93,7 +118,7 @@ class OptionPanePanel //======== panel9 ======== { panel9.setLayout(new MigLayout( - "flowy,insets dialog,hidemode 3", + "insets dialog,hidemode 3", // columns "[]" + "[]" + @@ -126,7 +151,12 @@ class OptionPanePanel //---- plainShowDialogLabel ---- plainShowDialogLabel.setOptionPane(plainOptionPane); plainShowDialogLabel.setTitleLabel(plainLabel); - panel9.add(plainShowDialogLabel, "cell 2 0"); + panel9.add(plainShowDialogLabel, "cell 1 0"); + + //---- showTitleBarIconCheckBox ---- + showTitleBarIconCheckBox.setText("Show window title bar icon"); + showTitleBarIconCheckBox.addActionListener(e -> showTitleBarIcon()); + panel9.add(showTitleBarIconCheckBox, "cell 2 0"); //---- errorLabel ---- errorLabel.setText("Error"); @@ -148,7 +178,7 @@ class OptionPanePanel //---- errorShowDialogLabel ---- errorShowDialogLabel.setTitleLabel(errorLabel); errorShowDialogLabel.setOptionPane(errorOptionPane); - panel9.add(errorShowDialogLabel, "cell 2 1"); + panel9.add(errorShowDialogLabel, "cell 1 1"); //---- informationLabel ---- informationLabel.setText("Information"); @@ -170,7 +200,7 @@ class OptionPanePanel //---- informationShowDialogLabel ---- informationShowDialogLabel.setOptionPane(informationOptionPane); informationShowDialogLabel.setTitleLabel(informationLabel); - panel9.add(informationShowDialogLabel, "cell 2 2"); + panel9.add(informationShowDialogLabel, "cell 1 2"); //---- questionLabel ---- questionLabel.setText("Question"); @@ -214,7 +244,7 @@ class OptionPanePanel //---- warningShowDialogLabel ---- warningShowDialogLabel.setOptionPane(warningOptionPane); warningShowDialogLabel.setTitleLabel(warningLabel); - panel9.add(warningShowDialogLabel, "cell 2 4"); + panel9.add(warningShowDialogLabel, "cell 1 4"); //---- inputLabel ---- inputLabel.setText("Input"); @@ -236,7 +266,7 @@ class OptionPanePanel //---- inputShowDialogLabel ---- inputShowDialogLabel.setOptionPane(inputOptionPane); inputShowDialogLabel.setTitleLabel(inputLabel); - panel9.add(inputShowDialogLabel, "cell 2 5"); + panel9.add(inputShowDialogLabel, "cell 1 5"); //---- inputIconLabel ---- inputIconLabel.setText("Input + icon"); @@ -259,7 +289,7 @@ class OptionPanePanel //---- inputIconShowDialogLabel ---- inputIconShowDialogLabel.setTitleLabel(inputIconLabel); inputIconShowDialogLabel.setOptionPane(inputIconOptionPane); - panel9.add(inputIconShowDialogLabel, "cell 2 6"); + panel9.add(inputIconShowDialogLabel, "cell 1 6"); //---- customLabel ---- customLabel.setText("Custom"); @@ -279,7 +309,7 @@ class OptionPanePanel //---- customShowDialogLabel ---- customShowDialogLabel.setOptionPane(customOptionPane); customShowDialogLabel.setTitleLabel(customLabel); - panel9.add(customShowDialogLabel, "cell 2 7"); + panel9.add(customShowDialogLabel, "cell 1 7"); } scrollPane1.setViewportView(panel9); } @@ -289,6 +319,7 @@ class OptionPanePanel // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables private OptionPanePanel.ShowDialogLinkLabel plainShowDialogLabel; + private JCheckBox showTitleBarIconCheckBox; private OptionPanePanel.ShowDialogLinkLabel errorShowDialogLabel; private OptionPanePanel.ShowDialogLinkLabel informationShowDialogLabel; private JOptionPane customOptionPane; @@ -304,6 +335,7 @@ class OptionPanePanel ShowDialogLinkLabel() { setText( "Show dialog" ); + setCursor( Cursor.getPredefinedCursor( Cursor.HAND_CURSOR ) ); addMouseListener( new MouseAdapter() { @Override diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/OptionPanePanel.jfd b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/OptionPanePanel.jfd index 23905510..7d58e157 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/OptionPanePanel.jfd +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/OptionPanePanel.jfd @@ -12,7 +12,7 @@ new FormModel { name: "scrollPane1" "border": new javax.swing.border.EmptyBorder( 0, 0, 0, 0 ) add( new FormContainer( "com.formdev.flatlaf.demo.ScrollablePanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { - "$layoutConstraints": "flowy,insets dialog,hidemode 3" + "$layoutConstraints": "insets dialog,hidemode 3" "$columnConstraints": "[][][fill]" "$rowConstraints": "[top][top][top][top][top][top][top][top]" } ) { @@ -42,6 +42,16 @@ new FormModel { auxiliary() { "JavaCodeGenerator.variableLocal": false } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 0" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "showTitleBarIconCheckBox" + "text": "Show window title bar icon" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showTitleBarIcon", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 2 0" } ) @@ -73,7 +83,7 @@ new FormModel { "JavaCodeGenerator.variableLocal": false } }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 1" + "value": "cell 1 1" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "informationLabel" @@ -103,7 +113,7 @@ new FormModel { "JavaCodeGenerator.variableLocal": false } }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 2" + "value": "cell 1 2" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "questionLabel" @@ -157,7 +167,7 @@ new FormModel { "optionPane": new FormReference( "warningOptionPane" ) "titleLabel": new FormReference( "warningLabel" ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 4" + "value": "cell 1 4" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "inputLabel" @@ -184,7 +194,7 @@ new FormModel { "optionPane": new FormReference( "inputOptionPane" ) "titleLabel": new FormReference( "inputLabel" ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 5" + "value": "cell 1 5" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "inputIconLabel" @@ -212,7 +222,7 @@ new FormModel { "titleLabel": new FormReference( "inputIconLabel" ) "optionPane": new FormReference( "inputIconOptionPane" ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 6" + "value": "cell 1 6" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "customLabel" @@ -240,7 +250,7 @@ new FormModel { "optionPane": new FormReference( "customOptionPane" ) "titleLabel": new FormReference( "customLabel" ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 7" + "value": "cell 1 7" } ) } ) }, new FormLayoutConstraints( class java.lang.String ) { @@ -248,7 +258,7 @@ new FormModel { } ) }, new FormLayoutConstraints( null ) { "location": new java.awt.Point( 0, 0 ) - "size": new java.awt.Dimension( 840, 900 ) + "size": new java.awt.Dimension( 955, 900 ) } ) } } diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/TabsPanel.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/TabsPanel.java index 067a2cde..28d39fec 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/TabsPanel.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/TabsPanel.java @@ -303,6 +303,11 @@ class TabsPanel putTabbedPanesClientProperty( TABBED_PANE_SCROLL_BUTTONS_PLACEMENT, scrollButtonsPlacement ); } + private void tabTypeChanged() { + String tabType = cardTabTypeButton.isSelected() ? TABBED_PANE_TAB_TYPE_CARD : null; + putTabbedPanesClientProperty( TABBED_PANE_TAB_TYPE, tabType ); + } + private void showTabSeparatorsChanged() { Boolean showTabSeparators = showTabSeparatorsCheckBox.isSelected() ? true : null; putTabbedPanesClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators ); @@ -396,14 +401,17 @@ class TabsPanel scrollButtonsPlacementToolBar = new JToolBar(); scrollBothButton = new JToggleButton(); scrollTrailingButton = new JToggleButton(); + showTabSeparatorsCheckBox = new JCheckBox(); tabsPopupPolicyLabel = new JLabel(); tabsPopupPolicyToolBar = new JToolBar(); popupAsNeededButton = new JToggleButton(); popupNeverButton = new JToggleButton(); - showTabSeparatorsCheckBox = new JCheckBox(); + tabTypeLabel = new JLabel(); + tabTypeToolBar = new JToolBar(); + underlinedTabTypeButton = new JToggleButton(); + cardTabTypeButton = new JToggleButton(); //======== this ======== - setName("this"); setLayout(new MigLayout( "insets dialog,hidemode 3", // columns @@ -417,7 +425,6 @@ class TabsPanel //======== panel1 ======== { - panel1.setName("panel1"); panel1.setLayout(new MigLayout( "insets 0,hidemode 3", // columns @@ -435,92 +442,75 @@ class TabsPanel //---- tabPlacementLabel ---- tabPlacementLabel.setText("Tab placement"); - tabPlacementLabel.setFont(tabPlacementLabel.getFont().deriveFont(tabPlacementLabel.getFont().getSize() + 4f)); - tabPlacementLabel.setName("tabPlacementLabel"); + tabPlacementLabel.putClientProperty("FlatLaf.styleClass", "h3"); panel1.add(tabPlacementLabel, "cell 0 0"); //======== tabPlacementToolBar ======== { tabPlacementToolBar.setFloatable(false); tabPlacementToolBar.setBorder(BorderFactory.createEmptyBorder()); - tabPlacementToolBar.setName("tabPlacementToolBar"); //---- topPlacementButton ---- topPlacementButton.setText("top"); topPlacementButton.setSelected(true); - topPlacementButton.setFont(topPlacementButton.getFont().deriveFont(topPlacementButton.getFont().getSize() - 2f)); - topPlacementButton.setName("topPlacementButton"); + topPlacementButton.putClientProperty("FlatLaf.styleClass", "small"); topPlacementButton.addActionListener(e -> tabPlacementChanged()); tabPlacementToolBar.add(topPlacementButton); //---- bottomPlacementButton ---- bottomPlacementButton.setText("bottom"); - bottomPlacementButton.setFont(bottomPlacementButton.getFont().deriveFont(bottomPlacementButton.getFont().getSize() - 2f)); - bottomPlacementButton.setName("bottomPlacementButton"); + bottomPlacementButton.putClientProperty("FlatLaf.styleClass", "small"); bottomPlacementButton.addActionListener(e -> tabPlacementChanged()); tabPlacementToolBar.add(bottomPlacementButton); //---- leftPlacementButton ---- leftPlacementButton.setText("left"); - leftPlacementButton.setFont(leftPlacementButton.getFont().deriveFont(leftPlacementButton.getFont().getSize() - 2f)); - leftPlacementButton.setName("leftPlacementButton"); + leftPlacementButton.putClientProperty("FlatLaf.styleClass", "small"); leftPlacementButton.addActionListener(e -> tabPlacementChanged()); tabPlacementToolBar.add(leftPlacementButton); //---- rightPlacementButton ---- rightPlacementButton.setText("right"); - rightPlacementButton.setFont(rightPlacementButton.getFont().deriveFont(rightPlacementButton.getFont().getSize() - 2f)); - rightPlacementButton.setName("rightPlacementButton"); + rightPlacementButton.putClientProperty("FlatLaf.styleClass", "small"); rightPlacementButton.addActionListener(e -> tabPlacementChanged()); tabPlacementToolBar.add(rightPlacementButton); tabPlacementToolBar.addSeparator(); //---- scrollButton ---- scrollButton.setText("scroll"); - scrollButton.setFont(scrollButton.getFont().deriveFont(scrollButton.getFont().getSize() - 2f)); - scrollButton.setName("scrollButton"); + scrollButton.putClientProperty("FlatLaf.styleClass", "small"); scrollButton.addActionListener(e -> scrollChanged()); tabPlacementToolBar.add(scrollButton); //---- borderButton ---- borderButton.setText("border"); - borderButton.setFont(borderButton.getFont().deriveFont(borderButton.getFont().getSize() - 2f)); - borderButton.setName("borderButton"); + borderButton.putClientProperty("FlatLaf.styleClass", "small"); borderButton.addActionListener(e -> borderChanged()); tabPlacementToolBar.add(borderButton); } panel1.add(tabPlacementToolBar, "cell 0 0,alignx right,growx 0"); - - //======== tabPlacementTabbedPane ======== - { - tabPlacementTabbedPane.setName("tabPlacementTabbedPane"); - } panel1.add(tabPlacementTabbedPane, "cell 0 1,width 300:300,height 100:100"); //---- tabLayoutLabel ---- tabLayoutLabel.setText("Tab layout"); - tabLayoutLabel.setFont(tabLayoutLabel.getFont().deriveFont(tabLayoutLabel.getFont().getSize() + 4f)); - tabLayoutLabel.setName("tabLayoutLabel"); + tabLayoutLabel.putClientProperty("FlatLaf.styleClass", "h3"); panel1.add(tabLayoutLabel, "cell 0 2"); //======== tabLayoutToolBar ======== { tabLayoutToolBar.setFloatable(false); tabLayoutToolBar.setBorder(BorderFactory.createEmptyBorder()); - tabLayoutToolBar.setName("tabLayoutToolBar"); //---- scrollTabLayoutButton ---- scrollTabLayoutButton.setText("scroll"); - scrollTabLayoutButton.setFont(scrollTabLayoutButton.getFont().deriveFont(scrollTabLayoutButton.getFont().getSize() - 2f)); scrollTabLayoutButton.setSelected(true); - scrollTabLayoutButton.setName("scrollTabLayoutButton"); + scrollTabLayoutButton.putClientProperty("FlatLaf.styleClass", "small"); scrollTabLayoutButton.addActionListener(e -> tabLayoutChanged()); tabLayoutToolBar.add(scrollTabLayoutButton); //---- wrapTabLayoutButton ---- wrapTabLayoutButton.setText("wrap"); - wrapTabLayoutButton.setFont(wrapTabLayoutButton.getFont().deriveFont(wrapTabLayoutButton.getFont().getSize() - 2f)); - wrapTabLayoutButton.setName("wrapTabLayoutButton"); + wrapTabLayoutButton.putClientProperty("FlatLaf.styleClass", "small"); wrapTabLayoutButton.addActionListener(e -> tabLayoutChanged()); tabLayoutToolBar.add(wrapTabLayoutButton); } @@ -529,112 +519,80 @@ class TabsPanel //---- scrollLayoutNoteLabel ---- scrollLayoutNoteLabel.setText("(use mouse wheel to scroll; arrow button shows hidden tabs)"); scrollLayoutNoteLabel.setEnabled(false); - scrollLayoutNoteLabel.setFont(scrollLayoutNoteLabel.getFont().deriveFont(scrollLayoutNoteLabel.getFont().getSize() - 2f)); - scrollLayoutNoteLabel.setName("scrollLayoutNoteLabel"); + scrollLayoutNoteLabel.putClientProperty("FlatLaf.styleClass", "small"); panel1.add(scrollLayoutNoteLabel, "cell 0 3"); //---- wrapLayoutNoteLabel ---- wrapLayoutNoteLabel.setText("(probably better to use scroll layout?)"); wrapLayoutNoteLabel.setEnabled(false); - wrapLayoutNoteLabel.setFont(wrapLayoutNoteLabel.getFont().deriveFont(wrapLayoutNoteLabel.getFont().getSize() - 2f)); - wrapLayoutNoteLabel.setName("wrapLayoutNoteLabel"); + wrapLayoutNoteLabel.putClientProperty("FlatLaf.styleClass", "small"); panel1.add(wrapLayoutNoteLabel, "cell 0 3"); - - //======== scrollLayoutTabbedPane ======== - { - scrollLayoutTabbedPane.setName("scrollLayoutTabbedPane"); - } panel1.add(scrollLayoutTabbedPane, "cell 0 4"); - - //======== wrapLayoutTabbedPane ======== - { - wrapLayoutTabbedPane.setName("wrapLayoutTabbedPane"); - } panel1.add(wrapLayoutTabbedPane, "cell 0 4,width 100:100,height pref*2px"); //---- closableTabsLabel ---- closableTabsLabel.setText("Closable tabs"); - closableTabsLabel.setFont(closableTabsLabel.getFont().deriveFont(closableTabsLabel.getFont().getSize() + 4f)); - closableTabsLabel.setName("closableTabsLabel"); + closableTabsLabel.putClientProperty("FlatLaf.styleClass", "h3"); panel1.add(closableTabsLabel, "cell 0 5"); //======== closableTabsToolBar ======== { closableTabsToolBar.setFloatable(false); closableTabsToolBar.setBorder(BorderFactory.createEmptyBorder()); - closableTabsToolBar.setName("closableTabsToolBar"); //---- squareCloseButton ---- squareCloseButton.setText("square"); - squareCloseButton.setFont(squareCloseButton.getFont().deriveFont(squareCloseButton.getFont().getSize() - 2f)); squareCloseButton.setSelected(true); - squareCloseButton.setName("squareCloseButton"); + squareCloseButton.putClientProperty("FlatLaf.styleClass", "small"); squareCloseButton.addActionListener(e -> closeButtonStyleChanged()); closableTabsToolBar.add(squareCloseButton); //---- circleCloseButton ---- circleCloseButton.setText("circle"); - circleCloseButton.setFont(circleCloseButton.getFont().deriveFont(circleCloseButton.getFont().getSize() - 2f)); - circleCloseButton.setName("circleCloseButton"); + circleCloseButton.putClientProperty("FlatLaf.styleClass", "small"); circleCloseButton.addActionListener(e -> closeButtonStyleChanged()); closableTabsToolBar.add(circleCloseButton); //---- redCrossCloseButton ---- redCrossCloseButton.setText("red cross"); - redCrossCloseButton.setFont(redCrossCloseButton.getFont().deriveFont(redCrossCloseButton.getFont().getSize() - 2f)); - redCrossCloseButton.setName("redCrossCloseButton"); + redCrossCloseButton.putClientProperty("FlatLaf.styleClass", "small"); redCrossCloseButton.addActionListener(e -> closeButtonStyleChanged()); closableTabsToolBar.add(redCrossCloseButton); } panel1.add(closableTabsToolBar, "cell 0 5,alignx right,growx 0"); - - //======== closableTabsTabbedPane ======== - { - closableTabsTabbedPane.setName("closableTabsTabbedPane"); - } panel1.add(closableTabsTabbedPane, "cell 0 6"); //---- tabAreaComponentsLabel ---- tabAreaComponentsLabel.setText("Custom tab area components"); - tabAreaComponentsLabel.setFont(tabAreaComponentsLabel.getFont().deriveFont(tabAreaComponentsLabel.getFont().getSize() + 4f)); - tabAreaComponentsLabel.setName("tabAreaComponentsLabel"); + tabAreaComponentsLabel.putClientProperty("FlatLaf.styleClass", "h3"); panel1.add(tabAreaComponentsLabel, "cell 0 7"); //======== tabAreaComponentsToolBar ======== { tabAreaComponentsToolBar.setFloatable(false); tabAreaComponentsToolBar.setBorder(BorderFactory.createEmptyBorder()); - tabAreaComponentsToolBar.setName("tabAreaComponentsToolBar"); //---- leadingComponentButton ---- leadingComponentButton.setText("leading"); - leadingComponentButton.setFont(leadingComponentButton.getFont().deriveFont(leadingComponentButton.getFont().getSize() - 2f)); leadingComponentButton.setSelected(true); - leadingComponentButton.setName("leadingComponentButton"); + leadingComponentButton.putClientProperty("FlatLaf.styleClass", "small"); leadingComponentButton.addActionListener(e -> customComponentsChanged()); tabAreaComponentsToolBar.add(leadingComponentButton); //---- trailingComponentButton ---- trailingComponentButton.setText("trailing"); - trailingComponentButton.setFont(trailingComponentButton.getFont().deriveFont(trailingComponentButton.getFont().getSize() - 2f)); trailingComponentButton.setSelected(true); - trailingComponentButton.setName("trailingComponentButton"); + trailingComponentButton.putClientProperty("FlatLaf.styleClass", "small"); trailingComponentButton.addActionListener(e -> customComponentsChanged()); tabAreaComponentsToolBar.add(trailingComponentButton); } panel1.add(tabAreaComponentsToolBar, "cell 0 7,alignx right,growx 0"); - - //======== customComponentsTabbedPane ======== - { - customComponentsTabbedPane.setName("customComponentsTabbedPane"); - } panel1.add(customComponentsTabbedPane, "cell 0 8"); } add(panel1, "cell 0 0"); //======== panel2 ======== { - panel2.setName("panel2"); panel2.setLayout(new MigLayout( "insets 0,hidemode 3", // columns @@ -655,83 +613,38 @@ class TabsPanel //---- tabIconPlacementLabel ---- tabIconPlacementLabel.setText("Tab icon placement"); - tabIconPlacementLabel.setFont(tabIconPlacementLabel.getFont().deriveFont(tabIconPlacementLabel.getFont().getSize() + 4f)); - tabIconPlacementLabel.setName("tabIconPlacementLabel"); + tabIconPlacementLabel.putClientProperty("FlatLaf.styleClass", "h3"); panel2.add(tabIconPlacementLabel, "cell 0 0"); //---- tabIconPlacementNodeLabel ---- tabIconPlacementNodeLabel.setText("(top/bottom/leading/trailing)"); tabIconPlacementNodeLabel.setEnabled(false); - tabIconPlacementNodeLabel.setFont(tabIconPlacementNodeLabel.getFont().deriveFont(tabIconPlacementNodeLabel.getFont().getSize() - 2f)); - tabIconPlacementNodeLabel.setName("tabIconPlacementNodeLabel"); + tabIconPlacementNodeLabel.putClientProperty("FlatLaf.styleClass", "small"); panel2.add(tabIconPlacementNodeLabel, "cell 0 1"); - - //======== iconTopTabbedPane ======== - { - iconTopTabbedPane.setName("iconTopTabbedPane"); - } panel2.add(iconTopTabbedPane, "cell 0 2"); - - //======== iconBottomTabbedPane ======== - { - iconBottomTabbedPane.setName("iconBottomTabbedPane"); - } panel2.add(iconBottomTabbedPane, "cell 0 3"); - - //======== iconLeadingTabbedPane ======== - { - iconLeadingTabbedPane.setName("iconLeadingTabbedPane"); - } panel2.add(iconLeadingTabbedPane, "cell 0 4"); - - //======== iconTrailingTabbedPane ======== - { - iconTrailingTabbedPane.setName("iconTrailingTabbedPane"); - } panel2.add(iconTrailingTabbedPane, "cell 0 5"); //---- tabAreaAlignmentLabel ---- tabAreaAlignmentLabel.setText("Tab area alignment"); - tabAreaAlignmentLabel.setFont(tabAreaAlignmentLabel.getFont().deriveFont(tabAreaAlignmentLabel.getFont().getSize() + 4f)); - tabAreaAlignmentLabel.setName("tabAreaAlignmentLabel"); + tabAreaAlignmentLabel.putClientProperty("FlatLaf.styleClass", "h3"); panel2.add(tabAreaAlignmentLabel, "cell 0 6"); //---- tabAreaAlignmentNoteLabel ---- tabAreaAlignmentNoteLabel.setText("(leading/center/trailing/fill)"); tabAreaAlignmentNoteLabel.setEnabled(false); - tabAreaAlignmentNoteLabel.setFont(tabAreaAlignmentNoteLabel.getFont().deriveFont(tabAreaAlignmentNoteLabel.getFont().getSize() - 2f)); - tabAreaAlignmentNoteLabel.setName("tabAreaAlignmentNoteLabel"); + tabAreaAlignmentNoteLabel.putClientProperty("FlatLaf.styleClass", "small"); panel2.add(tabAreaAlignmentNoteLabel, "cell 0 7"); - - //======== alignLeadingTabbedPane ======== - { - alignLeadingTabbedPane.setName("alignLeadingTabbedPane"); - } panel2.add(alignLeadingTabbedPane, "cell 0 8"); - - //======== alignCenterTabbedPane ======== - { - alignCenterTabbedPane.setName("alignCenterTabbedPane"); - } panel2.add(alignCenterTabbedPane, "cell 0 9"); - - //======== alignTrailingTabbedPane ======== - { - alignTrailingTabbedPane.setName("alignTrailingTabbedPane"); - } panel2.add(alignTrailingTabbedPane, "cell 0 10"); - - //======== alignFillTabbedPane ======== - { - alignFillTabbedPane.setName("alignFillTabbedPane"); - } panel2.add(alignFillTabbedPane, "cell 0 11"); } add(panel2, "cell 1 0,growy"); //======== panel3 ======== { - panel3.setName("panel3"); panel3.setLayout(new MigLayout( "insets 0,hidemode 3", // columns @@ -750,62 +663,32 @@ class TabsPanel //---- tabWidthModeLabel ---- tabWidthModeLabel.setText("Tab width mode"); - tabWidthModeLabel.setFont(tabWidthModeLabel.getFont().deriveFont(tabWidthModeLabel.getFont().getSize() + 4f)); - tabWidthModeLabel.setName("tabWidthModeLabel"); + tabWidthModeLabel.putClientProperty("FlatLaf.styleClass", "h3"); panel3.add(tabWidthModeLabel, "cell 0 0"); //---- tabWidthModeNoteLabel ---- tabWidthModeNoteLabel.setText("(preferred/equal/compact)"); - tabWidthModeNoteLabel.setFont(tabWidthModeNoteLabel.getFont().deriveFont(tabWidthModeNoteLabel.getFont().getSize() - 2f)); tabWidthModeNoteLabel.setEnabled(false); - tabWidthModeNoteLabel.setName("tabWidthModeNoteLabel"); + tabWidthModeNoteLabel.putClientProperty("FlatLaf.styleClass", "small"); panel3.add(tabWidthModeNoteLabel, "cell 0 1"); - - //======== widthPreferredTabbedPane ======== - { - widthPreferredTabbedPane.setName("widthPreferredTabbedPane"); - } panel3.add(widthPreferredTabbedPane, "cell 0 2"); - - //======== widthEqualTabbedPane ======== - { - widthEqualTabbedPane.setName("widthEqualTabbedPane"); - } panel3.add(widthEqualTabbedPane, "cell 0 3"); - - //======== widthCompactTabbedPane ======== - { - widthCompactTabbedPane.setName("widthCompactTabbedPane"); - } panel3.add(widthCompactTabbedPane, "cell 0 4"); //---- minMaxTabWidthLabel ---- minMaxTabWidthLabel.setText("Minimum/maximum tab width"); - minMaxTabWidthLabel.setFont(minMaxTabWidthLabel.getFont().deriveFont(minMaxTabWidthLabel.getFont().getSize() + 4f)); - minMaxTabWidthLabel.setName("minMaxTabWidthLabel"); + minMaxTabWidthLabel.putClientProperty("FlatLaf.styleClass", "h3"); panel3.add(minMaxTabWidthLabel, "cell 0 5"); - - //======== minimumTabWidthTabbedPane ======== - { - minimumTabWidthTabbedPane.setName("minimumTabWidthTabbedPane"); - } panel3.add(minimumTabWidthTabbedPane, "cell 0 6"); - - //======== maximumTabWidthTabbedPane ======== - { - maximumTabWidthTabbedPane.setName("maximumTabWidthTabbedPane"); - } panel3.add(maximumTabWidthTabbedPane, "cell 0 7"); //---- tabAlignmentLabel ---- tabAlignmentLabel.setText("Tab title alignment"); - tabAlignmentLabel.setFont(tabAlignmentLabel.getFont().deriveFont(tabAlignmentLabel.getFont().getSize() + 4f)); - tabAlignmentLabel.setName("tabAlignmentLabel"); + tabAlignmentLabel.putClientProperty("FlatLaf.styleClass", "h3"); panel3.add(tabAlignmentLabel, "cell 0 8"); //======== panel5 ======== { - panel5.setName("panel5"); panel5.setLayout(new MigLayout( "insets 0,hidemode 3", // columns @@ -820,94 +703,68 @@ class TabsPanel //---- tabAlignmentNoteLabel ---- tabAlignmentNoteLabel.setText("(leading/center/trailing)"); tabAlignmentNoteLabel.setEnabled(false); - tabAlignmentNoteLabel.setFont(tabAlignmentNoteLabel.getFont().deriveFont(tabAlignmentNoteLabel.getFont().getSize() - 2f)); - tabAlignmentNoteLabel.setName("tabAlignmentNoteLabel"); + tabAlignmentNoteLabel.putClientProperty("FlatLaf.styleClass", "small"); panel5.add(tabAlignmentNoteLabel, "cell 0 0"); //---- tabAlignmentNoteLabel2 ---- tabAlignmentNoteLabel2.setText("(trailing)"); tabAlignmentNoteLabel2.setEnabled(false); - tabAlignmentNoteLabel2.setFont(tabAlignmentNoteLabel2.getFont().deriveFont(tabAlignmentNoteLabel2.getFont().getSize() - 2f)); - tabAlignmentNoteLabel2.setName("tabAlignmentNoteLabel2"); + tabAlignmentNoteLabel2.putClientProperty("FlatLaf.styleClass", "small"); panel5.add(tabAlignmentNoteLabel2, "cell 1 0,alignx right,growx 0"); - - //======== tabAlignLeadingTabbedPane ======== - { - tabAlignLeadingTabbedPane.setName("tabAlignLeadingTabbedPane"); - } panel5.add(tabAlignLeadingTabbedPane, "cell 0 1"); //======== tabAlignVerticalTabbedPane ======== { tabAlignVerticalTabbedPane.setTabPlacement(SwingConstants.LEFT); - tabAlignVerticalTabbedPane.setName("tabAlignVerticalTabbedPane"); } panel5.add(tabAlignVerticalTabbedPane, "cell 1 1 1 3,growy"); - - //======== tabAlignCenterTabbedPane ======== - { - tabAlignCenterTabbedPane.setName("tabAlignCenterTabbedPane"); - } panel5.add(tabAlignCenterTabbedPane, "cell 0 2"); - - //======== tabAlignTrailingTabbedPane ======== - { - tabAlignTrailingTabbedPane.setName("tabAlignTrailingTabbedPane"); - } panel5.add(tabAlignTrailingTabbedPane, "cell 0 3"); } panel3.add(panel5, "cell 0 9"); } add(panel3, "cell 2 0"); - - //---- separator2 ---- - separator2.setName("separator2"); add(separator2, "cell 0 1 3 1"); //======== panel4 ======== { - panel4.setName("panel4"); panel4.setLayout(new MigLayout( "insets 0,hidemode 3", // columns "[]" + "[fill]para" + "[fill]" + - "[fill]para", + "[fill]para" + + "[fill]", // rows "[]" + "[center]")); //---- scrollButtonsPolicyLabel ---- scrollButtonsPolicyLabel.setText("Scroll buttons policy:"); - scrollButtonsPolicyLabel.setName("scrollButtonsPolicyLabel"); panel4.add(scrollButtonsPolicyLabel, "cell 0 0"); //======== scrollButtonsPolicyToolBar ======== { scrollButtonsPolicyToolBar.setFloatable(false); scrollButtonsPolicyToolBar.setBorder(BorderFactory.createEmptyBorder()); - scrollButtonsPolicyToolBar.setName("scrollButtonsPolicyToolBar"); //---- scrollAsNeededSingleButton ---- scrollAsNeededSingleButton.setText("asNeededSingle"); - scrollAsNeededSingleButton.setFont(scrollAsNeededSingleButton.getFont().deriveFont(scrollAsNeededSingleButton.getFont().getSize() - 2f)); scrollAsNeededSingleButton.setSelected(true); - scrollAsNeededSingleButton.setName("scrollAsNeededSingleButton"); + scrollAsNeededSingleButton.putClientProperty("FlatLaf.styleClass", "small"); scrollAsNeededSingleButton.addActionListener(e -> scrollButtonsPolicyChanged()); scrollButtonsPolicyToolBar.add(scrollAsNeededSingleButton); //---- scrollAsNeededButton ---- scrollAsNeededButton.setText("asNeeded"); - scrollAsNeededButton.setFont(scrollAsNeededButton.getFont().deriveFont(scrollAsNeededButton.getFont().getSize() - 2f)); - scrollAsNeededButton.setName("scrollAsNeededButton"); + scrollAsNeededButton.putClientProperty("FlatLaf.styleClass", "small"); scrollAsNeededButton.addActionListener(e -> scrollButtonsPolicyChanged()); scrollButtonsPolicyToolBar.add(scrollAsNeededButton); //---- scrollNeverButton ---- scrollNeverButton.setText("never"); - scrollNeverButton.setFont(scrollNeverButton.getFont().deriveFont(scrollNeverButton.getFont().getSize() - 2f)); - scrollNeverButton.setName("scrollNeverButton"); + scrollNeverButton.putClientProperty("FlatLaf.styleClass", "small"); scrollNeverButton.addActionListener(e -> scrollButtonsPolicyChanged()); scrollButtonsPolicyToolBar.add(scrollNeverButton); } @@ -915,65 +772,79 @@ class TabsPanel //---- scrollButtonsPlacementLabel ---- scrollButtonsPlacementLabel.setText("Scroll buttons placement:"); - scrollButtonsPlacementLabel.setName("scrollButtonsPlacementLabel"); panel4.add(scrollButtonsPlacementLabel, "cell 2 0"); //======== scrollButtonsPlacementToolBar ======== { scrollButtonsPlacementToolBar.setFloatable(false); scrollButtonsPlacementToolBar.setBorder(BorderFactory.createEmptyBorder()); - scrollButtonsPlacementToolBar.setName("scrollButtonsPlacementToolBar"); //---- scrollBothButton ---- scrollBothButton.setText("both"); - scrollBothButton.setFont(scrollBothButton.getFont().deriveFont(scrollBothButton.getFont().getSize() - 2f)); scrollBothButton.setSelected(true); - scrollBothButton.setName("scrollBothButton"); + scrollBothButton.putClientProperty("FlatLaf.styleClass", "small"); scrollBothButton.addActionListener(e -> scrollButtonsPlacementChanged()); scrollButtonsPlacementToolBar.add(scrollBothButton); //---- scrollTrailingButton ---- scrollTrailingButton.setText("trailing"); - scrollTrailingButton.setFont(scrollTrailingButton.getFont().deriveFont(scrollTrailingButton.getFont().getSize() - 2f)); - scrollTrailingButton.setName("scrollTrailingButton"); + scrollTrailingButton.putClientProperty("FlatLaf.styleClass", "small"); scrollTrailingButton.addActionListener(e -> scrollButtonsPlacementChanged()); scrollButtonsPlacementToolBar.add(scrollTrailingButton); } panel4.add(scrollButtonsPlacementToolBar, "cell 3 0"); + //---- showTabSeparatorsCheckBox ---- + showTabSeparatorsCheckBox.setText("Show tab separators"); + showTabSeparatorsCheckBox.addActionListener(e -> showTabSeparatorsChanged()); + panel4.add(showTabSeparatorsCheckBox, "cell 4 0"); + //---- tabsPopupPolicyLabel ---- tabsPopupPolicyLabel.setText("Tabs popup policy:"); - tabsPopupPolicyLabel.setName("tabsPopupPolicyLabel"); panel4.add(tabsPopupPolicyLabel, "cell 0 1"); //======== tabsPopupPolicyToolBar ======== { tabsPopupPolicyToolBar.setFloatable(false); tabsPopupPolicyToolBar.setBorder(BorderFactory.createEmptyBorder()); - tabsPopupPolicyToolBar.setName("tabsPopupPolicyToolBar"); //---- popupAsNeededButton ---- popupAsNeededButton.setText("asNeeded"); - popupAsNeededButton.setFont(popupAsNeededButton.getFont().deriveFont(popupAsNeededButton.getFont().getSize() - 2f)); popupAsNeededButton.setSelected(true); - popupAsNeededButton.setName("popupAsNeededButton"); + popupAsNeededButton.putClientProperty("FlatLaf.styleClass", "small"); popupAsNeededButton.addActionListener(e -> tabsPopupPolicyChanged()); tabsPopupPolicyToolBar.add(popupAsNeededButton); //---- popupNeverButton ---- popupNeverButton.setText("never"); - popupNeverButton.setFont(popupNeverButton.getFont().deriveFont(popupNeverButton.getFont().getSize() - 2f)); - popupNeverButton.setName("popupNeverButton"); + popupNeverButton.putClientProperty("FlatLaf.styleClass", "small"); popupNeverButton.addActionListener(e -> tabsPopupPolicyChanged()); tabsPopupPolicyToolBar.add(popupNeverButton); } panel4.add(tabsPopupPolicyToolBar, "cell 1 1"); - //---- showTabSeparatorsCheckBox ---- - showTabSeparatorsCheckBox.setText("Show tab separators"); - showTabSeparatorsCheckBox.setName("showTabSeparatorsCheckBox"); - showTabSeparatorsCheckBox.addActionListener(e -> showTabSeparatorsChanged()); - panel4.add(showTabSeparatorsCheckBox, "cell 2 1 2 1"); + //---- tabTypeLabel ---- + tabTypeLabel.setText("Tab type:"); + panel4.add(tabTypeLabel, "cell 2 1"); + + //======== tabTypeToolBar ======== + { + tabTypeToolBar.setFloatable(false); + + //---- underlinedTabTypeButton ---- + underlinedTabTypeButton.setText("underlined"); + underlinedTabTypeButton.setSelected(true); + underlinedTabTypeButton.putClientProperty("FlatLaf.styleClass", "small"); + underlinedTabTypeButton.addActionListener(e -> tabTypeChanged()); + tabTypeToolBar.add(underlinedTabTypeButton); + + //---- cardTabTypeButton ---- + cardTabTypeButton.setText("card"); + cardTabTypeButton.putClientProperty("FlatLaf.styleClass", "small"); + cardTabTypeButton.addActionListener(e -> tabTypeChanged()); + tabTypeToolBar.add(cardTabTypeButton); + } + panel4.add(tabTypeToolBar, "cell 3 1"); } add(panel4, "cell 0 2 3 1"); @@ -1010,6 +881,11 @@ class TabsPanel ButtonGroup tabsPopupPolicyButtonGroup = new ButtonGroup(); tabsPopupPolicyButtonGroup.add(popupAsNeededButton); tabsPopupPolicyButtonGroup.add(popupNeverButton); + + //---- tabTypeButtonGroup ---- + ButtonGroup tabTypeButtonGroup = new ButtonGroup(); + tabTypeButtonGroup.add(underlinedTabTypeButton); + tabTypeButtonGroup.add(cardTabTypeButton); // JFormDesigner - End of component initialization //GEN-END:initComponents if( FlatLafDemo.screenshotsMode ) { @@ -1089,10 +965,14 @@ class TabsPanel private JToolBar scrollButtonsPlacementToolBar; private JToggleButton scrollBothButton; private JToggleButton scrollTrailingButton; + private JCheckBox showTabSeparatorsCheckBox; private JLabel tabsPopupPolicyLabel; private JToolBar tabsPopupPolicyToolBar; private JToggleButton popupAsNeededButton; private JToggleButton popupNeverButton; - private JCheckBox showTabSeparatorsCheckBox; + private JLabel tabTypeLabel; + private JToolBar tabTypeToolBar; + private JToggleButton underlinedTabTypeButton; + private JToggleButton cardTabTypeButton; // JFormDesigner - End of variables declaration //GEN-END:variables } diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/TabsPanel.jfd b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/TabsPanel.jfd index 3f634b86..c241b05e 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/TabsPanel.jfd +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/TabsPanel.jfd @@ -1,9 +1,8 @@ -JFDML JFormDesigner: "7.0.2.0.298" Java: "15" encoding: "UTF-8" +JFDML JFormDesigner: "7.0.5.0.404" Java: "17" encoding: "UTF-8" new FormModel { contentType: "form/swing" root: new FormRoot { - "$setComponentNames": true add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { "$layoutConstraints": "insets dialog,hidemode 3" "$columnConstraints": "[grow,fill]para[fill]para[fill]" @@ -22,7 +21,7 @@ new FormModel { add( new FormComponent( "javax.swing.JLabel" ) { name: "tabPlacementLabel" "text": "Tab placement" - "font": new com.jformdesigner.model.SwingDerivedFont( null, 0, 4, false ) + "$client.FlatLaf.styleClass": "h3" auxiliary() { "JavaCodeGenerator.variableLocal": true } @@ -38,28 +37,28 @@ new FormModel { "text": "top" "selected": true "$buttonGroup": new FormReference( "tabPlacementButtonGroup" ) - "font": &SwingDerivedFont0 new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false ) + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabPlacementChanged", false ) ) } ) add( new FormComponent( "javax.swing.JToggleButton" ) { name: "bottomPlacementButton" "text": "bottom" "$buttonGroup": new FormReference( "tabPlacementButtonGroup" ) - "font": #SwingDerivedFont0 + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabPlacementChanged", false ) ) } ) add( new FormComponent( "javax.swing.JToggleButton" ) { name: "leftPlacementButton" "text": "left" "$buttonGroup": new FormReference( "tabPlacementButtonGroup" ) - "font": #SwingDerivedFont0 + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabPlacementChanged", false ) ) } ) add( new FormComponent( "javax.swing.JToggleButton" ) { name: "rightPlacementButton" "text": "right" "$buttonGroup": new FormReference( "tabPlacementButtonGroup" ) - "font": #SwingDerivedFont0 + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabPlacementChanged", false ) ) } ) add( new FormComponent( "javax.swing.JToolBar$Separator" ) { @@ -68,13 +67,13 @@ new FormModel { add( new FormComponent( "javax.swing.JToggleButton" ) { name: "scrollButton" "text": "scroll" - "font": new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false ) + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "scrollChanged", false ) ) } ) add( new FormComponent( "javax.swing.JToggleButton" ) { name: "borderButton" "text": "border" - "font": new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false ) + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "borderChanged", false ) ) } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { @@ -88,7 +87,7 @@ new FormModel { add( new FormComponent( "javax.swing.JLabel" ) { name: "tabLayoutLabel" "text": "Tab layout" - "font": &SwingDerivedFont1 new com.jformdesigner.model.SwingDerivedFont( null, 0, 4, false ) + "$client.FlatLaf.styleClass": "h3" auxiliary() { "JavaCodeGenerator.variableLocal": true } @@ -103,15 +102,15 @@ new FormModel { name: "scrollTabLayoutButton" "text": "scroll" "$buttonGroup": new FormReference( "tabLayoutButtonGroup" ) - "font": &SwingDerivedFont2 new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false ) "selected": true + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabLayoutChanged", false ) ) } ) add( new FormComponent( "javax.swing.JToggleButton" ) { name: "wrapTabLayoutButton" "text": "wrap" "$buttonGroup": new FormReference( "tabLayoutButtonGroup" ) - "font": #SwingDerivedFont2 + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabLayoutChanged", false ) ) } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { @@ -121,7 +120,7 @@ new FormModel { name: "scrollLayoutNoteLabel" "text": "(use mouse wheel to scroll; arrow button shows hidden tabs)" "enabled": false - "font": &SwingDerivedFont3 new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false ) + "$client.FlatLaf.styleClass": "small" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 3" } ) @@ -129,7 +128,7 @@ new FormModel { name: "wrapLayoutNoteLabel" "text": "(probably better to use scroll layout?)" "enabled": false - "font": #SwingDerivedFont3 + "$client.FlatLaf.styleClass": "small" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 3" } ) @@ -146,7 +145,7 @@ new FormModel { add( new FormComponent( "javax.swing.JLabel" ) { name: "closableTabsLabel" "text": "Closable tabs" - "font": #SwingDerivedFont1 + "$client.FlatLaf.styleClass": "h3" auxiliary() { "JavaCodeGenerator.variableLocal": true } @@ -160,23 +159,23 @@ new FormModel { add( new FormComponent( "javax.swing.JToggleButton" ) { name: "squareCloseButton" "text": "square" - "font": &SwingDerivedFont4 new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false ) "$buttonGroup": new FormReference( "closableTabsButtonGroup" ) "selected": true + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "closeButtonStyleChanged", false ) ) } ) add( new FormComponent( "javax.swing.JToggleButton" ) { name: "circleCloseButton" "text": "circle" - "font": #SwingDerivedFont4 "$buttonGroup": new FormReference( "closableTabsButtonGroup" ) + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "closeButtonStyleChanged", false ) ) } ) add( new FormComponent( "javax.swing.JToggleButton" ) { name: "redCrossCloseButton" "text": "red cross" - "font": #SwingDerivedFont4 "$buttonGroup": new FormReference( "closableTabsButtonGroup" ) + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "closeButtonStyleChanged", false ) ) } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { @@ -190,7 +189,7 @@ new FormModel { add( new FormComponent( "javax.swing.JLabel" ) { name: "tabAreaComponentsLabel" "text": "Custom tab area components" - "font": #SwingDerivedFont1 + "$client.FlatLaf.styleClass": "h3" auxiliary() { "JavaCodeGenerator.variableLocal": true } @@ -204,15 +203,15 @@ new FormModel { add( new FormComponent( "javax.swing.JToggleButton" ) { name: "leadingComponentButton" "text": "leading" - "font": &SwingDerivedFont5 new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false ) "selected": true + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "customComponentsChanged", false ) ) } ) add( new FormComponent( "javax.swing.JToggleButton" ) { name: "trailingComponentButton" "text": "trailing" - "font": #SwingDerivedFont5 "selected": true + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "customComponentsChanged", false ) ) } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { @@ -238,7 +237,7 @@ new FormModel { add( new FormComponent( "javax.swing.JLabel" ) { name: "tabIconPlacementLabel" "text": "Tab icon placement" - "font": new com.jformdesigner.model.SwingDerivedFont( null, 0, 4, false ) + "$client.FlatLaf.styleClass": "h3" auxiliary() { "JavaCodeGenerator.variableLocal": true } @@ -249,7 +248,7 @@ new FormModel { name: "tabIconPlacementNodeLabel" "text": "(top/bottom/leading/trailing)" "enabled": false - "font": new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false ) + "$client.FlatLaf.styleClass": "small" auxiliary() { "JavaCodeGenerator.variableLocal": true } @@ -279,7 +278,7 @@ new FormModel { add( new FormComponent( "javax.swing.JLabel" ) { name: "tabAreaAlignmentLabel" "text": "Tab area alignment" - "font": &SwingDerivedFont6 new com.jformdesigner.model.SwingDerivedFont( null, 0, 4, false ) + "$client.FlatLaf.styleClass": "h3" auxiliary() { "JavaCodeGenerator.variableLocal": true } @@ -290,7 +289,7 @@ new FormModel { name: "tabAreaAlignmentNoteLabel" "text": "(leading/center/trailing/fill)" "enabled": false - "font": &SwingDerivedFont7 new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false ) + "$client.FlatLaf.styleClass": "small" auxiliary() { "JavaCodeGenerator.variableLocal": true } @@ -332,7 +331,7 @@ new FormModel { add( new FormComponent( "javax.swing.JLabel" ) { name: "tabWidthModeLabel" "text": "Tab width mode" - "font": #SwingDerivedFont6 + "$client.FlatLaf.styleClass": "h3" auxiliary() { "JavaCodeGenerator.variableLocal": true } @@ -342,8 +341,8 @@ new FormModel { add( new FormComponent( "javax.swing.JLabel" ) { name: "tabWidthModeNoteLabel" "text": "(preferred/equal/compact)" - "font": new com.jformdesigner.model.SwingDerivedFont( null, 0, -2, false ) "enabled": false + "$client.FlatLaf.styleClass": "small" auxiliary() { "JavaCodeGenerator.variableLocal": true } @@ -368,7 +367,7 @@ new FormModel { add( new FormComponent( "javax.swing.JLabel" ) { name: "minMaxTabWidthLabel" "text": "Minimum/maximum tab width" - "font": new com.jformdesigner.model.SwingDerivedFont( null, 0, 4, false ) + "$client.FlatLaf.styleClass": "h3" auxiliary() { "JavaCodeGenerator.variableLocal": true } @@ -388,7 +387,7 @@ new FormModel { add( new FormComponent( "javax.swing.JLabel" ) { name: "tabAlignmentLabel" "text": "Tab title alignment" - "font": #SwingDerivedFont6 + "$client.FlatLaf.styleClass": "h3" auxiliary() { "JavaCodeGenerator.variableLocal": true } @@ -405,7 +404,7 @@ new FormModel { name: "tabAlignmentNoteLabel" "text": "(leading/center/trailing)" "enabled": false - "font": #SwingDerivedFont7 + "$client.FlatLaf.styleClass": "small" auxiliary() { "JavaCodeGenerator.variableLocal": true } @@ -416,7 +415,7 @@ new FormModel { name: "tabAlignmentNoteLabel2" "text": "(trailing)" "enabled": false - "font": #SwingDerivedFont7 + "$client.FlatLaf.styleClass": "small" auxiliary() { "JavaCodeGenerator.variableLocal": true } @@ -457,7 +456,7 @@ new FormModel { } ) add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { "$layoutConstraints": "insets 0,hidemode 3" - "$columnConstraints": "[][fill]para[fill][fill]para" + "$columnConstraints": "[][fill]para[fill][fill]para[fill]" "$rowConstraints": "[][center]" } ) { name: "panel4" @@ -477,23 +476,23 @@ new FormModel { add( new FormComponent( "javax.swing.JToggleButton" ) { name: "scrollAsNeededSingleButton" "text": "asNeededSingle" - "font": #SwingDerivedFont2 "selected": true "$buttonGroup": new FormReference( "scrollButtonsPolicyButtonGroup" ) + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "scrollButtonsPolicyChanged", false ) ) } ) add( new FormComponent( "javax.swing.JToggleButton" ) { name: "scrollAsNeededButton" "text": "asNeeded" - "font": #SwingDerivedFont2 "$buttonGroup": new FormReference( "scrollButtonsPolicyButtonGroup" ) + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "scrollButtonsPolicyChanged", false ) ) } ) add( new FormComponent( "javax.swing.JToggleButton" ) { name: "scrollNeverButton" "text": "never" - "font": #SwingDerivedFont2 "$buttonGroup": new FormReference( "scrollButtonsPolicyButtonGroup" ) + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "scrollButtonsPolicyChanged", false ) ) } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { @@ -512,21 +511,31 @@ new FormModel { add( new FormComponent( "javax.swing.JToggleButton" ) { name: "scrollBothButton" "text": "both" - "font": #SwingDerivedFont2 "selected": true "$buttonGroup": new FormReference( "scrollButtonsPlacementButtonGroup" ) + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "scrollButtonsPlacementChanged", false ) ) } ) add( new FormComponent( "javax.swing.JToggleButton" ) { name: "scrollTrailingButton" "text": "trailing" - "font": #SwingDerivedFont2 "$buttonGroup": new FormReference( "scrollButtonsPlacementButtonGroup" ) + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "scrollButtonsPlacementChanged", false ) ) } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 3 0" } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "showTabSeparatorsCheckBox" + "text": "Show tab separators" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showTabSeparatorsChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 0" + } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "tabsPopupPolicyLabel" "text": "Tabs popup policy:" @@ -540,37 +549,54 @@ new FormModel { add( new FormComponent( "javax.swing.JToggleButton" ) { name: "popupAsNeededButton" "text": "asNeeded" - "font": #SwingDerivedFont2 "selected": true "$buttonGroup": new FormReference( "tabsPopupPolicyButtonGroup" ) + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabsPopupPolicyChanged", false ) ) } ) add( new FormComponent( "javax.swing.JToggleButton" ) { name: "popupNeverButton" "text": "never" - "font": #SwingDerivedFont2 "$buttonGroup": new FormReference( "tabsPopupPolicyButtonGroup" ) + "$client.FlatLaf.styleClass": "small" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabsPopupPolicyChanged", false ) ) } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 1" } ) - add( new FormComponent( "javax.swing.JCheckBox" ) { - name: "showTabSeparatorsCheckBox" - "text": "Show tab separators" - auxiliary() { - "JavaCodeGenerator.variableLocal": false - } - addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showTabSeparatorsChanged", false ) ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "tabTypeLabel" + "text": "Tab type:" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 1 2 1" + "value": "cell 2 1" + } ) + add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { + name: "tabTypeToolBar" + "floatable": false + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "underlinedTabTypeButton" + "text": "underlined" + "selected": true + "$buttonGroup": new FormReference( "tabTypeButtonGroup" ) + "$client.FlatLaf.styleClass": "small" + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabTypeChanged", false ) ) + } ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "cardTabTypeButton" + "text": "card" + "$buttonGroup": new FormReference( "tabTypeButtonGroup" ) + "$client.FlatLaf.styleClass": "small" + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabTypeChanged", false ) ) + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 1" } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 2 3 1" } ) }, new FormLayoutConstraints( null ) { "location": new java.awt.Point( 0, 0 ) - "size": new java.awt.Dimension( 1075, 895 ) + "size": new java.awt.Dimension( 1145, 895 ) } ) add( new FormNonVisual( "javax.swing.ButtonGroup" ) { name: "tabPlacementButtonGroup" @@ -602,5 +628,10 @@ new FormModel { }, new FormLayoutConstraints( null ) { "location": new java.awt.Point( 200, 1020 ) } ) + add( new FormNonVisual( "javax.swing.ButtonGroup" ) { + name: "tabTypeButtonGroup" + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 0, 1072 ) + } ) } } diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesClassGenerator.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesClassGenerator.java index e3cdc006..eb9fcadd 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesClassGenerator.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesClassGenerator.java @@ -22,6 +22,7 @@ import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardOpenOption; +import com.formdev.flatlaf.util.LoggingFacade; /** * This tool creates look and feel classes for all themes listed in themes.json. @@ -120,7 +121,7 @@ public class IJThemesClassGenerator Files.write( out, content.getBytes( StandardCharsets.ISO_8859_1 ), StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING ); } catch( IOException ex ) { - ex.printStackTrace(); + LoggingFacade.INSTANCE.logSevere( null, ex ); } } @@ -168,14 +169,6 @@ public class IJThemesClassGenerator " }\n" + " }\n" + "\n" + - " /**\n" + - " * @deprecated use {@link #setup()} instead; this method will be removed in a future version\n" + - " */\n" + - " @Deprecated\n" + - " public static boolean install() {\n" + - " return setup();\n" + - " }\n" + - "\n" + " public static void installLafInfo() {\n" + " installLafInfo( NAME, ${themeClass}.class );\n" + " }\n" + diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesManager.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesManager.java index 07142025..ece63854 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesManager.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesManager.java @@ -26,6 +26,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import com.formdev.flatlaf.json.Json; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.StringUtils; /** @@ -46,7 +47,7 @@ class IJThemesManager try( Reader reader = new InputStreamReader( getClass().getResourceAsStream( "themes.json" ), StandardCharsets.UTF_8 ) ) { json = (Map) Json.parse( reader ); } catch( IOException ex ) { - ex.printStackTrace(); + LoggingFacade.INSTANCE.logSevere( null, ex ); return; } diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesPanel.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesPanel.java index 9ea545ee..f1dd5bd1 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesPanel.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesPanel.java @@ -52,6 +52,7 @@ import com.formdev.flatlaf.IntelliJTheme; import com.formdev.flatlaf.demo.DemoPrefs; import com.formdev.flatlaf.extras.FlatAnimatedLafChange; import com.formdev.flatlaf.extras.FlatSVGIcon; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.StringUtils; import net.miginfocom.swing.*; @@ -143,13 +144,13 @@ public class IJThemesPanel // add core themes at beginning categories.put( themes.size(), "Core Themes" ); if( showLight ) - themes.add( new IJThemeInfo( "Flat Light", null, false, null, null, null, null, null, FlatLightLaf.class.getName() ) ); + themes.add( new IJThemeInfo( "FlatLaf Light", null, false, null, null, null, null, null, FlatLightLaf.class.getName() ) ); if( showDark ) - themes.add( new IJThemeInfo( "Flat Dark", null, true, null, null, null, null, null, FlatDarkLaf.class.getName() ) ); + themes.add( new IJThemeInfo( "FlatLaf Dark", null, true, null, null, null, null, null, FlatDarkLaf.class.getName() ) ); if( showLight ) - themes.add( new IJThemeInfo( "Flat IntelliJ", null, false, null, null, null, null, null, FlatIntelliJLaf.class.getName() ) ); + themes.add( new IJThemeInfo( "FlatLaf IntelliJ", null, false, null, null, null, null, null, FlatIntelliJLaf.class.getName() ) ); if( showDark ) - themes.add( new IJThemeInfo( "Flat Darcula", null, true, null, null, null, null, null, FlatDarculaLaf.class.getName() ) ); + themes.add( new IJThemeInfo( "FlatLaf Darcula", null, true, null, null, null, null, null, FlatDarculaLaf.class.getName() ) ); // add themes from directory categories.put( themes.size(), "Current Directory" ); @@ -259,7 +260,7 @@ public class IJThemesPanel try { UIManager.setLookAndFeel( themeInfo.lafClassName ); } catch( Exception ex ) { - ex.printStackTrace(); + LoggingFacade.INSTANCE.logSevere( null, ex ); showInformationDialog( "Failed to create '" + themeInfo.lafClassName + "'.", ex ); } } else if( themeInfo.themeFile != null ) { @@ -273,7 +274,7 @@ public class IJThemesPanel DemoPrefs.getState().put( DemoPrefs.KEY_LAF_THEME, DemoPrefs.FILE_PREFIX + themeInfo.themeFile ); } catch( Exception ex ) { - ex.printStackTrace(); + LoggingFacade.INSTANCE.logSevere( null, ex ); showInformationDialog( "Failed to load '" + themeInfo.themeFile + "'.", ex ); } } else { diff --git a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesUpdater.java b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesUpdater.java index bad7a17a..ac6f2cc1 100644 --- a/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesUpdater.java +++ b/flatlaf-demo/src/main/java/com/formdev/flatlaf/demo/intellijthemes/IJThemesUpdater.java @@ -23,6 +23,7 @@ import java.net.URLConnection; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.StandardCopyOption; +import com.formdev.flatlaf.util.LoggingFacade; /** * This tool updates all IntelliJ themes listed in themes.json by downloading @@ -61,7 +62,7 @@ public class IJThemesUpdater URLConnection con = url.openConnection(); Files.copy( con.getInputStream(), out, StandardCopyOption.REPLACE_EXISTING ); } catch( IOException ex ) { - ex.printStackTrace(); + LoggingFacade.INSTANCE.logSevere( null, ex ); } } } diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/FlatDarkLaf.properties b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/FlatDarkLaf.properties index 803f03b8..16132ad6 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/FlatDarkLaf.properties +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/FlatDarkLaf.properties @@ -14,4 +14,18 @@ # limitations under the License. # +#---- Demo.accent ---- + +# accent colors from https://github.com/89netraM/SystemColors/blob/master/src/net/asberg/macos/AccentColor.java +Demo.accent.default = #4B6EAF +Demo.accent.blue = #0A84FF +Demo.accent.purple = #BF5AF2 +Demo.accent.red = #FF453A +Demo.accent.orange = #FF9F0A +Demo.accent.yellow = #FFCC00 +Demo.accent.green = #32D74B + + +#---- HintPanel ---- + HintPanel.backgroundColor = darken(#ffffe1,80%) diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/FlatLightLaf.properties b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/FlatLightLaf.properties index 1b848c29..d004fb63 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/FlatLightLaf.properties +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/FlatLightLaf.properties @@ -14,4 +14,18 @@ # limitations under the License. # +#---- Demo.accent ---- + +# accent colors from https://github.com/89netraM/SystemColors/blob/master/src/net/asberg/macos/AccentColor.java +Demo.accent.default = #2675BF +Demo.accent.blue = #007AFF +Demo.accent.purple = #BF5AF2 +Demo.accent.red = #FF3B30 +Demo.accent.orange = #FF9500 +Demo.accent.yellow = #FFCC00 +Demo.accent.green = #28CD41 + + +#---- HintPanel ---- + HintPanel.backgroundColor = #ffffe1 diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/colors.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/colors.svg index bddfa1b6..012ac84d 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/colors.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/colors.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/copy.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/copy.svg index cfbf4d6d..2200896e 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/copy.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/copy.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/execute.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/execute.svg index 6b05be3b..e6f91072 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/execute.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/execute.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/intentionBulb.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/intentionBulb.svg index 41566135..c92116c9 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/intentionBulb.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/intentionBulb.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/quickfixOffBulb.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/quickfixOffBulb.svg index e53c922b..31a9c5e2 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/quickfixOffBulb.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/quickfixOffBulb.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/suspend.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/suspend.svg index 718f3c31..06de4b81 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/suspend.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/actions/suspend.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/errorDialog.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/errorDialog.svg index c941d6bc..d2bfefae 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/errorDialog.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/errorDialog.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/informationDialog.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/informationDialog.svg index 599b9759..6de434d3 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/informationDialog.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/informationDialog.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/abstractClass.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/abstractClass.svg index fdd31bbc..60182030 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/abstractClass.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/abstractClass.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/abstractMethod.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/abstractMethod.svg index 0ac6b954..7768df1a 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/abstractMethod.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/abstractMethod.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/annotationtype.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/annotationtype.svg index ce03c7e5..b80c54b4 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/annotationtype.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/annotationtype.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/css.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/css.svg index fad092bf..e9c2a887 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/css.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/css.svg @@ -1,10 +1,17 @@ - - - - - - - - - + + + + + + + + + + + + + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/javaScript.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/javaScript.svg index 603b1d9f..0d8fa6fb 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/javaScript.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/javaScript.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/xhtml.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/xhtml.svg index 229a9660..cf262c6a 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/xhtml.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/objects/xhtml.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/warningDialog.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/warningDialog.svg index ce5eb81d..3f405409 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/warningDialog.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/extras/svg/warningDialog.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/DataTables.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/DataTables.svg new file mode 100644 index 00000000..f69b635f --- /dev/null +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/DataTables.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/RecentlyUsed.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/RecentlyUsed.svg index 10e24cb8..a18b9ec2 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/RecentlyUsed.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/RecentlyUsed.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/back.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/back.svg index c5b84d14..ff353eaa 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/back.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/back.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/bookmarkGroup.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/bookmarkGroup.svg new file mode 100644 index 00000000..c1fe3f6c --- /dev/null +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/bookmarkGroup.svg @@ -0,0 +1,4 @@ + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/buildLoadChanges.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/buildLoadChanges.svg index 02f46df0..4bdef62d 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/buildLoadChanges.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/buildLoadChanges.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/commit.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/commit.svg index a3bc7b6d..8648ba4b 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/commit.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/commit.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/copy.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/copy.svg index cfbf4d6d..2200896e 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/copy.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/copy.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/diff.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/diff.svg index 56821e70..5531b21b 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/diff.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/diff.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/download.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/download.svg index 0d6b0150..c0f92903 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/download.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/download.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/favorite.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/favorite.svg index 592c1dcc..aa7a7165 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/favorite.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/favorite.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/forward.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/forward.svg index 0ce7c70f..f6a08db2 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/forward.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/forward.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/github.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/github.svg index ac34d527..9224a759 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/github.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/github.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/github_dark.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/github_dark.svg index e406754b..fa10baa3 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/github_dark.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/github_dark.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/listFiles.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/listFiles.svg index 24227136..d08381a3 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/listFiles.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/listFiles.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/matchCase.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/matchCase.svg new file mode 100644 index 00000000..64b341ed --- /dev/null +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/matchCase.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/matchCaseHovered.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/matchCaseHovered.svg new file mode 100644 index 00000000..e07af386 --- /dev/null +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/matchCaseHovered.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/matchCaseSelected.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/matchCaseSelected.svg new file mode 100644 index 00000000..6be2c27e --- /dev/null +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/matchCaseSelected.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/menu-cut.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/menu-cut.svg index de353764..924dd144 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/menu-cut.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/menu-cut.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/menu-paste.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/menu-paste.svg index 0e88bad0..3dbe8064 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/menu-paste.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/menu-paste.svg @@ -1,3 +1,8 @@ - - + + + + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/project.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/project.svg index 42dda739..178b315b 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/project.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/project.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/redo.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/redo.svg index 98f4a4cb..f4304ba9 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/redo.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/redo.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/refresh.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/refresh.svg index 74318a20..b1e80620 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/refresh.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/refresh.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/regex.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/regex.svg new file mode 100644 index 00000000..f073c590 --- /dev/null +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/regex.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/regexHovered.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/regexHovered.svg new file mode 100644 index 00000000..545853d7 --- /dev/null +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/regexHovered.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/regexSelected.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/regexSelected.svg new file mode 100644 index 00000000..29a9c56d --- /dev/null +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/regexSelected.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/search.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/search.svg index 1cf5bf50..e6982071 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/search.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/search.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/show.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/show.svg index 370c995f..a14861f8 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/show.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/show.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/undo.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/undo.svg index 81bea6ba..c114a458 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/undo.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/undo.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/user.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/user.svg new file mode 100644 index 00000000..a073a132 --- /dev/null +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/user.svg @@ -0,0 +1,4 @@ + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/users.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/users.svg index 135e8e60..23bc7bb4 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/users.svg +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/users.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/words.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/words.svg new file mode 100644 index 00000000..e427f911 --- /dev/null +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/words.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/wordsHovered.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/wordsHovered.svg new file mode 100644 index 00000000..d99d09d6 --- /dev/null +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/wordsHovered.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/wordsSelected.svg b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/wordsSelected.svg new file mode 100644 index 00000000..21533311 --- /dev/null +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/icons/wordsSelected.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/intellijthemes/themes.json b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/intellijthemes/themes.json index ced7c268..728512bb 100644 --- a/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/intellijthemes/themes.json +++ b/flatlaf-demo/src/main/resources/com/formdev/flatlaf/demo/intellijthemes/themes.json @@ -145,7 +145,7 @@ "license": "MIT", "licenseFile": "Hiberbee.LICENSE.txt", "sourceCodeUrl": "https://github.com/Hiberbee/code-highlight-themes", - "sourceCodePath": "blob/master/src/main/resources/HiberbeeDark.theme.json" + "sourceCodePath": "blob/latest/src/main/resources/HiberbeeDark.theme.json" }, "HighContrast.theme.json": { "name": "High contrast", @@ -184,7 +184,7 @@ "license": "MIT", "licenseFile": "nord.LICENSE.txt", "sourceCodeUrl": "https://github.com/arcticicestudio/nord-jetbrains", - "sourceCodePath": "blob/develop/src/nord.theme.json" + "sourceCodePath": "blob/main/src/nord.theme.json" }, "one_dark.theme.json": { "name": "One Dark", diff --git a/flatlaf-extras/build.gradle.kts b/flatlaf-extras/build.gradle.kts index efe85448..c494340e 100644 --- a/flatlaf-extras/build.gradle.kts +++ b/flatlaf-extras/build.gradle.kts @@ -22,7 +22,7 @@ plugins { dependencies { implementation( project( ":flatlaf-core" ) ) - implementation( "com.formdev:svgSalamander:1.1.2.4" ) + implementation( "com.formdev:svgSalamander:1.1.3" ) } flatlafModuleInfo { diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatAnimatedLafChange.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatAnimatedLafChange.java index f66cefe1..b46d26f4 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatAnimatedLafChange.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatAnimatedLafChange.java @@ -19,6 +19,7 @@ package com.formdev.flatlaf.extras; import java.awt.AlphaComposite; import java.awt.Graphics; import java.awt.Graphics2D; +import java.awt.Toolkit; import java.awt.Window; import java.awt.image.VolatileImage; import java.util.Map; @@ -51,9 +52,9 @@ public class FlatAnimatedLafChange public static int duration = 160; /** - * The resolution of the animation in milliseconds. Default is 40 ms. + * The resolution of the animation in milliseconds. Default is 30 ms. */ - public static int resolution = 40; + public static int resolution = 30; private static Animator animator; private static final Map oldUIsnapshots = new WeakHashMap<>(); @@ -158,6 +159,8 @@ public class FlatAnimatedLafChange if( e.getKey().isShowing() ) e.getValue().repaint(); } + + Toolkit.getDefaultToolkit().sync(); }, () -> { hideSnapshot(); animator = null; diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatDesktop.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatDesktop.java new file mode 100644 index 00000000..a7558ec5 --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatDesktop.java @@ -0,0 +1,218 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras; + +import java.awt.Desktop; +import java.awt.EventQueue; +import java.lang.reflect.Method; +import java.lang.reflect.Proxy; +import java.util.function.Consumer; +import com.formdev.flatlaf.util.LoggingFacade; +import com.formdev.flatlaf.util.SystemInfo; + +/** + * Supports interaction with desktop. + *

+ * Note: If you application requires Java 9 or later, + * then use class {@link java.awt.Desktop} instead of this class. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatDesktop +{ + public enum Action { APP_ABOUT, APP_PREFERENCES, APP_QUIT_HANDLER }; + + /** + * Checks whether the given action is supported on the current platform. + */ + public static boolean isSupported( Action action ) { + if( SystemInfo.isJava_9_orLater ) { + try { + return Desktop.getDesktop().isSupported( Enum.valueOf( Desktop.Action.class, action.name() ) ); + } catch( Exception ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + return false; + } + } else if( SystemInfo.isMacOS ) + return true; + else + return false; + } + + /** + * Sets a handler to show a custom About dialog. + *

+ * Useful for macOS to enable menu item "MyApp > About". + *

+ * Uses: + *

    + *
  • Java 8 on macOS: com.apple.eawt.Application.getApplication().setAboutHandler(com.apple.eawt.AboutHandler) + *
  • Java 9+: java.awt.Desktop.getDesktop().setAboutHandler(java.awt.desktop.AboutHandler) + *
+ */ + public static void setAboutHandler( Runnable aboutHandler ) { + if( !isSupported( Action.APP_ABOUT ) ) + return; + + String handlerClassName; + if( SystemInfo.isJava_9_orLater ) + handlerClassName = "java.awt.desktop.AboutHandler"; + else if( SystemInfo.isMacOS ) + handlerClassName = "com.apple.eawt.AboutHandler"; + else + return; + + setHandler( "setAboutHandler", handlerClassName, aboutHandler ); + } + + /** + * Sets a handler to show a custom Preferences dialog. + *

+ * Useful for macOS to enable menu item "MyApp > Preferences". + *

+ * Uses: + *

    + *
  • Java 8 on macOS: com.apple.eawt.Application.getApplication().setPreferencesHandler(com.apple.eawt.PreferencesHandler) + *
  • Java 9+: java.awt.Desktop.getDesktop().setPreferencesHandler(java.awt.desktop.PreferencesHandler) + *
+ */ + public static void setPreferencesHandler( Runnable preferencesHandler ) { + if( !isSupported( Action.APP_PREFERENCES ) ) + return; + + String handlerClassName; + if( SystemInfo.isJava_9_orLater ) + handlerClassName = "java.awt.desktop.PreferencesHandler"; + else if( SystemInfo.isMacOS ) + handlerClassName = "com.apple.eawt.PreferencesHandler"; + else + return; + + setHandler( "setPreferencesHandler", handlerClassName, preferencesHandler ); + } + + private static void setHandler( String setHandlerMethodName, String handlerClassName, + Runnable handler ) + { + try { + Object desktopOrApplication = getDesktopOrApplication(); + Class handlerClass = Class.forName( handlerClassName ); + + Method m = desktopOrApplication.getClass().getMethod( setHandlerMethodName, handlerClass ); + m.invoke( desktopOrApplication, Proxy.newProxyInstance( FlatDesktop.class.getClassLoader(), + new Class[] { handlerClass }, + (proxy, method, args) -> { + // Use invokeLater to release the listener firing for the case + // that the action listener shows a modal dialog. + // This (hopefully) prevents application hunging. + EventQueue.invokeLater( () -> { + handler.run(); + } ); + return null; + } ) ); + } catch( Exception ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + /** + * Sets a handler which is invoked when the application should quit. + * The handler must invoke either {@link QuitResponse#performQuit} or + * {@link QuitResponse#cancelQuit}. + *

+ * Useful for macOS to get notified when user clicks menu item "MyApp > Quit". + *

+ * Uses: + *

    + *
  • Java 8 on macOS: com.apple.eawt.Application.getApplication().setQuitHandler(com.apple.eawt.QuitHandler) + *
  • Java 9+: java.awt.Desktop.getDesktop().setQuitHandler(java.awt.desktop.QuitHandler) + *
+ */ + public static void setQuitHandler( Consumer quitHandler ) { + if( !isSupported( Action.APP_QUIT_HANDLER ) ) + return; + + String handlerClassName; + if( SystemInfo.isJava_9_orLater ) + handlerClassName = "java.awt.desktop.QuitHandler"; + else if( SystemInfo.isMacOS ) + handlerClassName = "com.apple.eawt.QuitHandler"; + else + return; + + try { + Object desktopOrApplication = getDesktopOrApplication(); + Class handlerClass = Class.forName( handlerClassName ); + + Method m = desktopOrApplication.getClass().getMethod( "setQuitHandler", handlerClass ); + m.invoke( desktopOrApplication, Proxy.newProxyInstance( FlatDesktop.class.getClassLoader(), + new Class[] { handlerClass }, + (proxy, method, args) -> { + Object response = args[1]; + String responseClass = SystemInfo.isJava_9_orLater + ? "java.awt.desktop.QuitResponse" + : "com.apple.eawt.QuitResponse"; + quitHandler.accept( new QuitResponse() { + @Override + public void performQuit() { + try { + Class.forName( responseClass ).getMethod( "performQuit" ).invoke( response ); + } catch( Exception ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + @Override + public void cancelQuit() { + try { + Class.forName( responseClass ).getMethod( "cancelQuit" ).invoke( response ); + } catch( Exception ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + } ); + return null; + } ) ); + } catch( Exception ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + } + } + + private static Object getDesktopOrApplication() throws Exception { + if( SystemInfo.isJava_9_orLater ) + return Desktop.getDesktop(); + else if( SystemInfo.isMacOS ) { + try { + Class cls = Class.forName( "com.apple.eawt.Application" ); + return cls.getMethod( "getApplication" ).invoke( null ); + } catch( Exception ex ) { + LoggingFacade.INSTANCE.logSevere( null, ex ); + throw new UnsupportedOperationException(); + } + } else + throw new UnsupportedOperationException(); + } + + //---- interface QuitResponse --------------------------------------------- + + public interface QuitResponse { + void performQuit(); + void cancelQuit(); + } +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatInspector.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatInspector.java index 8bd74b3a..ca538d52 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatInspector.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatInspector.java @@ -44,6 +44,7 @@ import java.awt.event.WindowListener; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; import java.lang.reflect.Field; +import java.lang.reflect.Method; import javax.swing.AbstractButton; import javax.swing.JComponent; import javax.swing.JLayeredPane; @@ -64,6 +65,7 @@ import javax.swing.plaf.UIResource; import javax.swing.text.JTextComponent; import com.formdev.flatlaf.FlatClientProperties; import com.formdev.flatlaf.ui.FlatUIUtils; +import com.formdev.flatlaf.util.SystemInfo; import com.formdev.flatlaf.util.UIScale; /** @@ -472,15 +474,23 @@ public class FlatInspector if( c instanceof JComponent ) appendRow( buf, "Border", toString( ((JComponent)c).getBorder(), classHierarchy ) ); - appendRow( buf, "Background", toString( c.getBackground() ) ); - appendRow( buf, "Foreground", toString( c.getForeground() ) ); - appendRow( buf, "Font", toString( c.getFont() ) ); + appendRow( buf, "Background", toString( c.getBackground() ) + (c.isBackgroundSet() ? "" : " NOT SET") ); + appendRow( buf, "Foreground", toString( c.getForeground() ) + (c.isForegroundSet() ? "" : " NOT SET") ); + appendRow( buf, "Font", toString( c.getFont() ) + (c.isFontSet() ? "" : " NOT SET") ); if( c instanceof JComponent ) { try { - Field f = JComponent.class.getDeclaredField( "ui" ); - f.setAccessible( true ); - Object ui = f.get( c ); + Object ui; + if( SystemInfo.isJava_9_orLater ) { + // Java 9+: use public method JComponent.getUI() + Method m = JComponent.class.getMethod( "getUI" ); + ui = m.invoke( c ); + } else { + // Java 8: read protected field 'ui' + Field f = JComponent.class.getDeclaredField( "ui" ); + f.setAccessible( true ); + ui = f.get( c ); + } appendRow( buf, "UI", (ui != null ? toString( ui.getClass(), classHierarchy ) : "null") ); } catch( Exception ex ) { // ignore @@ -553,6 +563,9 @@ public class FlatInspector String simpleName = (dot >= 0) ? name.substring( dot + 1 ) : name; buf.append( simpleName ).append( ' ' ).append( toDimmedText( "(" + pkg + ")" ) ); + if( UIResource.class.isAssignableFrom( cls ) ) + buf.append( " UI" ); + if( !classHierarchy ) break; @@ -613,11 +626,14 @@ public class FlatInspector String s = toString( b.getClass(), classHierarchy ); - if( b instanceof EmptyBorder ) - s += '(' + toString( ((EmptyBorder)b).getBorderInsets() ) + ')'; - - if( b instanceof UIResource ) - s += " UI"; + if( b instanceof EmptyBorder ) { + String borderInsets = " (" + toString( ((EmptyBorder)b).getBorderInsets() ) + ')'; + int brIndex = s.indexOf( "
" ); + if( brIndex >= 0 ) + s = s.substring( 0, brIndex ) + borderInsets + s.substring( brIndex ); + else + s += borderInsets; + } return s; } diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGIcon.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGIcon.java index 04297140..83520749 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGIcon.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGIcon.java @@ -27,6 +27,10 @@ import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.awt.image.RGBImageFilter; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.util.Collections; @@ -42,7 +46,9 @@ import com.formdev.flatlaf.FlatLaf.DisabledIconProvider; import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.util.Graphics2DProxy; import com.formdev.flatlaf.util.GrayFilter; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.MultiResolutionImageSupport; +import com.formdev.flatlaf.util.SoftCache; import com.formdev.flatlaf.util.UIScale; import com.kitfox.svg.SVGDiagram; import com.kitfox.svg.SVGException; @@ -57,8 +63,12 @@ public class FlatSVGIcon extends ImageIcon implements DisabledIconProvider { + // cache that uses soft references for values, which allows freeing SVG diagrams if no longer used + private static final SoftCache svgCache = new SoftCache<>(); + // use own SVG universe so that it can not be cleared from anywhere private static final SVGUniverse svgUniverse = new SVGUniverse(); + private static int streamNumber; private final String name; private final int width; @@ -66,23 +76,30 @@ public class FlatSVGIcon private final float scale; private final boolean disabled; private final ClassLoader classLoader; + private final URI uri; private ColorFilter colorFilter; private SVGDiagram diagram; private boolean dark; + private boolean loadFailed; /** * Creates an SVG icon from the given resource name. *

* The SVG attributes {@code width} and {@code height} (or {@code viewBox}) * in the tag {@code } are used as icon size. + *

+ * If using Java modules, the package containing the icon must be opened in {@code module-info.java}. + * Otherwise use {@link #FlatSVGIcon(URL)}. + *

+ * This is cheap operation because the icon is only loaded when used. * - * @param name the name of the SVG resource (a '/'-separated path) + * @param name the name of the SVG resource (a '/'-separated path; e.g. {@code "com/myapp/myicon.svg"}) * @see ClassLoader#getResource(String) */ public FlatSVGIcon( String name ) { - this( name, -1, -1, 1, false, null ); + this( name, -1, -1, 1, false, null, null ); } /** @@ -91,27 +108,37 @@ public class FlatSVGIcon *

* The SVG attributes {@code width} and {@code height} (or {@code viewBox}) * in the tag {@code } are used as icon size. + *

+ * If using Java modules, the package containing the icon must be opened in {@code module-info.java}. + * Otherwise use {@link #FlatSVGIcon(URL)}. + *

+ * This is cheap operation because the icon is only loaded when used. * - * @param name the name of the SVG resource (a '/'-separated path) + * @param name the name of the SVG resource (a '/'-separated path; e.g. {@code "com/myapp/myicon.svg"}) * @param classLoader the class loader used to load the SVG resource * @see ClassLoader#getResource(String) */ public FlatSVGIcon( String name, ClassLoader classLoader ) { - this( name, -1, -1, 1, false, classLoader ); + this( name, -1, -1, 1, false, classLoader, null ); } /** * Creates an SVG icon from the given resource name with the given width and height. *

* The icon is scaled if the given size is different to the size specified in the SVG file. + *

+ * If using Java modules, the package containing the icon must be opened in {@code module-info.java}. + * Otherwise use {@link #FlatSVGIcon(URL)}. + *

+ * This is cheap operation because the icon is only loaded when used. * - * @param name the name of the SVG resource (a '/'-separated path) + * @param name the name of the SVG resource (a '/'-separated path; e.g. {@code "com/myapp/myicon.svg"}) * @param width the width of the icon * @param height the height of the icon * @see ClassLoader#getResource(String) */ public FlatSVGIcon( String name, int width, int height ) { - this( name, width, height, 1, false, null ); + this( name, width, height, 1, false, null, null ); } /** @@ -119,15 +146,20 @@ public class FlatSVGIcon * The SVG file is loaded from the given class loader. *

* The icon is scaled if the given size is different to the size specified in the SVG file. + *

+ * If using Java modules, the package containing the icon must be opened in {@code module-info.java}. + * Otherwise use {@link #FlatSVGIcon(URL)}. + *

+ * This is cheap operation because the icon is only loaded when used. * - * @param name the name of the SVG resource (a '/'-separated path) + * @param name the name of the SVG resource (a '/'-separated path; e.g. {@code "com/myapp/myicon.svg"}) * @param width the width of the icon * @param height the height of the icon * @param classLoader the class loader used to load the SVG resource * @see ClassLoader#getResource(String) */ public FlatSVGIcon( String name, int width, int height, ClassLoader classLoader ) { - this( name, width, height, 1, false, classLoader ); + this( name, width, height, 1, false, classLoader, null ); } /** @@ -136,13 +168,18 @@ public class FlatSVGIcon * The SVG attributes {@code width} and {@code height} (or {@code viewBox}) * in the tag {@code } are used as base icon size, which is multiplied * by the given scale factor. + *

+ * If using Java modules, the package containing the icon must be opened in {@code module-info.java}. + * Otherwise use {@link #FlatSVGIcon(URL)}. + *

+ * This is cheap operation because the icon is only loaded when used. * - * @param name the name of the SVG resource (a '/'-separated path) + * @param name the name of the SVG resource (a '/'-separated path; e.g. {@code "com/myapp/myicon.svg"}) * @param scale the amount by which the icon size is scaled * @see ClassLoader#getResource(String) */ public FlatSVGIcon( String name, float scale ) { - this( name, -1, -1, scale, false, null ); + this( name, -1, -1, scale, false, null, null ); } /** @@ -152,23 +189,123 @@ public class FlatSVGIcon * The SVG attributes {@code width} and {@code height} (or {@code viewBox}) * in the tag {@code } are used as base icon size, which is multiplied * by the given scale factor. + *

+ * If using Java modules, the package containing the icon must be opened in {@code module-info.java}. + * Otherwise use {@link #FlatSVGIcon(URL)}. + *

+ * This is cheap operation because the icon is only loaded when used. * - * @param name the name of the SVG resource (a '/'-separated path) + * @param name the name of the SVG resource (a '/'-separated path; e.g. {@code "com/myapp/myicon.svg"}) * @param scale the amount by which the icon size is scaled * @param classLoader the class loader used to load the SVG resource * @see ClassLoader#getResource(String) */ public FlatSVGIcon( String name, float scale, ClassLoader classLoader ) { - this( name, -1, -1, scale, false, classLoader ); + this( name, -1, -1, scale, false, classLoader, null ); } - protected FlatSVGIcon( String name, int width, int height, float scale, boolean disabled, ClassLoader classLoader ) { + /** + * Creates an SVG icon from the given URL. + *

+ * The SVG attributes {@code width} and {@code height} (or {@code viewBox}) + * in the tag {@code } are used as icon size. + *

+ * This method is useful if using Java modules and the package containing the icon + * is not opened in {@code module-info.java}. + * E.g. {@code new FlatSVGIcon( getClass().getResource( "/com/myapp/myicon.svg" ) )}. + *

+ * This is cheap operation because the icon is only loaded when used. + * + * @param url the URL of the SVG resource + * @see ClassLoader#getResource(String) + * @since 2 + */ + public FlatSVGIcon( URL url ) { + this( null, -1, -1, 1, false, null, url2uri( url ) ); + } + + /** + * Creates an SVG icon from the given URI. + *

+ * The SVG attributes {@code width} and {@code height} (or {@code viewBox}) + * in the tag {@code } are used as icon size. + *

+ * This is cheap operation because the icon is only loaded when used. + * + * @param uri the URI of the SVG resource + * @see ClassLoader#getResource(String) + * @since 2 + */ + public FlatSVGIcon( URI uri ) { + this( null, -1, -1, 1, false, null, uri ); + } + + /** + * Creates an SVG icon from the given file. + *

+ * The SVG attributes {@code width} and {@code height} (or {@code viewBox}) + * in the tag {@code } are used as icon size. + *

+ * This is cheap operation because the icon is only loaded when used. + * + * @param file the SVG file + * @since 2 + */ + public FlatSVGIcon( File file ) { + this( null, -1, -1, 1, false, null, file.toURI() ); + } + + /** + * Creates an SVG icon from the given input stream. + *

+ * The SVG attributes {@code width} and {@code height} (or {@code viewBox}) + * in the tag {@code } are used as icon size. + *

+ * The input stream is loaded, parsed and closed immediately. + * + * @param in the input stream for reading a SVG resource + * @throws IOException if an I/O exception occurs + * @since 2 + */ + public FlatSVGIcon( InputStream in ) throws IOException { + this( null, -1, -1, 1, false, null, loadFromStream( in ) ); + + // since the input stream is already loaded and parsed, + // get diagram here and remove it from cache + update(); + synchronized( FlatSVGIcon.class ) { + svgCache.remove( uri ); + } + } + + private static synchronized URI loadFromStream( InputStream in ) throws IOException { + try( InputStream in2 = in ) { + return svgUniverse.loadSVG( in2, "/flatlaf-stream-" + (streamNumber++) ); + } + } + + /** + * Creates a copy of the given icon. + *

+ * If the icon has a color filter, then it is shared with the new icon. + * + * @since 2.0.1 + */ + public FlatSVGIcon( FlatSVGIcon icon ) { + this( icon.name, icon.width, icon.height, icon.scale, icon.disabled, icon.classLoader, icon.uri ); + colorFilter = icon.colorFilter; + diagram = icon.diagram; + dark = icon.dark; + } + + protected FlatSVGIcon( String name, int width, int height, float scale, boolean disabled, ClassLoader classLoader, URI uri ) { this.name = name; this.width = width; this.height = height; this.scale = scale; this.disabled = disabled; this.classLoader = classLoader; + this.uri = uri; } /** @@ -247,7 +384,7 @@ public class FlatSVGIcon if( width == this.width && height == this.height ) return this; - FlatSVGIcon icon = new FlatSVGIcon( name, width, height, scale, disabled, classLoader ); + FlatSVGIcon icon = new FlatSVGIcon( name, width, height, scale, disabled, classLoader, uri ); icon.colorFilter = colorFilter; icon.diagram = diagram; icon.dark = dark; @@ -266,7 +403,7 @@ public class FlatSVGIcon if( scale == this.scale ) return this; - FlatSVGIcon icon = new FlatSVGIcon( name, width, height, scale, disabled, classLoader ); + FlatSVGIcon icon = new FlatSVGIcon( name, width, height, scale, disabled, classLoader, uri ); icon.colorFilter = colorFilter; icon.diagram = diagram; icon.dark = dark; @@ -285,7 +422,7 @@ public class FlatSVGIcon if( disabled ) return this; - FlatSVGIcon icon = new FlatSVGIcon( name, width, height, scale, true, classLoader ); + FlatSVGIcon icon = new FlatSVGIcon( name, width, height, scale, true, classLoader, uri ); icon.colorFilter = colorFilter; icon.diagram = diagram; icon.dark = dark; @@ -323,20 +460,56 @@ public class FlatSVGIcon } private void update() { + if( loadFailed ) + return; + if( dark == isDarkLaf() && diagram != null ) return; dark = isDarkLaf(); - URL url = getIconURL( name, dark ); - if( url == null & dark ) - url = getIconURL( name, false ); - // load/get image - try { - diagram = svgUniverse.getDiagram( url.toURI() ); - } catch( URISyntaxException ex ) { - ex.printStackTrace(); + // SVGs already loaded via url or input stream can not have light/dark variants + if( uri != null && diagram != null ) + return; + + URI uri = this.uri; + if( uri == null ) { + URL url = getIconURL( name, dark ); + if( url == null & dark ) + url = getIconURL( name, false ); + + if( url == null ) { + loadFailed = true; + LoggingFacade.INSTANCE.logConfig( "FlatSVGIcon: resource '" + name + "' not found (if using Java modules, check whether icon package is opened in module-info.java)", null ); + return; + } + + uri = url2uri( url ); } + + diagram = loadSVG( uri ); + loadFailed = (diagram == null); + } + + static synchronized SVGDiagram loadSVG( URI uri ) { + // get from our cache + SVGDiagram diagram = svgCache.get( uri ); + if( diagram != null ) + return diagram; + + // load/get SVG diagram + diagram = svgUniverse.getDiagram( uri ); + + if( diagram == null ) { + LoggingFacade.INSTANCE.logSevere( "FlatSVGIcon: failed to load '" + uri + "'", null ); + return null; + } + + // add to our (soft) cache and remove from SVGUniverse (hard) cache + svgCache.put( uri, diagram ); + svgUniverse.removeDocument( uri ); + + return diagram; } private URL getIconURL( String name, boolean dark ) { @@ -486,6 +659,14 @@ public class FlatSVGIcon return MultiResolutionImageSupport.create( 0, dimensions, producer ); } + static URI url2uri( URL url ) { + try { + return url.toURI(); + } catch( URISyntaxException ex ) { + throw new IllegalArgumentException( ex ); + } + } + private static Boolean darkLaf; /** diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGUtils.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGUtils.java index 08e308e9..8caf5992 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGUtils.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatSVGUtils.java @@ -21,7 +21,6 @@ import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.image.BufferedImage; -import java.net.URISyntaxException; import java.net.URL; import java.util.Arrays; import java.util.Collections; @@ -29,7 +28,6 @@ import java.util.List; import javax.swing.JWindow; import com.formdev.flatlaf.util.MultiResolutionImageSupport; import com.formdev.flatlaf.util.SystemInfo; -import com.kitfox.svg.SVGCache; import com.kitfox.svg.SVGDiagram; import com.kitfox.svg.SVGException; @@ -50,6 +48,9 @@ public class FlatSVGUtils * for requested sizes from SVG. * This has the advantage that only images for used sizes are created. * Also if unusual sizes are requested (e.g. 18x18), then they are created from SVG. + *

+ * If using Java modules, the package containing the SVG must be opened in {@code module-info.java}. + * Otherwise use {@link #createWindowIconImages(URL)}. * * @param svgName the name of the SVG resource (a '/'-separated path) * @return list of icon images with different sizes (16x16, 20x20, 24x24, 28x28, 32x32, 48x48 and 64x64) @@ -57,7 +58,32 @@ public class FlatSVGUtils * @see JWindow#setIconImages(List) */ public static List createWindowIconImages( String svgName ) { - SVGDiagram diagram = loadSVG( svgName ); + return createWindowIconImages( getResource( svgName ) ); + } + + /** + * Creates from the given SVG a list of icon images with different sizes that + * can be used for windows headers. The SVG should have a size of 16x16, + * otherwise it is scaled. + *

+ * If running on Windows in Java 9 or later and multi-resolution image support is available, + * then a single multi-resolution image is returned that creates images on demand + * for requested sizes from SVG. + * This has the advantage that only images for used sizes are created. + * Also if unusual sizes are requested (e.g. 18x18), then they are created from SVG. + *

+ * This method is useful if using Java modules and the package containing the SVG + * is not opened in {@code module-info.java}. + * E.g. {@code createWindowIconImages( getClass().getResource( "/com/myapp/myicon.svg" ) )}. + * + * @param svgUrl the URL of the SVG resource + * @return list of icon images with different sizes (16x16, 20x20, 24x24, 28x28, 32x32, 48x48 and 64x64) + * @throws RuntimeException if failed to load or render SVG file + * @see JWindow#setIconImages(List) + * @since 2 + */ + public static List createWindowIconImages( URL svgUrl ) { + SVGDiagram diagram = loadSVG( svgUrl ); if( SystemInfo.isWindows && MultiResolutionImageSupport.isAvailable() ) { // use a multi-resolution image that creates images on demand for requested sizes @@ -93,6 +119,9 @@ public class FlatSVGUtils /** * Creates a buffered image and renders the given SVG into it. + *

+ * If using Java modules, the package containing the SVG must be opened in {@code module-info.java}. + * Otherwise use {@link #svg2image(URL, int, int)}. * * @param svgName the name of the SVG resource (a '/'-separated path) * @param width the width of the image @@ -101,11 +130,32 @@ public class FlatSVGUtils * @throws RuntimeException if failed to load or render SVG file */ public static BufferedImage svg2image( String svgName, int width, int height ) { - return svg2image( loadSVG( svgName ), width, height ); + return svg2image( getResource( svgName ), width, height ); } /** * Creates a buffered image and renders the given SVG into it. + *

+ * This method is useful if using Java modules and the package containing the SVG + * is not opened in {@code module-info.java}. + * E.g. {@code svg2image( getClass().getResource( "/com/myapp/myicon.svg" ), 24, 24 )}. + * + * @param svgUrl the URL of the SVG resource + * @param width the width of the image + * @param height the height of the image + * @return the image + * @throws RuntimeException if failed to load or render SVG file + * @since 2 + */ + public static BufferedImage svg2image( URL svgUrl, int width, int height ) { + return svg2image( loadSVG( svgUrl ), width, height ); + } + + /** + * Creates a buffered image and renders the given SVG into it. + *

+ * If using Java modules, the package containing the SVG must be opened in {@code module-info.java}. + * Otherwise use {@link #svg2image(URL, float)}. * * @param svgName the name of the SVG resource (a '/'-separated path) * @param scaleFactor the amount by which the SVG size is scaled @@ -113,7 +163,24 @@ public class FlatSVGUtils * @throws RuntimeException if failed to load or render SVG file */ public static BufferedImage svg2image( String svgName, float scaleFactor ) { - SVGDiagram diagram = loadSVG( svgName ); + return svg2image( getResource( svgName ), scaleFactor ); + } + + /** + * Creates a buffered image and renders the given SVG into it. + *

+ * This method is useful if using Java modules and the package containing the SVG + * is not opened in {@code module-info.java}. + * E.g. {@code svg2image( getClass().getResource( "/com/myapp/myicon.svg" ), 1.5f )}. + * + * @param svgUrl the URL of the SVG resource + * @param scaleFactor the amount by which the SVG size is scaled + * @return the image + * @throws RuntimeException if failed to load or render SVG file + * @since 2 + */ + public static BufferedImage svg2image( URL svgUrl, float scaleFactor ) { + SVGDiagram diagram = loadSVG( svgUrl ); int width = (int) (diagram.getWidth() * scaleFactor); int height = (int) (diagram.getHeight() * scaleFactor); return svg2image( diagram, width, height ); @@ -155,19 +222,11 @@ public class FlatSVGUtils } } - /** - * Loads a SVG file. - * - * @param svgName the name of the SVG resource (a '/'-separated path) - * @return the SVG diagram - * @throws RuntimeException if failed to load SVG file - */ - private static SVGDiagram loadSVG( String svgName ) { - try { - URL url = FlatSVGUtils.class.getResource( svgName ); - return SVGCache.getSVGUniverse().getDiagram( url.toURI() ); - } catch( URISyntaxException ex ) { - throw new RuntimeException( ex ); - } + private static URL getResource( String svgName ) { + return FlatSVGUtils.class.getResource( svgName ); + } + + private static SVGDiagram loadSVG( URL url ) { + return FlatSVGIcon.loadSVG( FlatSVGIcon.url2uri( url ) ); } } diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatUIDefaultsInspector.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatUIDefaultsInspector.java index 8457216d..d925d36d 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatUIDefaultsInspector.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatUIDefaultsInspector.java @@ -43,6 +43,7 @@ import javax.swing.table.AbstractTableModel; import javax.swing.table.DefaultTableCellRenderer; import javax.swing.table.TableColumnModel; import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.extras.components.FlatTextField; import com.formdev.flatlaf.icons.FlatAbstractIcon; import com.formdev.flatlaf.ui.FlatBorder; import com.formdev.flatlaf.ui.FlatEmptyBorder; @@ -52,6 +53,7 @@ import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.util.DerivedColor; import com.formdev.flatlaf.util.GrayFilter; import com.formdev.flatlaf.util.HSLColor; +import com.formdev.flatlaf.util.LoggingFacade; import com.formdev.flatlaf.util.ScaledEmptyBorder; import com.formdev.flatlaf.util.UIScale; @@ -312,6 +314,10 @@ public class FlatUIDefaultsInspector if( !(key instanceof String) ) continue; + // ignore internal keys + if( ((String)key).startsWith( "FlatLaf.internal." ) ) + continue; + // ignore values of type Class Object value = defaults.get( key ); if( value instanceof Class ) @@ -377,11 +383,13 @@ public class FlatUIDefaultsInspector } private Properties loadDerivedColorKeys() { + String name = "/com/formdev/flatlaf/extras/resources/DerivedColorKeys.properties"; Properties properties = new Properties(); - try( InputStream in = getClass().getResourceAsStream( "/com/formdev/flatlaf/extras/resources/DerivedColorKeys.properties" ) ) { - properties.load( in ); + try( InputStream in = getClass().getResourceAsStream( name ) ) { + if( in != null ) + properties.load( in ); } catch( IOException ex ) { - ex.printStackTrace(); + LoggingFacade.INSTANCE.logSevere( "FlatLaf: Failed to load '" + name + "'.", ex ); } return properties; } @@ -550,7 +558,7 @@ public class FlatUIDefaultsInspector panel = new JPanel(); filterPanel = new JPanel(); flterLabel = new JLabel(); - filterField = new JTextField(); + filterField = new FlatTextField(); valueTypeLabel = new JLabel(); valueTypeField = new JComboBox<>(); scrollPane = new JScrollPane(); @@ -581,7 +589,8 @@ public class FlatUIDefaultsInspector new Insets(0, 0, 0, 10), 0, 0)); //---- filterField ---- - filterField.putClientProperty("JTextField.placeholderText", "enter one or more filter strings, separated by space characters"); + filterField.setPlaceholderText("enter one or more filter strings, separated by space characters"); + filterField.setShowClearButton(true); filterPanel.add(filterField, new GridBagConstraints(1, 0, 1, 1, 0.0, 0.0, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 10), 0, 0)); @@ -660,7 +669,7 @@ public class FlatUIDefaultsInspector private JPanel panel; private JPanel filterPanel; private JLabel flterLabel; - private JTextField filterField; + private FlatTextField filterField; private JLabel valueTypeLabel; private JComboBox valueTypeField; private JScrollPane scrollPane; @@ -698,16 +707,16 @@ public class FlatUIDefaultsInspector if( value instanceof Color ) { Color color = (info instanceof Color[]) ? ((Color[])info)[0] : (Color) value; HSLColor hslColor = new HSLColor( color ); + int hue = Math.round( hslColor.getHue() ); + int saturation = Math.round( hslColor.getSaturation() ); + int luminance = Math.round( hslColor.getLuminance() ); if( color.getAlpha() == 255 ) { return String.format( "%-9s HSL %3d %3d %3d", - color2hex( color ), - (int) hslColor.getHue(), (int) hslColor.getSaturation(), - (int) hslColor.getLuminance() ); + color2hex( color ), hue, saturation, luminance ); } else { + int alpha = Math.round( hslColor.getAlpha() * 100 ); return String.format( "%-9s HSL %3d %3d %3d %2d", - color2hex( color ), - (int) hslColor.getHue(), (int) hslColor.getSaturation(), - (int) hslColor.getLuminance(), (int) (hslColor.getAlpha() * 100) ); + color2hex( color ), hue, saturation, luminance, alpha ); } } else if( value instanceof Insets ) { Insets insets = (Insets) value; @@ -993,6 +1002,9 @@ public class FlatUIDefaultsInspector { private Item item; + // used instead of getBackground() because this did not work in some 3rd party Lafs + private Color valueColor; + @Override public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column ) @@ -1016,7 +1028,7 @@ public class FlatUIDefaultsInspector if( item.value instanceof Color ) { Color color = (item.info instanceof Color[]) ? ((Color[])item.info)[0] : (Color) item.value; boolean isDark = new HSLColor( color ).getLuminance() < 70 && color.getAlpha() >= 128; - setBackground( color ); + valueColor = color; setForeground( isDark ? Color.white : Color.black ); } else if( item.value instanceof Icon ) { Icon icon = (Icon) item.value; @@ -1041,7 +1053,7 @@ public class FlatUIDefaultsInspector if( item.value instanceof Color ) { int width = getWidth(); int height = getHeight(); - Color background = getBackground(); + Color background = valueColor; // paint color fillRect( g, background, 0, 0, width, height ); diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatUIDefaultsInspector.jfd b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatUIDefaultsInspector.jfd index f7baa2f1..d81ca863 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatUIDefaultsInspector.jfd +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/FlatUIDefaultsInspector.jfd @@ -20,9 +20,10 @@ new FormModel { "labelFor": new FormReference( "filterField" ) "displayedMnemonic": 70 }, new FormLayoutConstraints( class com.jformdesigner.runtime.GridBagConstraintsEx ) ) - add( new FormComponent( "javax.swing.JTextField" ) { + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatTextField" ) { name: "filterField" - "$client.JTextField.placeholderText": "enter one or more filter strings, separated by space characters" + "placeholderText": "enter one or more filter strings, separated by space characters" + "showClearButton": true }, new FormLayoutConstraints( class com.jformdesigner.runtime.GridBagConstraintsEx ) { "gridx": 1 } ) diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatButton.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatButton.java index 38434c28..4b290775 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatButton.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatButton.java @@ -27,7 +27,7 @@ import javax.swing.JButton; */ public class FlatButton extends JButton - implements FlatComponentExtension + implements FlatComponentExtension, FlatStyleableComponent { // NOTE: enum names must be equal to allowed strings public enum ButtonType { none, square, roundRect, tab, help, toolBarButton, borderless } diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatCheckBox.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatCheckBox.java new file mode 100644 index 00000000..bfdc60b5 --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatCheckBox.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JCheckBox; + +/** + * Subclass of {@link JCheckBox} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatCheckBox + extends JCheckBox + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatCheckBoxMenuItem.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatCheckBoxMenuItem.java new file mode 100644 index 00000000..711d91e0 --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatCheckBoxMenuItem.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JCheckBoxMenuItem; + +/** + * Subclass of {@link JCheckBoxMenuItem} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatCheckBoxMenuItem + extends JCheckBoxMenuItem + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatComboBox.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatComboBox.java index 6b9581c7..79e44158 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatComboBox.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatComboBox.java @@ -27,7 +27,7 @@ import javax.swing.JComboBox; */ public class FlatComboBox extends JComboBox - implements FlatComponentExtension + implements FlatComponentExtension, FlatStyleableComponent { /** * Returns the placeholder text that is only painted if the editable combo box is empty. diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatComponentExtension.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatComponentExtension.java index 29f753c3..b9caa3a4 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatComponentExtension.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatComponentExtension.java @@ -20,6 +20,7 @@ import java.awt.Color; import java.awt.Insets; import javax.swing.JComponent; import javax.swing.UIManager; +import com.formdev.flatlaf.util.LoggingFacade; /** * Base interface for all FlatLaf component extensions. @@ -87,7 +88,7 @@ public interface FlatComponentExtension try { return Enum.valueOf( enumType, (String) value ); } catch( IllegalArgumentException ex ) { - ex.printStackTrace(); + LoggingFacade.INSTANCE.logSevere( "FlatLaf: Unknown enum value '" + value + "' in enum '" + enumType.getName() + "'.", ex ); } } return defaultValue; diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatEditorPane.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatEditorPane.java index 403ccb43..02be8eff 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatEditorPane.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatEditorPane.java @@ -26,7 +26,7 @@ import javax.swing.JEditorPane; */ public class FlatEditorPane extends JEditorPane - implements FlatComponentExtension + implements FlatComponentExtension, FlatStyleableComponent { /** * Returns minimum width of a component. diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatFormattedTextField.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatFormattedTextField.java index 5f943bfe..c3aa8826 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatFormattedTextField.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatFormattedTextField.java @@ -18,6 +18,9 @@ package com.formdev.flatlaf.extras.components; import static com.formdev.flatlaf.FlatClientProperties.*; import java.awt.Color; +import java.awt.Insets; +import javax.swing.Icon; +import javax.swing.JComponent; import javax.swing.JFormattedTextField; import com.formdev.flatlaf.extras.components.FlatTextField.SelectAllOnFocusPolicy; @@ -28,7 +31,7 @@ import com.formdev.flatlaf.extras.components.FlatTextField.SelectAllOnFocusPolic */ public class FlatFormattedTextField extends JFormattedTextField - implements FlatComponentExtension + implements FlatComponentExtension, FlatStyleableComponent { /** * Returns the placeholder text that is only painted if the text field is empty. @@ -45,6 +48,122 @@ public class FlatFormattedTextField } + /** + * Returns the leading icon that will be placed at the leading edge of the text field. + * + * @since 2 + */ + public Icon getLeadingIcon() { + return (Icon) getClientProperty( TEXT_FIELD_LEADING_ICON ); + } + + /** + * Specifies the leading icon that will be placed at the leading edge of the text field. + * + * @since 2 + */ + public void setLeadingIcon( Icon leadingIcon ) { + putClientProperty( TEXT_FIELD_LEADING_ICON, leadingIcon ); + } + + + /** + * Returns the trailing icon that will be placed at the trailing edge of the text field. + * + * @since 2 + */ + public Icon getTrailingIcon() { + return (Icon) getClientProperty( TEXT_FIELD_TRAILING_ICON ); + } + + /** + * Specifies the trailing icon that will be placed at the trailing edge of the text field. + * + * @since 2 + */ + public void setTrailingIcon( Icon trailingIcon ) { + putClientProperty( TEXT_FIELD_TRAILING_ICON, trailingIcon ); + } + + + /** + * Returns a component that will be placed at the leading edge of the text field. + * + * @since 2 + */ + public JComponent getLeadingComponent() { + return (JComponent) getClientProperty( TEXT_FIELD_LEADING_COMPONENT ); + } + + /** + * Specifies a component that will be placed at the leading edge of the text field. + *

+ * The component will be positioned inside and aligned to the visible text field border. + * There is no gap between the visible border and the component. + * The laid out component size will be the preferred component width + * and the inner text field height. + *

+ * The component should be not opaque because the text field border is painted + * slightly inside the usually visible border in some cases. + * E.g. when focused (in some themes) or when an outline color is specified + * (see {@link #setOutline(Object)}. + * + * @since 2 + */ + public void setLeadingComponent( JComponent leadingComponent ) { + putClientProperty( TEXT_FIELD_LEADING_COMPONENT, leadingComponent ); + } + + + /** + * Returns a component that will be placed at the trailing edge of the text field. + * + * @since 2 + */ + public JComponent getTrailingComponent() { + return (JComponent) getClientProperty( TEXT_FIELD_TRAILING_COMPONENT ); + } + + /** + * Specifies a component that will be placed at the trailing edge of the text field. + *

+ * The component will be positioned inside and aligned to the visible text field border. + * There is no gap between the visible border and the component. + * The laid out component size will be the preferred component width + * and the inner text field height. + *

+ * The component should be not opaque because the text field border is painted + * slightly inside the usually visible border in some cases. + * E.g. when focused (in some themes) or when an outline color is specified + * (see {@link #setOutline(Object)}. + * + * @since 2 + */ + public void setTrailingComponent( JComponent trailingComponent ) { + putClientProperty( TEXT_FIELD_TRAILING_COMPONENT, trailingComponent ); + } + + + /** + * Returns whether a "clear" (or "cancel") button is shown. + * + * @since 2 + */ + public boolean isShowClearButton() { + return getClientPropertyBoolean( TEXT_FIELD_SHOW_CLEAR_BUTTON, false ); + } + + /** + * Specifies whether a "clear" (or "cancel") button is shown on the trailing side + * if the text field is not empty, editable and enabled. + * + * @since 2 + */ + public void setShowClearButton( boolean showClearButton ) { + putClientPropertyBoolean( TEXT_FIELD_SHOW_CLEAR_BUTTON, showClearButton, false ); + } + + /** * Returns whether all text is selected when the text component gains focus. */ @@ -61,6 +180,27 @@ public class FlatFormattedTextField } + /** + * Returns the padding of the text. + * + * @since 1.4 + */ + public Insets getPadding() { + return (Insets) getClientProperty( TEXT_FIELD_PADDING ); + } + + /** + * Specifies the padding of the text. + * This changes the location and size of the text view within the component bounds, + * but does not affect the size of the component. + * + * @since 1.4 + */ + public void setPadding( Insets padding ) { + putClientProperty( TEXT_FIELD_PADDING, padding ); + } + + /** * Returns minimum width of a component. */ diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatInternalFrame.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatInternalFrame.java new file mode 100644 index 00000000..cdc09538 --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatInternalFrame.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JInternalFrame; + +/** + * Subclass of {@link JInternalFrame} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatInternalFrame + extends JInternalFrame + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatLabel.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatLabel.java new file mode 100644 index 00000000..ce387bee --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatLabel.java @@ -0,0 +1,50 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import static com.formdev.flatlaf.FlatClientProperties.STYLE_CLASS; +import javax.swing.JLabel; + +/** + * Subclass of {@link JLabel} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatLabel + extends JLabel + implements FlatComponentExtension, FlatStyleableComponent +{ + // NOTE: enum names must be equal to typography/font styles + public enum LabelType { h00, h0, h1, h2, h3, h4, large, regular, medium, small, mini, monospaced } + + /** + * Returns type of the label. + */ + public LabelType getLabelType() { + return getClientPropertyEnumString( STYLE_CLASS, LabelType.class, null, LabelType.regular ); + } + + /** + * Specifies type of the label. + */ + public void setLabelType( LabelType labelType ) { + if( labelType == LabelType.regular ) + labelType = null; + putClientPropertyEnumString( STYLE_CLASS, labelType ); + } +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatList.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatList.java new file mode 100644 index 00000000..b667e907 --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatList.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JList; + +/** + * Subclass of {@link JList} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatList + extends JList + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatMenu.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatMenu.java new file mode 100644 index 00000000..407ad500 --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatMenu.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JMenu; + +/** + * Subclass of {@link JMenu} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatMenu + extends JMenu + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatMenuBar.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatMenuBar.java new file mode 100644 index 00000000..b7e2520b --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatMenuBar.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JMenuBar; + +/** + * Subclass of {@link JMenuBar} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatMenuBar + extends JMenuBar + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatMenuItem.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatMenuItem.java new file mode 100644 index 00000000..5895a9aa --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatMenuItem.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JMenuItem; + +/** + * Subclass of {@link JMenuItem} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatMenuItem + extends JMenuItem + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatPasswordField.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatPasswordField.java index 93b88299..7c36be76 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatPasswordField.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatPasswordField.java @@ -18,6 +18,9 @@ package com.formdev.flatlaf.extras.components; import static com.formdev.flatlaf.FlatClientProperties.*; import java.awt.Color; +import java.awt.Insets; +import javax.swing.Icon; +import javax.swing.JComponent; import javax.swing.JPasswordField; import com.formdev.flatlaf.extras.components.FlatTextField.SelectAllOnFocusPolicy; @@ -28,7 +31,7 @@ import com.formdev.flatlaf.extras.components.FlatTextField.SelectAllOnFocusPolic */ public class FlatPasswordField extends JPasswordField - implements FlatComponentExtension + implements FlatComponentExtension, FlatStyleableComponent { /** * Returns the placeholder text that is only painted if the text field is empty. @@ -45,6 +48,122 @@ public class FlatPasswordField } + /** + * Returns the leading icon that will be placed at the leading edge of the text field. + * + * @since 2 + */ + public Icon getLeadingIcon() { + return (Icon) getClientProperty( TEXT_FIELD_LEADING_ICON ); + } + + /** + * Specifies the leading icon that will be placed at the leading edge of the text field. + * + * @since 2 + */ + public void setLeadingIcon( Icon leadingIcon ) { + putClientProperty( TEXT_FIELD_LEADING_ICON, leadingIcon ); + } + + + /** + * Returns the trailing icon that will be placed at the trailing edge of the text field. + * + * @since 2 + */ + public Icon getTrailingIcon() { + return (Icon) getClientProperty( TEXT_FIELD_TRAILING_ICON ); + } + + /** + * Specifies the trailing icon that will be placed at the trailing edge of the text field. + * + * @since 2 + */ + public void setTrailingIcon( Icon trailingIcon ) { + putClientProperty( TEXT_FIELD_TRAILING_ICON, trailingIcon ); + } + + + /** + * Returns a component that will be placed at the leading edge of the text field. + * + * @since 2 + */ + public JComponent getLeadingComponent() { + return (JComponent) getClientProperty( TEXT_FIELD_LEADING_COMPONENT ); + } + + /** + * Specifies a component that will be placed at the leading edge of the text field. + *

+ * The component will be positioned inside and aligned to the visible text field border. + * There is no gap between the visible border and the component. + * The laid out component size will be the preferred component width + * and the inner text field height. + *

+ * The component should be not opaque because the text field border is painted + * slightly inside the usually visible border in some cases. + * E.g. when focused (in some themes) or when an outline color is specified + * (see {@link #setOutline(Object)}. + * + * @since 2 + */ + public void setLeadingComponent( JComponent leadingComponent ) { + putClientProperty( TEXT_FIELD_LEADING_COMPONENT, leadingComponent ); + } + + + /** + * Returns a component that will be placed at the trailing edge of the text field. + * + * @since 2 + */ + public JComponent getTrailingComponent() { + return (JComponent) getClientProperty( TEXT_FIELD_TRAILING_COMPONENT ); + } + + /** + * Specifies a component that will be placed at the trailing edge of the text field. + *

+ * The component will be positioned inside and aligned to the visible text field border. + * There is no gap between the visible border and the component. + * The laid out component size will be the preferred component width + * and the inner text field height. + *

+ * The component should be not opaque because the text field border is painted + * slightly inside the usually visible border in some cases. + * E.g. when focused (in some themes) or when an outline color is specified + * (see {@link #setOutline(Object)}. + * + * @since 2 + */ + public void setTrailingComponent( JComponent trailingComponent ) { + putClientProperty( TEXT_FIELD_TRAILING_COMPONENT, trailingComponent ); + } + + + /** + * Returns whether a "clear" (or "cancel") button is shown. + * + * @since 2 + */ + public boolean isShowClearButton() { + return getClientPropertyBoolean( TEXT_FIELD_SHOW_CLEAR_BUTTON, false ); + } + + /** + * Specifies whether a "clear" (or "cancel") button is shown on the trailing side + * if the text field is not empty, editable and enabled. + * + * @since 2 + */ + public void setShowClearButton( boolean showClearButton ) { + putClientPropertyBoolean( TEXT_FIELD_SHOW_CLEAR_BUTTON, showClearButton, false ); + } + + /** * Returns whether all text is selected when the text component gains focus. */ @@ -61,6 +180,27 @@ public class FlatPasswordField } + /** + * Returns the padding of the text. + * + * @since 1.4 + */ + public Insets getPadding() { + return (Insets) getClientProperty( TEXT_FIELD_PADDING ); + } + + /** + * Specifies the padding of the text. + * This changes the location and size of the text view within the component bounds, + * but does not affect the size of the component. + * + * @since 1.4 + */ + public void setPadding( Insets padding ) { + putClientProperty( TEXT_FIELD_PADDING, padding ); + } + + /** * Returns minimum width of a component. */ diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatPopupMenu.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatPopupMenu.java new file mode 100644 index 00000000..e16757e5 --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatPopupMenu.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JPopupMenu; + +/** + * Subclass of {@link JPopupMenu} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatPopupMenu + extends JPopupMenu + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatPopupMenuSeparator.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatPopupMenuSeparator.java new file mode 100644 index 00000000..37f0abb2 --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatPopupMenuSeparator.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JPopupMenu; + +/** + * Subclass of {@link JPopupMenu.Separator} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatPopupMenuSeparator + extends JPopupMenu.Separator + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatProgressBar.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatProgressBar.java index c4698374..d0ede426 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatProgressBar.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatProgressBar.java @@ -26,7 +26,7 @@ import javax.swing.JProgressBar; */ public class FlatProgressBar extends JProgressBar - implements FlatComponentExtension + implements FlatComponentExtension, FlatStyleableComponent { /** * Returns whether the progress bar has always the larger height even if no string is painted. diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatRadioButton.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatRadioButton.java new file mode 100644 index 00000000..f19b0a04 --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatRadioButton.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JRadioButton; + +/** + * Subclass of {@link JRadioButton} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatRadioButton + extends JRadioButton + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatRadioButtonMenuItem.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatRadioButtonMenuItem.java new file mode 100644 index 00000000..6185ba61 --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatRadioButtonMenuItem.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JRadioButtonMenuItem; + +/** + * Subclass of {@link JRadioButtonMenuItem} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatRadioButtonMenuItem + extends JRadioButtonMenuItem + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatScrollBar.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatScrollBar.java index eba79afe..7d0a2fd1 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatScrollBar.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatScrollBar.java @@ -26,7 +26,7 @@ import javax.swing.JScrollBar; */ public class FlatScrollBar extends JScrollBar - implements FlatComponentExtension + implements FlatComponentExtension, FlatStyleableComponent { /** * Returns whether the decrease/increase arrow buttons of a scrollbar are shown. diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatScrollPane.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatScrollPane.java index 159b477d..f99f0d3b 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatScrollPane.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatScrollPane.java @@ -27,7 +27,7 @@ import javax.swing.JScrollPane; */ public class FlatScrollPane extends JScrollPane - implements FlatComponentExtension + implements FlatComponentExtension, FlatStyleableComponent { /** * Returns whether the decrease/increase arrow buttons of a scrollbar are shown. diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatSeparator.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatSeparator.java new file mode 100644 index 00000000..aa8b9a56 --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatSeparator.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JSeparator; + +/** + * Subclass of {@link JSeparator} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatSeparator + extends JSeparator + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatSlider.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatSlider.java new file mode 100644 index 00000000..aa9aa6e5 --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatSlider.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JSlider; + +/** + * Subclass of {@link JSlider} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatSlider + extends JSlider + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatSpinner.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatSpinner.java index f4e162f0..d9567bad 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatSpinner.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatSpinner.java @@ -27,7 +27,7 @@ import javax.swing.JSpinner; */ public class FlatSpinner extends JSpinner - implements FlatComponentExtension + implements FlatComponentExtension, FlatStyleableComponent { /** * Returns minimum width of a component. diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatSplitPane.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatSplitPane.java new file mode 100644 index 00000000..846ad68e --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatSplitPane.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JSplitPane; + +/** + * Subclass of {@link JSplitPane} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatSplitPane + extends JSplitPane + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatStyleableComponent.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatStyleableComponent.java new file mode 100644 index 00000000..bdf1fb77 --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatStyleableComponent.java @@ -0,0 +1,116 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import java.util.Map; +import javax.swing.JComponent; +import com.formdev.flatlaf.FlatClientProperties; + +/** + * Interface for all styleable FlatLaf components. + *

+ * If you already have custom subclasses of Swing components, you can add this interface + * to your components to add styling getter and setter methods to them. + * + * @author Karl Tauber + * @since 2 + */ +public interface FlatStyleableComponent +{ + /** + * Returns the style of a component as String in CSS syntax ("key1: value1; key2: value2; ...") + * or {@code null} if no style has been assigned. + * + * @see FlatClientProperties#STYLE + */ + default String getStyle() { + return (String) getClientProperty( FlatClientProperties.STYLE ); + } + + /** + * Specifies the style of a component as String in CSS syntax ("key1: value1; key2: value2; ..."). + *

+ * The keys are the same as used in UI defaults, but without component type prefix. + * E.g. for UI default {@code Slider.thumbSize} use key {@code thumbSize}. + *

+ * The syntax of the CSS values is the same as used in FlatLaf properties files + * (https://www.formdev.com/flatlaf/properties-files/), + * but some features are not supported (e.g. variables). + * + * @see FlatClientProperties#STYLE + */ + default void setStyle( String style ) { + putClientProperty( FlatClientProperties.STYLE, style ); + } + + + /** + * Returns the style of a component as {@link java.util.Map}<String, Object> + * or {@code null} if no style has been assigned. + * + * @see FlatClientProperties#STYLE + */ + @SuppressWarnings( "unchecked" ) + default Map getStyleMap() { + return (Map) getClientProperty( FlatClientProperties.STYLE ); + } + + /** + * Specifies the style of a component as {@link java.util.Map}<String, Object> with binary values. + *

+ * The keys are the same as used in UI defaults, but without component type prefix. + * E.g. for UI default {@code Slider.thumbSize} use key {@code thumbSize}. + *

+ * The values are not parsed from a string. They must be binary. + * + * @see FlatClientProperties#STYLE + */ + default void setStyleMap( Map styleMap ) { + putClientProperty( FlatClientProperties.STYLE, styleMap ); + } + + + /** + * Returns the style class(es) of a component (separated by space characters) + * or {@code null} if no style class has been assigned. + * + * @see FlatClientProperties#STYLE_CLASS + */ + default String getStyleClass() { + return (String) getClientProperty( FlatClientProperties.STYLE_CLASS ); + } + + /** + * Specifies the style class(es) of a component (separated by space characters). + * + * @see FlatClientProperties#STYLE_CLASS + */ + default void setStyleClass( String styleClass ) { + putClientProperty( FlatClientProperties.STYLE_CLASS, styleClass ); + } + + + /** + * Overrides {@link JComponent#getClientProperty(Object)}. + */ + Object getClientProperty( Object key ); + + /** + * Overrides {@link JComponent#putClientProperty(Object, Object)}. + */ + void putClientProperty( Object key, Object value ); +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTabbedPane.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTabbedPane.java index bd04f9b4..0b18bba2 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTabbedPane.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTabbedPane.java @@ -31,7 +31,7 @@ import javax.swing.SwingConstants; */ public class FlatTabbedPane extends JTabbedPane - implements FlatComponentExtension + implements FlatComponentExtension, FlatStyleableComponent { /** * Returns whether separators are shown between tabs. @@ -363,6 +363,29 @@ public class FlatTabbedPane } + // NOTE: enum names must be equal to allowed strings + /** @since 2 */ public enum TabType { underlined, card }; + + /** + * Returns type of selected tab. + * + * @since 2 + */ + public TabType getTabType() { + return getClientPropertyEnumString( TABBED_PANE_TAB_TYPE, TabType.class, + "TabbedPane.tabType", TabType.underlined ); + } + + /** + * Specifies type of selected tab. + * + * @since 2 + */ + public void setTabType( TabType tabType ) { + putClientPropertyEnumString( TABBED_PANE_TAB_TYPE, tabType ); + } + + // NOTE: enum names must be equal to allowed strings public enum TabsPopupPolicy { never, asNeeded }; diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTable.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTable.java new file mode 100644 index 00000000..627517d0 --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTable.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JTable; + +/** + * Subclass of {@link JTable} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatTable + extends JTable + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTableHeader.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTableHeader.java new file mode 100644 index 00000000..37e0e209 --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTableHeader.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.table.JTableHeader; + +/** + * Subclass of {@link JTableHeader} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatTableHeader + extends JTableHeader + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTextArea.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTextArea.java index a0568d97..5ba1f7ac 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTextArea.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTextArea.java @@ -26,7 +26,7 @@ import javax.swing.JTextArea; */ public class FlatTextArea extends JTextArea - implements FlatComponentExtension + implements FlatComponentExtension, FlatStyleableComponent { /** * Returns minimum width of a component. diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTextField.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTextField.java index a43d195b..c2d14a07 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTextField.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTextField.java @@ -18,6 +18,9 @@ package com.formdev.flatlaf.extras.components; import static com.formdev.flatlaf.FlatClientProperties.*; import java.awt.Color; +import java.awt.Insets; +import javax.swing.Icon; +import javax.swing.JComponent; import javax.swing.JTextField; /** @@ -27,7 +30,7 @@ import javax.swing.JTextField; */ public class FlatTextField extends JTextField - implements FlatComponentExtension + implements FlatComponentExtension, FlatStyleableComponent { /** * Returns the placeholder text that is only painted if the text field is empty. @@ -44,6 +47,122 @@ public class FlatTextField } + /** + * Returns the leading icon that will be placed at the leading edge of the text field. + * + * @since 2 + */ + public Icon getLeadingIcon() { + return (Icon) getClientProperty( TEXT_FIELD_LEADING_ICON ); + } + + /** + * Specifies the leading icon that will be placed at the leading edge of the text field. + * + * @since 2 + */ + public void setLeadingIcon( Icon leadingIcon ) { + putClientProperty( TEXT_FIELD_LEADING_ICON, leadingIcon ); + } + + + /** + * Returns the trailing icon that will be placed at the trailing edge of the text field. + * + * @since 2 + */ + public Icon getTrailingIcon() { + return (Icon) getClientProperty( TEXT_FIELD_TRAILING_ICON ); + } + + /** + * Specifies the trailing icon that will be placed at the trailing edge of the text field. + * + * @since 2 + */ + public void setTrailingIcon( Icon trailingIcon ) { + putClientProperty( TEXT_FIELD_TRAILING_ICON, trailingIcon ); + } + + + /** + * Returns a component that will be placed at the leading edge of the text field. + * + * @since 2 + */ + public JComponent getLeadingComponent() { + return (JComponent) getClientProperty( TEXT_FIELD_LEADING_COMPONENT ); + } + + /** + * Specifies a component that will be placed at the leading edge of the text field. + *

+ * The component will be positioned inside and aligned to the visible text field border. + * There is no gap between the visible border and the component. + * The laid out component size will be the preferred component width + * and the inner text field height. + *

+ * The component should be not opaque because the text field border is painted + * slightly inside the usually visible border in some cases. + * E.g. when focused (in some themes) or when an outline color is specified + * (see {@link #setOutline(Object)}. + * + * @since 2 + */ + public void setLeadingComponent( JComponent leadingComponent ) { + putClientProperty( TEXT_FIELD_LEADING_COMPONENT, leadingComponent ); + } + + + /** + * Returns a component that will be placed at the trailing edge of the text field. + * + * @since 2 + */ + public JComponent getTrailingComponent() { + return (JComponent) getClientProperty( TEXT_FIELD_TRAILING_COMPONENT ); + } + + /** + * Specifies a component that will be placed at the trailing edge of the text field. + *

+ * The component will be positioned inside and aligned to the visible text field border. + * There is no gap between the visible border and the component. + * The laid out component size will be the preferred component width + * and the inner text field height. + *

+ * The component should be not opaque because the text field border is painted + * slightly inside the usually visible border in some cases. + * E.g. when focused (in some themes) or when an outline color is specified + * (see {@link #setOutline(Object)}. + * + * @since 2 + */ + public void setTrailingComponent( JComponent trailingComponent ) { + putClientProperty( TEXT_FIELD_TRAILING_COMPONENT, trailingComponent ); + } + + + /** + * Returns whether a "clear" (or "cancel") button is shown. + * + * @since 2 + */ + public boolean isShowClearButton() { + return getClientPropertyBoolean( TEXT_FIELD_SHOW_CLEAR_BUTTON, false ); + } + + /** + * Specifies whether a "clear" (or "cancel") button is shown on the trailing side + * if the text field is not empty, editable and enabled. + * + * @since 2 + */ + public void setShowClearButton( boolean showClearButton ) { + putClientPropertyBoolean( TEXT_FIELD_SHOW_CLEAR_BUTTON, showClearButton, false ); + } + + // NOTE: enum names must be equal to allowed strings public enum SelectAllOnFocusPolicy { never, once, always }; @@ -63,6 +182,27 @@ public class FlatTextField } + /** + * Returns the padding of the text. + * + * @since 1.4 + */ + public Insets getPadding() { + return (Insets) getClientProperty( TEXT_FIELD_PADDING ); + } + + /** + * Specifies the padding of the text. + * This changes the location and size of the text view within the component bounds, + * but does not affect the size of the component. + * + * @since 1.4 + */ + public void setPadding( Insets padding ) { + putClientProperty( TEXT_FIELD_PADDING, padding ); + } + + /** * Returns minimum width of a component. */ diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTextPane.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTextPane.java index 4660068a..84897ee6 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTextPane.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTextPane.java @@ -26,7 +26,7 @@ import javax.swing.JTextPane; */ public class FlatTextPane extends JTextPane - implements FlatComponentExtension + implements FlatComponentExtension, FlatStyleableComponent { /** * Returns minimum width of a component. diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatToggleButton.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatToggleButton.java index a342f890..226acb12 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatToggleButton.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatToggleButton.java @@ -28,7 +28,7 @@ import com.formdev.flatlaf.extras.components.FlatButton.ButtonType; */ public class FlatToggleButton extends JToggleButton - implements FlatComponentExtension + implements FlatComponentExtension, FlatStyleableComponent { /** * Returns type of a button. diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatToolBar.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatToolBar.java new file mode 100644 index 00000000..3caff752 --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatToolBar.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JToolBar; + +/** + * Subclass of {@link JToolBar} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatToolBar + extends JToolBar + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatToolBarSeparator.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatToolBarSeparator.java new file mode 100644 index 00000000..37300b5d --- /dev/null +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatToolBarSeparator.java @@ -0,0 +1,31 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.extras.components; + +import javax.swing.JToolBar; + +/** + * Subclass of {@link JToolBar.Separator} that provides easy access to FlatLaf specific client properties. + * + * @author Karl Tauber + * @since 2 + */ +public class FlatToolBarSeparator + extends JToolBar.Separator + implements FlatStyleableComponent +{ +} diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTree.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTree.java index 730b91be..83c0075c 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTree.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/components/FlatTree.java @@ -22,10 +22,11 @@ import javax.swing.JTree; /** * Subclass of {@link JTree} that provides easy access to FlatLaf specific client properties. * + * @author Karl Tauber */ public class FlatTree extends JTree - implements FlatComponentExtension + implements FlatComponentExtension, FlatStyleableComponent { /** * Returns if the tree shows a wide selection diff --git a/flatlaf-extras/src/main/resources/com/formdev/flatlaf/extras/resources/DerivedColorKeys.properties b/flatlaf-extras/src/main/resources/com/formdev/flatlaf/extras/resources/DerivedColorKeys.properties index 05d01807..0e2e4e68 100644 --- a/flatlaf-extras/src/main/resources/com/formdev/flatlaf/extras/resources/DerivedColorKeys.properties +++ b/flatlaf-extras/src/main/resources/com/formdev/flatlaf/extras/resources/DerivedColorKeys.properties @@ -21,8 +21,9 @@ # a variable base color (usually the current background color of a component). # This works only for a limited set of UI keys. # -# The property key is the UI key of a color, which is computed at runtime. -# The property value is the UI key of the base color. +# In this properties file: +# - The property key is the UI key of a color, which is computed at runtime. +# - The property value is the UI key of the base color. # # This file is not used at runtime. # It is only used in tooling (e.g. UI Defaults Inspector or UIDefaultsDump). @@ -58,17 +59,17 @@ CheckBox.icon.disabledBackground = CheckBox.icon.background CheckBox.icon.focusedBackground = CheckBox.icon.background CheckBox.icon.hoverBackground = CheckBox.icon.background CheckBox.icon.pressedBackground = CheckBox.icon.background -CheckBox.icon.selectedFocusedBackground = CheckBox.icon.selectedBackground -CheckBox.icon.selectedHoverBackground = CheckBox.icon.selectedBackground -CheckBox.icon.selectedPressedBackground = CheckBox.icon.selectedBackground +CheckBox.icon.focusedSelectedBackground = CheckBox.icon.selectedBackground +CheckBox.icon.hoverSelectedBackground = CheckBox.icon.selectedBackground +CheckBox.icon.pressedSelectedBackground = CheckBox.icon.selectedBackground CheckBox.icon[filled].disabledBackground = CheckBox.icon[filled].background CheckBox.icon[filled].focusedBackground = CheckBox.icon[filled].background CheckBox.icon[filled].hoverBackground = CheckBox.icon[filled].background CheckBox.icon[filled].pressedBackground = CheckBox.icon[filled].background -CheckBox.icon[filled].selectedFocusedBackground = CheckBox.icon[filled].selectedBackground -CheckBox.icon[filled].selectedHoverBackground = CheckBox.icon[filled].selectedBackground -CheckBox.icon[filled].selectedPressedBackground = CheckBox.icon[filled].selectedBackground +CheckBox.icon[filled].focusedSelectedBackground = CheckBox.icon[filled].selectedBackground +CheckBox.icon[filled].hoverSelectedBackground = CheckBox.icon[filled].selectedBackground +CheckBox.icon[filled].pressedSelectedBackground = CheckBox.icon[filled].selectedBackground #---- CheckBoxMenuItem ---- diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatArcDarkIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatArcDarkIJTheme.java index 0084400e..e0f9d6b1 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatArcDarkIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatArcDarkIJTheme.java @@ -39,14 +39,6 @@ public class FlatArcDarkIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatArcDarkIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatArcDarkOrangeIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatArcDarkOrangeIJTheme.java index 72c08628..628d4434 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatArcDarkOrangeIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatArcDarkOrangeIJTheme.java @@ -39,14 +39,6 @@ public class FlatArcDarkOrangeIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatArcDarkOrangeIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatArcIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatArcIJTheme.java index 4e948758..17fbc7ba 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatArcIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatArcIJTheme.java @@ -39,14 +39,6 @@ public class FlatArcIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatArcIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatArcOrangeIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatArcOrangeIJTheme.java index e9ed5044..d40509f5 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatArcOrangeIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatArcOrangeIJTheme.java @@ -39,14 +39,6 @@ public class FlatArcOrangeIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatArcOrangeIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatCarbonIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatCarbonIJTheme.java index fd2c962c..48bf96f0 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatCarbonIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatCarbonIJTheme.java @@ -39,14 +39,6 @@ public class FlatCarbonIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatCarbonIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatCobalt2IJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatCobalt2IJTheme.java index 41000f3f..2cc1499e 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatCobalt2IJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatCobalt2IJTheme.java @@ -39,14 +39,6 @@ public class FlatCobalt2IJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatCobalt2IJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatCyanLightIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatCyanLightIJTheme.java index 37eda60a..ed4ff2d0 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatCyanLightIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatCyanLightIJTheme.java @@ -39,14 +39,6 @@ public class FlatCyanLightIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatCyanLightIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatDarkFlatIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatDarkFlatIJTheme.java index 34ecd687..dfaa0595 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatDarkFlatIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatDarkFlatIJTheme.java @@ -39,14 +39,6 @@ public class FlatDarkFlatIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatDarkFlatIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatDarkPurpleIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatDarkPurpleIJTheme.java index 9bad9449..fe58f92c 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatDarkPurpleIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatDarkPurpleIJTheme.java @@ -39,14 +39,6 @@ public class FlatDarkPurpleIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatDarkPurpleIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatDraculaIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatDraculaIJTheme.java index 89abe663..4cdbaf69 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatDraculaIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatDraculaIJTheme.java @@ -39,14 +39,6 @@ public class FlatDraculaIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatDraculaIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGradiantoDarkFuchsiaIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGradiantoDarkFuchsiaIJTheme.java index 01b36571..0040d110 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGradiantoDarkFuchsiaIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGradiantoDarkFuchsiaIJTheme.java @@ -39,14 +39,6 @@ public class FlatGradiantoDarkFuchsiaIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatGradiantoDarkFuchsiaIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGradiantoDeepOceanIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGradiantoDeepOceanIJTheme.java index 8804f47c..184027d9 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGradiantoDeepOceanIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGradiantoDeepOceanIJTheme.java @@ -39,14 +39,6 @@ public class FlatGradiantoDeepOceanIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatGradiantoDeepOceanIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGradiantoMidnightBlueIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGradiantoMidnightBlueIJTheme.java index ec0c30dd..24ccae7c 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGradiantoMidnightBlueIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGradiantoMidnightBlueIJTheme.java @@ -39,14 +39,6 @@ public class FlatGradiantoMidnightBlueIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatGradiantoMidnightBlueIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGradiantoNatureGreenIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGradiantoNatureGreenIJTheme.java index d39f5ff4..5effda2c 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGradiantoNatureGreenIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGradiantoNatureGreenIJTheme.java @@ -39,14 +39,6 @@ public class FlatGradiantoNatureGreenIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatGradiantoNatureGreenIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGrayIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGrayIJTheme.java index 4c32e9d1..a402ec58 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGrayIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGrayIJTheme.java @@ -39,14 +39,6 @@ public class FlatGrayIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatGrayIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGruvboxDarkHardIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGruvboxDarkHardIJTheme.java index 015796df..bc59fe28 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGruvboxDarkHardIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGruvboxDarkHardIJTheme.java @@ -39,14 +39,6 @@ public class FlatGruvboxDarkHardIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatGruvboxDarkHardIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGruvboxDarkMediumIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGruvboxDarkMediumIJTheme.java index 59253fff..19be856d 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGruvboxDarkMediumIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGruvboxDarkMediumIJTheme.java @@ -39,14 +39,6 @@ public class FlatGruvboxDarkMediumIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatGruvboxDarkMediumIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGruvboxDarkSoftIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGruvboxDarkSoftIJTheme.java index a9fea531..a85e6b69 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGruvboxDarkSoftIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatGruvboxDarkSoftIJTheme.java @@ -39,14 +39,6 @@ public class FlatGruvboxDarkSoftIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatGruvboxDarkSoftIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatHiberbeeDarkIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatHiberbeeDarkIJTheme.java index 0b2804db..89424ae5 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatHiberbeeDarkIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatHiberbeeDarkIJTheme.java @@ -39,14 +39,6 @@ public class FlatHiberbeeDarkIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatHiberbeeDarkIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatHighContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatHighContrastIJTheme.java index 2b8b9cb1..7fe86eb3 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatHighContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatHighContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatHighContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatHighContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatLightFlatIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatLightFlatIJTheme.java index cb8bbd0f..230a282d 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatLightFlatIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatLightFlatIJTheme.java @@ -39,14 +39,6 @@ public class FlatLightFlatIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatLightFlatIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatMaterialDesignDarkIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatMaterialDesignDarkIJTheme.java index 4d33d029..4faf5bef 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatMaterialDesignDarkIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatMaterialDesignDarkIJTheme.java @@ -39,14 +39,6 @@ public class FlatMaterialDesignDarkIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatMaterialDesignDarkIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatMonocaiIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatMonocaiIJTheme.java index 411fcc23..dbd61b32 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatMonocaiIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatMonocaiIJTheme.java @@ -39,14 +39,6 @@ public class FlatMonocaiIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatMonocaiIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatNordIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatNordIJTheme.java index 73ce2031..369f4eaa 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatNordIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatNordIJTheme.java @@ -39,14 +39,6 @@ public class FlatNordIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatNordIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatOneDarkIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatOneDarkIJTheme.java index 6d7be7f9..f3ea80ea 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatOneDarkIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatOneDarkIJTheme.java @@ -39,14 +39,6 @@ public class FlatOneDarkIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatOneDarkIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatSolarizedDarkIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatSolarizedDarkIJTheme.java index 90d4be48..3818c59e 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatSolarizedDarkIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatSolarizedDarkIJTheme.java @@ -39,14 +39,6 @@ public class FlatSolarizedDarkIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatSolarizedDarkIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatSolarizedLightIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatSolarizedLightIJTheme.java index e886bffa..bf7d22df 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatSolarizedLightIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatSolarizedLightIJTheme.java @@ -39,14 +39,6 @@ public class FlatSolarizedLightIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatSolarizedLightIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatSpacegrayIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatSpacegrayIJTheme.java index 1f8fe489..15b23360 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatSpacegrayIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatSpacegrayIJTheme.java @@ -39,14 +39,6 @@ public class FlatSpacegrayIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatSpacegrayIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatVuesionIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatVuesionIJTheme.java index d790020c..f97c15ed 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatVuesionIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/FlatVuesionIJTheme.java @@ -39,14 +39,6 @@ public class FlatVuesionIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatVuesionIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatArcDarkContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatArcDarkContrastIJTheme.java index da7947aa..b03012bb 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatArcDarkContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatArcDarkContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatArcDarkContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatArcDarkContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatArcDarkIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatArcDarkIJTheme.java index fdb9e716..0cbce003 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatArcDarkIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatArcDarkIJTheme.java @@ -39,14 +39,6 @@ public class FlatArcDarkIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatArcDarkIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatAtomOneDarkContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatAtomOneDarkContrastIJTheme.java index 866f290f..33ef4994 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatAtomOneDarkContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatAtomOneDarkContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatAtomOneDarkContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatAtomOneDarkContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatAtomOneDarkIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatAtomOneDarkIJTheme.java index 08b985c1..e72a2814 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatAtomOneDarkIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatAtomOneDarkIJTheme.java @@ -39,14 +39,6 @@ public class FlatAtomOneDarkIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatAtomOneDarkIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatAtomOneLightContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatAtomOneLightContrastIJTheme.java index eabeb68b..4945d26a 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatAtomOneLightContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatAtomOneLightContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatAtomOneLightContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatAtomOneLightContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatAtomOneLightIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatAtomOneLightIJTheme.java index 044f35ae..9c47569f 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatAtomOneLightIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatAtomOneLightIJTheme.java @@ -39,14 +39,6 @@ public class FlatAtomOneLightIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatAtomOneLightIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatDraculaContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatDraculaContrastIJTheme.java index ffef1ed3..787ad8bc 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatDraculaContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatDraculaContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatDraculaContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatDraculaContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatDraculaIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatDraculaIJTheme.java index 6e70268f..c3f44f7f 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatDraculaIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatDraculaIJTheme.java @@ -39,14 +39,6 @@ public class FlatDraculaIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatDraculaIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatGitHubContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatGitHubContrastIJTheme.java index d97c3ae2..a6bacee4 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatGitHubContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatGitHubContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatGitHubContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatGitHubContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatGitHubDarkContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatGitHubDarkContrastIJTheme.java index 715a5c71..3673dc1c 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatGitHubDarkContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatGitHubDarkContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatGitHubDarkContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatGitHubDarkContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatGitHubDarkIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatGitHubDarkIJTheme.java index 7f29cc09..176e3ac6 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatGitHubDarkIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatGitHubDarkIJTheme.java @@ -39,14 +39,6 @@ public class FlatGitHubDarkIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatGitHubDarkIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatGitHubIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatGitHubIJTheme.java index 669899fd..ece0d023 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatGitHubIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatGitHubIJTheme.java @@ -39,14 +39,6 @@ public class FlatGitHubIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatGitHubIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatLightOwlContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatLightOwlContrastIJTheme.java index 761c08a7..527b8a48 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatLightOwlContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatLightOwlContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatLightOwlContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatLightOwlContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatLightOwlIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatLightOwlIJTheme.java index dada52e8..6bdc770f 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatLightOwlIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatLightOwlIJTheme.java @@ -39,14 +39,6 @@ public class FlatLightOwlIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatLightOwlIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialDarkerContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialDarkerContrastIJTheme.java index 37ee447a..49101b37 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialDarkerContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialDarkerContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatMaterialDarkerContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatMaterialDarkerContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialDarkerIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialDarkerIJTheme.java index f373c39a..26d460f7 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialDarkerIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialDarkerIJTheme.java @@ -39,14 +39,6 @@ public class FlatMaterialDarkerIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatMaterialDarkerIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialDeepOceanContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialDeepOceanContrastIJTheme.java index f49e78c1..4d81f51c 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialDeepOceanContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialDeepOceanContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatMaterialDeepOceanContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatMaterialDeepOceanContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialDeepOceanIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialDeepOceanIJTheme.java index 423ce388..d1e1a00a 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialDeepOceanIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialDeepOceanIJTheme.java @@ -39,14 +39,6 @@ public class FlatMaterialDeepOceanIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatMaterialDeepOceanIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialLighterContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialLighterContrastIJTheme.java index 1f589f52..86318c39 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialLighterContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialLighterContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatMaterialLighterContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatMaterialLighterContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialLighterIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialLighterIJTheme.java index ceb13702..08fe26cb 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialLighterIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialLighterIJTheme.java @@ -39,14 +39,6 @@ public class FlatMaterialLighterIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatMaterialLighterIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialOceanicContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialOceanicContrastIJTheme.java index 829df8ac..18031bc9 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialOceanicContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialOceanicContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatMaterialOceanicContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatMaterialOceanicContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialOceanicIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialOceanicIJTheme.java index ae83dc5f..1e3dae88 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialOceanicIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialOceanicIJTheme.java @@ -39,14 +39,6 @@ public class FlatMaterialOceanicIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatMaterialOceanicIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialPalenightContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialPalenightContrastIJTheme.java index 898306ce..f375fbfe 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialPalenightContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialPalenightContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatMaterialPalenightContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatMaterialPalenightContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialPalenightIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialPalenightIJTheme.java index 492276ff..173f05b2 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialPalenightIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMaterialPalenightIJTheme.java @@ -39,14 +39,6 @@ public class FlatMaterialPalenightIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatMaterialPalenightIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMonokaiProContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMonokaiProContrastIJTheme.java index 732213eb..b0beb52b 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMonokaiProContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMonokaiProContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatMonokaiProContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatMonokaiProContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMonokaiProIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMonokaiProIJTheme.java index 7c780377..a1c84b1d 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMonokaiProIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMonokaiProIJTheme.java @@ -39,14 +39,6 @@ public class FlatMonokaiProIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatMonokaiProIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMoonlightContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMoonlightContrastIJTheme.java index c4a77641..71b1c538 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMoonlightContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMoonlightContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatMoonlightContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatMoonlightContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMoonlightIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMoonlightIJTheme.java index f0b8af7f..e0d6c261 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMoonlightIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatMoonlightIJTheme.java @@ -39,14 +39,6 @@ public class FlatMoonlightIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatMoonlightIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatNightOwlContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatNightOwlContrastIJTheme.java index 7c17e496..714c727c 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatNightOwlContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatNightOwlContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatNightOwlContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatNightOwlContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatNightOwlIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatNightOwlIJTheme.java index b2b153a4..3c3a1d6e 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatNightOwlIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatNightOwlIJTheme.java @@ -39,14 +39,6 @@ public class FlatNightOwlIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatNightOwlIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatSolarizedDarkContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatSolarizedDarkContrastIJTheme.java index 6dc7ac5a..32bcd01e 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatSolarizedDarkContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatSolarizedDarkContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatSolarizedDarkContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatSolarizedDarkContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatSolarizedDarkIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatSolarizedDarkIJTheme.java index cce0d2eb..9c5c66b2 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatSolarizedDarkIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatSolarizedDarkIJTheme.java @@ -39,14 +39,6 @@ public class FlatSolarizedDarkIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatSolarizedDarkIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatSolarizedLightContrastIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatSolarizedLightContrastIJTheme.java index fedf9929..696a83df 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatSolarizedLightContrastIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatSolarizedLightContrastIJTheme.java @@ -39,14 +39,6 @@ public class FlatSolarizedLightContrastIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatSolarizedLightContrastIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatSolarizedLightIJTheme.java b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatSolarizedLightIJTheme.java index b57bea3a..970293e7 100644 --- a/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatSolarizedLightIJTheme.java +++ b/flatlaf-intellij-themes/src/main/java/com/formdev/flatlaf/intellijthemes/materialthemeuilite/FlatSolarizedLightIJTheme.java @@ -39,14 +39,6 @@ public class FlatSolarizedLightIJTheme } } - /** - * @deprecated use {@link #setup()} instead; this method will be removed in a future version - */ - @Deprecated - public static boolean install() { - return setup(); - } - public static void installLafInfo() { installLafInfo( NAME, FlatSolarizedLightIJTheme.class ); } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/Dracula.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/Dracula.theme.json index 4f738a5e..d9081180 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/Dracula.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/Dracula.theme.json @@ -75,7 +75,7 @@ "nonEditableBackground": "secondaryBackground" }, "CompletionPopup": { - "selectionBackground": "selectionBackground", + "selectionBackground": "selectionInactiveBackground", "selectionInactiveBackground": "selectionInactiveBackground", "matchForeground": "accentColor" }, @@ -256,10 +256,8 @@ "selectionInactiveBackground": "selectionInactiveBackground" }, "ValidationTooltip": { - "errorBackground": "#ff5554", - "errorBorderColor": "#ff5554", - "warningBorderColor": "#ffb86c", - "warningBackground": "#ffb86c" + "errorBackground": "#4c273c", + "warningBackground": "#4f4b41" }, "VersionControl": { "FileHistory": { @@ -330,4 +328,4 @@ "Checkbox.Focus.Thin.Default.Dark": "#bd93f9" } } -} \ No newline at end of file +} diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/HiberbeeDark.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/HiberbeeDark.theme.json index 3c501bcb..2fa19301 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/HiberbeeDark.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/HiberbeeDark.theme.json @@ -5,309 +5,350 @@ "editorScheme": "/colors/Dark.xml", "colors": { "black": "#000000", - "consoleBackground": "#191919", - "editorBackground": "#212121", - "panelBackground": "#333333", - "textColor": "#F9F6EF", - "border": "#3c3c3c", + "editorDarkerBg": "#2D2B29", + "shortcutForeground": "#2d2b29", + "editorBg": "#1B1A19", + "consoleBackground": "#171615", + "editorPaneBg": "#333231", + "panelBackground": "#333231", + "textColor": "#f9f6ef", + "textColorTransparent": "#f9f6ef7f", + "border": "#4d4c4b", "redMac": "#fb3b45", "redWin": "#ef6950", "redMonokaiPro": "#ff6188", "blueWinPalette": "#409AE1", "blue": "#78dce8", + "deepBlue": "#3199b3", "orangeMonokaiPro": "#fc9867", "greenMonokaiPro": "#a9dc76", - "yellowWinPalette": "#ffc83d", - "yellowMac": "#faaa1f", + "yellow": "#FFB900", "purpleWinPalette": "#b4a0ff", "purpleMonokaiPro": "#ab9df2", "greenWinPalette": "#40c5af", "greyWinPalette": "#b2b2b2", - "panelText": "#a6a6a6", - "desaturatedBlue": "#1e282d", + "panelText": "#acacac", "desaturatedOrange": "#8049117f", - "green": "#5B8021", - "greyDot15": "#d8d8d8", - "greyDot20": "#cccccc", + "green": "#92d923", + "greyDot15": "#f9f6ef", + "greyDot20": "#c0c0c0", "greyDot25": "#bfbfbf", "greyDot33": "#aaaaaa", "greyDot50": "#7d7d7d", "greyDot60": "#666666", "greyDot65": "#5a5a5a", - "greyDot70": "#4d4d4d", - "greyDot75": "#434343", - "greyDot80": "#323232", - "greyDot85": "#252525", - "greyDot90": "#1f2021", + "greyDot70": "#4d4c4b", + "greyDot75": "#434241", + "greyDot80": "#333231", + "greyDot85": "#2d2b29", + "greyDot90": "#1f1e1d", + "greyDot95": "#242220", + "greyDot100": "#181615", "lightBlue": "#70D7FF", - "navyDot85": "#191d21", - "navyDot90": "#1f2021", "red": "#800040", "transparentGreen": "#5B80217f", - "transparentRed": "#8000407f", - "transparentViolet": "#9478F67f", - "transparentYellow": "#8066357f", - "yellow": "#806635" - }, - "icons": { - "ColorPalette": { - "Actions.Blue": "#57D1EB", - "Actions.Green": "#92D923", - "Actions.Grey": "#afafaf", - "Actions.GreyInline": "#7f7f7f", - "Actions.GreyInline.Dark": "#646464", - "Actions.Red": "#ff6188", - "Actions.Yellow": "#FFC83C", - "Objects.BlackText": "#7d7d7d", - "Objects.Blue": "#57D1EB", - "Objects.Green": "#92D923", - "Objects.GreenAndroid": "#92D923", - "Objects.Grey": "#7f7f7f", - "Objects.Pink": "#ffa9ca", - "Objects.Purple": "#9380FF", - "Objects.Red": "#ed005c", - "Objects.RedStatus": "#EC5F5D", - "Objects.Yellow": "#FFC83C", - "Objects.YellowDark": "#FD971F" - } + "transparentRed": "#F250227f", + "transparentViolet": "#242221ff", + "transparentYellow": "#FFB9007f" }, "ui": { "*": { - "arc": "3", - "shadow": "greyDot75", - "background": "greyDot80", - "borderColor": "greyDot70", - "caretForeground": "yellowMac", - "color": "greyDot50", - "foreground": "greyDot20", - "hoverBackground": "greyDot70", - "selectedBackground": "greyDot85", - "selectedForeground": "greyDot15", - "selectedInactiveBackground": "greyDot70", - "selectionBackground": "navyDot85", - "selectionForeground": "yellowMac", - "separatorColor": "greyDot75", + "arc": 5, + "background": "panelBackground", + "borderColor": "border", + "caretForeground": "yellow", + "color": "greyDot60", + "foreground": "textColor", + "hoverBackground": "greyDot85", + "selectedBackground": "greyDot90", + "selectedForeground": "textColor", + "selectedInactiveBackground": "greyDot75", + "selectionBackground": "greyDot95", + "selectionForeground": "yellow", + "separatorColor": "border", "underlineHeight": 1 }, "ActionButton": { - "hoverBorderColor": "greyDot50", - "pressedBackground": "greyDot65", - "pressedBorderColor": "greyDot50" + "pressedBackground": "greyDot95", + "hoverBorderColor": "greyDot65", + "pressedBorderColor": "greyDot60" }, "Borders": { - "ContrastBorderColor": "greyDot65", + "ContrastBorderColor": "greyDot60", "color": "border" }, - "Button.default.endBackground": "greyDot80", - "Button.default.endBorderColor": "greyDot65", - "Button.default.focusColor": "greyDot80", - "Button.default.focusedBorderColor": "greyDot15", - "Button.default.foreground": "greyDot15", - "Button.default.startBackground": "greyDot80", - "Button.default.startBorderColor": "greyDot65", - "Button.endBackground": "greyDot80", - "Button.endBorderColor": "greyDot65", - "Button.focusedBorderColor": "yellowMac", - "Button.startBackground": "greyDot80", - "Button.startBorderColor": "greyDot65", - "CheckBox.disabledText": "greyDot33", - "CheckBox.select": "greyDot50", - "CheckBoxMenuItem.disabledBackground": "greyDot80", - "ComboBox.ArrowButton.disabledIconColor": "greyDot50", - "ComboBox.ArrowButton.iconColor": "yellowMac", - "ComboBox.ArrowButton.nonEditableBackground": "greyDot70", - "ComboBox.modifiedItemForeground": "yellowMac", - "ComboBox.disabledForeground": "greyDot80", - "ComboBox.nonEditableBackground": "greyDot75", - "ComboPopup.border": "1,1,1,1,4d4d4d", - "CompletionPopup": { - "nonFocusedMask": "#34343434", - "selectionBackground": "navyDot85", + "Button": { + "arc": 5, + "default": { + "endBackground": "greyDot80", + "endBorderColor": "greyDot70", + "focusColor": "greyDot60", + "focusedBorderColor": "greyDot50", + "foreground": "greyDot33", + "startBackground": "greyDot80", + "startBorderColor": "greyDot70" + }, + "shadowWidth": 1, + "endBackground": "greyDot80", + "endBorderColor": "greyDot70", + "focusedBorderColor": "greyDot50", "foreground": "greyDot20", - "matchForeground": "yellowMac" + "disabledBorderColor": "greyDot75", + "startBackground": "greyDot80", + "startBorderColor": "greyDot70" + }, + "CheckBox.disabledText": "greyDot50", + "CheckBox.foreground": "greyDot33", + "CheckBox.select": "greyDot50", + "CheckBoxMenuItem.background": "greyDot80", + "CheckBoxMenuItem.disabledBackground": "greyDot80", + "CheckBoxMenuItem.disabledForeground": "greyDot50", + "CheckBoxMenuItem.foreground": "greyDot20", + "ColorChooser.background": "greyDot80", + "ComboBox": { + "ArrowButton": { + "disabledIconColor": "textColorTransparent", + "iconColor": "yellow", + "nonEditableBackground": "greyDot65" + }, + "background": "greyDot80", + "disabledForeground": "greyDot50", + "foreground": "greyDot20", + "modifiedItemForeground": "yellow", + "nonEditableBackground": "greyDot75", + "selectionBackground": "greyDot95" + }, + "CompletionPopup": { + "foreground": "greyDot20", + "matchForeground": "yellow", + "selectionBackground": "greyDot95", + "selectionInactiveBackground": "greyDot85" }, "Component": { - "arc": "3", - "disabledBorderColor": "greyDot70", + "arc": "4", + "iconColor": "yellow", + "disabledBorderColor": "greyDot75", "infoForeground": "greyDot50", - "errorFocusColor": "#F65F87", - "focusColor": "greyDot50", - "focusWidth": "0", - "focusedBorderColor": "greyDot50", - "hoverIconColor": "yellowMac", + "errorFocusColor": "red", + "focusColor": "greyDot60", + "focusWidth": 0, + "focusedBorderColor": "greyDot65", "inactiveErrorFocusColor": "transparentRed", "inactiveWarningFocusColor": "transparentYellow", "warningFocusColor": "yellow" }, - "Debugger.Variables.changedValueForeground": "yellowMac", + "Debugger.Variables.changedValueForeground": "yellow", "Debugger.Variables.evaluatingExpressionForeground": "lightBlue", - "DefaultTabs.underlineColor": "yellowMac", + "DefaultTabs.borderColor": "border", + "DefaultTabs.inactiveUnderlineColor": "border", + "DefaultTabs.underlineColor": "yellow", "DefaultTabs.underlineHeight": 1, - "DefaultTabs.underlinedTabBackground": "greyDot75", - "DefaultTabs.underlinedTabForeground": "lightBlue", + "DefaultTabs.underlinedTabForeground": "yellow", "DragAndDrop.areaBackground": "greyDot75", "DragAndDrop.areaForeground": "greyDot25", - "Editor.background": "greyDot90", - "EditorPane.inactiveBackground": "greyDot85", - "EditorPane.inactiveForeground": "greyDot50", - "EditorTabs.underlineHeight": 1, - "FileColor.Blue": "#23282d", - "FileColor.Green": "#232d28", - "FileColor.Orange": "#2d2823", - "FileColor.Rose": "#2d2323", - "FileColor.Violet": "#2D232D", - "FileColor.Yellow": "#2d2d23", - "FormattedTextField.inactiveBackground": "greyDot80", - "FormattedTextField.background": "greyDot75", - "GutterTooltip.infoForeground": "greyDot50", + "Editor": { + "background": "editorPaneBg", + "foreground": "textColor", + "shortcutForeground": "greyDot20" + }, + "EditorPane": { + "background": "editorPaneBg", + "inactiveBackground": "editorDarkerBg", + "inactiveForeground": "greyDot50", + "selectionBackground": "editorBg", + "selectionForeground": "textColor" + }, + "EditorTabs": { + "underlineHeight": 1, + "borderColor": "editorDarkerBg", + "hoverBackground": "editorBg", + "background": "editorPaneBg", + "inactiveUnderlineColor": "editorPaneBg", + "underlinedTabForeground": "textColor" + }, + "EditorTabs.inactiveColoredFileBackground": true, + "FileColor": { + "Blue": "#23282d", + "Green": "#232d28", + "Orange": "#2d2823", + "Rose": "#2d2323", + "Violet": "#2D232D", + "Yellow": "#2d2d23" + }, + "FormattedTextField": { + "foreground": "textColor", + "selectionBackground": "greyDot95", + "inactiveBackground": "greyDot80", + "inactiveForeground": "greyDot33", + "background": "greyDot75" + }, + "GutterTooltip": { + "infoForeground": "greyDot33", + "lineSeparatorColor": "greyDot70" + }, + "InformationHint.borderColor": "greyDot75", + "InplaceRefactoringPopup.borderColor": "greyDot75", "Label": { - "foreground": "greyDot25", + "disabledForeground": "greyDot33", + "disabledText": "greyDot33", + "foreground": "greyDot20", "infoForeground": "greyDot50" }, - "Link.activeForeground": "lightBlue", - "Link.hoverForeground": "yellowMac", - "Link.pressedForeground": "lightBlue", - "Link.visitedForeground": "greyDot25", + "Link.hoverForeground": "yellow", "MemoryIndicator.allocatedBackground": "green", "MemoryIndicator.usedBackground": "red", "Menu": { + "background": "greyDot80", + "disabledForeground": "greyDot70", "separatorColor": "greyDot75", "foreground": "textColor", "borderColor": "greyDot70", - "acceleratorForeground": "greyDot25" + "acceleratorForeground": "greyDot33" }, "Notification.MoreButton.innerBorderColor": "greyDot65", - "Notification.ToolWindow.errorBackground": "greyDot85", - "Notification.ToolWindow.errorBorderColor": "#ed005c", - "Notification.ToolWindow.errorForeground": "#F65F87", - "Notification.ToolWindow.informativeBackground": "greyDot85", + "Notification.ToolWindow.errorBackground": "greyDot95", + "Notification.ToolWindow.errorBorderColor": "red", + "Notification.ToolWindow.errorForeground": "#EE7762", + "Notification.ToolWindow.informativeBackground": "greyDot95", "Notification.ToolWindow.informativeBorderColor": "#92D923", "Notification.ToolWindow.informativeForeground": "#92D923", - "Notification.ToolWindow.warningBackground": "greyDot85", - "Notification.ToolWindow.warningBorderColor": "yellowMac", - "Notification.ToolWindow.warningForeground": "yellowMac", - "Notification.background": "greyDot85", - "Notification.errorBackground": "greyDot85", - "Notification.errorBorderColor": "#ed005c", - "Notification.errorForeground": "#F65F87", + "Notification.ToolWindow.warningBackground": "greyDot95", + "Notification.ToolWindow.warningBorderColor": "yellow", + "Notification.ToolWindow.warningForeground": "yellow", + "Notification.background": "greyDot95", + "Notification.errorBackground": "greyDot95", + "Notification.errorBorderColor": "red", + "Notification.errorForeground": "#EE7762", "OptionPane": { - "background": "greyDot80", + "background": "editorPaneBg", "foreground": "greyDot20" }, "Panel": { - "background": "greyDot80", - "foreground": "greyDot20" + "background": "editorPaneBg", + "foreground": "textColor" }, - "Panel.foreground": "greyDot20", "ParameterInfo.background": "greyDot85", - "ParameterInfo.foreground": "greyDot25", + "ParameterInfo.borderColor": "greyDot75", "ParameterInfo.currentOverloadBackground": "greyDot65", - "ParameterInfo.currentParameterForeground": "yellowMac", + "ParameterInfo.currentParameterForeground": "yellow", + "ParameterInfo.foreground": "greyDot25", "ParameterInfo.infoForeground": "greyDot33", "ParameterInfo.lineSeparatorColor": "greyDot75", "PasswordField.background": "greyDot75", "Plugins.Button.installBackground": "greyDot80", - "Plugins.Button.installBorderColor": "greyDot65", + "Plugins.Button.installBorderColor": "greyDot60", "Plugins.Button.installFillBackground": "greyDot80", "Plugins.Button.installFillForeground": "greyDot25", - "Plugins.Button.installForeground": "yellowMac", + "Plugins.Button.installForeground": "yellow", "Plugins.SearchField.background": "greyDot75", "Plugins.SectionHeader.background": "greyDot75", - "Plugins.Tab.hoverBackground": "navyDot85", - "Plugins.Tab.selectedBackground": "greyDot85", - "Plugins.background": "greyDot80", + "Plugins.Tab.hoverBackground": "editorBg", + "Plugins.Tab.selectedBackground": "editorPaneBg", + "Plugins.background": "editorPaneBg", + "Plugins.lightSelectionBackground": "#242220", "Plugins.disabledForeground": "greyDot50", - "Plugins.lightSelectionBackground": "navyDot85", - "Plugins.tagBackground": "greyDot85", + "Plugins.tagBackground": "editorBg", + "Plugins.tagForeground": "greyDot33", + "Plugins.hoverBackground": "editorBg", "Popup.Advertiser.background": "greyDot85", "Popup.Advertiser.foreground": "greyDot50", "Popup.Header.activeBackground": "greyDot75", "Popup.Header.inactiveBackground": "greyDot85", - "Popup.paintBorder": true, + "Popup.paintBorder": false, "PopupMenu.background": "greyDot80", "PopupMenuSeparator.stripeWidth": 1, - "ProgressBar.failedColor": "#ed005c", + "ProgressBar.failedColor": "red", "ProgressBar.failedEndColor": "greyDot75", - "ProgressBar.indeterminateStartColor": "yellowMac", "ProgressBar.indeterminateEndColor": "#FD971F", - "ProgressBar.passedColor": "#92D923", + "ProgressBar.indeterminateStartColor": "yellow", + "ProgressBar.passedColor": "green", "ProgressBar.passedEndColor": "greyDot75", - "ProgressBar.progressColor": "yellowMac", + "ProgressBar.progressColor": "yellow", "ProgressBar.trackColor": "greyDot75", "RadioButton.background": "greyDot80", + "RadioButton.disabledText": "greyDot70", "RadioButtonMenuItem.disabledBackground": "greyDot80", "ScrollPane.background": "greyDot80", "SearchEverywhere.Advertiser.foreground": "greyDot50", - "SearchEverywhere.List.separatorForeground": "greyDot50", - "SearchEverywhere.SearchField.infoForeground": "greyDot33", - "SearchEverywhere.SearchField.background": "greyDot75", "SearchEverywhere.Header.background": "greyDot80", - "SearchEverywhere.Tab.selectedBackground": "greyDot85", - "SearchEverywhere.Tab.selectedForeground": "lightBlue", - "SearchMatch.endBackground": "yellowMac", - "SearchMatch.startBackground": "yellowMac", + "SearchEverywhere.List.separatorForeground": "greyDot50", + "SearchEverywhere.SearchField.background": "greyDot75", + "SearchEverywhere.SearchField.infoForeground": "greyDot33", + "SearchEverywhere.Tab.selectedBackground": "greyDot95", + "SearchEverywhere.Tab.selectedForeground": "yellow", + "SearchMatch.endBackground": "yellow", + "SearchMatch.startBackground": "yellow", "SidePanel.background": "greyDot85", - "SpeedSearch.errorForeground": "#F65F87", - "SpeedSearch.foreground": "yellowMac", - "SplitPane.highlight": "yellowMac", - "PopupMenu.translucentBackground": "greyDot50", - "TabbedPane.disabledUnderlineColor": "greyDot65", - "TabbedPane.focusColor": "greyDot65", + "SpeedSearch.errorForeground": "red", + "SpeedSearch.foreground": "yellow", + "SplitPane.highlight": "yellow", + "TabbedPane.disabledUnderlineColor": "editorPaneBg", + "TabbedPane.focus": "greyDot75", + "TabbedPane.focusColor": "greyDot33", "TabbedPane.tabSelectionHeight": 1, - "TabbedPane.underlineColor": "yellowMac", + "TabbedPane.underlineColor": "yellow", "Table.dropLineColor": "greyDot75", "Table.dropLineShortColor": "greyDot70", "Table.focusCellBackground": "greyDot85", - "Table.focusCellForeground": "yellowMac", - "Table.sortIconColor": "yellowMac", + "Table.focusCellForeground": "yellow", + "Table.sortIconColor": "yellow", "Table.stripeColor": "greyDot75", "TableHeader.background": "greyDot85", "TableHeader.bottomSeparatorColor": "greyDot65", "TextArea.background": "greyDot75", - "TextArea.caretForeground": "yellowMac", + "TextArea.caretForeground": "yellow", "TextArea.inactiveBackground": "greyDot80", + "TextArea.selectionBackground": "greyDot95", "TextField.background": "greyDot75", - "TextField.foreground": "greyDot25", - "TextField.caretForeground": "yellowMac", - "TextField.highlight": "greyDot15", + "TextField.caretForeground": "yellow", + "TextField.foreground": "greyDot33", + "TextField.highlight": "yellow", "TextField.inactiveForeground": "greyDot33", "TextPane.inactiveBackground": "greyDot80", + "TextPane.inactiveForeground": "greyDot50", "TitlePane.background": "greyDot85", "ToggleButton.buttonColor": "greyDot65", "ToggleButton.offBackground": "greyDot75", "ToggleButton.offForeground": "greyDot25", - "ToggleButton.onBackground": "yellowMac", + "ToggleButton.onBackground": "yellow", "ToggleButton.onForeground": "greyDot80", "ToolBar.borderHandleColor": "greyDot65", "ToolTip.Actions.background": "greyDot80", "ToolTip.Actions.infoForeground": "greyDot50", - "ToolTip.background": "greyDot75", + "ToolTip.background": "greyDot80", + "ToolTip.borderColor": "border", "ToolTip.infoForeground": "greyDot50", - "ToolWindow.Button.hoverBackground": "greyDot65", - "ToolWindow.Button.selectedBackground": "greyDot85", - "ToolWindow.Button.selectedForeground": "lightBlue", + "ToolWindow.Button.hoverBackground": "greyDot95", + "ToolWindow.Button.selectedBackground": "greyDot95", + "ToolWindow.Button.selectedForeground": "yellow", "ToolWindow.Header.background": "greyDot85", - "ToolWindow.Header.inactiveBackground": "greyDot80", - "ToolWindow.HeaderTab.hoverBackground": "greyDot65", - "ToolWindow.HeaderTab.hoverInactiveBackground": "greyDot85", - "ToolWindow.HeaderTab.inactiveUnderlineColor": "greyDot75", - "ToolWindow.HeaderTab.underlineColor": "yellowMac", + "ToolWindow.Header.inactiveBackground": "editorPaneBg", + "ToolWindow.HeaderTab.hoverBackground": "consoleBackground", + "ToolWindow.HeaderTab.hoverInactiveBackground": "editorBg", + "ToolWindow.HeaderTab.underlineColor": "yellow", "ToolWindow.HeaderTab.underlineHeight": 1, - "ToolWindow.HeaderTab.underlinedTabBackground": "greyDot90", - "ToolWindow.HeaderTab.underlinedTabInactiveBackground": "greyDot75", + "Tooltip.separatorColor": "border", "Tree.background": "greyDot85", - "Tree.foreground": "greyDot15", - "Tree.modifiedItemForeground": "yellowMac", - "ValidationTooltip.errorBackground": "greyDot85", - "ValidationTooltip.errorBorderColor": "#ed005c", - "ValidationTooltip.warningBackground": "greyDot85", - "ValidationTooltip.warningBorderColor": "yellowMac", - "VersionControl.FileHistory.Commit.selectedBranchBackground": "greyDot70", + "Tree.foreground": "textColor", + "Tree.hoverBackground": "greyDot95", + "Tree.modifiedItemForeground": "yellow", + "Tree.selectionBackground": "greyDot95", + "Tree.selectionInactiveBackground": "greyDot95", + "ValidationTooltip.errorBackground": "greyDot95", + "ValidationTooltip.errorBorderColor": "red", + "ValidationTooltip.warningBackground": "greyDot95", + "ValidationTooltip.warningBorderColor": "yellow", + "VersionControl.FileHistory.Commit.selectedBranchBackground": "greyDot95", "VersionControl.Log.Commit.currentBranchBackground": "greyDot85", + "VersionControl.Log.Commit.hoveredBackground": "greyDot95", "VersionControl.Log.Commit.unmatchedForeground": "greyDot25", - "WelcomeScreen.Projects.selectionBackground": "navyDot85", - "WelcomeScreen.Projects.selectionInactiveBackground": "navyDot90", - "WelcomeScreen.separatorColor": "greyDot65", - "Window.border": "1,1,1,1,4d4d4d" + "WelcomeScreen.Details.background": "greyDot80", + "WelcomeScreen.Projects.background": "greyDot85", + "WelcomeScreen.Projects.selectionBackground": "greyDot95", + "WelcomeScreen.SidePanel.background": "greyDot80", + "WelcomeScreen.background": "greyDot80", + "WelcomeScreen.borderColor": "border", + "WelcomeScreen.separatorColor": "border", + "Window.border": "0,0,0,0,4d4d4d" } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/SolarizedDark.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/SolarizedDark.theme.json index fb91ee63..ca5ffad0 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/SolarizedDark.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/SolarizedDark.theme.json @@ -11,7 +11,8 @@ "colorSelectionBackgroundInactive": "#00243C", "colorSelectionForeground": "#C2C5BC", "colorSelectionForegroundInactive": "#A9B3AE", - "colorHoverBackground": "#284E5B", + "colorHoverBackground": "#1B4755", + "colorHoverInactiveBackground": "#1B4755", "colorBorder": "#04343F", "colorDisabledForeground": "#657B83", "colorAlternativeBackground": "#1B4854", @@ -30,6 +31,8 @@ "disabledForeground": "colorDisabledForeground", "disabledText": "colorDisabledForeground", "foreground": "colorForeground", + "hoverBackground": "colorHoverBackground", + "hoverInactiveBackground": "colorHoverInactiveBackground", "inactiveBackground": "colorBackground", "inactiveForeground": "colorInactiveForeground", "selectionBackground": "colorSelectionBackground", @@ -42,11 +45,22 @@ "textForeground": "colorForeground" }, "ActionButton": { - "hoverBackground": "colorHoverBackground", - "hoverBorderColor": "colorHoverBackground", + "hoverBackground": "#284E5B", + "hoverBorderColor": "#284E5B", "pressedBackground": "#43616C", "pressedBorderColor": "#43616C" }, + "AssignedMnemonic": { + "background": "#47573B", + "borderColor": "#47573B" + }, + "AvailableMnemonic": { + "borderColor": "#456168" + }, + "BigSpinner": {}, + "BookmarkIcon": { + "background": "#73888C" + }, "Borders": { "color": "colorBorder", "ContrastBorderColor": "colorBorder" @@ -111,6 +125,11 @@ "background": "#99A6A5B0", "foreground": "#002B36" }, + "CurrentMnemonic": { + "background": "#175D8B", + "borderColor": "#175D8B", + "foreground": "#BEC2B9" + }, "Debugger": { "Variables": { "changedValueForeground": "#519AF2", @@ -137,7 +156,8 @@ "DragAndDrop": { "areaBackground": "#17475F", "areaBorderColor": "#386FA8", - "areaForeground": "colorForeground" + "areaForeground": "colorForeground", + "borderColor": "#FA6060" }, "Editor": { "background": "#0E272F", @@ -219,6 +239,7 @@ "FormattedTextField": { "background": "colorAlternativeBackground" }, + "GotItTooltip": {}, "Group": { "disabledSeparatorColor": "colorSeparator", "separatorColor": "colorSeparator" @@ -239,7 +260,18 @@ "Label": { "errorForeground": "#FA6060", "infoForeground": "#778A8F", - "selectedForeground": "colorForeground" + "selectedForeground": "colorForeground", + "successForeground": "#39A464" + }, + "Lesson": { + "shortcutBackground": "#0C3340", + "stepNumberForeground": "#73888C", + "Tooltip": { + "background": "#005DCB", + "foreground": "#EEE8D5", + "spanBackground": "#004AA8", + "stepNumberForeground": "#629ADE" + } }, "Link": { "activeForeground": "#519AF2", @@ -269,6 +301,10 @@ "acceleratorForeground": "colorForeground", "disabledBackground": "colorBackground" }, + "MnemonicIcon": { + "background": "#36544C", + "borderColor": "#D0A244" + }, "NavBar": { "borderColor": "colorSeparator" }, @@ -297,7 +333,9 @@ "OptionPane": { "messageForeground": "colorForeground" }, - "Panel": {}, + "Panel": { + "mouseShortcutBackground": "#214C5A" + }, "ParameterInfo": { "background": "#254C57", "borderColor": "#415E69", @@ -357,6 +395,7 @@ "PopupMenu": { "translucentBackground": "colorBackground" }, + "ProblemsView": {}, "ProgressBar": { "failedColor": "#DE4647", "failedEndColor": "#EFA0A0", @@ -432,6 +471,9 @@ "endBackground": "#FCCE40", "startBackground": "#FFEAA2" }, + "SearchOption": { + "selectedBackground": "#456168" + }, "Separator": { "separatorColor": "colorSeparator" }, @@ -462,9 +504,12 @@ "SplitPaneDivider": { "draggingColor": "#193E49" }, + "StateWidget": { + "activeBackground": "#FAC640" + }, "StatusBar": { "borderColor": "#204550", - "hoverBackground": "colorHoverBackground" + "hoverBackground": "#284E5B" }, "TabbedPane": { "contentAreaColor": "#04343F", @@ -475,6 +520,7 @@ "underlineColor": "#3985C7" }, "Table": { + "alternativeRowBackground": "#013441", "dropLineColor": "colorAcceleratorForeground", "dropLineShortColor": "#0C3542", "focusCellBackground": "colorAlternativeBackground", @@ -605,6 +651,7 @@ "Log": { "Commit": { "currentBranchBackground": "#044452", + "hoveredBackground": "#124957", "unmatchedForeground": "#657B83" } }, @@ -619,17 +666,27 @@ "borderColor": "#31535F", "captionBackground": "#294953", "captionForeground": "#C2C5BC", + "Details": { + "background": "#013441" + }, "footerBackground": "#294953", "footerForeground": "#C2C5BC", "groupIconBorderColor": "#0A3844", "headerBackground": "#294953", "headerForeground": "#C2C5BC", "Projects": { + "actions": { + "background": "#195787", + "selectionBackground": "#206ABF" + }, "background": "#113842", "selectionBackground": "#396AB0", "selectionInactiveBackground": "#1E434E" }, - "separatorColor": "#244A57" + "separatorColor": "#244A57", + "SidePanel": { + "background": "colorBackground" + } }, "Window": { "border": "colorBorder" diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/SolarizedLight.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/SolarizedLight.theme.json index cbffeb4c..bcf5ae0c 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/SolarizedLight.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/SolarizedLight.theme.json @@ -11,7 +11,8 @@ "colorSelectionBackgroundInactive": "#D3D2C6", "colorSelectionForeground": "#FFFFEB", "colorSelectionForegroundInactive": "#2E4E58", - "colorHoverBackground": "#D9D7CA", + "colorHoverBackground": "#EBECDF", + "colorHoverInactiveBackground": "#F3ECDA", "colorBorder": "#C8CAC0", "colorDisabledForeground": "#839496", "colorAlternativeBackground": "#FDF6E3", @@ -30,6 +31,8 @@ "disabledForeground": "colorDisabledForeground", "disabledText": "colorDisabledForeground", "foreground": "colorForeground", + "hoverBackground": "colorHoverBackground", + "hoverInactiveBackground": "colorHoverInactiveBackground", "inactiveBackground": "colorBackground", "inactiveForeground": "colorInactiveForeground", "selectionBackground": "colorSelectionBackground", @@ -42,11 +45,22 @@ "textForeground": "colorForeground" }, "ActionButton": { - "hoverBackground": "colorHoverBackground", - "hoverBorderColor": "colorHoverBackground", + "hoverBackground": "#D9D7CA", + "hoverBorderColor": "#D9D7CA", "pressedBackground": "#C6C7BD", "pressedBorderColor": "#C6C7BD" }, + "AssignedMnemonic": { + "background": "#EFBE65", + "borderColor": "#EFBE65" + }, + "AvailableMnemonic": { + "borderColor": "#BAC0B8" + }, + "BigSpinner": {}, + "BookmarkIcon": { + "background": "#EFBE65" + }, "Borders": { "color": "colorBorder", "ContrastBorderColor": "colorBorder" @@ -115,6 +129,11 @@ "background": "#99A6A5B0", "foreground": "#002B36" }, + "CurrentMnemonic": { + "background": "#3399CB", + "borderColor": "#3399CB", + "foreground": "#FDF6E3" + }, "Debugger": { "Variables": { "changedValueForeground": "#3961FA", @@ -141,7 +160,8 @@ "DragAndDrop": { "areaBackground": "#DEE3DE", "areaBorderColor": "#88ACCD", - "areaForeground": "#657B83" + "areaForeground": "#657B83", + "borderColor": "#F94A26" }, "Editor": { "background": "#B5B0A2", @@ -224,6 +244,7 @@ "background": "colorAlternativeBackground", "inactiveBackground": "colorAlternativeBackground" }, + "GotItTooltip": {}, "Group": { "disabledSeparatorColor": "colorSeparator", "separatorColor": "colorSeparator" @@ -244,7 +265,18 @@ "Label": { "errorForeground": "#F95551", "infoForeground": "#657B83", - "selectedForeground": "colorForeground" + "selectedForeground": "colorForeground", + "successForeground": "#45944E" + }, + "Lesson": { + "shortcutBackground": "#E2E6E3", + "stepNumberForeground": "#839496", + "Tooltip": { + "background": "#006CE1", + "foreground": "#FDF6E3", + "spanBackground": "#0059B9", + "stepNumberForeground": "#67A0DF" + } }, "Link": { "activeForeground": "#4975B9", @@ -276,6 +308,10 @@ "acceleratorForeground": "#49636B", "disabledBackground": "colorBackground" }, + "MnemonicIcon": { + "background": "#FCEFD2", + "borderColor": "#F1A933" + }, "NavBar": { "borderColor": "colorSeparator" }, @@ -304,7 +340,9 @@ "OptionPane": { "messageForeground": "colorForeground" }, - "Panel": {}, + "Panel": { + "mouseShortcutBackground": "#F3ECDA" + }, "ParameterInfo": { "background": "#F5F1E5", "borderColor": "#D9D7CA", @@ -364,6 +402,7 @@ "PopupMenu": { "translucentBackground": "colorBackground" }, + "ProblemsView": {}, "ProgressBar": { "failedColor": "#D14943", "failedEndColor": "#F6887C", @@ -436,6 +475,9 @@ "endBackground": "#F8C734", "startBackground": "#FAE08D" }, + "SearchOption": { + "selectedBackground": "#D6DBD3" + }, "Separator": { "separatorColor": "colorSeparator" }, @@ -466,9 +508,12 @@ "SplitPaneDivider": { "draggingColor": "#1E434E" }, + "StateWidget": { + "activeBackground": "#F7C338" + }, "StatusBar": { "borderColor": "colorBorder", - "hoverBackground": "colorHoverBackground" + "hoverBackground": "#D9D7CA" }, "TabbedPane": { "contentAreaColor": "#B4BAB5", @@ -479,6 +524,7 @@ "underlineColor": "#3D7EC0" }, "Table": { + "alternativeRowBackground": "colorAlternativeBackground", "background": "colorAlternativeBackground", "dropLineColor": "colorAcceleratorForeground", "dropLineShortColor": "#5F63A9", @@ -611,6 +657,7 @@ "Log": { "Commit": { "currentBranchBackground": "#E3F2E4", + "hoveredBackground": "#D8E5DC", "unmatchedForeground": "#6B8086" } }, @@ -625,16 +672,26 @@ "borderColor": "#B4BAB5", "captionBackground": "#CCCDC1", "captionForeground": "colorForeground", + "Details": { + "background": "colorAlternativeBackground" + }, "footerBackground": "#CCCDC1", "footerForeground": "colorForeground", "groupIconBorderColor": "#B4BAB5", "headerBackground": "#D9D7CA", "headerForeground": "#36525B", "Projects": { + "actions": { + "background": "#DAE5E6", + "selectionBackground": "#3282DA" + }, "background": "colorAlternativeBackground", "selectionInactiveBackground": "#D7D5C7" }, - "separatorColor": "#ECE5D3" + "separatorColor": "#ECE5D3", + "SidePanel": { + "background": "colorBackground" + } }, "Window": { "border": "colorBorder" diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/Spacegray.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/Spacegray.theme.json index 0cbc6f05..ac92ef8b 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/Spacegray.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/Spacegray.theme.json @@ -67,7 +67,9 @@ }, "ComboPopup.border": "1,1,1,1,64647A", "CompletionPopup": { - "matchForeground": "#BF616A" + "matchForeground": "#BF616A", + "selectionBackground": "#5a6173", + "selectionInactiveBackground": "#383C4A" }, "Component": { "errorFocusColor": "#bf4c53", @@ -95,9 +97,9 @@ }, "EditorPane.inactiveBackground": "#2b303b", "EditorTabs": { - "selectedBackground": "#2b303b", "underlinedTabBackground": "#2b303b", - "underlineHeight": "0" + "underlineHeight": "0", + "borderColor": "#2b303b" }, "Link": { "activeForeground": "#7FA1B3", @@ -156,6 +158,14 @@ "passedColor": "#99BD8E", "passedEndColor": "#62795b" }, + "ScrollBar": { + "thumbColor": "#383C4A", + "hoverThumbColor": "#5a6173", + "Mac": { + "thumbColor": "#383C4A", + "hoverThumbColor": "#5a6173" + } + }, "SearchEverywhere": { "Header.background": "#1C1F26", "Tab": { @@ -202,7 +212,6 @@ "borderColor": "#232830" }, "HeaderTab": { - "selectedBackground": "#232830", "selectedInactiveBackground": "#232830", "hoverBackground": "#1C1F26", "hoverInactiveBackground": "#1C1F26" diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/gruvbox_dark_hard.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/gruvbox_dark_hard.theme.json index 008d26e4..4eb118b3 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/gruvbox_dark_hard.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/gruvbox_dark_hard.theme.json @@ -127,6 +127,36 @@ "hoverForeground": "blue1", "pressedForeground": "blue1", "visitedForeground": "blue1" + }, + "ScrollBar" : { + "hoverThumbBorderColor" : "bg1", + "background" : "bg0", + "hoverThumbColor": "bg1", + "hoverTrackColor": "bg0", + "thumb": "bg2", + "thumbBorderColor": "bg2", + "thumbColor": "bg2", + "Transparent": { + "thumbColor": "bg2", + "hoverThumbBorderColor" : "bg1", + "hoverThumbColor": "bg1", + "hoverTrackColor": "bg0", + "thumbBorderColor": "bg2" + }, + "Mac" : { + "Transparent": { + "thumbColor": "bg2", + "hoverThumbBorderColor" : "bg1", + "hoverThumbColor": "bg1", + "hoverTrackColor": "bg0", + "thumbBorderColor": "bg2" + }, + "hoverThumbBorderColor" : "bg1", + "hoverThumbColor": "bg1", + "hoverTrackColor": "bg0", + "thumbBorderColor": "bg2", + "thumbColor": "bg2" + } } }, "icons": { diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/gruvbox_dark_medium.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/gruvbox_dark_medium.theme.json index 6dcfcaa6..80b3ca02 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/gruvbox_dark_medium.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/gruvbox_dark_medium.theme.json @@ -126,6 +126,36 @@ "hoverForeground": "blue1", "pressedForeground": "blue1", "visitedForeground": "blue1" + }, + "ScrollBar" : { + "hoverThumbBorderColor" : "bg1", + "background" : "bg0", + "hoverThumbColor": "bg1", + "hoverTrackColor": "bg0", + "thumb": "bg2", + "thumbBorderColor": "bg2", + "thumbColor": "bg2", + "Transparent": { + "thumbColor": "bg2", + "hoverThumbBorderColor" : "bg1", + "hoverThumbColor": "bg1", + "hoverTrackColor": "bg0", + "thumbBorderColor": "bg2" + }, + "Mac" : { + "Transparent": { + "thumbColor": "bg2", + "hoverThumbBorderColor" : "bg1", + "hoverThumbColor": "bg1", + "hoverTrackColor": "bg0", + "thumbBorderColor": "bg2" + }, + "hoverThumbBorderColor" : "bg1", + "hoverThumbColor": "bg1", + "hoverTrackColor": "bg0", + "thumbBorderColor": "bg2", + "thumbColor": "bg2" + } } }, "icons": { diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/gruvbox_dark_soft.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/gruvbox_dark_soft.theme.json index ae1d4681..4cebc316 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/gruvbox_dark_soft.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/gruvbox_dark_soft.theme.json @@ -127,6 +127,36 @@ "hoverForeground": "blue1", "pressedForeground": "blue1", "visitedForeground": "blue1" + }, + "ScrollBar" : { + "hoverThumbBorderColor" : "bg1", + "background" : "bg0", + "hoverThumbColor": "bg1", + "hoverTrackColor": "bg0", + "thumb": "bg2", + "thumbBorderColor": "bg2", + "thumbColor": "bg2", + "Transparent": { + "thumbColor": "bg2", + "hoverThumbBorderColor" : "bg1", + "hoverThumbColor": "bg1", + "hoverTrackColor": "bg0", + "thumbBorderColor": "bg2" + }, + "Mac" : { + "Transparent": { + "thumbColor": "bg2", + "hoverThumbBorderColor" : "bg1", + "hoverThumbColor": "bg1", + "hoverTrackColor": "bg0", + "thumbBorderColor": "bg2" + }, + "hoverThumbBorderColor" : "bg1", + "hoverThumbColor": "bg1", + "hoverTrackColor": "bg0", + "thumbBorderColor": "bg2", + "thumbColor": "bg2" + } } }, "icons": { diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Arc Dark Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Arc Dark Contrast.theme.json index 7a791324..415df184 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Arc Dark Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Arc Dark Contrast.theme.json @@ -2,1004 +2,1089 @@ "name": "Arc Dark Contrast", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#2f343f", + "bg30": "#2f343f30", + "fg": "#D3DAE3", + "text": "#8b9eb5", + "selBg": "#414181", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#404552", + "excl": "#37373d", + "second": "#393f4c", + "dis": "#a2a2a2", + "accent": "#42A5F5", + "accent2": "#42A5F52", + "accent50": "#42A5F550", + "accent70": "#42A5F570", + "cs": "#262b33", + "button": "#383C4A", + "table": "#41416A", + "tree": "#09477170", + "hl": "#393f4c", + "notif": "#262a33", + "hc": "#262b33", + "white": "#CF6A4C", + "blue": "#7587A6", + "red": "#CF6A4C", + "yellow": "#F9EE98", + "green": "#8F9D6A", + "gray": "#747c84", + "purple": "#9B859D", + "orange": "#CDA869" + }, "editorScheme": "colors/Arc Dark.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#8b9eb5", - "background": "#2f343f", - "borderColor": "#404552", - "disabledBackground": "#37373d", - "disabledForeground": "#D3DAE3", - "disabledText": "#D3DAE3", - "focusColor": "#393f4c", - "focusedBorderColor": "#42A5F5", - "foreground": "#D3DAE3", - "inactiveBackground": "#37373d", - "inactiveForeground": "#8b9eb5", - "infoForeground": "#8b9eb5", - "selectionBackground": "#8888FF55", - "selectionBackgroundInactive": "#393f4c45", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#393f4c45", - "separatorColor": "#404552" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#2f343f", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#42A5F550", - "hoverBorderColor": "#42A5F550", - "hoverSeparatorColor": "#383C4A", - "focusedBorderColor": "#42A5F550", - "pressedBackground": "#42A5F550", - "pressedBorderColor": "#42A5F550" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#8888FF55" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#2f343f", - "Borders.color": "#404552", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#2f343f", + "background": "bg", "default": { - "endBackground": "#41416A", - "endBorderColor": "#41416A", - "foreground": "#FFFFFF", - "focusColor": "#42A5F5", - "focusedBorderColor": "#42A5F5", - "shadowColor": "#41416A", - "startBackground": "#41416A", - "startBorderColor": "#41416A" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#383C4A", - "disabledText": "#D3DAE3", - "endBackground": "#383C4A", - "endBorderColor": "#383C4A", - "focus": "#393f4c", - "focusedBorderColor": "#42A5F5", - "foreground": "#8b9eb5", - "highlight": "#FFFFFF", - "mt.background": "#383C4A", - "mt.foreground": "#8b9eb5", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#41416A", - "mt.selection.color2": "#41416A", - "startBackground": "#383C4A", - "startBorderColor": "#383C4A", - "shadowColor": "#383C4A", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#404552", - "Tooltip.background": "#262a33" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#262b33", - "selectionBackground": "#8888FF55" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#2f343f", - "disabledText": "#D3DAE3", - "foreground": "#D3DAE3", - "select": "#42A5F5" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#8b9eb5", - "acceleratorSelectionForeground": "#8b9eb5", - "background": "#2f343f", - "disabledBackground": "#2f343f", - "disabledForeground": "#D3DAE3", - "foreground": "#D3DAE3", - "selectionBackground": "#8888FF55", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#D3DAE3", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#42A5F5", - "dropdownBorder": "#393f4c45", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#2f343f", - "foreground": "#D3DAE3", - "swatchesDefaultRecentColor": "#D3DAE3" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#383C4A", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#383C4A", - "disabledIconColor": "#D3DAE3", - "iconColor": "#D3DAE3", - "nonEditableBackground": "#2f343f" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#262b33", - "buttonBackground": "#383C4A", - "darcula.hoveredArrowButtonForeground": "#42A5F5", - "disabledForeground": "#D3DAE3", - "foreground": "#D3DAE3", - "modifiedItemForeground": "#42A5F5", - "nonEditableBackground": "#393f4c45", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#41416A", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#404552", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#393f4c45", - "foreground": "#D3DAE3", - "infoForeground": "#8b9eb5", - "matchForeground": "#42A5F5", - "matchSelectionForeground": "#42A5F5", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#8b9eb5", - "selectionInactiveBackground": "#393f4c", - "selectionBackground": "#8888FF55", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#393f4c", - "disabledBorderColor": "#383C4A", - "focusColor": "#42A5F5", - "focusedBorderColor": "#42A5F5", - "hoverIconColor": "#42A5F5", - "infoForeground": "#8b9eb5", - "iconColor": "#D3DAE3" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#2f343f", - "controlText": "#8b9eb5", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#42A5F5", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#8b9eb5", - "changedValueForeground": "#42A5F5", - "errorMessageForeground": "#CF6A4C", - "evaluatingExpressionForeground": "#8b9eb5", - "exceptionForeground": "#F9EE98", - "modifyingValueForeground": "#42A5F5", - "valueForeground": "#42A5F5" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#393f4c", - "underlinedTabBackground": "#393f4c" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#393f4c" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#2f343f", - "borderColor": "#2f343f", - "hoverBackground": "#41416A", - "hoverColor": "#262b33", - "hoverMaskColor": "#393f4c", - "inactiveColoredTabBackground": "#2f343f", - "inactiveColoredFileBackground": "#383C4A", - "inactiveUnderlineColor": "#42A5F5", - "inactiveMaskColor": "#262b33", - "underlineColor": "#42A5F5", - "underlinedTabBackground": "#41416A", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#2f343f", - "DialogWrapper.southPanelBackground": "#2f343f", - "DialogWrapper.southPanelDivider": "#2f343f", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#2f343f", - "areaBorderColor": "#2f343f", - "areaForeground": "#D3DAE3" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#262b33", - "foreground": "#D3DAE3", - "shortcutForeground": "#8b9eb5" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#262b33", - "caretForeground": "#42A5F5", - "foreground": "#D3DAE3", - "inactiveBackground": "#2f343f", - "inactiveForeground": "#D3DAE3", - "selectionBackground": "#8888FF55", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#393f4c45", - "hoverBackground": "#393f4c", - "hoverColor": "#393f4c", - "hoverMaskColor": "#393f4c", - "inactiveMaskColor": "#2f343f", - "inactiveColoredFileBackground": "#2f343f", - "inactiveUnderlineColor": "#D3DAE3", - "selectedForeground": "#D3DAE3", - "selectedBackground": "#41416A", - "underlineColor": "#42A5F5", - "underlinedTabBackground": "#41416A", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#2f343f", - "borderColor": "#393f4c45", - "hoverBackground": "#393f4c", - "hoverColor": "#393f4c", - "inactiveUnderlineColor": "#42A5F5", - "underlineColor": "#42A5F5", - "underlinedTabBackground": "#41416A", - "underlinedTabForeground": "#D3DAE3" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#37373d", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#404552", + "Focus.color": "border", "FormattedTextField": { - "background": "#262b33", - "caretForeground": "#42A5F5", - "foreground": "#D3DAE3", - "inactiveBackground": "#383C4A", - "inactiveForeground": "#D3DAE3", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#41416A" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#262a33", "Group": { - "disabledSeparatorColor": "#404552", - "separatorColor": "#404552" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#8b9eb5", - "lineSeparatorColor": "#2f343f" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#2f343f", - "inactive": "#262b33" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#2f343f", - "borderColor": "#404552", - "foreground": "#D3DAE3", - "infoForeground": "#8b9eb5", - "shortcutForeground": "#8b9eb5" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#42A5F5", - "inactiveCaption": "#393f4c45", - "inactiveCaptionBorder": "#2f343f", - "inactiveCaptionText": "#8b9eb5", - "info": "#8b9eb5", - "infoText": "#8b9eb5", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#404552", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#2f343f" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#D3DAE3", - "background": "#2f343f", - "inactiveTitleForeground": "#8b9eb5" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#2f343f", - "disabledForeground": "#D3DAE3", - "disabledShadow": "#2f343f", - "disabledText": "#D3DAE3", - "foreground": "#D3DAE3", - "infoForeground": "#8b9eb5", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#D3DAE3" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#42A5F5", - "hoverForeground": "#42A5F5", - "pressedForeground": "#42A5F5", - "secondaryForeground": "#8b9eb5", - "visitedForeground": "#42A5F5" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#42A5F5", + "link.foreground": "accent", "List": { - "background": "#393f4c45", - "foreground": "#D3DAE3", - "hoverBackground": "#09477170", - "hoverInactiveBackground": "#41416A", - "selectionBackground": "#8888FF55", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#09477170" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#2f343f", - "branchColor": "#D3DAE3", - "contrast": "#262b33", - "foreground": "#D3DAE3", - "mergeCommits": "#383C4A", - "primaryColor": "#8b9eb5", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#2f343f", - "tab.borderColor": "#42A5F5", - "tagColor": "#8b9eb5" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#393f4c45", - "usedColor": "#393f4c", - "usedBackground": "#393f4c" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#8b9eb5", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#2f343f", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#393f4c45", - "disabledBackground": "#393f4c45", - "disabledForeground": "#D3DAE3", - "foreground": "#D3DAE3", - "selectionBackground": "#8888FF55", - "selectionForeground": "#FFFFFF", - "separatorColor": "#404552" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#262b33", - "borderColor": "#2f343f", - "disabledBackground": "#2f343f", - "disabledForeground": "#D3DAE3", - "foreground": "#D3DAE3", - "highlight": "#2f343f", - "selectionBackground": "#8888FF55", - "selectionForeground": "#FFFFFF", - "shadow": "#262b33" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#8b9eb5", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#2f343f", - "disabledBackground": "#2f343f", - "disabledForeground": "#D3DAE3", - "foreground": "#D3DAE3", - "selectionBackground": "#8888FF55", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#D3DAE3", - "borderColor": "#2f343f" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#2f343f" + "background": "bg" }, "SearchField": { - "background": "#262b33" + "background": "hc" } }, - "NewPSD.warning": "#42A5F5", + "NewPSD.warning": "accent", "Notification": { - "background": "#262a33", - "borderColor": "#262a33", - "errorBackground": "#262a33", - "errorBorderColor": "#262a33", - "foreground": "#D3DAE3", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#383C4A", - "foreground": "#D3DAE3", - "innerBorderColor": "#383C4A" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#262a33", - "errorBorderColor": "#262a33", - "informativeBackground": "#262a33", - "informativeBorderColor": "#262a33", - "warningBackground": "#262a33", - "warningBorderColor": "#262a33" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#404552", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#2f343f", - "foreground": "#D3DAE3", - "messageForeground": "#D3DAE3" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#383C4A", - "focusedColor": "#42A5F5", - "disabledColor": "#D3DAE3" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#2f343f", - "foreground": "#D3DAE3" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#393f4c45", - "borderColor": "#41416A", - "currentOverloadBackground": "#393f4c", - "currentParameterForeground": "#42A5F5", - "disabledForeground": "#D3DAE3", - "foreground": "#D3DAE3", - "infoForeground": "#8b9eb5", - "lineSeparatorColor": "#41416A" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#262b33", - "capsLockIconColor": "#42A5F5", - "caretForeground": "#42A5F5", - "foreground": "#D3DAE3", - "inactiveForeground": "#D3DAE3", - "selectionBackground": "#41416A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#2f343f", - "disabledForeground": "#D3DAE3", - "eapTagBackground": "#393f4c", - "hoverBackground": "#09477170", - "lightSelectionBackground": "#41416A", - "paidTagBackground": "#393f4c", - "selectionBackground": "#8888FF55", - "tagForeground": "#42A5F5", - "tagBackground": "#393f4c", - "trialTagBackground": "#393f4c", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#383C4A", - "installBorderColor": "#383C4A", - "installForeground": "#D3DAE3", - "installFocusedBackground": "#393f4c", - "installFillForeground": "#D3DAE3", - "installFillBackground": "#383C4A", - "updateBackground": "#42A5F5", - "updateBorderColor": "#383C4A", - "updateForeground": "#D3DAE3" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#262b33", - "borderColor": "#404552" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#393f4c45", - "foreground": "#D3DAE3" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#41416A", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#41416A" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#2f343f", - "borderColor": "#2f343f", - "foreground": "#42A5F5" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#262b33", - "inactiveBorderColor": "#2f343f", - "innerBorderColor": "#393f4c45", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#2f343f", - "inactiveBackground": "#262b33" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#D3DAE3", - "separatorColor": "#393f4c45", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#262b33", - "background": "#262b33", - "borderColor": "#262b33" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#2f343f", + "background": "bg", "border": "2,0,2,0", - "foreground": "#D3DAE3", - "translucentBackground": "#2f343f" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#2f343f", - "foreground": "#42A5F5", - "indeterminateEndColor": "#42A5F5", - "indeterminateStartColor": "#42A5F5", - "progressColor": "#42A5F5", - "selectionBackground": "#393f4c", - "trackColor": "#393f4c" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#42A5F5" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#2f343f", - "disabledText": "#D3DAE3", - "foreground": "#D3DAE3" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#8b9eb5", - "acceleratorSelectionForeground": "#8b9eb5", - "background": "#2f343f", - "disabledBackground": "#2f343f", - "disabledForeground": "#D3DAE3", - "foreground": "#D3DAE3", - "selectionBackground": "#8888FF55", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#404552", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#2f343f", - "hoverThumbBorderColor": "#42A5F5", - "hoverThumbColor": "#42A5F5", - "hoverTrackColor": "#2f343f30", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#42A5F5", - "hoverThumbColor": "#42A5F5", - "hoverTrackColor": "#2f343f30", - "thumbBorderColor": "#42A5F570", - "thumbColor": "#42A5F570", - "trackColor": "#2f343f30", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#42A5F5", - "hoverThumbColor": "#42A5F5", - "hoverTrackColor": "#2f343f30", - "thumbBorderColor": "#42A5F570", - "thumbColor": "#42A5F570", - "trackColor": "#2f343f30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#393f4c", - "thumbBorderColor": "#42A5F570", - "thumbColor": "#42A5F570", - "trackColor": "#2f343f30", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#42A5F5", - "hoverThumbColor": "#42A5F5", - "hoverTrackColor": "#2f343f30", - "thumbBorderColor": "#42A5F570", - "thumbColor": "#42A5F570", - "trackColor": "#2f343f30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#262b33", - "foreground": "#8b9eb5" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#2f343f" + "background": "bg" }, "List": { - "separatorForeground": "#8b9eb5", - "separatorColor": "#404552" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#2f343f", - "borderColor": "#262b33", - "infoForeground": "#8b9eb5" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#393f4c" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#42A5F5", - "startBackground": "#42A5F5", - "endColor": "#42A5F5", - "startColor": "#42A5F5" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#262a33", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#41416A" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#8b9eb5", - "Repeated.File.Foreground": "#D3DAE3" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#393f4c45", - "foreground": "#393f4c45", - "separatorColor": "#393f4c45" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#262b33" + "background": "hc" }, "Slider": { - "background": "#2f343f", - "buttonBorderColor": "#42A5F5", - "buttonColor": "#42A5F5", - "foreground": "#D3DAE3", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#393f4c45", - "trackColor": "#41416A", - "trackWidth": 7, - "thumb": "#42A5F5" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#393f4c", - "borderColor": "#404552", - "foreground": "#D3DAE3", - "errorForeground": "#D3DAE3" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#2f343f", + "background": "bg", "border": "3,3,3,3", - "foreground": "#D3DAE3", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#2f343f", - "highlight": "#262b33" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#393f4c45", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#2f343f", - "hoverBackground": "#393f4c", - "LightEditBackground": "#41416A" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#2f343f", - "contentAreaColor": "#393f4c", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#404552", - "disabledForeground": "#D3DAE3", - "disabledUnderlineColor": "#D3DAE3", - "focus": "#41416A", - "focusColor": "#41416A", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#D3DAE3", - "highlight": "#404552", - "hoverColor": "#393f4c", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#42A5F5" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#262b33", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#262b33", - "background": "#2f343f", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#D3DAE3", - "dropLineColor": "#42A5F5", - "dropLineShortColor": "#42A5F5", - "focusCellBackground": "#41416A", - "focusCellForeground": "#FFFFFF", - "foreground": "#D3DAE3", - "gridColor": "#2f343f", - "highlightOuter": "#41416A", - "hoverBackground": "#09477170", - "hoverInactiveBackground": "#41416A", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#8b9eb5", - "lightSelectionInactiveBackground": "#393f4c45", - "selectionBackground": "#41416A", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#41416A", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#D3DAE3", - "stripeColor": "#262b33" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#2f343f", - "borderColor": "#2f343f", - "bottomSeparatorColor": "#393f4c45", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#D3DAE3", - "foreground": "#D3DAE3", - "focusCellBackground": "#41416A", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#393f4c45" + "separatorColor": "second" }, - "text": "#8b9eb5", - "textInactiveText": "#8b9eb5", - "textText": "#8b9eb5", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#262b33", - "caretForeground": "#42A5F5", - "foreground": "#D3DAE3", - "inactiveForeground": "#D3DAE3", - "selectionBackground": "#41416A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#262b33", - "caretForeground": "#42A5F5", - "foreground": "#D3DAE3", - "inactiveForeground": "#D3DAE3", - "selectionBackground": "#41416A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#262b33", - "caretForeground": "#42A5F5", - "foreground": "#D3DAE3", - "inactiveForeground": "#D3DAE3", - "selectionBackground": "#41416A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#262b33", - "Button.hoverBackground": "#393f4c", - "inactiveBackground": "#2f343f", - "infoForeground": "#8b9eb5", - "inactiveInfoForeground": "#8b9eb5" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#D3DAE3", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#383C4A", - "buttonColor": "#D3DAE3", - "disabledText": "#D3DAE3", - "foreground": "#D3DAE3", - "offForeground": "#2f343f", - "offBackground": "#2f343f", - "onBackground": "#42A5F5", - "onForeground": "#42A5F5" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#262b33", - "borderHandleColor": "#8b9eb5", - "floatingForeground": "#8b9eb5", - "foreground": "#D3DAE3" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#2f343f", - "Actions.infoForeground": "#8b9eb5", - "background": "#262a33", - "borderColor": "#404552", - "foreground": "#D3DAE3", - "infoForeground": "#8b9eb5", - "separatorColor": "#404552", - "shortcutForeground": "#8b9eb5" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#41416A", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#262b33" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#2f343f", - "borderColor": "#393f4c45", - "inactiveBackground": "#2f343f" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#2f343f" + "background": "bg" }, "HeaderTab": { - "borderColor": "#393f4c", - "hoverBackground": "#393f4c", - "hoverInactiveBackground": "#393f4c", - "inactiveUnderlineColor": "#42A5F5", - "selectedBackground": "#262b33", - "selectedInactiveBackground": "#262b33", - "underlineColor": "#42A5F5", - "underlinedTabBackground": "#41416A", - "underlinedTabInactiveBackground": "#393f4c45", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#D3DAE3" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#262b33", - "foreground": "#8b9eb5", - "hash": "#404552", - "hoverBackground": "#09477170", - "hoverInactiveBackground": "#41416A", - "modifiedItemForeground": "#42A5F5", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#09477170", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#09477170", - "textBackground": "#262b33" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#404552", - "Canvas.background": "#262b33", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#2f343f", - "foreground": "#D3DAE3" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#404552", - "background": "#2f343f", - "foreground": "#D3DAE3", - "hoverBorderColor": "#393f4c" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#404552", - "hoverBorderColor": "#393f4c" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#262b33", - "highStroke.foreground": "#D3DAE3", - "Label.foreground": "#8b9eb5", - "List.selectionBackground": "#09477170", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#404552", - "Component.foreground": "#D3DAE3", - "ConstraintSetText.foreground": "#8b9eb5", - "ConstraintSet.background": "#393f4c45", - "CSPanel.SelectedFocusBackground": "#8888FF55", - "CSPanel.SelectedBackground": "#09477170", - "cs_FocusText.infoForeground": "#8b9eb5", - "CursorTextColor.foreground": "#D3DAE3", - "HoverColor.disabledBackground": "#D3DAE3", - "motionGraph.background": "#2f343f", - "Notification.background": "#262a33", - "ourAvg.background": "#393f4c45", - "ourCS.background": "#393f4c45", - "ourCS_Border.borderColor": "#404552", - "ourCS_TextColor.foreground": "#8b9eb5", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#41416A", - "ourCS_SelectedBorder.pressedBorderColor": "#393f4c", - "ourML_BarColor.separatorColor": "#404552", - "PrimaryPanel.background": "#262b33", - "SecondaryPanel.background": "#2f343f", - "SecondaryPanel.header.foreground": "#8b9eb5", - "SecondaryPanel.header.background": "#262b33", - "timeLine.disabledBorderColor": "#404552" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#404552", - "background": "#2f343f" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#D3DAE3", + "percent.foreground": "fg", "Placeholder": { - "background": "#2f343f", - "borderColor": "#404552", - "foreground": "#D3DAE3", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#2f343f", - "stroke.acceleratorForeground": "#8b9eb5" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#262a33", - "errorBorderColor": "#262a33", - "warningBackground": "#262a33", - "warningBorderColor": "#262a33" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#2f343f" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#393f4c" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#42A5F5", - "otherIconColor": "#8b9eb5", - "remoteBranchIconColor": "#D3DAE3", - "tagIconColor": "#8b9eb5" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#42A5F5", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#D3DAE3", - "localTagIconColor": "#8b9eb5", - "mqTagIconColor": "#8b9eb5", - "tagIconColor": "#8b9eb5", - "tipIconColor": "#8b9eb5" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#8b9eb5", - "Commit.currentBranchBackground": "#393f4c45", - "Commit.hoveredBackground": "#09477170" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#393f4c" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#262b33", - "foreground": "#D3DAE3" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#2f343f", - "background": "#2f343f", - "borderColor": "#2f343f", - "captionBackground": "#262b33", - "captionForeground": "#D3DAE3", - "Details.background": "#2f343f", - "footerBackground": "#262b33", - "footerForeground": "#D3DAE3", - "headerBackground": "#2f343f", - "headerForeground": "#D3DAE3", - "List.background": "#262b33", - "separatorColor": "#404552", - "SidePanel.background": "#393f4c45", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#262b33", - "actions.selectionBackground": "#393f4c", - "background": "#393f4c45", - "selectionBackground": "#8888FF55", - "selectionInactiveBackground": "#393f4c45" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#262b33", - "windowBorder": "#404552", - "windowText": "#8b9eb5", - "Window.border": "#404552" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#262b33", - "#6B6B6B": "#8b9eb5", - "#A7A7A7": "#2f343f", - "#3D6185": "#42A5F5", - "#466D94": "#42A5F5", - "#3C3F41": "#2f343f", - "#545556": "#D3DAE3", - "#606060": "#D3DAE3", - "#9AA7B0": "#D3DAE3", - "#675133": "#42A5F5", - "Actions.Blue": "#7587A6", - "Actions.Green": "#8F9D6A", - "Actions.Grey": "#8b9eb5", - "Actions.GreyInline": "#747c84", - "Actions.GreyInline.Dark": "#D3DAE3", - "Actions.Red": "#CF6A4C", - "Actions.Yellow": "#F9EE98", - "Checkbox.Background.Default": "#262b33", - "Checkbox.Background.Default.Dark": "#262b33", - "Checkbox.Background.Disabled": "#37373d", - "Checkbox.Background.Disabled.Dark": "#37373d", - "Checkbox.Border.Default": "#404552", - "Checkbox.Border.Default.Dark": "#404552", - "Checkbox.Border.Disabled": "#D3DAE3", - "Checkbox.Border.Disabled.Dark": "#D3DAE3", - "Checkbox.Focus.Thin.Default": "#42A5F5", - "Checkbox.Focus.Thin.Default.Dark": "#42A5F5", - "Checkbox.Focus.Wide": "#42A5F5", - "Checkbox.Focus.Wide.Dark": "#42A5F5", - "Checkbox.Foreground.Disabled": "#D3DAE3", - "Checkbox.Foreground.Disabled.Dark": "#D3DAE3", - "Checkbox.Background.Selected": "#42A5F5", - "Checkbox.Background.Selected.Dark": "#2f343f", - "Checkbox.Border.Selected": "#42A5F5", - "Checkbox.Border.Selected.Dark": "#42A5F5", - "Checkbox.Foreground.Selected": "#42A5F5", - "Checkbox.Foreground.Selected.Dark": "#42A5F5", - "Checkbox.Focus.Thin.Selected": "#D3DAE3", - "Checkbox.Focus.Thin.Selected.Dark": "#D3DAE3", - "Objects.Grey": "#747c84", - "Objects.Blue": "#7587A6", - "Objects.RedStatus": "#CF6A4C", - "Objects.Red": "#CF6A4C", - "Objects.Pink": "#9B859D", - "Objects.Yellow": "#F9EE98", - "Objects.Green": "#8F9D6A", - "Objects.Purple": "#9B859D", - "Objects.BlackText": "#D3DAE3", - "Objects.YellowDark": "#CDA869", - "Objects.GreenAndroid": "#8F9D6A" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Arc Dark.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Arc Dark.theme.json index df9f9ab7..3be1dfdc 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Arc Dark.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Arc Dark.theme.json @@ -2,1004 +2,1089 @@ "name": "Arc Dark", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#2f343f", + "bg30": "#2f343f30", + "fg": "#D3DAE3", + "text": "#8b9eb5", + "selBg": "#414181", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#404552", + "excl": "#37373d", + "second": "#393f4c", + "dis": "#a2a2a2", + "accent": "#42A5F5", + "accent2": "#42A5F52", + "accent50": "#42A5F550", + "accent70": "#42A5F570", + "cs": "#262b33", + "button": "#383C4A", + "table": "#41416A", + "tree": "#09477170", + "hl": "#393f4c", + "notif": "#262a33", + "hc": "#2f343f", + "white": "#CF6A4C", + "blue": "#7587A6", + "red": "#CF6A4C", + "yellow": "#F9EE98", + "green": "#8F9D6A", + "gray": "#747c84", + "purple": "#9B859D", + "orange": "#CDA869" + }, "editorScheme": "colors/Arc Dark.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#8b9eb5", - "background": "#2f343f", - "borderColor": "#404552", - "disabledBackground": "#37373d", - "disabledForeground": "#D3DAE3", - "disabledText": "#D3DAE3", - "focusColor": "#393f4c", - "focusedBorderColor": "#42A5F5", - "foreground": "#D3DAE3", - "inactiveBackground": "#37373d", - "inactiveForeground": "#8b9eb5", - "infoForeground": "#8b9eb5", - "selectionBackground": "#8888FF55", - "selectionBackgroundInactive": "#393f4c45", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#393f4c45", - "separatorColor": "#404552" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#2f343f", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#42A5F550", - "hoverBorderColor": "#42A5F550", - "hoverSeparatorColor": "#383C4A", - "focusedBorderColor": "#42A5F550", - "pressedBackground": "#42A5F550", - "pressedBorderColor": "#42A5F550" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#8888FF55" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#2f343f", - "Borders.color": "#404552", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#2f343f", + "background": "bg", "default": { - "endBackground": "#41416A", - "endBorderColor": "#41416A", - "foreground": "#FFFFFF", - "focusColor": "#42A5F5", - "focusedBorderColor": "#42A5F5", - "shadowColor": "#41416A", - "startBackground": "#41416A", - "startBorderColor": "#41416A" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#383C4A", - "disabledText": "#D3DAE3", - "endBackground": "#383C4A", - "endBorderColor": "#383C4A", - "focus": "#393f4c", - "focusedBorderColor": "#42A5F5", - "foreground": "#8b9eb5", - "highlight": "#FFFFFF", - "mt.background": "#383C4A", - "mt.foreground": "#8b9eb5", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#41416A", - "mt.selection.color2": "#41416A", - "startBackground": "#383C4A", - "startBorderColor": "#383C4A", - "shadowColor": "#383C4A", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#404552", - "Tooltip.background": "#262a33" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#262b33", - "selectionBackground": "#8888FF55" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#2f343f", - "disabledText": "#D3DAE3", - "foreground": "#D3DAE3", - "select": "#42A5F5" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#8b9eb5", - "acceleratorSelectionForeground": "#8b9eb5", - "background": "#2f343f", - "disabledBackground": "#2f343f", - "disabledForeground": "#D3DAE3", - "foreground": "#D3DAE3", - "selectionBackground": "#8888FF55", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#D3DAE3", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#42A5F5", - "dropdownBorder": "#393f4c45", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#2f343f", - "foreground": "#D3DAE3", - "swatchesDefaultRecentColor": "#D3DAE3" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#383C4A", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#383C4A", - "disabledIconColor": "#D3DAE3", - "iconColor": "#D3DAE3", - "nonEditableBackground": "#2f343f" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#2f343f", - "buttonBackground": "#383C4A", - "darcula.hoveredArrowButtonForeground": "#42A5F5", - "disabledForeground": "#D3DAE3", - "foreground": "#D3DAE3", - "modifiedItemForeground": "#42A5F5", - "nonEditableBackground": "#393f4c45", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#41416A", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#404552", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#393f4c45", - "foreground": "#D3DAE3", - "infoForeground": "#8b9eb5", - "matchForeground": "#42A5F5", - "matchSelectionForeground": "#42A5F5", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#8b9eb5", - "selectionInactiveBackground": "#393f4c", - "selectionBackground": "#8888FF55", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#393f4c", - "disabledBorderColor": "#383C4A", - "focusColor": "#42A5F5", - "focusedBorderColor": "#42A5F5", - "hoverIconColor": "#42A5F5", - "infoForeground": "#8b9eb5", - "iconColor": "#D3DAE3" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#2f343f", - "controlText": "#8b9eb5", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#42A5F5", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#8b9eb5", - "changedValueForeground": "#42A5F5", - "errorMessageForeground": "#CF6A4C", - "evaluatingExpressionForeground": "#8b9eb5", - "exceptionForeground": "#F9EE98", - "modifyingValueForeground": "#42A5F5", - "valueForeground": "#42A5F5" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#393f4c", - "underlinedTabBackground": "#393f4c" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#393f4c" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#2f343f", - "borderColor": "#2f343f", - "hoverBackground": "#41416A", - "hoverColor": "#2f343f", - "hoverMaskColor": "#393f4c", - "inactiveColoredTabBackground": "#2f343f", - "inactiveColoredFileBackground": "#383C4A", - "inactiveUnderlineColor": "#42A5F5", - "inactiveMaskColor": "#2f343f", - "underlineColor": "#42A5F5", - "underlinedTabBackground": "#41416A", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#2f343f", - "DialogWrapper.southPanelBackground": "#2f343f", - "DialogWrapper.southPanelDivider": "#2f343f", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#2f343f", - "areaBorderColor": "#2f343f", - "areaForeground": "#D3DAE3" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#2f343f", - "foreground": "#D3DAE3", - "shortcutForeground": "#8b9eb5" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#2f343f", - "caretForeground": "#42A5F5", - "foreground": "#D3DAE3", - "inactiveBackground": "#2f343f", - "inactiveForeground": "#D3DAE3", - "selectionBackground": "#8888FF55", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#393f4c45", - "hoverBackground": "#393f4c", - "hoverColor": "#393f4c", - "hoverMaskColor": "#393f4c", - "inactiveMaskColor": "#2f343f", - "inactiveColoredFileBackground": "#2f343f", - "inactiveUnderlineColor": "#D3DAE3", - "selectedForeground": "#D3DAE3", - "selectedBackground": "#41416A", - "underlineColor": "#42A5F5", - "underlinedTabBackground": "#41416A", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#2f343f", - "borderColor": "#393f4c45", - "hoverBackground": "#393f4c", - "hoverColor": "#393f4c", - "inactiveUnderlineColor": "#42A5F5", - "underlineColor": "#42A5F5", - "underlinedTabBackground": "#41416A", - "underlinedTabForeground": "#D3DAE3" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#37373d", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#404552", + "Focus.color": "border", "FormattedTextField": { - "background": "#2f343f", - "caretForeground": "#42A5F5", - "foreground": "#D3DAE3", - "inactiveBackground": "#383C4A", - "inactiveForeground": "#D3DAE3", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#41416A" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#262a33", "Group": { - "disabledSeparatorColor": "#404552", - "separatorColor": "#404552" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#8b9eb5", - "lineSeparatorColor": "#2f343f" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#2f343f", - "inactive": "#262b33" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#2f343f", - "borderColor": "#404552", - "foreground": "#D3DAE3", - "infoForeground": "#8b9eb5", - "shortcutForeground": "#8b9eb5" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#42A5F5", - "inactiveCaption": "#393f4c45", - "inactiveCaptionBorder": "#2f343f", - "inactiveCaptionText": "#8b9eb5", - "info": "#8b9eb5", - "infoText": "#8b9eb5", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#404552", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#2f343f" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#D3DAE3", - "background": "#2f343f", - "inactiveTitleForeground": "#8b9eb5" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#2f343f", - "disabledForeground": "#D3DAE3", - "disabledShadow": "#2f343f", - "disabledText": "#D3DAE3", - "foreground": "#D3DAE3", - "infoForeground": "#8b9eb5", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#D3DAE3" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#42A5F5", - "hoverForeground": "#42A5F5", - "pressedForeground": "#42A5F5", - "secondaryForeground": "#8b9eb5", - "visitedForeground": "#42A5F5" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#42A5F5", + "link.foreground": "accent", "List": { - "background": "#393f4c45", - "foreground": "#D3DAE3", - "hoverBackground": "#09477170", - "hoverInactiveBackground": "#41416A", - "selectionBackground": "#8888FF55", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#09477170" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#2f343f", - "branchColor": "#D3DAE3", - "contrast": "#262b33", - "foreground": "#D3DAE3", - "mergeCommits": "#383C4A", - "primaryColor": "#8b9eb5", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#2f343f", - "tab.borderColor": "#42A5F5", - "tagColor": "#8b9eb5" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#393f4c45", - "usedColor": "#393f4c", - "usedBackground": "#393f4c" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#8b9eb5", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#2f343f", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#393f4c45", - "disabledBackground": "#393f4c45", - "disabledForeground": "#D3DAE3", - "foreground": "#D3DAE3", - "selectionBackground": "#8888FF55", - "selectionForeground": "#FFFFFF", - "separatorColor": "#404552" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#2f343f", - "borderColor": "#2f343f", - "disabledBackground": "#2f343f", - "disabledForeground": "#D3DAE3", - "foreground": "#D3DAE3", - "highlight": "#2f343f", - "selectionBackground": "#8888FF55", - "selectionForeground": "#FFFFFF", - "shadow": "#2f343f" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#8b9eb5", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#2f343f", - "disabledBackground": "#2f343f", - "disabledForeground": "#D3DAE3", - "foreground": "#D3DAE3", - "selectionBackground": "#8888FF55", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#D3DAE3", - "borderColor": "#2f343f" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#2f343f" + "background": "bg" }, "SearchField": { - "background": "#2f343f" + "background": "hc" } }, - "NewPSD.warning": "#42A5F5", + "NewPSD.warning": "accent", "Notification": { - "background": "#262a33", - "borderColor": "#262a33", - "errorBackground": "#262a33", - "errorBorderColor": "#262a33", - "foreground": "#D3DAE3", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#383C4A", - "foreground": "#D3DAE3", - "innerBorderColor": "#383C4A" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#262a33", - "errorBorderColor": "#262a33", - "informativeBackground": "#262a33", - "informativeBorderColor": "#262a33", - "warningBackground": "#262a33", - "warningBorderColor": "#262a33" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#404552", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#2f343f", - "foreground": "#D3DAE3", - "messageForeground": "#D3DAE3" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#383C4A", - "focusedColor": "#42A5F5", - "disabledColor": "#D3DAE3" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#2f343f", - "foreground": "#D3DAE3" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#393f4c45", - "borderColor": "#41416A", - "currentOverloadBackground": "#393f4c", - "currentParameterForeground": "#42A5F5", - "disabledForeground": "#D3DAE3", - "foreground": "#D3DAE3", - "infoForeground": "#8b9eb5", - "lineSeparatorColor": "#41416A" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#2f343f", - "capsLockIconColor": "#42A5F5", - "caretForeground": "#42A5F5", - "foreground": "#D3DAE3", - "inactiveForeground": "#D3DAE3", - "selectionBackground": "#41416A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#2f343f", - "disabledForeground": "#D3DAE3", - "eapTagBackground": "#393f4c", - "hoverBackground": "#09477170", - "lightSelectionBackground": "#41416A", - "paidTagBackground": "#393f4c", - "selectionBackground": "#8888FF55", - "tagForeground": "#42A5F5", - "tagBackground": "#393f4c", - "trialTagBackground": "#393f4c", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#383C4A", - "installBorderColor": "#383C4A", - "installForeground": "#D3DAE3", - "installFocusedBackground": "#393f4c", - "installFillForeground": "#D3DAE3", - "installFillBackground": "#383C4A", - "updateBackground": "#42A5F5", - "updateBorderColor": "#383C4A", - "updateForeground": "#D3DAE3" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#2f343f", - "borderColor": "#404552" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#393f4c45", - "foreground": "#D3DAE3" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#41416A", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#41416A" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#2f343f", - "borderColor": "#2f343f", - "foreground": "#42A5F5" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#262b33", - "inactiveBorderColor": "#2f343f", - "innerBorderColor": "#393f4c45", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#2f343f", - "inactiveBackground": "#262b33" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#D3DAE3", - "separatorColor": "#393f4c45", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#262b33", - "background": "#262b33", - "borderColor": "#262b33" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#2f343f", + "background": "bg", "border": "2,0,2,0", - "foreground": "#D3DAE3", - "translucentBackground": "#2f343f" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#2f343f", - "foreground": "#42A5F5", - "indeterminateEndColor": "#42A5F5", - "indeterminateStartColor": "#42A5F5", - "progressColor": "#42A5F5", - "selectionBackground": "#393f4c", - "trackColor": "#393f4c" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#42A5F5" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#2f343f", - "disabledText": "#D3DAE3", - "foreground": "#D3DAE3" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#8b9eb5", - "acceleratorSelectionForeground": "#8b9eb5", - "background": "#2f343f", - "disabledBackground": "#2f343f", - "disabledForeground": "#D3DAE3", - "foreground": "#D3DAE3", - "selectionBackground": "#8888FF55", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#404552", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#2f343f", - "hoverThumbBorderColor": "#42A5F5", - "hoverThumbColor": "#42A5F5", - "hoverTrackColor": "#2f343f30", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#42A5F5", - "hoverThumbColor": "#42A5F5", - "hoverTrackColor": "#2f343f30", - "thumbBorderColor": "#42A5F570", - "thumbColor": "#42A5F570", - "trackColor": "#2f343f30", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#42A5F5", - "hoverThumbColor": "#42A5F5", - "hoverTrackColor": "#2f343f30", - "thumbBorderColor": "#42A5F570", - "thumbColor": "#42A5F570", - "trackColor": "#2f343f30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#393f4c", - "thumbBorderColor": "#42A5F570", - "thumbColor": "#42A5F570", - "trackColor": "#2f343f30", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#42A5F5", - "hoverThumbColor": "#42A5F5", - "hoverTrackColor": "#2f343f30", - "thumbBorderColor": "#42A5F570", - "thumbColor": "#42A5F570", - "trackColor": "#2f343f30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#262b33", - "foreground": "#8b9eb5" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#2f343f" + "background": "bg" }, "List": { - "separatorForeground": "#8b9eb5", - "separatorColor": "#404552" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#2f343f", - "borderColor": "#262b33", - "infoForeground": "#8b9eb5" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#393f4c" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#42A5F5", - "startBackground": "#42A5F5", - "endColor": "#42A5F5", - "startColor": "#42A5F5" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#262a33", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#41416A" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#8b9eb5", - "Repeated.File.Foreground": "#D3DAE3" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#393f4c45", - "foreground": "#393f4c45", - "separatorColor": "#393f4c45" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#2f343f" + "background": "hc" }, "Slider": { - "background": "#2f343f", - "buttonBorderColor": "#42A5F5", - "buttonColor": "#42A5F5", - "foreground": "#D3DAE3", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#393f4c45", - "trackColor": "#41416A", - "trackWidth": 7, - "thumb": "#42A5F5" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#393f4c", - "borderColor": "#404552", - "foreground": "#D3DAE3", - "errorForeground": "#D3DAE3" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#2f343f", + "background": "bg", "border": "3,3,3,3", - "foreground": "#D3DAE3", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#2f343f", - "highlight": "#2f343f" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#393f4c45", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#2f343f", - "hoverBackground": "#393f4c", - "LightEditBackground": "#41416A" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#2f343f", - "contentAreaColor": "#393f4c", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#404552", - "disabledForeground": "#D3DAE3", - "disabledUnderlineColor": "#D3DAE3", - "focus": "#41416A", - "focusColor": "#41416A", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#D3DAE3", - "highlight": "#404552", - "hoverColor": "#393f4c", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#42A5F5" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#2f343f", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#262b33", - "background": "#2f343f", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#D3DAE3", - "dropLineColor": "#42A5F5", - "dropLineShortColor": "#42A5F5", - "focusCellBackground": "#41416A", - "focusCellForeground": "#FFFFFF", - "foreground": "#D3DAE3", - "gridColor": "#2f343f", - "highlightOuter": "#41416A", - "hoverBackground": "#09477170", - "hoverInactiveBackground": "#41416A", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#8b9eb5", - "lightSelectionInactiveBackground": "#393f4c45", - "selectionBackground": "#41416A", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#41416A", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#D3DAE3", - "stripeColor": "#262b33" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#2f343f", - "borderColor": "#2f343f", - "bottomSeparatorColor": "#393f4c45", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#D3DAE3", - "foreground": "#D3DAE3", - "focusCellBackground": "#41416A", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#393f4c45" + "separatorColor": "second" }, - "text": "#8b9eb5", - "textInactiveText": "#8b9eb5", - "textText": "#8b9eb5", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#2f343f", - "caretForeground": "#42A5F5", - "foreground": "#D3DAE3", - "inactiveForeground": "#D3DAE3", - "selectionBackground": "#41416A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#2f343f", - "caretForeground": "#42A5F5", - "foreground": "#D3DAE3", - "inactiveForeground": "#D3DAE3", - "selectionBackground": "#41416A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#2f343f", - "caretForeground": "#42A5F5", - "foreground": "#D3DAE3", - "inactiveForeground": "#D3DAE3", - "selectionBackground": "#41416A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#262b33", - "Button.hoverBackground": "#393f4c", - "inactiveBackground": "#2f343f", - "infoForeground": "#8b9eb5", - "inactiveInfoForeground": "#8b9eb5" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#D3DAE3", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#383C4A", - "buttonColor": "#D3DAE3", - "disabledText": "#D3DAE3", - "foreground": "#D3DAE3", - "offForeground": "#2f343f", - "offBackground": "#2f343f", - "onBackground": "#42A5F5", - "onForeground": "#42A5F5" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#2f343f", - "borderHandleColor": "#8b9eb5", - "floatingForeground": "#8b9eb5", - "foreground": "#D3DAE3" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#2f343f", - "Actions.infoForeground": "#8b9eb5", - "background": "#262a33", - "borderColor": "#404552", - "foreground": "#D3DAE3", - "infoForeground": "#8b9eb5", - "separatorColor": "#404552", - "shortcutForeground": "#8b9eb5" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#41416A", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#262b33" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#2f343f", - "borderColor": "#393f4c45", - "inactiveBackground": "#2f343f" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#2f343f" + "background": "bg" }, "HeaderTab": { - "borderColor": "#393f4c", - "hoverBackground": "#393f4c", - "hoverInactiveBackground": "#393f4c", - "inactiveUnderlineColor": "#42A5F5", - "selectedBackground": "#262b33", - "selectedInactiveBackground": "#262b33", - "underlineColor": "#42A5F5", - "underlinedTabBackground": "#41416A", - "underlinedTabInactiveBackground": "#393f4c45", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#D3DAE3" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#2f343f", - "foreground": "#8b9eb5", - "hash": "#404552", - "hoverBackground": "#09477170", - "hoverInactiveBackground": "#41416A", - "modifiedItemForeground": "#42A5F5", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#09477170", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#09477170", - "textBackground": "#2f343f" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#404552", - "Canvas.background": "#262b33", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#2f343f", - "foreground": "#D3DAE3" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#404552", - "background": "#2f343f", - "foreground": "#D3DAE3", - "hoverBorderColor": "#393f4c" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#404552", - "hoverBorderColor": "#393f4c" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#262b33", - "highStroke.foreground": "#D3DAE3", - "Label.foreground": "#8b9eb5", - "List.selectionBackground": "#09477170", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#404552", - "Component.foreground": "#D3DAE3", - "ConstraintSetText.foreground": "#8b9eb5", - "ConstraintSet.background": "#393f4c45", - "CSPanel.SelectedFocusBackground": "#8888FF55", - "CSPanel.SelectedBackground": "#09477170", - "cs_FocusText.infoForeground": "#8b9eb5", - "CursorTextColor.foreground": "#D3DAE3", - "HoverColor.disabledBackground": "#D3DAE3", - "motionGraph.background": "#2f343f", - "Notification.background": "#262a33", - "ourAvg.background": "#393f4c45", - "ourCS.background": "#393f4c45", - "ourCS_Border.borderColor": "#404552", - "ourCS_TextColor.foreground": "#8b9eb5", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#41416A", - "ourCS_SelectedBorder.pressedBorderColor": "#393f4c", - "ourML_BarColor.separatorColor": "#404552", - "PrimaryPanel.background": "#262b33", - "SecondaryPanel.background": "#2f343f", - "SecondaryPanel.header.foreground": "#8b9eb5", - "SecondaryPanel.header.background": "#262b33", - "timeLine.disabledBorderColor": "#404552" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#404552", - "background": "#2f343f" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#D3DAE3", + "percent.foreground": "fg", "Placeholder": { - "background": "#2f343f", - "borderColor": "#404552", - "foreground": "#D3DAE3", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#2f343f", - "stroke.acceleratorForeground": "#8b9eb5" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#262a33", - "errorBorderColor": "#262a33", - "warningBackground": "#262a33", - "warningBorderColor": "#262a33" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#2f343f" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#393f4c" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#42A5F5", - "otherIconColor": "#8b9eb5", - "remoteBranchIconColor": "#D3DAE3", - "tagIconColor": "#8b9eb5" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#42A5F5", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#D3DAE3", - "localTagIconColor": "#8b9eb5", - "mqTagIconColor": "#8b9eb5", - "tagIconColor": "#8b9eb5", - "tipIconColor": "#8b9eb5" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#8b9eb5", - "Commit.currentBranchBackground": "#393f4c45", - "Commit.hoveredBackground": "#09477170" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#393f4c" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#2f343f", - "foreground": "#D3DAE3" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#2f343f", - "background": "#2f343f", - "borderColor": "#2f343f", - "captionBackground": "#262b33", - "captionForeground": "#D3DAE3", - "Details.background": "#2f343f", - "footerBackground": "#262b33", - "footerForeground": "#D3DAE3", - "headerBackground": "#2f343f", - "headerForeground": "#D3DAE3", - "List.background": "#262b33", - "separatorColor": "#404552", - "SidePanel.background": "#393f4c45", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#262b33", - "actions.selectionBackground": "#393f4c", - "background": "#393f4c45", - "selectionBackground": "#8888FF55", - "selectionInactiveBackground": "#393f4c45" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#2f343f", - "windowBorder": "#404552", - "windowText": "#8b9eb5", - "Window.border": "#404552" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#262b33", - "#6B6B6B": "#8b9eb5", - "#A7A7A7": "#2f343f", - "#3D6185": "#42A5F5", - "#466D94": "#42A5F5", - "#3C3F41": "#2f343f", - "#545556": "#D3DAE3", - "#606060": "#D3DAE3", - "#9AA7B0": "#D3DAE3", - "#675133": "#42A5F5", - "Actions.Blue": "#7587A6", - "Actions.Green": "#8F9D6A", - "Actions.Grey": "#8b9eb5", - "Actions.GreyInline": "#747c84", - "Actions.GreyInline.Dark": "#D3DAE3", - "Actions.Red": "#CF6A4C", - "Actions.Yellow": "#F9EE98", - "Checkbox.Background.Default": "#262b33", - "Checkbox.Background.Default.Dark": "#262b33", - "Checkbox.Background.Disabled": "#37373d", - "Checkbox.Background.Disabled.Dark": "#37373d", - "Checkbox.Border.Default": "#404552", - "Checkbox.Border.Default.Dark": "#404552", - "Checkbox.Border.Disabled": "#D3DAE3", - "Checkbox.Border.Disabled.Dark": "#D3DAE3", - "Checkbox.Focus.Thin.Default": "#42A5F5", - "Checkbox.Focus.Thin.Default.Dark": "#42A5F5", - "Checkbox.Focus.Wide": "#42A5F5", - "Checkbox.Focus.Wide.Dark": "#42A5F5", - "Checkbox.Foreground.Disabled": "#D3DAE3", - "Checkbox.Foreground.Disabled.Dark": "#D3DAE3", - "Checkbox.Background.Selected": "#42A5F5", - "Checkbox.Background.Selected.Dark": "#2f343f", - "Checkbox.Border.Selected": "#42A5F5", - "Checkbox.Border.Selected.Dark": "#42A5F5", - "Checkbox.Foreground.Selected": "#42A5F5", - "Checkbox.Foreground.Selected.Dark": "#42A5F5", - "Checkbox.Focus.Thin.Selected": "#D3DAE3", - "Checkbox.Focus.Thin.Selected.Dark": "#D3DAE3", - "Objects.Grey": "#747c84", - "Objects.Blue": "#7587A6", - "Objects.RedStatus": "#CF6A4C", - "Objects.Red": "#CF6A4C", - "Objects.Pink": "#9B859D", - "Objects.Yellow": "#F9EE98", - "Objects.Green": "#8F9D6A", - "Objects.Purple": "#9B859D", - "Objects.BlackText": "#D3DAE3", - "Objects.YellowDark": "#CDA869", - "Objects.GreenAndroid": "#8F9D6A" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Atom One Dark Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Atom One Dark Contrast.theme.json index 093546fb..b13f88f5 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Atom One Dark Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Atom One Dark Contrast.theme.json @@ -2,1004 +2,1089 @@ "name": "Atom One Dark Contrast", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#282C34", + "bg30": "#282C3430", + "fg": "#979FAD", + "text": "#979FAD", + "selBg": "#4D515D", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#282C34", + "excl": "#3c4150", + "second": "#2F333D", + "dis": "#6B727D", + "accent": "#2979ff", + "accent2": "#2979ff2", + "accent50": "#2979ff50", + "accent70": "#2979ff70", + "cs": "#21252B", + "button": "#3A3F4B", + "table": "#383E49", + "tree": "#3A3F4B80", + "hl": "#383D48", + "notif": "#282C34", + "hc": "#21252B", + "white": "#D19A66", + "blue": "#61AEEF", + "red": "#e06c75", + "yellow": "#E5C17C", + "green": "#98C379", + "gray": "#59626F", + "purple": "#C679DD", + "orange": "#D19A66" + }, "editorScheme": "colors/Atom One Dark.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#979FAD", - "background": "#282C34", - "borderColor": "#282C34", - "disabledBackground": "#3c4150", - "disabledForeground": "#6B727D", - "disabledText": "#6B727D", - "focusColor": "#383D48", - "focusedBorderColor": "#2979ff", - "foreground": "#979FAD", - "inactiveBackground": "#3c4150", - "inactiveForeground": "#979FAD", - "infoForeground": "#979FAD", - "selectionBackground": "#4D515D", - "selectionBackgroundInactive": "#2F333D", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#2F333D", - "separatorColor": "#282C34" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#282C34", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#2979ff50", - "hoverBorderColor": "#2979ff50", - "hoverSeparatorColor": "#3A3F4B", - "focusedBorderColor": "#2979ff50", - "pressedBackground": "#2979ff50", - "pressedBorderColor": "#2979ff50" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#4D515D" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#282C34", - "Borders.color": "#282C34", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#282C34", + "background": "bg", "default": { - "endBackground": "#383E49", - "endBorderColor": "#383E49", - "foreground": "#FFFFFF", - "focusColor": "#2979ff", - "focusedBorderColor": "#2979ff", - "shadowColor": "#383E49", - "startBackground": "#383E49", - "startBorderColor": "#383E49" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#3A3F4B", - "disabledText": "#6B727D", - "endBackground": "#3A3F4B", - "endBorderColor": "#3A3F4B", - "focus": "#383D48", - "focusedBorderColor": "#2979ff", - "foreground": "#979FAD", - "highlight": "#FFFFFF", - "mt.background": "#3A3F4B", - "mt.foreground": "#979FAD", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#383E49", - "mt.selection.color2": "#383E49", - "startBackground": "#3A3F4B", - "startBorderColor": "#3A3F4B", - "shadowColor": "#3A3F4B", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#282C34", - "Tooltip.background": "#282C34" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#21252B", - "selectionBackground": "#4D515D" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#282C34", - "disabledText": "#6B727D", - "foreground": "#979FAD", - "select": "#2979ff" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#979FAD", - "acceleratorSelectionForeground": "#979FAD", - "background": "#282C34", - "disabledBackground": "#282C34", - "disabledForeground": "#6B727D", - "foreground": "#979FAD", - "selectionBackground": "#4D515D", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#979FAD", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#2979ff", - "dropdownBorder": "#2F333D", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#282C34", - "foreground": "#979FAD", - "swatchesDefaultRecentColor": "#979FAD" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#3A3F4B", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#3A3F4B", - "disabledIconColor": "#6B727D", - "iconColor": "#979FAD", - "nonEditableBackground": "#282C34" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#21252B", - "buttonBackground": "#3A3F4B", - "darcula.hoveredArrowButtonForeground": "#2979ff", - "disabledForeground": "#6B727D", - "foreground": "#979FAD", - "modifiedItemForeground": "#2979ff", - "nonEditableBackground": "#2F333D", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#383E49", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#282C34", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#2F333D", - "foreground": "#979FAD", - "infoForeground": "#979FAD", - "matchForeground": "#2979ff", - "matchSelectionForeground": "#2979ff", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#979FAD", - "selectionInactiveBackground": "#383D48", - "selectionBackground": "#4D515D", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#383D48", - "disabledBorderColor": "#3A3F4B", - "focusColor": "#2979ff", - "focusedBorderColor": "#2979ff", - "hoverIconColor": "#2979ff", - "infoForeground": "#979FAD", - "iconColor": "#979FAD" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#282C34", - "controlText": "#979FAD", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#2979ff", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#979FAD", - "changedValueForeground": "#2979ff", - "errorMessageForeground": "#e06c75", - "evaluatingExpressionForeground": "#979FAD", - "exceptionForeground": "#E5C17C", - "modifyingValueForeground": "#2979ff", - "valueForeground": "#2979ff" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#383D48", - "underlinedTabBackground": "#383D48" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#383D48" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#282C34", - "borderColor": "#282C34", - "hoverBackground": "#383E49", - "hoverColor": "#21252B", - "hoverMaskColor": "#383D48", - "inactiveColoredTabBackground": "#282C34", - "inactiveColoredFileBackground": "#3A3F4B", - "inactiveUnderlineColor": "#2979ff", - "inactiveMaskColor": "#21252B", - "underlineColor": "#2979ff", - "underlinedTabBackground": "#383E49", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#282C34", - "DialogWrapper.southPanelBackground": "#282C34", - "DialogWrapper.southPanelDivider": "#282C34", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#282C34", - "areaBorderColor": "#282C34", - "areaForeground": "#979FAD" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#21252B", - "foreground": "#979FAD", - "shortcutForeground": "#979FAD" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#21252B", - "caretForeground": "#2979ff", - "foreground": "#979FAD", - "inactiveBackground": "#282C34", - "inactiveForeground": "#6B727D", - "selectionBackground": "#4D515D", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#2F333D", - "hoverBackground": "#383D48", - "hoverColor": "#383D48", - "hoverMaskColor": "#383D48", - "inactiveMaskColor": "#282C34", - "inactiveColoredFileBackground": "#282C34", - "inactiveUnderlineColor": "#6B727D", - "selectedForeground": "#979FAD", - "selectedBackground": "#383E49", - "underlineColor": "#2979ff", - "underlinedTabBackground": "#383E49", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#282C34", - "borderColor": "#2F333D", - "hoverBackground": "#383D48", - "hoverColor": "#383D48", - "inactiveUnderlineColor": "#2979ff", - "underlineColor": "#2979ff", - "underlinedTabBackground": "#383E49", - "underlinedTabForeground": "#979FAD" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#3c4150", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#282C34", + "Focus.color": "border", "FormattedTextField": { - "background": "#21252B", - "caretForeground": "#2979ff", - "foreground": "#979FAD", - "inactiveBackground": "#3A3F4B", - "inactiveForeground": "#6B727D", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#383E49" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#282C34", "Group": { - "disabledSeparatorColor": "#282C34", - "separatorColor": "#282C34" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#979FAD", - "lineSeparatorColor": "#282C34" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#282C34", - "inactive": "#21252B" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#282C34", - "borderColor": "#282C34", - "foreground": "#979FAD", - "infoForeground": "#979FAD", - "shortcutForeground": "#979FAD" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#2979ff", - "inactiveCaption": "#2F333D", - "inactiveCaptionBorder": "#282C34", - "inactiveCaptionText": "#979FAD", - "info": "#979FAD", - "infoText": "#979FAD", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#282C34", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#282C34" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#979FAD", - "background": "#282C34", - "inactiveTitleForeground": "#979FAD" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#282C34", - "disabledForeground": "#6B727D", - "disabledShadow": "#282C34", - "disabledText": "#6B727D", - "foreground": "#979FAD", - "infoForeground": "#979FAD", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#979FAD" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#2979ff", - "hoverForeground": "#2979ff", - "pressedForeground": "#2979ff", - "secondaryForeground": "#979FAD", - "visitedForeground": "#2979ff" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#2979ff", + "link.foreground": "accent", "List": { - "background": "#2F333D", - "foreground": "#979FAD", - "hoverBackground": "#3A3F4B80", - "hoverInactiveBackground": "#383E49", - "selectionBackground": "#4D515D", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#3A3F4B80" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#282C34", - "branchColor": "#979FAD", - "contrast": "#21252B", - "foreground": "#979FAD", - "mergeCommits": "#3A3F4B", - "primaryColor": "#979FAD", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#282C34", - "tab.borderColor": "#2979ff", - "tagColor": "#979FAD" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#2F333D", - "usedColor": "#383D48", - "usedBackground": "#383D48" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#979FAD", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#282C34", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#2F333D", - "disabledBackground": "#2F333D", - "disabledForeground": "#6B727D", - "foreground": "#979FAD", - "selectionBackground": "#4D515D", - "selectionForeground": "#FFFFFF", - "separatorColor": "#282C34" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#21252B", - "borderColor": "#282C34", - "disabledBackground": "#282C34", - "disabledForeground": "#6B727D", - "foreground": "#979FAD", - "highlight": "#282C34", - "selectionBackground": "#4D515D", - "selectionForeground": "#FFFFFF", - "shadow": "#21252B" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#979FAD", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#282C34", - "disabledBackground": "#282C34", - "disabledForeground": "#6B727D", - "foreground": "#979FAD", - "selectionBackground": "#4D515D", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#979FAD", - "borderColor": "#282C34" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#282C34" + "background": "bg" }, "SearchField": { - "background": "#21252B" + "background": "hc" } }, - "NewPSD.warning": "#2979ff", + "NewPSD.warning": "accent", "Notification": { - "background": "#282C34", - "borderColor": "#282C34", - "errorBackground": "#282C34", - "errorBorderColor": "#282C34", - "foreground": "#979FAD", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#3A3F4B", - "foreground": "#979FAD", - "innerBorderColor": "#3A3F4B" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#282C34", - "errorBorderColor": "#282C34", - "informativeBackground": "#282C34", - "informativeBorderColor": "#282C34", - "warningBackground": "#282C34", - "warningBorderColor": "#282C34" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#282C34", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#282C34", - "foreground": "#979FAD", - "messageForeground": "#979FAD" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#3A3F4B", - "focusedColor": "#2979ff", - "disabledColor": "#6B727D" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#282C34", - "foreground": "#979FAD" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#2F333D", - "borderColor": "#383E49", - "currentOverloadBackground": "#383D48", - "currentParameterForeground": "#2979ff", - "disabledForeground": "#6B727D", - "foreground": "#979FAD", - "infoForeground": "#979FAD", - "lineSeparatorColor": "#383E49" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#21252B", - "capsLockIconColor": "#2979ff", - "caretForeground": "#2979ff", - "foreground": "#979FAD", - "inactiveForeground": "#6B727D", - "selectionBackground": "#383E49", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#282C34", - "disabledForeground": "#6B727D", - "eapTagBackground": "#383D48", - "hoverBackground": "#3A3F4B80", - "lightSelectionBackground": "#383E49", - "paidTagBackground": "#383D48", - "selectionBackground": "#4D515D", - "tagForeground": "#2979ff", - "tagBackground": "#383D48", - "trialTagBackground": "#383D48", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#3A3F4B", - "installBorderColor": "#3A3F4B", - "installForeground": "#979FAD", - "installFocusedBackground": "#383D48", - "installFillForeground": "#6B727D", - "installFillBackground": "#3A3F4B", - "updateBackground": "#2979ff", - "updateBorderColor": "#3A3F4B", - "updateForeground": "#979FAD" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#21252B", - "borderColor": "#282C34" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#2F333D", - "foreground": "#979FAD" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#383E49", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#383E49" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#282C34", - "borderColor": "#282C34", - "foreground": "#2979ff" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#21252B", - "inactiveBorderColor": "#282C34", - "innerBorderColor": "#2F333D", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#282C34", - "inactiveBackground": "#21252B" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#979FAD", - "separatorColor": "#2F333D", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#21252B", - "background": "#21252B", - "borderColor": "#21252B" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#282C34", + "background": "bg", "border": "2,0,2,0", - "foreground": "#979FAD", - "translucentBackground": "#282C34" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#282C34", - "foreground": "#2979ff", - "indeterminateEndColor": "#2979ff", - "indeterminateStartColor": "#2979ff", - "progressColor": "#2979ff", - "selectionBackground": "#383D48", - "trackColor": "#383D48" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#2979ff" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#282C34", - "disabledText": "#6B727D", - "foreground": "#979FAD" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#979FAD", - "acceleratorSelectionForeground": "#979FAD", - "background": "#282C34", - "disabledBackground": "#282C34", - "disabledForeground": "#6B727D", - "foreground": "#979FAD", - "selectionBackground": "#4D515D", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#282C34", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#282C34", - "hoverThumbBorderColor": "#2979ff", - "hoverThumbColor": "#2979ff", - "hoverTrackColor": "#282C3430", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#2979ff", - "hoverThumbColor": "#2979ff", - "hoverTrackColor": "#282C3430", - "thumbBorderColor": "#2979ff70", - "thumbColor": "#2979ff70", - "trackColor": "#282C3430", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#2979ff", - "hoverThumbColor": "#2979ff", - "hoverTrackColor": "#282C3430", - "thumbBorderColor": "#2979ff70", - "thumbColor": "#2979ff70", - "trackColor": "#282C3430" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#383D48", - "thumbBorderColor": "#2979ff70", - "thumbColor": "#2979ff70", - "trackColor": "#282C3430", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#2979ff", - "hoverThumbColor": "#2979ff", - "hoverTrackColor": "#282C3430", - "thumbBorderColor": "#2979ff70", - "thumbColor": "#2979ff70", - "trackColor": "#282C3430" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#21252B", - "foreground": "#979FAD" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#282C34" + "background": "bg" }, "List": { - "separatorForeground": "#979FAD", - "separatorColor": "#282C34" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#282C34", - "borderColor": "#21252B", - "infoForeground": "#979FAD" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#383D48" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#2979ff", - "startBackground": "#2979ff", - "endColor": "#2979ff", - "startColor": "#2979ff" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#282C34", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#383E49" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#979FAD", - "Repeated.File.Foreground": "#979FAD" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#2F333D", - "foreground": "#2F333D", - "separatorColor": "#2F333D" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#21252B" + "background": "hc" }, "Slider": { - "background": "#282C34", - "buttonBorderColor": "#2979ff", - "buttonColor": "#2979ff", - "foreground": "#979FAD", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#2F333D", - "trackColor": "#383E49", - "trackWidth": 7, - "thumb": "#2979ff" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#383D48", - "borderColor": "#282C34", - "foreground": "#979FAD", - "errorForeground": "#979FAD" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#282C34", + "background": "bg", "border": "3,3,3,3", - "foreground": "#979FAD", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#282C34", - "highlight": "#21252B" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#2F333D", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#282C34", - "hoverBackground": "#383D48", - "LightEditBackground": "#383E49" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#282C34", - "contentAreaColor": "#383D48", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#282C34", - "disabledForeground": "#6B727D", - "disabledUnderlineColor": "#6B727D", - "focus": "#383E49", - "focusColor": "#383E49", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#979FAD", - "highlight": "#282C34", - "hoverColor": "#383D48", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#2979ff" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#21252B", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#21252B", - "background": "#282C34", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#6B727D", - "dropLineColor": "#2979ff", - "dropLineShortColor": "#2979ff", - "focusCellBackground": "#383E49", - "focusCellForeground": "#FFFFFF", - "foreground": "#979FAD", - "gridColor": "#282C34", - "highlightOuter": "#383E49", - "hoverBackground": "#3A3F4B80", - "hoverInactiveBackground": "#383E49", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#979FAD", - "lightSelectionInactiveBackground": "#2F333D", - "selectionBackground": "#383E49", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#383E49", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#979FAD", - "stripeColor": "#21252B" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#282C34", - "borderColor": "#282C34", - "bottomSeparatorColor": "#2F333D", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#6B727D", - "foreground": "#979FAD", - "focusCellBackground": "#383E49", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#2F333D" + "separatorColor": "second" }, - "text": "#979FAD", - "textInactiveText": "#979FAD", - "textText": "#979FAD", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#21252B", - "caretForeground": "#2979ff", - "foreground": "#979FAD", - "inactiveForeground": "#6B727D", - "selectionBackground": "#383E49", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#21252B", - "caretForeground": "#2979ff", - "foreground": "#979FAD", - "inactiveForeground": "#6B727D", - "selectionBackground": "#383E49", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#21252B", - "caretForeground": "#2979ff", - "foreground": "#979FAD", - "inactiveForeground": "#6B727D", - "selectionBackground": "#383E49", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#21252B", - "Button.hoverBackground": "#383D48", - "inactiveBackground": "#282C34", - "infoForeground": "#979FAD", - "inactiveInfoForeground": "#979FAD" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#979FAD", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#3A3F4B", - "buttonColor": "#979FAD", - "disabledText": "#6B727D", - "foreground": "#979FAD", - "offForeground": "#282C34", - "offBackground": "#282C34", - "onBackground": "#2979ff", - "onForeground": "#2979ff" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#21252B", - "borderHandleColor": "#979FAD", - "floatingForeground": "#979FAD", - "foreground": "#979FAD" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#282C34", - "Actions.infoForeground": "#979FAD", - "background": "#282C34", - "borderColor": "#282C34", - "foreground": "#979FAD", - "infoForeground": "#979FAD", - "separatorColor": "#282C34", - "shortcutForeground": "#979FAD" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#383E49", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#21252B" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#282C34", - "borderColor": "#2F333D", - "inactiveBackground": "#282C34" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#282C34" + "background": "bg" }, "HeaderTab": { - "borderColor": "#383D48", - "hoverBackground": "#383D48", - "hoverInactiveBackground": "#383D48", - "inactiveUnderlineColor": "#2979ff", - "selectedBackground": "#21252B", - "selectedInactiveBackground": "#21252B", - "underlineColor": "#2979ff", - "underlinedTabBackground": "#383E49", - "underlinedTabInactiveBackground": "#2F333D", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#979FAD" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#21252B", - "foreground": "#979FAD", - "hash": "#282C34", - "hoverBackground": "#3A3F4B80", - "hoverInactiveBackground": "#383E49", - "modifiedItemForeground": "#2979ff", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#3A3F4B80", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#3A3F4B80", - "textBackground": "#21252B" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#282C34", - "Canvas.background": "#21252B", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#282C34", - "foreground": "#979FAD" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#282C34", - "background": "#282C34", - "foreground": "#979FAD", - "hoverBorderColor": "#383D48" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#282C34", - "hoverBorderColor": "#383D48" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#21252B", - "highStroke.foreground": "#979FAD", - "Label.foreground": "#979FAD", - "List.selectionBackground": "#3A3F4B80", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#282C34", - "Component.foreground": "#979FAD", - "ConstraintSetText.foreground": "#979FAD", - "ConstraintSet.background": "#2F333D", - "CSPanel.SelectedFocusBackground": "#4D515D", - "CSPanel.SelectedBackground": "#3A3F4B80", - "cs_FocusText.infoForeground": "#979FAD", - "CursorTextColor.foreground": "#979FAD", - "HoverColor.disabledBackground": "#6B727D", - "motionGraph.background": "#282C34", - "Notification.background": "#282C34", - "ourAvg.background": "#2F333D", - "ourCS.background": "#2F333D", - "ourCS_Border.borderColor": "#282C34", - "ourCS_TextColor.foreground": "#979FAD", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#383E49", - "ourCS_SelectedBorder.pressedBorderColor": "#383D48", - "ourML_BarColor.separatorColor": "#282C34", - "PrimaryPanel.background": "#21252B", - "SecondaryPanel.background": "#282C34", - "SecondaryPanel.header.foreground": "#979FAD", - "SecondaryPanel.header.background": "#21252B", - "timeLine.disabledBorderColor": "#282C34" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#282C34", - "background": "#282C34" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#979FAD", + "percent.foreground": "fg", "Placeholder": { - "background": "#282C34", - "borderColor": "#282C34", - "foreground": "#979FAD", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#282C34", - "stroke.acceleratorForeground": "#979FAD" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#282C34", - "errorBorderColor": "#282C34", - "warningBackground": "#282C34", - "warningBorderColor": "#282C34" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#282C34" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#383D48" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#2979ff", - "otherIconColor": "#979FAD", - "remoteBranchIconColor": "#979FAD", - "tagIconColor": "#979FAD" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#2979ff", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#6B727D", - "localTagIconColor": "#979FAD", - "mqTagIconColor": "#979FAD", - "tagIconColor": "#979FAD", - "tipIconColor": "#979FAD" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#979FAD", - "Commit.currentBranchBackground": "#2F333D", - "Commit.hoveredBackground": "#3A3F4B80" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#383D48" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#21252B", - "foreground": "#979FAD" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#282C34", - "background": "#282C34", - "borderColor": "#282C34", - "captionBackground": "#21252B", - "captionForeground": "#979FAD", - "Details.background": "#282C34", - "footerBackground": "#21252B", - "footerForeground": "#979FAD", - "headerBackground": "#282C34", - "headerForeground": "#979FAD", - "List.background": "#21252B", - "separatorColor": "#282C34", - "SidePanel.background": "#2F333D", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#21252B", - "actions.selectionBackground": "#383D48", - "background": "#2F333D", - "selectionBackground": "#4D515D", - "selectionInactiveBackground": "#2F333D" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#21252B", - "windowBorder": "#282C34", - "windowText": "#979FAD", - "Window.border": "#282C34" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#21252B", - "#6B6B6B": "#979FAD", - "#A7A7A7": "#282C34", - "#3D6185": "#2979ff", - "#466D94": "#2979ff", - "#3C3F41": "#282C34", - "#545556": "#6B727D", - "#606060": "#6B727D", - "#9AA7B0": "#979FAD", - "#675133": "#2979ff", - "Actions.Blue": "#61AEEF", - "Actions.Green": "#98C379", - "Actions.Grey": "#979FAD", - "Actions.GreyInline": "#59626F", - "Actions.GreyInline.Dark": "#979FAD", - "Actions.Red": "#e06c75", - "Actions.Yellow": "#E5C17C", - "Checkbox.Background.Default": "#21252B", - "Checkbox.Background.Default.Dark": "#21252B", - "Checkbox.Background.Disabled": "#3c4150", - "Checkbox.Background.Disabled.Dark": "#3c4150", - "Checkbox.Border.Default": "#282C34", - "Checkbox.Border.Default.Dark": "#282C34", - "Checkbox.Border.Disabled": "#6B727D", - "Checkbox.Border.Disabled.Dark": "#6B727D", - "Checkbox.Focus.Thin.Default": "#2979ff", - "Checkbox.Focus.Thin.Default.Dark": "#2979ff", - "Checkbox.Focus.Wide": "#2979ff", - "Checkbox.Focus.Wide.Dark": "#2979ff", - "Checkbox.Foreground.Disabled": "#6B727D", - "Checkbox.Foreground.Disabled.Dark": "#6B727D", - "Checkbox.Background.Selected": "#2979ff", - "Checkbox.Background.Selected.Dark": "#282C34", - "Checkbox.Border.Selected": "#2979ff", - "Checkbox.Border.Selected.Dark": "#2979ff", - "Checkbox.Foreground.Selected": "#2979ff", - "Checkbox.Foreground.Selected.Dark": "#2979ff", - "Checkbox.Focus.Thin.Selected": "#979FAD", - "Checkbox.Focus.Thin.Selected.Dark": "#979FAD", - "Objects.Grey": "#59626F", - "Objects.Blue": "#61AEEF", - "Objects.RedStatus": "#e06c75", - "Objects.Red": "#e06c75", - "Objects.Pink": "#C679DD", - "Objects.Yellow": "#E5C17C", - "Objects.Green": "#98C379", - "Objects.Purple": "#C679DD", - "Objects.BlackText": "#979FAD", - "Objects.YellowDark": "#D19A66", - "Objects.GreenAndroid": "#98C379" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Atom One Dark.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Atom One Dark.theme.json index ca7fce47..723606b3 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Atom One Dark.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Atom One Dark.theme.json @@ -2,1004 +2,1089 @@ "name": "Atom One Dark", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#282C34", + "bg30": "#282C3430", + "fg": "#979FAD", + "text": "#979FAD", + "selBg": "#4D515D", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#282C34", + "excl": "#3c4150", + "second": "#2F333D", + "dis": "#6B727D", + "accent": "#2979ff", + "accent2": "#2979ff2", + "accent50": "#2979ff50", + "accent70": "#2979ff70", + "cs": "#21252B", + "button": "#3A3F4B", + "table": "#383E49", + "tree": "#3A3F4B80", + "hl": "#383D48", + "notif": "#282C34", + "hc": "#282C34", + "white": "#D19A66", + "blue": "#61AEEF", + "red": "#e06c75", + "yellow": "#E5C17C", + "green": "#98C379", + "gray": "#59626F", + "purple": "#C679DD", + "orange": "#D19A66" + }, "editorScheme": "colors/Atom One Dark.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#979FAD", - "background": "#282C34", - "borderColor": "#282C34", - "disabledBackground": "#3c4150", - "disabledForeground": "#6B727D", - "disabledText": "#6B727D", - "focusColor": "#383D48", - "focusedBorderColor": "#2979ff", - "foreground": "#979FAD", - "inactiveBackground": "#3c4150", - "inactiveForeground": "#979FAD", - "infoForeground": "#979FAD", - "selectionBackground": "#4D515D", - "selectionBackgroundInactive": "#2F333D", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#2F333D", - "separatorColor": "#282C34" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#282C34", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#2979ff50", - "hoverBorderColor": "#2979ff50", - "hoverSeparatorColor": "#3A3F4B", - "focusedBorderColor": "#2979ff50", - "pressedBackground": "#2979ff50", - "pressedBorderColor": "#2979ff50" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#4D515D" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#282C34", - "Borders.color": "#282C34", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#282C34", + "background": "bg", "default": { - "endBackground": "#383E49", - "endBorderColor": "#383E49", - "foreground": "#FFFFFF", - "focusColor": "#2979ff", - "focusedBorderColor": "#2979ff", - "shadowColor": "#383E49", - "startBackground": "#383E49", - "startBorderColor": "#383E49" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#3A3F4B", - "disabledText": "#6B727D", - "endBackground": "#3A3F4B", - "endBorderColor": "#3A3F4B", - "focus": "#383D48", - "focusedBorderColor": "#2979ff", - "foreground": "#979FAD", - "highlight": "#FFFFFF", - "mt.background": "#3A3F4B", - "mt.foreground": "#979FAD", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#383E49", - "mt.selection.color2": "#383E49", - "startBackground": "#3A3F4B", - "startBorderColor": "#3A3F4B", - "shadowColor": "#3A3F4B", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#282C34", - "Tooltip.background": "#282C34" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#21252B", - "selectionBackground": "#4D515D" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#282C34", - "disabledText": "#6B727D", - "foreground": "#979FAD", - "select": "#2979ff" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#979FAD", - "acceleratorSelectionForeground": "#979FAD", - "background": "#282C34", - "disabledBackground": "#282C34", - "disabledForeground": "#6B727D", - "foreground": "#979FAD", - "selectionBackground": "#4D515D", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#979FAD", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#2979ff", - "dropdownBorder": "#2F333D", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#282C34", - "foreground": "#979FAD", - "swatchesDefaultRecentColor": "#979FAD" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#3A3F4B", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#3A3F4B", - "disabledIconColor": "#6B727D", - "iconColor": "#979FAD", - "nonEditableBackground": "#282C34" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#282C34", - "buttonBackground": "#3A3F4B", - "darcula.hoveredArrowButtonForeground": "#2979ff", - "disabledForeground": "#6B727D", - "foreground": "#979FAD", - "modifiedItemForeground": "#2979ff", - "nonEditableBackground": "#2F333D", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#383E49", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#282C34", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#2F333D", - "foreground": "#979FAD", - "infoForeground": "#979FAD", - "matchForeground": "#2979ff", - "matchSelectionForeground": "#2979ff", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#979FAD", - "selectionInactiveBackground": "#383D48", - "selectionBackground": "#4D515D", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#383D48", - "disabledBorderColor": "#3A3F4B", - "focusColor": "#2979ff", - "focusedBorderColor": "#2979ff", - "hoverIconColor": "#2979ff", - "infoForeground": "#979FAD", - "iconColor": "#979FAD" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#282C34", - "controlText": "#979FAD", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#2979ff", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#979FAD", - "changedValueForeground": "#2979ff", - "errorMessageForeground": "#e06c75", - "evaluatingExpressionForeground": "#979FAD", - "exceptionForeground": "#E5C17C", - "modifyingValueForeground": "#2979ff", - "valueForeground": "#2979ff" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#383D48", - "underlinedTabBackground": "#383D48" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#383D48" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#282C34", - "borderColor": "#282C34", - "hoverBackground": "#383E49", - "hoverColor": "#282C34", - "hoverMaskColor": "#383D48", - "inactiveColoredTabBackground": "#282C34", - "inactiveColoredFileBackground": "#3A3F4B", - "inactiveUnderlineColor": "#2979ff", - "inactiveMaskColor": "#282C34", - "underlineColor": "#2979ff", - "underlinedTabBackground": "#383E49", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#282C34", - "DialogWrapper.southPanelBackground": "#282C34", - "DialogWrapper.southPanelDivider": "#282C34", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#282C34", - "areaBorderColor": "#282C34", - "areaForeground": "#979FAD" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#282C34", - "foreground": "#979FAD", - "shortcutForeground": "#979FAD" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#282C34", - "caretForeground": "#2979ff", - "foreground": "#979FAD", - "inactiveBackground": "#282C34", - "inactiveForeground": "#6B727D", - "selectionBackground": "#4D515D", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#2F333D", - "hoverBackground": "#383D48", - "hoverColor": "#383D48", - "hoverMaskColor": "#383D48", - "inactiveMaskColor": "#282C34", - "inactiveColoredFileBackground": "#282C34", - "inactiveUnderlineColor": "#6B727D", - "selectedForeground": "#979FAD", - "selectedBackground": "#383E49", - "underlineColor": "#2979ff", - "underlinedTabBackground": "#383E49", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#282C34", - "borderColor": "#2F333D", - "hoverBackground": "#383D48", - "hoverColor": "#383D48", - "inactiveUnderlineColor": "#2979ff", - "underlineColor": "#2979ff", - "underlinedTabBackground": "#383E49", - "underlinedTabForeground": "#979FAD" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#3c4150", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#282C34", + "Focus.color": "border", "FormattedTextField": { - "background": "#282C34", - "caretForeground": "#2979ff", - "foreground": "#979FAD", - "inactiveBackground": "#3A3F4B", - "inactiveForeground": "#6B727D", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#383E49" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#282C34", "Group": { - "disabledSeparatorColor": "#282C34", - "separatorColor": "#282C34" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#979FAD", - "lineSeparatorColor": "#282C34" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#282C34", - "inactive": "#21252B" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#282C34", - "borderColor": "#282C34", - "foreground": "#979FAD", - "infoForeground": "#979FAD", - "shortcutForeground": "#979FAD" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#2979ff", - "inactiveCaption": "#2F333D", - "inactiveCaptionBorder": "#282C34", - "inactiveCaptionText": "#979FAD", - "info": "#979FAD", - "infoText": "#979FAD", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#282C34", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#282C34" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#979FAD", - "background": "#282C34", - "inactiveTitleForeground": "#979FAD" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#282C34", - "disabledForeground": "#6B727D", - "disabledShadow": "#282C34", - "disabledText": "#6B727D", - "foreground": "#979FAD", - "infoForeground": "#979FAD", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#979FAD" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#2979ff", - "hoverForeground": "#2979ff", - "pressedForeground": "#2979ff", - "secondaryForeground": "#979FAD", - "visitedForeground": "#2979ff" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#2979ff", + "link.foreground": "accent", "List": { - "background": "#2F333D", - "foreground": "#979FAD", - "hoverBackground": "#3A3F4B80", - "hoverInactiveBackground": "#383E49", - "selectionBackground": "#4D515D", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#3A3F4B80" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#282C34", - "branchColor": "#979FAD", - "contrast": "#21252B", - "foreground": "#979FAD", - "mergeCommits": "#3A3F4B", - "primaryColor": "#979FAD", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#282C34", - "tab.borderColor": "#2979ff", - "tagColor": "#979FAD" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#2F333D", - "usedColor": "#383D48", - "usedBackground": "#383D48" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#979FAD", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#282C34", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#2F333D", - "disabledBackground": "#2F333D", - "disabledForeground": "#6B727D", - "foreground": "#979FAD", - "selectionBackground": "#4D515D", - "selectionForeground": "#FFFFFF", - "separatorColor": "#282C34" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#282C34", - "borderColor": "#282C34", - "disabledBackground": "#282C34", - "disabledForeground": "#6B727D", - "foreground": "#979FAD", - "highlight": "#282C34", - "selectionBackground": "#4D515D", - "selectionForeground": "#FFFFFF", - "shadow": "#282C34" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#979FAD", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#282C34", - "disabledBackground": "#282C34", - "disabledForeground": "#6B727D", - "foreground": "#979FAD", - "selectionBackground": "#4D515D", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#979FAD", - "borderColor": "#282C34" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#282C34" + "background": "bg" }, "SearchField": { - "background": "#282C34" + "background": "hc" } }, - "NewPSD.warning": "#2979ff", + "NewPSD.warning": "accent", "Notification": { - "background": "#282C34", - "borderColor": "#282C34", - "errorBackground": "#282C34", - "errorBorderColor": "#282C34", - "foreground": "#979FAD", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#3A3F4B", - "foreground": "#979FAD", - "innerBorderColor": "#3A3F4B" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#282C34", - "errorBorderColor": "#282C34", - "informativeBackground": "#282C34", - "informativeBorderColor": "#282C34", - "warningBackground": "#282C34", - "warningBorderColor": "#282C34" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#282C34", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#282C34", - "foreground": "#979FAD", - "messageForeground": "#979FAD" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#3A3F4B", - "focusedColor": "#2979ff", - "disabledColor": "#6B727D" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#282C34", - "foreground": "#979FAD" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#2F333D", - "borderColor": "#383E49", - "currentOverloadBackground": "#383D48", - "currentParameterForeground": "#2979ff", - "disabledForeground": "#6B727D", - "foreground": "#979FAD", - "infoForeground": "#979FAD", - "lineSeparatorColor": "#383E49" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#282C34", - "capsLockIconColor": "#2979ff", - "caretForeground": "#2979ff", - "foreground": "#979FAD", - "inactiveForeground": "#6B727D", - "selectionBackground": "#383E49", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#282C34", - "disabledForeground": "#6B727D", - "eapTagBackground": "#383D48", - "hoverBackground": "#3A3F4B80", - "lightSelectionBackground": "#383E49", - "paidTagBackground": "#383D48", - "selectionBackground": "#4D515D", - "tagForeground": "#2979ff", - "tagBackground": "#383D48", - "trialTagBackground": "#383D48", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#3A3F4B", - "installBorderColor": "#3A3F4B", - "installForeground": "#979FAD", - "installFocusedBackground": "#383D48", - "installFillForeground": "#6B727D", - "installFillBackground": "#3A3F4B", - "updateBackground": "#2979ff", - "updateBorderColor": "#3A3F4B", - "updateForeground": "#979FAD" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#282C34", - "borderColor": "#282C34" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#2F333D", - "foreground": "#979FAD" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#383E49", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#383E49" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#282C34", - "borderColor": "#282C34", - "foreground": "#2979ff" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#21252B", - "inactiveBorderColor": "#282C34", - "innerBorderColor": "#2F333D", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#282C34", - "inactiveBackground": "#21252B" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#979FAD", - "separatorColor": "#2F333D", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#21252B", - "background": "#21252B", - "borderColor": "#21252B" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#282C34", + "background": "bg", "border": "2,0,2,0", - "foreground": "#979FAD", - "translucentBackground": "#282C34" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#282C34", - "foreground": "#2979ff", - "indeterminateEndColor": "#2979ff", - "indeterminateStartColor": "#2979ff", - "progressColor": "#2979ff", - "selectionBackground": "#383D48", - "trackColor": "#383D48" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#2979ff" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#282C34", - "disabledText": "#6B727D", - "foreground": "#979FAD" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#979FAD", - "acceleratorSelectionForeground": "#979FAD", - "background": "#282C34", - "disabledBackground": "#282C34", - "disabledForeground": "#6B727D", - "foreground": "#979FAD", - "selectionBackground": "#4D515D", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#282C34", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#282C34", - "hoverThumbBorderColor": "#2979ff", - "hoverThumbColor": "#2979ff", - "hoverTrackColor": "#282C3430", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#2979ff", - "hoverThumbColor": "#2979ff", - "hoverTrackColor": "#282C3430", - "thumbBorderColor": "#2979ff70", - "thumbColor": "#2979ff70", - "trackColor": "#282C3430", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#2979ff", - "hoverThumbColor": "#2979ff", - "hoverTrackColor": "#282C3430", - "thumbBorderColor": "#2979ff70", - "thumbColor": "#2979ff70", - "trackColor": "#282C3430" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#383D48", - "thumbBorderColor": "#2979ff70", - "thumbColor": "#2979ff70", - "trackColor": "#282C3430", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#2979ff", - "hoverThumbColor": "#2979ff", - "hoverTrackColor": "#282C3430", - "thumbBorderColor": "#2979ff70", - "thumbColor": "#2979ff70", - "trackColor": "#282C3430" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#21252B", - "foreground": "#979FAD" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#282C34" + "background": "bg" }, "List": { - "separatorForeground": "#979FAD", - "separatorColor": "#282C34" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#282C34", - "borderColor": "#21252B", - "infoForeground": "#979FAD" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#383D48" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#2979ff", - "startBackground": "#2979ff", - "endColor": "#2979ff", - "startColor": "#2979ff" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#282C34", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#383E49" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#979FAD", - "Repeated.File.Foreground": "#979FAD" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#2F333D", - "foreground": "#2F333D", - "separatorColor": "#2F333D" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#282C34" + "background": "hc" }, "Slider": { - "background": "#282C34", - "buttonBorderColor": "#2979ff", - "buttonColor": "#2979ff", - "foreground": "#979FAD", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#2F333D", - "trackColor": "#383E49", - "trackWidth": 7, - "thumb": "#2979ff" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#383D48", - "borderColor": "#282C34", - "foreground": "#979FAD", - "errorForeground": "#979FAD" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#282C34", + "background": "bg", "border": "3,3,3,3", - "foreground": "#979FAD", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#282C34", - "highlight": "#282C34" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#2F333D", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#282C34", - "hoverBackground": "#383D48", - "LightEditBackground": "#383E49" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#282C34", - "contentAreaColor": "#383D48", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#282C34", - "disabledForeground": "#6B727D", - "disabledUnderlineColor": "#6B727D", - "focus": "#383E49", - "focusColor": "#383E49", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#979FAD", - "highlight": "#282C34", - "hoverColor": "#383D48", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#2979ff" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#282C34", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#21252B", - "background": "#282C34", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#6B727D", - "dropLineColor": "#2979ff", - "dropLineShortColor": "#2979ff", - "focusCellBackground": "#383E49", - "focusCellForeground": "#FFFFFF", - "foreground": "#979FAD", - "gridColor": "#282C34", - "highlightOuter": "#383E49", - "hoverBackground": "#3A3F4B80", - "hoverInactiveBackground": "#383E49", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#979FAD", - "lightSelectionInactiveBackground": "#2F333D", - "selectionBackground": "#383E49", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#383E49", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#979FAD", - "stripeColor": "#21252B" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#282C34", - "borderColor": "#282C34", - "bottomSeparatorColor": "#2F333D", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#6B727D", - "foreground": "#979FAD", - "focusCellBackground": "#383E49", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#2F333D" + "separatorColor": "second" }, - "text": "#979FAD", - "textInactiveText": "#979FAD", - "textText": "#979FAD", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#282C34", - "caretForeground": "#2979ff", - "foreground": "#979FAD", - "inactiveForeground": "#6B727D", - "selectionBackground": "#383E49", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#282C34", - "caretForeground": "#2979ff", - "foreground": "#979FAD", - "inactiveForeground": "#6B727D", - "selectionBackground": "#383E49", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#282C34", - "caretForeground": "#2979ff", - "foreground": "#979FAD", - "inactiveForeground": "#6B727D", - "selectionBackground": "#383E49", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#21252B", - "Button.hoverBackground": "#383D48", - "inactiveBackground": "#282C34", - "infoForeground": "#979FAD", - "inactiveInfoForeground": "#979FAD" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#979FAD", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#3A3F4B", - "buttonColor": "#979FAD", - "disabledText": "#6B727D", - "foreground": "#979FAD", - "offForeground": "#282C34", - "offBackground": "#282C34", - "onBackground": "#2979ff", - "onForeground": "#2979ff" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#282C34", - "borderHandleColor": "#979FAD", - "floatingForeground": "#979FAD", - "foreground": "#979FAD" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#282C34", - "Actions.infoForeground": "#979FAD", - "background": "#282C34", - "borderColor": "#282C34", - "foreground": "#979FAD", - "infoForeground": "#979FAD", - "separatorColor": "#282C34", - "shortcutForeground": "#979FAD" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#383E49", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#21252B" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#282C34", - "borderColor": "#2F333D", - "inactiveBackground": "#282C34" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#282C34" + "background": "bg" }, "HeaderTab": { - "borderColor": "#383D48", - "hoverBackground": "#383D48", - "hoverInactiveBackground": "#383D48", - "inactiveUnderlineColor": "#2979ff", - "selectedBackground": "#21252B", - "selectedInactiveBackground": "#21252B", - "underlineColor": "#2979ff", - "underlinedTabBackground": "#383E49", - "underlinedTabInactiveBackground": "#2F333D", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#979FAD" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#282C34", - "foreground": "#979FAD", - "hash": "#282C34", - "hoverBackground": "#3A3F4B80", - "hoverInactiveBackground": "#383E49", - "modifiedItemForeground": "#2979ff", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#3A3F4B80", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#3A3F4B80", - "textBackground": "#282C34" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#282C34", - "Canvas.background": "#21252B", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#282C34", - "foreground": "#979FAD" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#282C34", - "background": "#282C34", - "foreground": "#979FAD", - "hoverBorderColor": "#383D48" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#282C34", - "hoverBorderColor": "#383D48" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#21252B", - "highStroke.foreground": "#979FAD", - "Label.foreground": "#979FAD", - "List.selectionBackground": "#3A3F4B80", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#282C34", - "Component.foreground": "#979FAD", - "ConstraintSetText.foreground": "#979FAD", - "ConstraintSet.background": "#2F333D", - "CSPanel.SelectedFocusBackground": "#4D515D", - "CSPanel.SelectedBackground": "#3A3F4B80", - "cs_FocusText.infoForeground": "#979FAD", - "CursorTextColor.foreground": "#979FAD", - "HoverColor.disabledBackground": "#6B727D", - "motionGraph.background": "#282C34", - "Notification.background": "#282C34", - "ourAvg.background": "#2F333D", - "ourCS.background": "#2F333D", - "ourCS_Border.borderColor": "#282C34", - "ourCS_TextColor.foreground": "#979FAD", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#383E49", - "ourCS_SelectedBorder.pressedBorderColor": "#383D48", - "ourML_BarColor.separatorColor": "#282C34", - "PrimaryPanel.background": "#21252B", - "SecondaryPanel.background": "#282C34", - "SecondaryPanel.header.foreground": "#979FAD", - "SecondaryPanel.header.background": "#21252B", - "timeLine.disabledBorderColor": "#282C34" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#282C34", - "background": "#282C34" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#979FAD", + "percent.foreground": "fg", "Placeholder": { - "background": "#282C34", - "borderColor": "#282C34", - "foreground": "#979FAD", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#282C34", - "stroke.acceleratorForeground": "#979FAD" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#282C34", - "errorBorderColor": "#282C34", - "warningBackground": "#282C34", - "warningBorderColor": "#282C34" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#282C34" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#383D48" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#2979ff", - "otherIconColor": "#979FAD", - "remoteBranchIconColor": "#979FAD", - "tagIconColor": "#979FAD" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#2979ff", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#6B727D", - "localTagIconColor": "#979FAD", - "mqTagIconColor": "#979FAD", - "tagIconColor": "#979FAD", - "tipIconColor": "#979FAD" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#979FAD", - "Commit.currentBranchBackground": "#2F333D", - "Commit.hoveredBackground": "#3A3F4B80" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#383D48" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#282C34", - "foreground": "#979FAD" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#282C34", - "background": "#282C34", - "borderColor": "#282C34", - "captionBackground": "#21252B", - "captionForeground": "#979FAD", - "Details.background": "#282C34", - "footerBackground": "#21252B", - "footerForeground": "#979FAD", - "headerBackground": "#282C34", - "headerForeground": "#979FAD", - "List.background": "#21252B", - "separatorColor": "#282C34", - "SidePanel.background": "#2F333D", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#21252B", - "actions.selectionBackground": "#383D48", - "background": "#2F333D", - "selectionBackground": "#4D515D", - "selectionInactiveBackground": "#2F333D" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#282C34", - "windowBorder": "#282C34", - "windowText": "#979FAD", - "Window.border": "#282C34" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#21252B", - "#6B6B6B": "#979FAD", - "#A7A7A7": "#282C34", - "#3D6185": "#2979ff", - "#466D94": "#2979ff", - "#3C3F41": "#282C34", - "#545556": "#6B727D", - "#606060": "#6B727D", - "#9AA7B0": "#979FAD", - "#675133": "#2979ff", - "Actions.Blue": "#61AEEF", - "Actions.Green": "#98C379", - "Actions.Grey": "#979FAD", - "Actions.GreyInline": "#59626F", - "Actions.GreyInline.Dark": "#979FAD", - "Actions.Red": "#e06c75", - "Actions.Yellow": "#E5C17C", - "Checkbox.Background.Default": "#21252B", - "Checkbox.Background.Default.Dark": "#21252B", - "Checkbox.Background.Disabled": "#3c4150", - "Checkbox.Background.Disabled.Dark": "#3c4150", - "Checkbox.Border.Default": "#282C34", - "Checkbox.Border.Default.Dark": "#282C34", - "Checkbox.Border.Disabled": "#6B727D", - "Checkbox.Border.Disabled.Dark": "#6B727D", - "Checkbox.Focus.Thin.Default": "#2979ff", - "Checkbox.Focus.Thin.Default.Dark": "#2979ff", - "Checkbox.Focus.Wide": "#2979ff", - "Checkbox.Focus.Wide.Dark": "#2979ff", - "Checkbox.Foreground.Disabled": "#6B727D", - "Checkbox.Foreground.Disabled.Dark": "#6B727D", - "Checkbox.Background.Selected": "#2979ff", - "Checkbox.Background.Selected.Dark": "#282C34", - "Checkbox.Border.Selected": "#2979ff", - "Checkbox.Border.Selected.Dark": "#2979ff", - "Checkbox.Foreground.Selected": "#2979ff", - "Checkbox.Foreground.Selected.Dark": "#2979ff", - "Checkbox.Focus.Thin.Selected": "#979FAD", - "Checkbox.Focus.Thin.Selected.Dark": "#979FAD", - "Objects.Grey": "#59626F", - "Objects.Blue": "#61AEEF", - "Objects.RedStatus": "#e06c75", - "Objects.Red": "#e06c75", - "Objects.Pink": "#C679DD", - "Objects.Yellow": "#E5C17C", - "Objects.Green": "#98C379", - "Objects.Purple": "#C679DD", - "Objects.BlackText": "#979FAD", - "Objects.YellowDark": "#D19A66", - "Objects.GreenAndroid": "#98C379" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Atom One Light Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Atom One Light Contrast.theme.json index ab7bd5f3..a3374c18 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Atom One Light Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Atom One Light Contrast.theme.json @@ -1,1005 +1,1090 @@ { - "name": "Atom One Light", + "name": "Atom One Light Contrast", "dark": false, "author": "Mallowigi", + "colors": { + "bg": "#F4F4F4", + "bg30": "#F4F4F430", + "fg": "#232324", + "text": "#7f7f7f", + "selBg": "#FFFFFF", + "selFg": "#232324", + "activeFg": "#232324", + "border": "#DBDBDC", + "excl": "#CACACB", + "second": "#EAEAEB", + "dis": "#b8b8b9", + "accent": "#2979ff", + "accent2": "#2979ff2", + "accent50": "#2979ff50", + "accent70": "#2979ff70", + "cs": "#eaeaea", + "button": "#DBDBDC", + "table": "#DBDBDC", + "tree": "#dbdbdc", + "hl": "#DBDBDC", + "notif": "#F2F2F2", + "hc": "#eaeaea", + "white": "#986801", + "blue": "#4078F2", + "red": "#E4564A", + "yellow": "#C18401", + "green": "#50A14E", + "gray": "#A0A1A7", + "purple": "#A626A4", + "orange": "#986801" + }, "editorScheme": "colors/Atom One Light.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#7f7f7f", - "background": "#F4F4F4", - "borderColor": "#DBDBDC", - "disabledBackground": "#CACACB", - "disabledForeground": "#b8b8b9", - "disabledText": "#b8b8b9", - "focusColor": "#FFFFFF", - "focusedBorderColor": "#2979ff", - "foreground": "#232324", - "inactiveBackground": "#CACACB", - "inactiveForeground": "#7f7f7f", - "infoForeground": "#7f7f7f", - "selectionBackground": "#FFFFFF", - "selectionBackgroundInactive": "#EAEAEB", - "selectionForeground": "#232324", - "selectionInactiveBackground": "#EAEAEB", - "separatorColor": "#DBDBDC" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#F4F4F4", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#2979ff50", - "hoverBorderColor": "#2979ff50", - "hoverSeparatorColor": "#DBDBDC", - "focusedBorderColor": "#2979ff50", - "pressedBackground": "#2979ff50", - "pressedBorderColor": "#2979ff50" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#FFFFFF" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#F4F4F4", - "Borders.color": "#DBDBDC", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#F4F4F4", + "background": "bg", "default": { - "endBackground": "#DBDBDC", - "endBorderColor": "#DBDBDC", - "foreground": "#232324", - "focusColor": "#2979ff", - "focusedBorderColor": "#2979ff", - "shadowColor": "#DBDBDC", - "startBackground": "#DBDBDC", - "startBorderColor": "#DBDBDC" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#DBDBDC", - "disabledText": "#b8b8b9", - "endBackground": "#DBDBDC", - "endBorderColor": "#DBDBDC", - "focus": "#FFFFFF", - "focusedBorderColor": "#2979ff", - "foreground": "#7f7f7f", - "highlight": "#232324", - "mt.background": "#DBDBDC", - "mt.foreground": "#7f7f7f", - "mt.selectedForeground": "#232324", - "mt.selection.color1": "#DBDBDC", - "mt.selection.color2": "#DBDBDC", - "startBackground": "#DBDBDC", - "startBorderColor": "#DBDBDC", - "shadowColor": "#DBDBDC", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#DBDBDC", - "Tooltip.background": "#F2F2F2" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#eaeae", - "selectionBackground": "#FFFFFF" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#F4F4F4", - "disabledText": "#b8b8b9", - "foreground": "#232324", - "select": "#2979ff" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#7f7f7f", - "acceleratorSelectionForeground": "#7f7f7f", - "background": "#F4F4F4", - "disabledBackground": "#F4F4F4", - "disabledForeground": "#b8b8b9", - "foreground": "#232324", - "selectionBackground": "#FFFFFF", - "selectionForeground": "#232324" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#232324", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#2979ff", - "dropdownBorder": "#EAEAEB", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#F4F4F4", - "foreground": "#232324", - "swatchesDefaultRecentColor": "#232324" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#DBDBDC", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#DBDBDC", - "disabledIconColor": "#b8b8b9", - "iconColor": "#232324", - "nonEditableBackground": "#F4F4F4" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#eaeae", - "buttonBackground": "#DBDBDC", - "darcula.hoveredArrowButtonForeground": "#2979ff", - "disabledForeground": "#b8b8b9", - "foreground": "#232324", - "modifiedItemForeground": "#2979ff", - "nonEditableBackground": "#EAEAEB", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#DBDBDC", - "selectionForeground": "#232324" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#DBDBDC", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#EAEAEB", - "foreground": "#232324", - "infoForeground": "#7f7f7f", - "matchForeground": "#2979ff", - "matchSelectionForeground": "#2979ff", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#232324", - "selectedGrayedForeground": "#232324", - "selectionGrayForeground": "#232324", - "selectionInactiveInfoForeground": "#7f7f7f", - "selectionInactiveBackground": "#FFFFFF", - "selectionBackground": "#FFFFFF", - "selectionForeground": "#232324", - "selectionInfoForeground": "#232324" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#FFFFFF", - "disabledBorderColor": "#DBDBDC", - "focusColor": "#2979ff", - "focusedBorderColor": "#2979ff", - "hoverIconColor": "#2979ff", - "infoForeground": "#7f7f7f", - "iconColor": "#232324" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#F4F4F4", - "controlText": "#7f7f7f", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#2979ff", - "foreground": "#232324" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#7f7f7f", - "changedValueForeground": "#2979ff", - "errorMessageForeground": "#E4564A", - "evaluatingExpressionForeground": "#7f7f7f", - "exceptionForeground": "#C18401", - "modifyingValueForeground": "#2979ff", - "valueForeground": "#2979ff" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#FFFFFF", - "underlinedTabBackground": "#FFFFFF" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#FFFFFF" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#F4F4F4", - "borderColor": "#F4F4F4", - "hoverBackground": "#DBDBDC", - "hoverColor": "#eaeae", - "hoverMaskColor": "#FFFFFF", - "inactiveColoredTabBackground": "#F4F4F4", - "inactiveColoredFileBackground": "#DBDBDC", - "inactiveUnderlineColor": "#2979ff", - "inactiveMaskColor": "#eaeae", - "underlineColor": "#2979ff", - "underlinedTabBackground": "#DBDBDC", - "underlinedTabForeground": "#232324" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#F4F4F4", - "DialogWrapper.southPanelBackground": "#F4F4F4", - "DialogWrapper.southPanelDivider": "#F4F4F4", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#F4F4F4", - "areaBorderColor": "#F4F4F4", - "areaForeground": "#232324" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#eaeae", - "foreground": "#232324", - "shortcutForeground": "#7f7f7f" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#eaeae", - "caretForeground": "#2979ff", - "foreground": "#232324", - "inactiveBackground": "#F4F4F4", - "inactiveForeground": "#b8b8b9", - "selectionBackground": "#FFFFFF", - "selectionForeground": "#232324" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#EAEAEB", - "hoverBackground": "#FFFFFF", - "hoverColor": "#FFFFFF", - "hoverMaskColor": "#FFFFFF", - "inactiveMaskColor": "#F4F4F4", - "inactiveColoredFileBackground": "#F4F4F4", - "inactiveUnderlineColor": "#b8b8b9", - "selectedForeground": "#232324", - "selectedBackground": "#DBDBDC", - "underlineColor": "#2979ff", - "underlinedTabBackground": "#DBDBDC", - "underlinedTabForeground": "#232324" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#F4F4F4", - "borderColor": "#EAEAEB", - "hoverBackground": "#FFFFFF", - "hoverColor": "#FFFFFF", - "inactiveUnderlineColor": "#2979ff", - "underlineColor": "#2979ff", - "underlinedTabBackground": "#DBDBDC", - "underlinedTabForeground": "#232324" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#CACACB", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#DBDBDC", + "Focus.color": "border", "FormattedTextField": { - "background": "#eaeae", - "caretForeground": "#2979ff", - "foreground": "#232324", - "inactiveBackground": "#DBDBDC", - "inactiveForeground": "#b8b8b9", - "selectionForeground": "#232324", - "selectionBackground": "#DBDBDC" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#F2F2F2", "Group": { - "disabledSeparatorColor": "#DBDBDC", - "separatorColor": "#DBDBDC" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#7f7f7f", - "lineSeparatorColor": "#F4F4F4" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#F4F4F4", - "inactive": "#eaeae" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#F4F4F4", - "borderColor": "#DBDBDC", - "foreground": "#232324", - "infoForeground": "#7f7f7f", - "shortcutForeground": "#7f7f7f" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#2979ff", - "inactiveCaption": "#EAEAEB", - "inactiveCaptionBorder": "#F4F4F4", - "inactiveCaptionText": "#7f7f7f", - "info": "#7f7f7f", - "infoText": "#7f7f7f", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#DBDBDC", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#F4F4F4" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#232324", - "background": "#F4F4F4", - "inactiveTitleForeground": "#7f7f7f" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#F4F4F4", - "disabledForeground": "#b8b8b9", - "disabledShadow": "#F4F4F4", - "disabledText": "#b8b8b9", - "foreground": "#232324", - "infoForeground": "#7f7f7f", - "selectedForeground": "#232324", - "selectedDisabledForeground": "#232324" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#2979ff", - "hoverForeground": "#2979ff", - "pressedForeground": "#2979ff", - "secondaryForeground": "#7f7f7f", - "visitedForeground": "#2979ff" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#2979ff", + "link.foreground": "accent", "List": { - "background": "#EAEAEB", - "foreground": "#232324", - "hoverBackground": "#DBDBDC80", - "hoverInactiveBackground": "#DBDBDC", - "selectionBackground": "#FFFFFF", - "selectionForeground": "#232324", - "selectionInactiveForeground": "#232324", - "selectionInactiveBackground": "#DBDBDC80" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#F4F4F4", - "branchColor": "#232324", - "contrast": "#eaeae", - "foreground": "#232324", - "mergeCommits": "#DBDBDC", - "primaryColor": "#7f7f7f", - "selectionForeground": "#232324", - "tab.backgroundColor": "#F4F4F4", - "tab.borderColor": "#2979ff", - "tagColor": "#7f7f7f" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#EAEAEB", - "usedColor": "#FFFFFF", - "usedBackground": "#FFFFFF" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#7f7f7f", - "acceleratorSelectionForeground": "#232324", - "background": "#F4F4F4", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#EAEAEB", - "disabledBackground": "#EAEAEB", - "disabledForeground": "#b8b8b9", - "foreground": "#232324", - "selectionBackground": "#FFFFFF", - "selectionForeground": "#232324", - "separatorColor": "#DBDBDC" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#eaeae", - "borderColor": "#F4F4F4", - "disabledBackground": "#F4F4F4", - "disabledForeground": "#b8b8b9", - "foreground": "#232324", - "highlight": "#F4F4F4", - "selectionBackground": "#FFFFFF", - "selectionForeground": "#232324", - "shadow": "#eaeae" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#7f7f7f", - "acceleratorSelectionForeground": "#232324", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#F4F4F4", - "disabledBackground": "#F4F4F4", - "disabledForeground": "#b8b8b9", - "foreground": "#232324", - "selectionBackground": "#FFFFFF", - "selectionForeground": "#232324" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#232324", - "borderColor": "#F4F4F4" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#F4F4F4" + "background": "bg" }, "SearchField": { - "background": "#eaeae" + "background": "hc" } }, - "NewPSD.warning": "#2979ff", + "NewPSD.warning": "accent", "Notification": { - "background": "#F2F2F2", - "borderColor": "#F2F2F2", - "errorBackground": "#F2F2F2", - "errorBorderColor": "#F2F2F2", - "foreground": "#232324", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#DBDBDC", - "foreground": "#232324", - "innerBorderColor": "#DBDBDC" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#F2F2F2", - "errorBorderColor": "#F2F2F2", - "informativeBackground": "#F2F2F2", - "informativeBorderColor": "#F2F2F2", - "warningBackground": "#F2F2F2", - "warningBorderColor": "#F2F2F2" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#DBDBDC", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#F4F4F4", - "foreground": "#232324", - "messageForeground": "#232324" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#DBDBDC", - "focusedColor": "#2979ff", - "disabledColor": "#b8b8b9" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#F4F4F4", - "foreground": "#232324" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#EAEAEB", - "borderColor": "#DBDBDC", - "currentOverloadBackground": "#FFFFFF", - "currentParameterForeground": "#2979ff", - "disabledForeground": "#b8b8b9", - "foreground": "#232324", - "infoForeground": "#7f7f7f", - "lineSeparatorColor": "#DBDBDC" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#eaeae", - "capsLockIconColor": "#2979ff", - "caretForeground": "#2979ff", - "foreground": "#232324", - "inactiveForeground": "#b8b8b9", - "selectionBackground": "#DBDBDC", - "selectionForeground": "#232324" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#F4F4F4", - "disabledForeground": "#b8b8b9", - "eapTagBackground": "#FFFFFF", - "hoverBackground": "#DBDBDC80", - "lightSelectionBackground": "#DBDBDC", - "paidTagBackground": "#FFFFFF", - "selectionBackground": "#FFFFFF", - "tagForeground": "#2979ff", - "tagBackground": "#FFFFFF", - "trialTagBackground": "#FFFFFF", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#DBDBDC", - "installBorderColor": "#DBDBDC", - "installForeground": "#232324", - "installFocusedBackground": "#FFFFFF", - "installFillForeground": "#b8b8b9", - "installFillBackground": "#DBDBDC", - "updateBackground": "#2979ff", - "updateBorderColor": "#DBDBDC", - "updateForeground": "#232324" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#eaeae", - "borderColor": "#DBDBDC" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#EAEAEB", - "foreground": "#232324" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#DBDBDC", - "selectedForeground": "#232324", - "selectedBackground": "#DBDBDC" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#F4F4F4", - "borderColor": "#F4F4F4", - "foreground": "#2979ff" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#eaeae", - "inactiveBorderColor": "#F4F4F4", - "innerBorderColor": "#EAEAEB", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#F4F4F4", - "inactiveBackground": "#eaeae" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#232324", - "separatorColor": "#EAEAEB", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#eaeae", - "background": "#eaeae", - "borderColor": "#eaeae" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#F4F4F4", + "background": "bg", "border": "2,0,2,0", - "foreground": "#232324", - "translucentBackground": "#F4F4F4" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#F4F4F4", - "foreground": "#2979ff", - "indeterminateEndColor": "#2979ff", - "indeterminateStartColor": "#2979ff", - "progressColor": "#2979ff", - "selectionBackground": "#FFFFFF", - "trackColor": "#FFFFFF" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#2979ff" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#F4F4F4", - "disabledText": "#b8b8b9", - "foreground": "#232324" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#7f7f7f", - "acceleratorSelectionForeground": "#7f7f7f", - "background": "#F4F4F4", - "disabledBackground": "#F4F4F4", - "disabledForeground": "#b8b8b9", - "foreground": "#232324", - "selectionBackground": "#FFFFFF", - "selectionForeground": "#232324" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#DBDBDC", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#F4F4F4", - "hoverThumbBorderColor": "#2979ff", - "hoverThumbColor": "#2979ff", - "hoverTrackColor": "#F4F4F430", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#2979ff", - "hoverThumbColor": "#2979ff", - "hoverTrackColor": "#F4F4F430", - "thumbBorderColor": "#2979ff70", - "thumbColor": "#2979ff70", - "trackColor": "#F4F4F430", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#2979ff", - "hoverThumbColor": "#2979ff", - "hoverTrackColor": "#F4F4F430", - "thumbBorderColor": "#2979ff70", - "thumbColor": "#2979ff70", - "trackColor": "#F4F4F430" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#FFFFFF", - "thumbBorderColor": "#2979ff70", - "thumbColor": "#2979ff70", - "trackColor": "#F4F4F430", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#2979ff", - "hoverThumbColor": "#2979ff", - "hoverTrackColor": "#F4F4F430", - "thumbBorderColor": "#2979ff70", - "thumbColor": "#2979ff70", - "trackColor": "#F4F4F430" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#eaeae", - "foreground": "#7f7f7f" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#F4F4F4" + "background": "bg" }, "List": { - "separatorForeground": "#7f7f7f", - "separatorColor": "#DBDBDC" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#F4F4F4", - "borderColor": "#eaeae", - "infoForeground": "#7f7f7f" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#232324", - "selectedForeground": "#232324", - "selectedBackground": "#FFFFFF" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#2979ff", - "startBackground": "#2979ff", - "endColor": "#2979ff", - "startColor": "#2979ff" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#F2F2F2", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#DBDBDC" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#7f7f7f", - "Repeated.File.Foreground": "#232324" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#EAEAEB", - "foreground": "#EAEAEB", - "separatorColor": "#EAEAEB" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#eaeae" + "background": "hc" }, "Slider": { - "background": "#F4F4F4", - "buttonBorderColor": "#2979ff", - "buttonColor": "#2979ff", - "foreground": "#232324", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#EAEAEB", - "trackColor": "#DBDBDC", - "trackWidth": 7, - "thumb": "#2979ff" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#FFFFFF", - "borderColor": "#DBDBDC", - "foreground": "#232324", - "errorForeground": "#232324" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#F4F4F4", + "background": "bg", "border": "3,3,3,3", - "foreground": "#232324", - "selectionForeground": "#232324" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#F4F4F4", - "highlight": "#eaeae" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#EAEAEB", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#F4F4F4", - "hoverBackground": "#FFFFFF", - "LightEditBackground": "#DBDBDC" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#F4F4F4", - "contentAreaColor": "#FFFFFF", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#DBDBDC", - "disabledForeground": "#b8b8b9", - "disabledUnderlineColor": "#b8b8b9", - "focus": "#DBDBDC", - "focusColor": "#DBDBDC", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#232324", - "highlight": "#DBDBDC", - "hoverColor": "#FFFFFF", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#232324", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#2979ff" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#eaeae", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#eaeae", - "background": "#F4F4F4", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#b8b8b9", - "dropLineColor": "#2979ff", - "dropLineShortColor": "#2979ff", - "focusCellBackground": "#DBDBDC", - "focusCellForeground": "#232324", - "foreground": "#232324", - "gridColor": "#F4F4F4", - "highlightOuter": "#DBDBDC", - "hoverBackground": "#DBDBDC80", - "hoverInactiveBackground": "#DBDBDC", - "lightSelectionForeground": "#232324", - "lightSelectionInactiveForeground": "#7f7f7f", - "lightSelectionInactiveBackground": "#EAEAEB", - "selectionBackground": "#DBDBDC", - "selectionForeground": "#232324", - "selectionInactiveBackground": "#DBDBDC", - "selectionInactiveForeground": "#232324", - "sortIconColor": "#232324", - "stripeColor": "#eaeae" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#F4F4F4", - "borderColor": "#F4F4F4", - "bottomSeparatorColor": "#EAEAEB", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#b8b8b9", - "foreground": "#232324", - "focusCellBackground": "#DBDBDC", - "focusCellForeground": "#232324", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#EAEAEB" + "separatorColor": "second" }, - "text": "#7f7f7f", - "textInactiveText": "#7f7f7f", - "textText": "#7f7f7f", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#eaeae", - "caretForeground": "#2979ff", - "foreground": "#232324", - "inactiveForeground": "#b8b8b9", - "selectionBackground": "#DBDBDC", - "selectionForeground": "#232324" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#eaeae", - "caretForeground": "#2979ff", - "foreground": "#232324", - "inactiveForeground": "#b8b8b9", - "selectionBackground": "#DBDBDC", - "selectionForeground": "#232324" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#eaeae", - "caretForeground": "#2979ff", - "foreground": "#232324", - "inactiveForeground": "#b8b8b9", - "selectionBackground": "#DBDBDC", - "selectionForeground": "#232324" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#eaeae", - "Button.hoverBackground": "#FFFFFF", - "inactiveBackground": "#F4F4F4", - "infoForeground": "#7f7f7f", - "inactiveInfoForeground": "#7f7f7f" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#232324", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#DBDBDC", - "buttonColor": "#232324", - "disabledText": "#b8b8b9", - "foreground": "#232324", - "offForeground": "#F4F4F4", - "offBackground": "#F4F4F4", - "onBackground": "#2979ff", - "onForeground": "#2979ff" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#eaeae", - "borderHandleColor": "#7f7f7f", - "floatingForeground": "#7f7f7f", - "foreground": "#232324" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#F4F4F4", - "Actions.infoForeground": "#7f7f7f", - "background": "#F2F2F2", - "borderColor": "#DBDBDC", - "foreground": "#232324", - "infoForeground": "#7f7f7f", - "separatorColor": "#DBDBDC", - "shortcutForeground": "#7f7f7f" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#DBDBDC", - "selectedForeground": "#232324", - "selectedBackground": "#eaeae" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#F4F4F4", - "borderColor": "#EAEAEB", - "inactiveBackground": "#F4F4F4" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#F4F4F4" + "background": "bg" }, "HeaderTab": { - "borderColor": "#FFFFFF", - "hoverBackground": "#FFFFFF", - "hoverInactiveBackground": "#FFFFFF", - "inactiveUnderlineColor": "#2979ff", - "selectedBackground": "#eaeae", - "selectedInactiveBackground": "#eaeae", - "underlineColor": "#2979ff", - "underlinedTabBackground": "#DBDBDC", - "underlinedTabInactiveBackground": "#EAEAEB", - "underlinedTabForeground": "#232324", - "underlinedTabInactiveForeground": "#232324" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#eaeae", - "foreground": "#7f7f7f", - "hash": "#DBDBDC", - "hoverBackground": "#DBDBDC80", - "hoverInactiveBackground": "#DBDBDC", - "modifiedItemForeground": "#2979ff", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#DBDBDC80", - "selectionForeground": "#232324", - "selectionInactiveForeground": "#232324", - "selectionInactiveBackground": "#DBDBDC80", - "textBackground": "#eaeae" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#DBDBDC", - "Canvas.background": "#eaeae", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#F4F4F4", - "foreground": "#232324" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#DBDBDC", - "background": "#F4F4F4", - "foreground": "#232324", - "hoverBorderColor": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#DBDBDC", - "hoverBorderColor": "#FFFFFF" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#eaeae", - "highStroke.foreground": "#232324", - "Label.foreground": "#7f7f7f", - "List.selectionBackground": "#DBDBDC80", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#DBDBDC", - "Component.foreground": "#232324", - "ConstraintSetText.foreground": "#7f7f7f", - "ConstraintSet.background": "#EAEAEB", - "CSPanel.SelectedFocusBackground": "#FFFFFF", - "CSPanel.SelectedBackground": "#DBDBDC80", - "cs_FocusText.infoForeground": "#7f7f7f", - "CursorTextColor.foreground": "#232324", - "HoverColor.disabledBackground": "#b8b8b9", - "motionGraph.background": "#F4F4F4", - "Notification.background": "#F2F2F2", - "ourAvg.background": "#EAEAEB", - "ourCS.background": "#EAEAEB", - "ourCS_Border.borderColor": "#DBDBDC", - "ourCS_TextColor.foreground": "#7f7f7f", - "ourCS_SelectedFocusBackground.selectionForeground": "#232324", - "ourCS_SelectedBackground.selectionInactiveBackground": "#DBDBDC", - "ourCS_SelectedBorder.pressedBorderColor": "#FFFFFF", - "ourML_BarColor.separatorColor": "#DBDBDC", - "PrimaryPanel.background": "#eaeae", - "SecondaryPanel.background": "#F4F4F4", - "SecondaryPanel.header.foreground": "#7f7f7f", - "SecondaryPanel.header.background": "#eaeae", - "timeLine.disabledBorderColor": "#DBDBDC" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#DBDBDC", - "background": "#F4F4F4" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#232324", + "percent.foreground": "fg", "Placeholder": { - "background": "#F4F4F4", - "borderColor": "#DBDBDC", - "foreground": "#232324", - "selectedForeground": "#232324" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#F4F4F4", - "stroke.acceleratorForeground": "#7f7f7f" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#F2F2F2", - "errorBorderColor": "#F2F2F2", - "warningBackground": "#F2F2F2", - "warningBorderColor": "#F2F2F2" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#F4F4F4" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#FFFFFF" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#2979ff", - "otherIconColor": "#7f7f7f", - "remoteBranchIconColor": "#232324", - "tagIconColor": "#7f7f7f" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#2979ff", - "bookmarkIconColor": "#232324", - "closedBranchIconColor": "#b8b8b9", - "localTagIconColor": "#7f7f7f", - "mqTagIconColor": "#7f7f7f", - "tagIconColor": "#7f7f7f", - "tipIconColor": "#7f7f7f" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#7f7f7f", - "Commit.currentBranchBackground": "#EAEAEB", - "Commit.hoveredBackground": "#DBDBDC80" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#232324", - "backgroundBase": "#FFFFFF" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#eaeae", - "foreground": "#232324" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#F4F4F4", - "background": "#F4F4F4", - "borderColor": "#F4F4F4", - "captionBackground": "#eaeae", - "captionForeground": "#232324", - "Details.background": "#F4F4F4", - "footerBackground": "#eaeae", - "footerForeground": "#232324", - "headerBackground": "#F4F4F4", - "headerForeground": "#232324", - "List.background": "#eaeae", - "separatorColor": "#DBDBDC", - "SidePanel.background": "#EAEAEB", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#eaeae", - "actions.selectionBackground": "#FFFFFF", - "background": "#EAEAEB", - "selectionBackground": "#FFFFFF", - "selectionInactiveBackground": "#EAEAEB" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#eaeae", - "windowBorder": "#DBDBDC", - "windowText": "#7f7f7f", - "Window.border": "#DBDBDC" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#eaeae", - "#6B6B6B": "#7f7f7f", - "#A7A7A7": "#F4F4F4", - "#3D6185": "#2979ff", - "#466D94": "#2979ff", - "#3C3F41": "#F4F4F4", - "#545556": "#b8b8b9", - "#606060": "#b8b8b9", - "#9AA7B0": "#232324", - "#675133": "#2979ff", - "Actions.Blue": "#4078F2", - "Actions.Green": "#50A14E", - "Actions.Grey": "#7f7f7f", - "Actions.GreyInline": "#A0A1A7", - "Actions.GreyInline.Dark": "#232324", - "Actions.Red": "#E4564A", - "Actions.Yellow": "#C18401", - "Checkbox.Background.Default": "#eaeae", - "Checkbox.Background.Default.Dark": "#eaeae", - "Checkbox.Background.Disabled": "#CACACB", - "Checkbox.Background.Disabled.Dark": "#CACACB", - "Checkbox.Border.Default": "#DBDBDC", - "Checkbox.Border.Default.Dark": "#DBDBDC", - "Checkbox.Border.Disabled": "#b8b8b9", - "Checkbox.Border.Disabled.Dark": "#b8b8b9", - "Checkbox.Focus.Thin.Default": "#2979ff", - "Checkbox.Focus.Thin.Default.Dark": "#2979ff", - "Checkbox.Focus.Wide": "#2979ff", - "Checkbox.Focus.Wide.Dark": "#2979ff", - "Checkbox.Foreground.Disabled": "#b8b8b9", - "Checkbox.Foreground.Disabled.Dark": "#b8b8b9", - "Checkbox.Background.Selected": "#2979ff", - "Checkbox.Background.Selected.Dark": "#F4F4F4", - "Checkbox.Border.Selected": "#2979ff", - "Checkbox.Border.Selected.Dark": "#2979ff", - "Checkbox.Foreground.Selected": "#2979ff", - "Checkbox.Foreground.Selected.Dark": "#2979ff", - "Checkbox.Focus.Thin.Selected": "#232324", - "Checkbox.Focus.Thin.Selected.Dark": "#232324", - "Objects.Grey": "#A0A1A7", - "Objects.Blue": "#4078F2", - "Objects.RedStatus": "#E4564A", - "Objects.Red": "#E4564A", - "Objects.Pink": "#A626A4", - "Objects.Yellow": "#C18401", - "Objects.Green": "#50A14E", - "Objects.Purple": "#A626A4", - "Objects.BlackText": "#232324", - "Objects.YellowDark": "#986801", - "Objects.GreenAndroid": "#50A14E" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Atom One Light.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Atom One Light.theme.json index ce32924a..db3b5085 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Atom One Light.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Atom One Light.theme.json @@ -2,1004 +2,1089 @@ "name": "Atom One Light", "dark": false, "author": "Mallowigi", + "colors": { + "bg": "#F4F4F4", + "bg30": "#F4F4F430", + "fg": "#232324", + "text": "#7f7f7f", + "selBg": "#FFFFFF", + "selFg": "#232324", + "activeFg": "#232324", + "border": "#DBDBDC", + "excl": "#CACACB", + "second": "#EAEAEB", + "dis": "#b8b8b9", + "accent": "#2979ff", + "accent2": "#2979ff2", + "accent50": "#2979ff50", + "accent70": "#2979ff70", + "cs": "#eaeaea", + "button": "#DBDBDC", + "table": "#DBDBDC", + "tree": "#dbdbdc", + "hl": "#DBDBDC", + "notif": "#F2F2F2", + "hc": "#F4F4F4", + "white": "#986801", + "blue": "#4078F2", + "red": "#E4564A", + "yellow": "#C18401", + "green": "#50A14E", + "gray": "#A0A1A7", + "purple": "#A626A4", + "orange": "#986801" + }, "editorScheme": "colors/Atom One Light.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#7f7f7f", - "background": "#F4F4F4", - "borderColor": "#DBDBDC", - "disabledBackground": "#CACACB", - "disabledForeground": "#b8b8b9", - "disabledText": "#b8b8b9", - "focusColor": "#FFFFFF", - "focusedBorderColor": "#2979ff", - "foreground": "#232324", - "inactiveBackground": "#CACACB", - "inactiveForeground": "#7f7f7f", - "infoForeground": "#7f7f7f", - "selectionBackground": "#FFFFFF", - "selectionBackgroundInactive": "#EAEAEB", - "selectionForeground": "#232324", - "selectionInactiveBackground": "#EAEAEB", - "separatorColor": "#DBDBDC" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#F4F4F4", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#2979ff50", - "hoverBorderColor": "#2979ff50", - "hoverSeparatorColor": "#DBDBDC", - "focusedBorderColor": "#2979ff50", - "pressedBackground": "#2979ff50", - "pressedBorderColor": "#2979ff50" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#FFFFFF" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#F4F4F4", - "Borders.color": "#DBDBDC", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#F4F4F4", + "background": "bg", "default": { - "endBackground": "#DBDBDC", - "endBorderColor": "#DBDBDC", - "foreground": "#232324", - "focusColor": "#2979ff", - "focusedBorderColor": "#2979ff", - "shadowColor": "#DBDBDC", - "startBackground": "#DBDBDC", - "startBorderColor": "#DBDBDC" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#DBDBDC", - "disabledText": "#b8b8b9", - "endBackground": "#DBDBDC", - "endBorderColor": "#DBDBDC", - "focus": "#FFFFFF", - "focusedBorderColor": "#2979ff", - "foreground": "#7f7f7f", - "highlight": "#232324", - "mt.background": "#DBDBDC", - "mt.foreground": "#7f7f7f", - "mt.selectedForeground": "#232324", - "mt.selection.color1": "#DBDBDC", - "mt.selection.color2": "#DBDBDC", - "startBackground": "#DBDBDC", - "startBorderColor": "#DBDBDC", - "shadowColor": "#DBDBDC", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#DBDBDC", - "Tooltip.background": "#F2F2F2" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#eaeae", - "selectionBackground": "#FFFFFF" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#F4F4F4", - "disabledText": "#b8b8b9", - "foreground": "#232324", - "select": "#2979ff" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#7f7f7f", - "acceleratorSelectionForeground": "#7f7f7f", - "background": "#F4F4F4", - "disabledBackground": "#F4F4F4", - "disabledForeground": "#b8b8b9", - "foreground": "#232324", - "selectionBackground": "#FFFFFF", - "selectionForeground": "#232324" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#232324", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#2979ff", - "dropdownBorder": "#EAEAEB", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#F4F4F4", - "foreground": "#232324", - "swatchesDefaultRecentColor": "#232324" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#DBDBDC", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#DBDBDC", - "disabledIconColor": "#b8b8b9", - "iconColor": "#232324", - "nonEditableBackground": "#F4F4F4" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#F4F4F4", - "buttonBackground": "#DBDBDC", - "darcula.hoveredArrowButtonForeground": "#2979ff", - "disabledForeground": "#b8b8b9", - "foreground": "#232324", - "modifiedItemForeground": "#2979ff", - "nonEditableBackground": "#EAEAEB", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#DBDBDC", - "selectionForeground": "#232324" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#DBDBDC", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#EAEAEB", - "foreground": "#232324", - "infoForeground": "#7f7f7f", - "matchForeground": "#2979ff", - "matchSelectionForeground": "#2979ff", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#232324", - "selectedGrayedForeground": "#232324", - "selectionGrayForeground": "#232324", - "selectionInactiveInfoForeground": "#7f7f7f", - "selectionInactiveBackground": "#FFFFFF", - "selectionBackground": "#FFFFFF", - "selectionForeground": "#232324", - "selectionInfoForeground": "#232324" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#FFFFFF", - "disabledBorderColor": "#DBDBDC", - "focusColor": "#2979ff", - "focusedBorderColor": "#2979ff", - "hoverIconColor": "#2979ff", - "infoForeground": "#7f7f7f", - "iconColor": "#232324" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#F4F4F4", - "controlText": "#7f7f7f", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#2979ff", - "foreground": "#232324" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#7f7f7f", - "changedValueForeground": "#2979ff", - "errorMessageForeground": "#E4564A", - "evaluatingExpressionForeground": "#7f7f7f", - "exceptionForeground": "#C18401", - "modifyingValueForeground": "#2979ff", - "valueForeground": "#2979ff" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#FFFFFF", - "underlinedTabBackground": "#FFFFFF" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#FFFFFF" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#F4F4F4", - "borderColor": "#F4F4F4", - "hoverBackground": "#DBDBDC", - "hoverColor": "#F4F4F4", - "hoverMaskColor": "#FFFFFF", - "inactiveColoredTabBackground": "#F4F4F4", - "inactiveColoredFileBackground": "#DBDBDC", - "inactiveUnderlineColor": "#2979ff", - "inactiveMaskColor": "#F4F4F4", - "underlineColor": "#2979ff", - "underlinedTabBackground": "#DBDBDC", - "underlinedTabForeground": "#232324" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#F4F4F4", - "DialogWrapper.southPanelBackground": "#F4F4F4", - "DialogWrapper.southPanelDivider": "#F4F4F4", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#F4F4F4", - "areaBorderColor": "#F4F4F4", - "areaForeground": "#232324" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#F4F4F4", - "foreground": "#232324", - "shortcutForeground": "#7f7f7f" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#F4F4F4", - "caretForeground": "#2979ff", - "foreground": "#232324", - "inactiveBackground": "#F4F4F4", - "inactiveForeground": "#b8b8b9", - "selectionBackground": "#FFFFFF", - "selectionForeground": "#232324" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#EAEAEB", - "hoverBackground": "#FFFFFF", - "hoverColor": "#FFFFFF", - "hoverMaskColor": "#FFFFFF", - "inactiveMaskColor": "#F4F4F4", - "inactiveColoredFileBackground": "#F4F4F4", - "inactiveUnderlineColor": "#b8b8b9", - "selectedForeground": "#232324", - "selectedBackground": "#DBDBDC", - "underlineColor": "#2979ff", - "underlinedTabBackground": "#DBDBDC", - "underlinedTabForeground": "#232324" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#F4F4F4", - "borderColor": "#EAEAEB", - "hoverBackground": "#FFFFFF", - "hoverColor": "#FFFFFF", - "inactiveUnderlineColor": "#2979ff", - "underlineColor": "#2979ff", - "underlinedTabBackground": "#DBDBDC", - "underlinedTabForeground": "#232324" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#CACACB", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#DBDBDC", + "Focus.color": "border", "FormattedTextField": { - "background": "#F4F4F4", - "caretForeground": "#2979ff", - "foreground": "#232324", - "inactiveBackground": "#DBDBDC", - "inactiveForeground": "#b8b8b9", - "selectionForeground": "#232324", - "selectionBackground": "#DBDBDC" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#F2F2F2", "Group": { - "disabledSeparatorColor": "#DBDBDC", - "separatorColor": "#DBDBDC" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#7f7f7f", - "lineSeparatorColor": "#F4F4F4" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#F4F4F4", - "inactive": "#eaeae" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#F4F4F4", - "borderColor": "#DBDBDC", - "foreground": "#232324", - "infoForeground": "#7f7f7f", - "shortcutForeground": "#7f7f7f" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#2979ff", - "inactiveCaption": "#EAEAEB", - "inactiveCaptionBorder": "#F4F4F4", - "inactiveCaptionText": "#7f7f7f", - "info": "#7f7f7f", - "infoText": "#7f7f7f", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#DBDBDC", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#F4F4F4" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#232324", - "background": "#F4F4F4", - "inactiveTitleForeground": "#7f7f7f" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#F4F4F4", - "disabledForeground": "#b8b8b9", - "disabledShadow": "#F4F4F4", - "disabledText": "#b8b8b9", - "foreground": "#232324", - "infoForeground": "#7f7f7f", - "selectedForeground": "#232324", - "selectedDisabledForeground": "#232324" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#2979ff", - "hoverForeground": "#2979ff", - "pressedForeground": "#2979ff", - "secondaryForeground": "#7f7f7f", - "visitedForeground": "#2979ff" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#2979ff", + "link.foreground": "accent", "List": { - "background": "#EAEAEB", - "foreground": "#232324", - "hoverBackground": "#DBDBDC80", - "hoverInactiveBackground": "#DBDBDC", - "selectionBackground": "#FFFFFF", - "selectionForeground": "#232324", - "selectionInactiveForeground": "#232324", - "selectionInactiveBackground": "#DBDBDC80" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#F4F4F4", - "branchColor": "#232324", - "contrast": "#eaeae", - "foreground": "#232324", - "mergeCommits": "#DBDBDC", - "primaryColor": "#7f7f7f", - "selectionForeground": "#232324", - "tab.backgroundColor": "#F4F4F4", - "tab.borderColor": "#2979ff", - "tagColor": "#7f7f7f" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#EAEAEB", - "usedColor": "#FFFFFF", - "usedBackground": "#FFFFFF" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#7f7f7f", - "acceleratorSelectionForeground": "#232324", - "background": "#F4F4F4", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#EAEAEB", - "disabledBackground": "#EAEAEB", - "disabledForeground": "#b8b8b9", - "foreground": "#232324", - "selectionBackground": "#FFFFFF", - "selectionForeground": "#232324", - "separatorColor": "#DBDBDC" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#F4F4F4", - "borderColor": "#F4F4F4", - "disabledBackground": "#F4F4F4", - "disabledForeground": "#b8b8b9", - "foreground": "#232324", - "highlight": "#F4F4F4", - "selectionBackground": "#FFFFFF", - "selectionForeground": "#232324", - "shadow": "#F4F4F4" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#7f7f7f", - "acceleratorSelectionForeground": "#232324", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#F4F4F4", - "disabledBackground": "#F4F4F4", - "disabledForeground": "#b8b8b9", - "foreground": "#232324", - "selectionBackground": "#FFFFFF", - "selectionForeground": "#232324" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#232324", - "borderColor": "#F4F4F4" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#F4F4F4" + "background": "bg" }, "SearchField": { - "background": "#F4F4F4" + "background": "hc" } }, - "NewPSD.warning": "#2979ff", + "NewPSD.warning": "accent", "Notification": { - "background": "#F2F2F2", - "borderColor": "#F2F2F2", - "errorBackground": "#F2F2F2", - "errorBorderColor": "#F2F2F2", - "foreground": "#232324", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#DBDBDC", - "foreground": "#232324", - "innerBorderColor": "#DBDBDC" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#F2F2F2", - "errorBorderColor": "#F2F2F2", - "informativeBackground": "#F2F2F2", - "informativeBorderColor": "#F2F2F2", - "warningBackground": "#F2F2F2", - "warningBorderColor": "#F2F2F2" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#DBDBDC", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#F4F4F4", - "foreground": "#232324", - "messageForeground": "#232324" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#DBDBDC", - "focusedColor": "#2979ff", - "disabledColor": "#b8b8b9" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#F4F4F4", - "foreground": "#232324" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#EAEAEB", - "borderColor": "#DBDBDC", - "currentOverloadBackground": "#FFFFFF", - "currentParameterForeground": "#2979ff", - "disabledForeground": "#b8b8b9", - "foreground": "#232324", - "infoForeground": "#7f7f7f", - "lineSeparatorColor": "#DBDBDC" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#F4F4F4", - "capsLockIconColor": "#2979ff", - "caretForeground": "#2979ff", - "foreground": "#232324", - "inactiveForeground": "#b8b8b9", - "selectionBackground": "#DBDBDC", - "selectionForeground": "#232324" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#F4F4F4", - "disabledForeground": "#b8b8b9", - "eapTagBackground": "#FFFFFF", - "hoverBackground": "#DBDBDC80", - "lightSelectionBackground": "#DBDBDC", - "paidTagBackground": "#FFFFFF", - "selectionBackground": "#FFFFFF", - "tagForeground": "#2979ff", - "tagBackground": "#FFFFFF", - "trialTagBackground": "#FFFFFF", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#DBDBDC", - "installBorderColor": "#DBDBDC", - "installForeground": "#232324", - "installFocusedBackground": "#FFFFFF", - "installFillForeground": "#b8b8b9", - "installFillBackground": "#DBDBDC", - "updateBackground": "#2979ff", - "updateBorderColor": "#DBDBDC", - "updateForeground": "#232324" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#F4F4F4", - "borderColor": "#DBDBDC" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#EAEAEB", - "foreground": "#232324" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#DBDBDC", - "selectedForeground": "#232324", - "selectedBackground": "#DBDBDC" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#F4F4F4", - "borderColor": "#F4F4F4", - "foreground": "#2979ff" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#eaeae", - "inactiveBorderColor": "#F4F4F4", - "innerBorderColor": "#EAEAEB", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#F4F4F4", - "inactiveBackground": "#eaeae" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#232324", - "separatorColor": "#EAEAEB", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#eaeae", - "background": "#eaeae", - "borderColor": "#eaeae" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#F4F4F4", + "background": "bg", "border": "2,0,2,0", - "foreground": "#232324", - "translucentBackground": "#F4F4F4" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#F4F4F4", - "foreground": "#2979ff", - "indeterminateEndColor": "#2979ff", - "indeterminateStartColor": "#2979ff", - "progressColor": "#2979ff", - "selectionBackground": "#FFFFFF", - "trackColor": "#FFFFFF" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#2979ff" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#F4F4F4", - "disabledText": "#b8b8b9", - "foreground": "#232324" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#7f7f7f", - "acceleratorSelectionForeground": "#7f7f7f", - "background": "#F4F4F4", - "disabledBackground": "#F4F4F4", - "disabledForeground": "#b8b8b9", - "foreground": "#232324", - "selectionBackground": "#FFFFFF", - "selectionForeground": "#232324" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#DBDBDC", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#F4F4F4", - "hoverThumbBorderColor": "#2979ff", - "hoverThumbColor": "#2979ff", - "hoverTrackColor": "#F4F4F430", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#2979ff", - "hoverThumbColor": "#2979ff", - "hoverTrackColor": "#F4F4F430", - "thumbBorderColor": "#2979ff70", - "thumbColor": "#2979ff70", - "trackColor": "#F4F4F430", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#2979ff", - "hoverThumbColor": "#2979ff", - "hoverTrackColor": "#F4F4F430", - "thumbBorderColor": "#2979ff70", - "thumbColor": "#2979ff70", - "trackColor": "#F4F4F430" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#FFFFFF", - "thumbBorderColor": "#2979ff70", - "thumbColor": "#2979ff70", - "trackColor": "#F4F4F430", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#2979ff", - "hoverThumbColor": "#2979ff", - "hoverTrackColor": "#F4F4F430", - "thumbBorderColor": "#2979ff70", - "thumbColor": "#2979ff70", - "trackColor": "#F4F4F430" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#eaeae", - "foreground": "#7f7f7f" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#F4F4F4" + "background": "bg" }, "List": { - "separatorForeground": "#7f7f7f", - "separatorColor": "#DBDBDC" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#F4F4F4", - "borderColor": "#eaeae", - "infoForeground": "#7f7f7f" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#232324", - "selectedForeground": "#232324", - "selectedBackground": "#FFFFFF" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#2979ff", - "startBackground": "#2979ff", - "endColor": "#2979ff", - "startColor": "#2979ff" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#F2F2F2", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#DBDBDC" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#7f7f7f", - "Repeated.File.Foreground": "#232324" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#EAEAEB", - "foreground": "#EAEAEB", - "separatorColor": "#EAEAEB" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#F4F4F4" + "background": "hc" }, "Slider": { - "background": "#F4F4F4", - "buttonBorderColor": "#2979ff", - "buttonColor": "#2979ff", - "foreground": "#232324", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#EAEAEB", - "trackColor": "#DBDBDC", - "trackWidth": 7, - "thumb": "#2979ff" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#FFFFFF", - "borderColor": "#DBDBDC", - "foreground": "#232324", - "errorForeground": "#232324" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#F4F4F4", + "background": "bg", "border": "3,3,3,3", - "foreground": "#232324", - "selectionForeground": "#232324" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#F4F4F4", - "highlight": "#F4F4F4" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#EAEAEB", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#F4F4F4", - "hoverBackground": "#FFFFFF", - "LightEditBackground": "#DBDBDC" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#F4F4F4", - "contentAreaColor": "#FFFFFF", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#DBDBDC", - "disabledForeground": "#b8b8b9", - "disabledUnderlineColor": "#b8b8b9", - "focus": "#DBDBDC", - "focusColor": "#DBDBDC", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#232324", - "highlight": "#DBDBDC", - "hoverColor": "#FFFFFF", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#232324", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#2979ff" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#F4F4F4", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#eaeae", - "background": "#F4F4F4", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#b8b8b9", - "dropLineColor": "#2979ff", - "dropLineShortColor": "#2979ff", - "focusCellBackground": "#DBDBDC", - "focusCellForeground": "#232324", - "foreground": "#232324", - "gridColor": "#F4F4F4", - "highlightOuter": "#DBDBDC", - "hoverBackground": "#DBDBDC80", - "hoverInactiveBackground": "#DBDBDC", - "lightSelectionForeground": "#232324", - "lightSelectionInactiveForeground": "#7f7f7f", - "lightSelectionInactiveBackground": "#EAEAEB", - "selectionBackground": "#DBDBDC", - "selectionForeground": "#232324", - "selectionInactiveBackground": "#DBDBDC", - "selectionInactiveForeground": "#232324", - "sortIconColor": "#232324", - "stripeColor": "#eaeae" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#F4F4F4", - "borderColor": "#F4F4F4", - "bottomSeparatorColor": "#EAEAEB", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#b8b8b9", - "foreground": "#232324", - "focusCellBackground": "#DBDBDC", - "focusCellForeground": "#232324", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#EAEAEB" + "separatorColor": "second" }, - "text": "#7f7f7f", - "textInactiveText": "#7f7f7f", - "textText": "#7f7f7f", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#F4F4F4", - "caretForeground": "#2979ff", - "foreground": "#232324", - "inactiveForeground": "#b8b8b9", - "selectionBackground": "#DBDBDC", - "selectionForeground": "#232324" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#F4F4F4", - "caretForeground": "#2979ff", - "foreground": "#232324", - "inactiveForeground": "#b8b8b9", - "selectionBackground": "#DBDBDC", - "selectionForeground": "#232324" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#F4F4F4", - "caretForeground": "#2979ff", - "foreground": "#232324", - "inactiveForeground": "#b8b8b9", - "selectionBackground": "#DBDBDC", - "selectionForeground": "#232324" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#eaeae", - "Button.hoverBackground": "#FFFFFF", - "inactiveBackground": "#F4F4F4", - "infoForeground": "#7f7f7f", - "inactiveInfoForeground": "#7f7f7f" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#232324", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#DBDBDC", - "buttonColor": "#232324", - "disabledText": "#b8b8b9", - "foreground": "#232324", - "offForeground": "#F4F4F4", - "offBackground": "#F4F4F4", - "onBackground": "#2979ff", - "onForeground": "#2979ff" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#F4F4F4", - "borderHandleColor": "#7f7f7f", - "floatingForeground": "#7f7f7f", - "foreground": "#232324" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#F4F4F4", - "Actions.infoForeground": "#7f7f7f", - "background": "#F2F2F2", - "borderColor": "#DBDBDC", - "foreground": "#232324", - "infoForeground": "#7f7f7f", - "separatorColor": "#DBDBDC", - "shortcutForeground": "#7f7f7f" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#DBDBDC", - "selectedForeground": "#232324", - "selectedBackground": "#eaeae" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#F4F4F4", - "borderColor": "#EAEAEB", - "inactiveBackground": "#F4F4F4" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#F4F4F4" + "background": "bg" }, "HeaderTab": { - "borderColor": "#FFFFFF", - "hoverBackground": "#FFFFFF", - "hoverInactiveBackground": "#FFFFFF", - "inactiveUnderlineColor": "#2979ff", - "selectedBackground": "#eaeae", - "selectedInactiveBackground": "#eaeae", - "underlineColor": "#2979ff", - "underlinedTabBackground": "#DBDBDC", - "underlinedTabInactiveBackground": "#EAEAEB", - "underlinedTabForeground": "#232324", - "underlinedTabInactiveForeground": "#232324" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#F4F4F4", - "foreground": "#7f7f7f", - "hash": "#DBDBDC", - "hoverBackground": "#DBDBDC80", - "hoverInactiveBackground": "#DBDBDC", - "modifiedItemForeground": "#2979ff", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#DBDBDC80", - "selectionForeground": "#232324", - "selectionInactiveForeground": "#232324", - "selectionInactiveBackground": "#DBDBDC80", - "textBackground": "#F4F4F4" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#DBDBDC", - "Canvas.background": "#eaeae", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#F4F4F4", - "foreground": "#232324" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#DBDBDC", - "background": "#F4F4F4", - "foreground": "#232324", - "hoverBorderColor": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#DBDBDC", - "hoverBorderColor": "#FFFFFF" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#eaeae", - "highStroke.foreground": "#232324", - "Label.foreground": "#7f7f7f", - "List.selectionBackground": "#DBDBDC80", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#DBDBDC", - "Component.foreground": "#232324", - "ConstraintSetText.foreground": "#7f7f7f", - "ConstraintSet.background": "#EAEAEB", - "CSPanel.SelectedFocusBackground": "#FFFFFF", - "CSPanel.SelectedBackground": "#DBDBDC80", - "cs_FocusText.infoForeground": "#7f7f7f", - "CursorTextColor.foreground": "#232324", - "HoverColor.disabledBackground": "#b8b8b9", - "motionGraph.background": "#F4F4F4", - "Notification.background": "#F2F2F2", - "ourAvg.background": "#EAEAEB", - "ourCS.background": "#EAEAEB", - "ourCS_Border.borderColor": "#DBDBDC", - "ourCS_TextColor.foreground": "#7f7f7f", - "ourCS_SelectedFocusBackground.selectionForeground": "#232324", - "ourCS_SelectedBackground.selectionInactiveBackground": "#DBDBDC", - "ourCS_SelectedBorder.pressedBorderColor": "#FFFFFF", - "ourML_BarColor.separatorColor": "#DBDBDC", - "PrimaryPanel.background": "#eaeae", - "SecondaryPanel.background": "#F4F4F4", - "SecondaryPanel.header.foreground": "#7f7f7f", - "SecondaryPanel.header.background": "#eaeae", - "timeLine.disabledBorderColor": "#DBDBDC" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#DBDBDC", - "background": "#F4F4F4" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#232324", + "percent.foreground": "fg", "Placeholder": { - "background": "#F4F4F4", - "borderColor": "#DBDBDC", - "foreground": "#232324", - "selectedForeground": "#232324" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#F4F4F4", - "stroke.acceleratorForeground": "#7f7f7f" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#F2F2F2", - "errorBorderColor": "#F2F2F2", - "warningBackground": "#F2F2F2", - "warningBorderColor": "#F2F2F2" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#F4F4F4" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#FFFFFF" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#2979ff", - "otherIconColor": "#7f7f7f", - "remoteBranchIconColor": "#232324", - "tagIconColor": "#7f7f7f" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#2979ff", - "bookmarkIconColor": "#232324", - "closedBranchIconColor": "#b8b8b9", - "localTagIconColor": "#7f7f7f", - "mqTagIconColor": "#7f7f7f", - "tagIconColor": "#7f7f7f", - "tipIconColor": "#7f7f7f" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#7f7f7f", - "Commit.currentBranchBackground": "#EAEAEB", - "Commit.hoveredBackground": "#DBDBDC80" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#232324", - "backgroundBase": "#FFFFFF" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#F4F4F4", - "foreground": "#232324" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#F4F4F4", - "background": "#F4F4F4", - "borderColor": "#F4F4F4", - "captionBackground": "#eaeae", - "captionForeground": "#232324", - "Details.background": "#F4F4F4", - "footerBackground": "#eaeae", - "footerForeground": "#232324", - "headerBackground": "#F4F4F4", - "headerForeground": "#232324", - "List.background": "#eaeae", - "separatorColor": "#DBDBDC", - "SidePanel.background": "#EAEAEB", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#eaeae", - "actions.selectionBackground": "#FFFFFF", - "background": "#EAEAEB", - "selectionBackground": "#FFFFFF", - "selectionInactiveBackground": "#EAEAEB" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#F4F4F4", - "windowBorder": "#DBDBDC", - "windowText": "#7f7f7f", - "Window.border": "#DBDBDC" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#eaeae", - "#6B6B6B": "#7f7f7f", - "#A7A7A7": "#F4F4F4", - "#3D6185": "#2979ff", - "#466D94": "#2979ff", - "#3C3F41": "#F4F4F4", - "#545556": "#b8b8b9", - "#606060": "#b8b8b9", - "#9AA7B0": "#232324", - "#675133": "#2979ff", - "Actions.Blue": "#4078F2", - "Actions.Green": "#50A14E", - "Actions.Grey": "#7f7f7f", - "Actions.GreyInline": "#A0A1A7", - "Actions.GreyInline.Dark": "#232324", - "Actions.Red": "#E4564A", - "Actions.Yellow": "#C18401", - "Checkbox.Background.Default": "#eaeae", - "Checkbox.Background.Default.Dark": "#eaeae", - "Checkbox.Background.Disabled": "#CACACB", - "Checkbox.Background.Disabled.Dark": "#CACACB", - "Checkbox.Border.Default": "#DBDBDC", - "Checkbox.Border.Default.Dark": "#DBDBDC", - "Checkbox.Border.Disabled": "#b8b8b9", - "Checkbox.Border.Disabled.Dark": "#b8b8b9", - "Checkbox.Focus.Thin.Default": "#2979ff", - "Checkbox.Focus.Thin.Default.Dark": "#2979ff", - "Checkbox.Focus.Wide": "#2979ff", - "Checkbox.Focus.Wide.Dark": "#2979ff", - "Checkbox.Foreground.Disabled": "#b8b8b9", - "Checkbox.Foreground.Disabled.Dark": "#b8b8b9", - "Checkbox.Background.Selected": "#2979ff", - "Checkbox.Background.Selected.Dark": "#F4F4F4", - "Checkbox.Border.Selected": "#2979ff", - "Checkbox.Border.Selected.Dark": "#2979ff", - "Checkbox.Foreground.Selected": "#2979ff", - "Checkbox.Foreground.Selected.Dark": "#2979ff", - "Checkbox.Focus.Thin.Selected": "#232324", - "Checkbox.Focus.Thin.Selected.Dark": "#232324", - "Objects.Grey": "#A0A1A7", - "Objects.Blue": "#4078F2", - "Objects.RedStatus": "#E4564A", - "Objects.Red": "#E4564A", - "Objects.Pink": "#A626A4", - "Objects.Yellow": "#C18401", - "Objects.Green": "#50A14E", - "Objects.Purple": "#A626A4", - "Objects.BlackText": "#232324", - "Objects.YellowDark": "#986801", - "Objects.GreenAndroid": "#50A14E" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Dracula Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Dracula Contrast.theme.json index 1e4904c9..7ec63144 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Dracula Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Dracula Contrast.theme.json @@ -2,1004 +2,1089 @@ "name": "Dracula Contrast", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#282A36", + "bg30": "#282A3630", + "fg": "#F8F8F2", + "text": "#6272A4", + "selBg": "#44475A", + "selFg": "#8BE9FD", + "activeFg": "#FFFFFF", + "border": "#21222C", + "excl": "#313341", + "second": "#282A36", + "dis": "#6272A4", + "accent": "#FF79C5", + "accent2": "#FF79C52", + "accent50": "#FF79C550", + "accent70": "#FF79C570", + "cs": "#191A21", + "button": "#393C4B", + "table": "#44475A", + "tree": "#44475A50", + "hl": "#6272A4", + "notif": "#1D2228", + "hc": "#191A21", + "white": "#F8F8F2", + "blue": "#8aff80", + "red": "#f780bf", + "yellow": "#8aff80", + "green": "#feff80", + "gray": "#6272A4", + "purple": "#f780bf", + "orange": "#9580ff" + }, "editorScheme": "colors/Dracula.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#6272A4", - "background": "#282A36", - "borderColor": "#21222C", - "disabledBackground": "#313341", - "disabledForeground": "#6272A4", - "disabledText": "#6272A4", - "focusColor": "#6272A4", - "focusedBorderColor": "#FF79C5", - "foreground": "#F8F8F2", - "inactiveBackground": "#313341", - "inactiveForeground": "#6272A4", - "infoForeground": "#6272A4", - "selectionBackground": "#44475A", - "selectionBackgroundInactive": "#282A36", - "selectionForeground": "#8BE9FD", - "selectionInactiveBackground": "#282A36", - "separatorColor": "#21222C" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#282A36", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#FF79C550", - "hoverBorderColor": "#FF79C550", - "hoverSeparatorColor": "#393C4B", - "focusedBorderColor": "#FF79C550", - "pressedBackground": "#FF79C550", - "pressedBorderColor": "#FF79C550" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#44475A" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#282A36", - "Borders.color": "#21222C", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#282A36", + "background": "bg", "default": { - "endBackground": "#44475A", - "endBorderColor": "#44475A", - "foreground": "#FFFFFF", - "focusColor": "#FF79C5", - "focusedBorderColor": "#FF79C5", - "shadowColor": "#44475A", - "startBackground": "#44475A", - "startBorderColor": "#44475A" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#393C4B", - "disabledText": "#6272A4", - "endBackground": "#393C4B", - "endBorderColor": "#393C4B", - "focus": "#6272A4", - "focusedBorderColor": "#FF79C5", - "foreground": "#6272A4", - "highlight": "#8BE9FD", - "mt.background": "#393C4B", - "mt.foreground": "#6272A4", - "mt.selectedForeground": "#8BE9FD", - "mt.selection.color1": "#44475A", - "mt.selection.color2": "#44475A", - "startBackground": "#393C4B", - "startBorderColor": "#393C4B", - "shadowColor": "#393C4B", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#21222C", - "Tooltip.background": "#1D2228" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#191A21", - "selectionBackground": "#44475A" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#282A36", - "disabledText": "#6272A4", - "foreground": "#F8F8F2", - "select": "#FF79C5" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#6272A4", - "acceleratorSelectionForeground": "#6272A4", - "background": "#282A36", - "disabledBackground": "#282A36", - "disabledForeground": "#6272A4", - "foreground": "#F8F8F2", - "selectionBackground": "#44475A", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#F8F8F2", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#FF79C5", - "dropdownBorder": "#282A36", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#282A36", - "foreground": "#F8F8F2", - "swatchesDefaultRecentColor": "#F8F8F2" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#393C4B", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#393C4B", - "disabledIconColor": "#6272A4", - "iconColor": "#F8F8F2", - "nonEditableBackground": "#282A36" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#191A21", - "buttonBackground": "#393C4B", - "darcula.hoveredArrowButtonForeground": "#FF79C5", - "disabledForeground": "#6272A4", - "foreground": "#F8F8F2", - "modifiedItemForeground": "#FF79C5", - "nonEditableBackground": "#282A36", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#44475A", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#21222C", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#282A36", - "foreground": "#F8F8F2", - "infoForeground": "#6272A4", - "matchForeground": "#FF79C5", - "matchSelectionForeground": "#FF79C5", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#8BE9FD", - "selectedGrayedForeground": "#8BE9FD", - "selectionGrayForeground": "#8BE9FD", - "selectionInactiveInfoForeground": "#6272A4", - "selectionInactiveBackground": "#6272A4", - "selectionBackground": "#44475A", - "selectionForeground": "#8BE9FD", - "selectionInfoForeground": "#8BE9FD" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#6272A4", - "disabledBorderColor": "#393C4B", - "focusColor": "#FF79C5", - "focusedBorderColor": "#FF79C5", - "hoverIconColor": "#FF79C5", - "infoForeground": "#6272A4", - "iconColor": "#F8F8F2" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#282A36", - "controlText": "#6272A4", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#FF79C5", - "foreground": "#8BE9FD" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#6272A4", - "changedValueForeground": "#FF79C5", - "errorMessageForeground": "#f780bf", - "evaluatingExpressionForeground": "#6272A4", - "exceptionForeground": "#8aff80", - "modifyingValueForeground": "#FF79C5", - "valueForeground": "#FF79C5" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#6272A4", - "underlinedTabBackground": "#6272A4" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#6272A4" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#282A36", - "borderColor": "#282A36", - "hoverBackground": "#44475A", - "hoverColor": "#191A21", - "hoverMaskColor": "#6272A4", - "inactiveColoredTabBackground": "#282A36", - "inactiveColoredFileBackground": "#393C4B", - "inactiveUnderlineColor": "#FF79C5", - "inactiveMaskColor": "#191A21", - "underlineColor": "#FF79C5", - "underlinedTabBackground": "#44475A", - "underlinedTabForeground": "#8BE9FD" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#282A36", - "DialogWrapper.southPanelBackground": "#282A36", - "DialogWrapper.southPanelDivider": "#282A36", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#282A36", - "areaBorderColor": "#282A36", - "areaForeground": "#F8F8F2" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#191A21", - "foreground": "#F8F8F2", - "shortcutForeground": "#6272A4" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#191A21", - "caretForeground": "#FF79C5", - "foreground": "#F8F8F2", - "inactiveBackground": "#282A36", - "inactiveForeground": "#6272A4", - "selectionBackground": "#44475A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#282A36", - "hoverBackground": "#6272A4", - "hoverColor": "#6272A4", - "hoverMaskColor": "#6272A4", - "inactiveMaskColor": "#282A36", - "inactiveColoredFileBackground": "#282A36", - "inactiveUnderlineColor": "#6272A4", - "selectedForeground": "#F8F8F2", - "selectedBackground": "#44475A", - "underlineColor": "#FF79C5", - "underlinedTabBackground": "#44475A", - "underlinedTabForeground": "#8BE9FD" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#282A36", - "borderColor": "#282A36", - "hoverBackground": "#6272A4", - "hoverColor": "#6272A4", - "inactiveUnderlineColor": "#FF79C5", - "underlineColor": "#FF79C5", - "underlinedTabBackground": "#44475A", - "underlinedTabForeground": "#F8F8F2" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#313341", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#21222C", + "Focus.color": "border", "FormattedTextField": { - "background": "#191A21", - "caretForeground": "#FF79C5", - "foreground": "#F8F8F2", - "inactiveBackground": "#393C4B", - "inactiveForeground": "#6272A4", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#44475A" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#1D2228", "Group": { - "disabledSeparatorColor": "#21222C", - "separatorColor": "#21222C" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#6272A4", - "lineSeparatorColor": "#282A36" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#282A36", - "inactive": "#191A21" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#282A36", - "borderColor": "#21222C", - "foreground": "#F8F8F2", - "infoForeground": "#6272A4", - "shortcutForeground": "#6272A4" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#FF79C5", - "inactiveCaption": "#282A36", - "inactiveCaptionBorder": "#282A36", - "inactiveCaptionText": "#6272A4", - "info": "#6272A4", - "infoText": "#6272A4", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#21222C", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#282A36" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#F8F8F2", - "background": "#282A36", - "inactiveTitleForeground": "#6272A4" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#282A36", - "disabledForeground": "#6272A4", - "disabledShadow": "#282A36", - "disabledText": "#6272A4", - "foreground": "#F8F8F2", - "infoForeground": "#6272A4", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#F8F8F2" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#FF79C5", - "hoverForeground": "#FF79C5", - "pressedForeground": "#FF79C5", - "secondaryForeground": "#6272A4", - "visitedForeground": "#FF79C5" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#FF79C5", + "link.foreground": "accent", "List": { - "background": "#282A36", - "foreground": "#F8F8F2", - "hoverBackground": "#44475A50", - "hoverInactiveBackground": "#44475A", - "selectionBackground": "#44475A", - "selectionForeground": "#8BE9FD", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#44475A50" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#282A36", - "branchColor": "#F8F8F2", - "contrast": "#191A21", - "foreground": "#F8F8F2", - "mergeCommits": "#393C4B", - "primaryColor": "#6272A4", - "selectionForeground": "#8BE9FD", - "tab.backgroundColor": "#282A36", - "tab.borderColor": "#FF79C5", - "tagColor": "#6272A4" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#282A36", - "usedColor": "#6272A4", - "usedBackground": "#6272A4" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#6272A4", - "acceleratorSelectionForeground": "#8BE9FD", - "background": "#282A36", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#282A36", - "disabledBackground": "#282A36", - "disabledForeground": "#6272A4", - "foreground": "#F8F8F2", - "selectionBackground": "#44475A", - "selectionForeground": "#8BE9FD", - "separatorColor": "#21222C" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#191A21", - "borderColor": "#282A36", - "disabledBackground": "#282A36", - "disabledForeground": "#6272A4", - "foreground": "#F8F8F2", - "highlight": "#282A36", - "selectionBackground": "#44475A", - "selectionForeground": "#8BE9FD", - "shadow": "#191A21" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#6272A4", - "acceleratorSelectionForeground": "#8BE9FD", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#282A36", - "disabledBackground": "#282A36", - "disabledForeground": "#6272A4", - "foreground": "#F8F8F2", - "selectionBackground": "#44475A", - "selectionForeground": "#8BE9FD" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#F8F8F2", - "borderColor": "#282A36" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#282A36" + "background": "bg" }, "SearchField": { - "background": "#191A21" + "background": "hc" } }, - "NewPSD.warning": "#FF79C5", + "NewPSD.warning": "accent", "Notification": { - "background": "#1D2228", - "borderColor": "#1D2228", - "errorBackground": "#1D2228", - "errorBorderColor": "#1D2228", - "foreground": "#F8F8F2", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#393C4B", - "foreground": "#F8F8F2", - "innerBorderColor": "#393C4B" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#1D2228", - "errorBorderColor": "#1D2228", - "informativeBackground": "#1D2228", - "informativeBorderColor": "#1D2228", - "warningBackground": "#1D2228", - "warningBorderColor": "#1D2228" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#21222C", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#282A36", - "foreground": "#F8F8F2", - "messageForeground": "#F8F8F2" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#393C4B", - "focusedColor": "#FF79C5", - "disabledColor": "#6272A4" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#282A36", - "foreground": "#F8F8F2" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#282A36", - "borderColor": "#44475A", - "currentOverloadBackground": "#6272A4", - "currentParameterForeground": "#FF79C5", - "disabledForeground": "#6272A4", - "foreground": "#F8F8F2", - "infoForeground": "#6272A4", - "lineSeparatorColor": "#44475A" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#191A21", - "capsLockIconColor": "#FF79C5", - "caretForeground": "#FF79C5", - "foreground": "#F8F8F2", - "inactiveForeground": "#6272A4", - "selectionBackground": "#44475A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#282A36", - "disabledForeground": "#6272A4", - "eapTagBackground": "#6272A4", - "hoverBackground": "#44475A50", - "lightSelectionBackground": "#44475A", - "paidTagBackground": "#6272A4", - "selectionBackground": "#44475A", - "tagForeground": "#FF79C5", - "tagBackground": "#6272A4", - "trialTagBackground": "#6272A4", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#393C4B", - "installBorderColor": "#393C4B", - "installForeground": "#F8F8F2", - "installFocusedBackground": "#6272A4", - "installFillForeground": "#6272A4", - "installFillBackground": "#393C4B", - "updateBackground": "#FF79C5", - "updateBorderColor": "#393C4B", - "updateForeground": "#F8F8F2" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#191A21", - "borderColor": "#21222C" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#282A36", - "foreground": "#F8F8F2" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#44475A", - "selectedForeground": "#8BE9FD", - "selectedBackground": "#44475A" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#282A36", - "borderColor": "#282A36", - "foreground": "#FF79C5" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#191A21", - "inactiveBorderColor": "#282A36", - "innerBorderColor": "#282A36", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#282A36", - "inactiveBackground": "#191A21" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#F8F8F2", - "separatorColor": "#282A36", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#191A21", - "background": "#191A21", - "borderColor": "#191A21" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#282A36", + "background": "bg", "border": "2,0,2,0", - "foreground": "#F8F8F2", - "translucentBackground": "#282A36" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#282A36", - "foreground": "#FF79C5", - "indeterminateEndColor": "#FF79C5", - "indeterminateStartColor": "#FF79C5", - "progressColor": "#FF79C5", - "selectionBackground": "#6272A4", - "trackColor": "#6272A4" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#FF79C5" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#282A36", - "disabledText": "#6272A4", - "foreground": "#F8F8F2" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#6272A4", - "acceleratorSelectionForeground": "#6272A4", - "background": "#282A36", - "disabledBackground": "#282A36", - "disabledForeground": "#6272A4", - "foreground": "#F8F8F2", - "selectionBackground": "#44475A", - "selectionForeground": "#8BE9FD" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#21222C", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#282A36", - "hoverThumbBorderColor": "#FF79C5", - "hoverThumbColor": "#FF79C5", - "hoverTrackColor": "#282A3630", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#FF79C5", - "hoverThumbColor": "#FF79C5", - "hoverTrackColor": "#282A3630", - "thumbBorderColor": "#FF79C570", - "thumbColor": "#FF79C570", - "trackColor": "#282A3630", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#FF79C5", - "hoverThumbColor": "#FF79C5", - "hoverTrackColor": "#282A3630", - "thumbBorderColor": "#FF79C570", - "thumbColor": "#FF79C570", - "trackColor": "#282A3630" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#6272A4", - "thumbBorderColor": "#FF79C570", - "thumbColor": "#FF79C570", - "trackColor": "#282A3630", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#FF79C5", - "hoverThumbColor": "#FF79C5", - "hoverTrackColor": "#282A3630", - "thumbBorderColor": "#FF79C570", - "thumbColor": "#FF79C570", - "trackColor": "#282A3630" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#191A21", - "foreground": "#6272A4" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#282A36" + "background": "bg" }, "List": { - "separatorForeground": "#6272A4", - "separatorColor": "#21222C" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#282A36", - "borderColor": "#191A21", - "infoForeground": "#6272A4" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#6272A4" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#FF79C5", - "startBackground": "#FF79C5", - "endColor": "#FF79C5", - "startColor": "#FF79C5" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#1D2228", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#44475A" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#6272A4", - "Repeated.File.Foreground": "#F8F8F2" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#282A36", - "foreground": "#282A36", - "separatorColor": "#282A36" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#191A21" + "background": "hc" }, "Slider": { - "background": "#282A36", - "buttonBorderColor": "#FF79C5", - "buttonColor": "#FF79C5", - "foreground": "#F8F8F2", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#282A36", - "trackColor": "#44475A", - "trackWidth": 7, - "thumb": "#FF79C5" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#6272A4", - "borderColor": "#21222C", - "foreground": "#F8F8F2", - "errorForeground": "#F8F8F2" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#282A36", + "background": "bg", "border": "3,3,3,3", - "foreground": "#F8F8F2", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#282A36", - "highlight": "#191A21" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#282A36", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#282A36", - "hoverBackground": "#6272A4", - "LightEditBackground": "#44475A" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#282A36", - "contentAreaColor": "#6272A4", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#21222C", - "disabledForeground": "#6272A4", - "disabledUnderlineColor": "#6272A4", - "focus": "#44475A", - "focusColor": "#44475A", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#F8F8F2", - "highlight": "#21222C", - "hoverColor": "#6272A4", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#FF79C5" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#191A21", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#191A21", - "background": "#282A36", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#6272A4", - "dropLineColor": "#FF79C5", - "dropLineShortColor": "#FF79C5", - "focusCellBackground": "#44475A", - "focusCellForeground": "#FFFFFF", - "foreground": "#F8F8F2", - "gridColor": "#282A36", - "highlightOuter": "#44475A", - "hoverBackground": "#44475A50", - "hoverInactiveBackground": "#44475A", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#6272A4", - "lightSelectionInactiveBackground": "#282A36", - "selectionBackground": "#44475A", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#44475A", - "selectionInactiveForeground": "#8BE9FD", - "sortIconColor": "#F8F8F2", - "stripeColor": "#191A21" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#282A36", - "borderColor": "#282A36", - "bottomSeparatorColor": "#282A36", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#6272A4", - "foreground": "#F8F8F2", - "focusCellBackground": "#44475A", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#282A36" + "separatorColor": "second" }, - "text": "#6272A4", - "textInactiveText": "#6272A4", - "textText": "#6272A4", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#191A21", - "caretForeground": "#FF79C5", - "foreground": "#F8F8F2", - "inactiveForeground": "#6272A4", - "selectionBackground": "#44475A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#191A21", - "caretForeground": "#FF79C5", - "foreground": "#F8F8F2", - "inactiveForeground": "#6272A4", - "selectionBackground": "#44475A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#191A21", - "caretForeground": "#FF79C5", - "foreground": "#F8F8F2", - "inactiveForeground": "#6272A4", - "selectionBackground": "#44475A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#191A21", - "Button.hoverBackground": "#6272A4", - "inactiveBackground": "#282A36", - "infoForeground": "#6272A4", - "inactiveInfoForeground": "#6272A4" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#F8F8F2", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#393C4B", - "buttonColor": "#F8F8F2", - "disabledText": "#6272A4", - "foreground": "#F8F8F2", - "offForeground": "#282A36", - "offBackground": "#282A36", - "onBackground": "#FF79C5", - "onForeground": "#FF79C5" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#191A21", - "borderHandleColor": "#6272A4", - "floatingForeground": "#6272A4", - "foreground": "#F8F8F2" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#282A36", - "Actions.infoForeground": "#6272A4", - "background": "#1D2228", - "borderColor": "#21222C", - "foreground": "#F8F8F2", - "infoForeground": "#6272A4", - "separatorColor": "#21222C", - "shortcutForeground": "#6272A4" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#44475A", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#191A21" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#282A36", - "borderColor": "#282A36", - "inactiveBackground": "#282A36" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#282A36" + "background": "bg" }, "HeaderTab": { - "borderColor": "#6272A4", - "hoverBackground": "#6272A4", - "hoverInactiveBackground": "#6272A4", - "inactiveUnderlineColor": "#FF79C5", - "selectedBackground": "#191A21", - "selectedInactiveBackground": "#191A21", - "underlineColor": "#FF79C5", - "underlinedTabBackground": "#44475A", - "underlinedTabInactiveBackground": "#282A36", - "underlinedTabForeground": "#8BE9FD", - "underlinedTabInactiveForeground": "#F8F8F2" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#191A21", - "foreground": "#6272A4", - "hash": "#21222C", - "hoverBackground": "#44475A50", - "hoverInactiveBackground": "#44475A", - "modifiedItemForeground": "#FF79C5", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#44475A50", - "selectionForeground": "#8BE9FD", - "selectionInactiveForeground": "#8BE9FD", - "selectionInactiveBackground": "#44475A50", - "textBackground": "#191A21" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#21222C", - "Canvas.background": "#191A21", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#282A36", - "foreground": "#F8F8F2" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#21222C", - "background": "#282A36", - "foreground": "#F8F8F2", - "hoverBorderColor": "#6272A4" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#21222C", - "hoverBorderColor": "#6272A4" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#191A21", - "highStroke.foreground": "#F8F8F2", - "Label.foreground": "#6272A4", - "List.selectionBackground": "#44475A50", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#21222C", - "Component.foreground": "#F8F8F2", - "ConstraintSetText.foreground": "#6272A4", - "ConstraintSet.background": "#282A36", - "CSPanel.SelectedFocusBackground": "#44475A", - "CSPanel.SelectedBackground": "#44475A50", - "cs_FocusText.infoForeground": "#6272A4", - "CursorTextColor.foreground": "#F8F8F2", - "HoverColor.disabledBackground": "#6272A4", - "motionGraph.background": "#282A36", - "Notification.background": "#1D2228", - "ourAvg.background": "#282A36", - "ourCS.background": "#282A36", - "ourCS_Border.borderColor": "#21222C", - "ourCS_TextColor.foreground": "#6272A4", - "ourCS_SelectedFocusBackground.selectionForeground": "#8BE9FD", - "ourCS_SelectedBackground.selectionInactiveBackground": "#44475A", - "ourCS_SelectedBorder.pressedBorderColor": "#6272A4", - "ourML_BarColor.separatorColor": "#21222C", - "PrimaryPanel.background": "#191A21", - "SecondaryPanel.background": "#282A36", - "SecondaryPanel.header.foreground": "#6272A4", - "SecondaryPanel.header.background": "#191A21", - "timeLine.disabledBorderColor": "#21222C" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#21222C", - "background": "#282A36" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#F8F8F2", + "percent.foreground": "fg", "Placeholder": { - "background": "#282A36", - "borderColor": "#21222C", - "foreground": "#F8F8F2", - "selectedForeground": "#8BE9FD" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#282A36", - "stroke.acceleratorForeground": "#6272A4" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#1D2228", - "errorBorderColor": "#1D2228", - "warningBackground": "#1D2228", - "warningBorderColor": "#1D2228" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#282A36" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#6272A4" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#FF79C5", - "otherIconColor": "#6272A4", - "remoteBranchIconColor": "#F8F8F2", - "tagIconColor": "#6272A4" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#FF79C5", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#6272A4", - "localTagIconColor": "#6272A4", - "mqTagIconColor": "#6272A4", - "tagIconColor": "#6272A4", - "tipIconColor": "#6272A4" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#6272A4", - "Commit.currentBranchBackground": "#282A36", - "Commit.hoveredBackground": "#44475A50" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#6272A4" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#191A21", - "foreground": "#F8F8F2" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#282A36", - "background": "#282A36", - "borderColor": "#282A36", - "captionBackground": "#191A21", - "captionForeground": "#F8F8F2", - "Details.background": "#282A36", - "footerBackground": "#191A21", - "footerForeground": "#F8F8F2", - "headerBackground": "#282A36", - "headerForeground": "#F8F8F2", - "List.background": "#191A21", - "separatorColor": "#21222C", - "SidePanel.background": "#282A36", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#191A21", - "actions.selectionBackground": "#6272A4", - "background": "#282A36", - "selectionBackground": "#44475A", - "selectionInactiveBackground": "#282A36" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#191A21", - "windowBorder": "#21222C", - "windowText": "#6272A4", - "Window.border": "#21222C" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#191A21", - "#6B6B6B": "#6272A4", - "#A7A7A7": "#282A36", - "#3D6185": "#FF79C5", - "#466D94": "#FF79C5", - "#3C3F41": "#282A36", - "#545556": "#6272A4", - "#606060": "#6272A4", - "#9AA7B0": "#F8F8F2", - "#675133": "#FF79C5", - "Actions.Blue": "#8aff80", - "Actions.Green": "#feff80", - "Actions.Grey": "#6272A4", - "Actions.GreyInline": "#6272A4", - "Actions.GreyInline.Dark": "#F8F8F2", - "Actions.Red": "#f780bf", - "Actions.Yellow": "#8aff80", - "Checkbox.Background.Default": "#191A21", - "Checkbox.Background.Default.Dark": "#191A21", - "Checkbox.Background.Disabled": "#313341", - "Checkbox.Background.Disabled.Dark": "#313341", - "Checkbox.Border.Default": "#21222C", - "Checkbox.Border.Default.Dark": "#21222C", - "Checkbox.Border.Disabled": "#6272A4", - "Checkbox.Border.Disabled.Dark": "#6272A4", - "Checkbox.Focus.Thin.Default": "#FF79C5", - "Checkbox.Focus.Thin.Default.Dark": "#FF79C5", - "Checkbox.Focus.Wide": "#FF79C5", - "Checkbox.Focus.Wide.Dark": "#FF79C5", - "Checkbox.Foreground.Disabled": "#6272A4", - "Checkbox.Foreground.Disabled.Dark": "#6272A4", - "Checkbox.Background.Selected": "#FF79C5", - "Checkbox.Background.Selected.Dark": "#282A36", - "Checkbox.Border.Selected": "#FF79C5", - "Checkbox.Border.Selected.Dark": "#FF79C5", - "Checkbox.Foreground.Selected": "#FF79C5", - "Checkbox.Foreground.Selected.Dark": "#FF79C5", - "Checkbox.Focus.Thin.Selected": "#F8F8F2", - "Checkbox.Focus.Thin.Selected.Dark": "#F8F8F2", - "Objects.Grey": "#6272A4", - "Objects.Blue": "#8aff80", - "Objects.RedStatus": "#f780bf", - "Objects.Red": "#f780bf", - "Objects.Pink": "#f780bf", - "Objects.Yellow": "#8aff80", - "Objects.Green": "#feff80", - "Objects.Purple": "#f780bf", - "Objects.BlackText": "#F8F8F2", - "Objects.YellowDark": "#9580ff", - "Objects.GreenAndroid": "#feff80" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Dracula.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Dracula.theme.json index 1ab9a11b..2195fe58 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Dracula.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Dracula.theme.json @@ -2,1004 +2,1089 @@ "name": "Dracula", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#282A36", + "bg30": "#282A3630", + "fg": "#F8F8F2", + "text": "#6272A4", + "selBg": "#44475A", + "selFg": "#8BE9FD", + "activeFg": "#FFFFFF", + "border": "#21222C", + "excl": "#313341", + "second": "#282A36", + "dis": "#6272A4", + "accent": "#FF79C5", + "accent2": "#FF79C52", + "accent50": "#FF79C550", + "accent70": "#FF79C570", + "cs": "#191A21", + "button": "#393C4B", + "table": "#44475A", + "tree": "#44475A50", + "hl": "#6272A4", + "notif": "#1D2228", + "hc": "#282A36", + "white": "#F8F8F2", + "blue": "#8aff80", + "red": "#f780bf", + "yellow": "#8aff80", + "green": "#feff80", + "gray": "#6272A4", + "purple": "#f780bf", + "orange": "#9580ff" + }, "editorScheme": "colors/Dracula.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#6272A4", - "background": "#282A36", - "borderColor": "#21222C", - "disabledBackground": "#313341", - "disabledForeground": "#6272A4", - "disabledText": "#6272A4", - "focusColor": "#6272A4", - "focusedBorderColor": "#FF79C5", - "foreground": "#F8F8F2", - "inactiveBackground": "#313341", - "inactiveForeground": "#6272A4", - "infoForeground": "#6272A4", - "selectionBackground": "#44475A", - "selectionBackgroundInactive": "#282A36", - "selectionForeground": "#8BE9FD", - "selectionInactiveBackground": "#282A36", - "separatorColor": "#21222C" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#282A36", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#FF79C550", - "hoverBorderColor": "#FF79C550", - "hoverSeparatorColor": "#393C4B", - "focusedBorderColor": "#FF79C550", - "pressedBackground": "#FF79C550", - "pressedBorderColor": "#FF79C550" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#44475A" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#282A36", - "Borders.color": "#21222C", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#282A36", + "background": "bg", "default": { - "endBackground": "#44475A", - "endBorderColor": "#44475A", - "foreground": "#FFFFFF", - "focusColor": "#FF79C5", - "focusedBorderColor": "#FF79C5", - "shadowColor": "#44475A", - "startBackground": "#44475A", - "startBorderColor": "#44475A" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#393C4B", - "disabledText": "#6272A4", - "endBackground": "#393C4B", - "endBorderColor": "#393C4B", - "focus": "#6272A4", - "focusedBorderColor": "#FF79C5", - "foreground": "#6272A4", - "highlight": "#8BE9FD", - "mt.background": "#393C4B", - "mt.foreground": "#6272A4", - "mt.selectedForeground": "#8BE9FD", - "mt.selection.color1": "#44475A", - "mt.selection.color2": "#44475A", - "startBackground": "#393C4B", - "startBorderColor": "#393C4B", - "shadowColor": "#393C4B", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#21222C", - "Tooltip.background": "#1D2228" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#191A21", - "selectionBackground": "#44475A" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#282A36", - "disabledText": "#6272A4", - "foreground": "#F8F8F2", - "select": "#FF79C5" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#6272A4", - "acceleratorSelectionForeground": "#6272A4", - "background": "#282A36", - "disabledBackground": "#282A36", - "disabledForeground": "#6272A4", - "foreground": "#F8F8F2", - "selectionBackground": "#44475A", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#F8F8F2", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#FF79C5", - "dropdownBorder": "#282A36", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#282A36", - "foreground": "#F8F8F2", - "swatchesDefaultRecentColor": "#F8F8F2" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#393C4B", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#393C4B", - "disabledIconColor": "#6272A4", - "iconColor": "#F8F8F2", - "nonEditableBackground": "#282A36" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#282A36", - "buttonBackground": "#393C4B", - "darcula.hoveredArrowButtonForeground": "#FF79C5", - "disabledForeground": "#6272A4", - "foreground": "#F8F8F2", - "modifiedItemForeground": "#FF79C5", - "nonEditableBackground": "#282A36", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#44475A", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#21222C", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#282A36", - "foreground": "#F8F8F2", - "infoForeground": "#6272A4", - "matchForeground": "#FF79C5", - "matchSelectionForeground": "#FF79C5", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#8BE9FD", - "selectedGrayedForeground": "#8BE9FD", - "selectionGrayForeground": "#8BE9FD", - "selectionInactiveInfoForeground": "#6272A4", - "selectionInactiveBackground": "#6272A4", - "selectionBackground": "#44475A", - "selectionForeground": "#8BE9FD", - "selectionInfoForeground": "#8BE9FD" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#6272A4", - "disabledBorderColor": "#393C4B", - "focusColor": "#FF79C5", - "focusedBorderColor": "#FF79C5", - "hoverIconColor": "#FF79C5", - "infoForeground": "#6272A4", - "iconColor": "#F8F8F2" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#282A36", - "controlText": "#6272A4", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#FF79C5", - "foreground": "#8BE9FD" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#6272A4", - "changedValueForeground": "#FF79C5", - "errorMessageForeground": "#f780bf", - "evaluatingExpressionForeground": "#6272A4", - "exceptionForeground": "#8aff80", - "modifyingValueForeground": "#FF79C5", - "valueForeground": "#FF79C5" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#6272A4", - "underlinedTabBackground": "#6272A4" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#6272A4" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#282A36", - "borderColor": "#282A36", - "hoverBackground": "#44475A", - "hoverColor": "#282A36", - "hoverMaskColor": "#6272A4", - "inactiveColoredTabBackground": "#282A36", - "inactiveColoredFileBackground": "#393C4B", - "inactiveUnderlineColor": "#FF79C5", - "inactiveMaskColor": "#282A36", - "underlineColor": "#FF79C5", - "underlinedTabBackground": "#44475A", - "underlinedTabForeground": "#8BE9FD" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#282A36", - "DialogWrapper.southPanelBackground": "#282A36", - "DialogWrapper.southPanelDivider": "#282A36", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#282A36", - "areaBorderColor": "#282A36", - "areaForeground": "#F8F8F2" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#282A36", - "foreground": "#F8F8F2", - "shortcutForeground": "#6272A4" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#282A36", - "caretForeground": "#FF79C5", - "foreground": "#F8F8F2", - "inactiveBackground": "#282A36", - "inactiveForeground": "#6272A4", - "selectionBackground": "#44475A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#282A36", - "hoverBackground": "#6272A4", - "hoverColor": "#6272A4", - "hoverMaskColor": "#6272A4", - "inactiveMaskColor": "#282A36", - "inactiveColoredFileBackground": "#282A36", - "inactiveUnderlineColor": "#6272A4", - "selectedForeground": "#F8F8F2", - "selectedBackground": "#44475A", - "underlineColor": "#FF79C5", - "underlinedTabBackground": "#44475A", - "underlinedTabForeground": "#8BE9FD" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#282A36", - "borderColor": "#282A36", - "hoverBackground": "#6272A4", - "hoverColor": "#6272A4", - "inactiveUnderlineColor": "#FF79C5", - "underlineColor": "#FF79C5", - "underlinedTabBackground": "#44475A", - "underlinedTabForeground": "#F8F8F2" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#313341", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#21222C", + "Focus.color": "border", "FormattedTextField": { - "background": "#282A36", - "caretForeground": "#FF79C5", - "foreground": "#F8F8F2", - "inactiveBackground": "#393C4B", - "inactiveForeground": "#6272A4", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#44475A" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#1D2228", "Group": { - "disabledSeparatorColor": "#21222C", - "separatorColor": "#21222C" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#6272A4", - "lineSeparatorColor": "#282A36" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#282A36", - "inactive": "#191A21" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#282A36", - "borderColor": "#21222C", - "foreground": "#F8F8F2", - "infoForeground": "#6272A4", - "shortcutForeground": "#6272A4" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#FF79C5", - "inactiveCaption": "#282A36", - "inactiveCaptionBorder": "#282A36", - "inactiveCaptionText": "#6272A4", - "info": "#6272A4", - "infoText": "#6272A4", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#21222C", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#282A36" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#F8F8F2", - "background": "#282A36", - "inactiveTitleForeground": "#6272A4" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#282A36", - "disabledForeground": "#6272A4", - "disabledShadow": "#282A36", - "disabledText": "#6272A4", - "foreground": "#F8F8F2", - "infoForeground": "#6272A4", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#F8F8F2" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#FF79C5", - "hoverForeground": "#FF79C5", - "pressedForeground": "#FF79C5", - "secondaryForeground": "#6272A4", - "visitedForeground": "#FF79C5" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#FF79C5", + "link.foreground": "accent", "List": { - "background": "#282A36", - "foreground": "#F8F8F2", - "hoverBackground": "#44475A50", - "hoverInactiveBackground": "#44475A", - "selectionBackground": "#44475A", - "selectionForeground": "#8BE9FD", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#44475A50" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#282A36", - "branchColor": "#F8F8F2", - "contrast": "#191A21", - "foreground": "#F8F8F2", - "mergeCommits": "#393C4B", - "primaryColor": "#6272A4", - "selectionForeground": "#8BE9FD", - "tab.backgroundColor": "#282A36", - "tab.borderColor": "#FF79C5", - "tagColor": "#6272A4" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#282A36", - "usedColor": "#6272A4", - "usedBackground": "#6272A4" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#6272A4", - "acceleratorSelectionForeground": "#8BE9FD", - "background": "#282A36", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#282A36", - "disabledBackground": "#282A36", - "disabledForeground": "#6272A4", - "foreground": "#F8F8F2", - "selectionBackground": "#44475A", - "selectionForeground": "#8BE9FD", - "separatorColor": "#21222C" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#282A36", - "borderColor": "#282A36", - "disabledBackground": "#282A36", - "disabledForeground": "#6272A4", - "foreground": "#F8F8F2", - "highlight": "#282A36", - "selectionBackground": "#44475A", - "selectionForeground": "#8BE9FD", - "shadow": "#282A36" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#6272A4", - "acceleratorSelectionForeground": "#8BE9FD", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#282A36", - "disabledBackground": "#282A36", - "disabledForeground": "#6272A4", - "foreground": "#F8F8F2", - "selectionBackground": "#44475A", - "selectionForeground": "#8BE9FD" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#F8F8F2", - "borderColor": "#282A36" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#282A36" + "background": "bg" }, "SearchField": { - "background": "#282A36" + "background": "hc" } }, - "NewPSD.warning": "#FF79C5", + "NewPSD.warning": "accent", "Notification": { - "background": "#1D2228", - "borderColor": "#1D2228", - "errorBackground": "#1D2228", - "errorBorderColor": "#1D2228", - "foreground": "#F8F8F2", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#393C4B", - "foreground": "#F8F8F2", - "innerBorderColor": "#393C4B" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#1D2228", - "errorBorderColor": "#1D2228", - "informativeBackground": "#1D2228", - "informativeBorderColor": "#1D2228", - "warningBackground": "#1D2228", - "warningBorderColor": "#1D2228" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#21222C", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#282A36", - "foreground": "#F8F8F2", - "messageForeground": "#F8F8F2" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#393C4B", - "focusedColor": "#FF79C5", - "disabledColor": "#6272A4" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#282A36", - "foreground": "#F8F8F2" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#282A36", - "borderColor": "#44475A", - "currentOverloadBackground": "#6272A4", - "currentParameterForeground": "#FF79C5", - "disabledForeground": "#6272A4", - "foreground": "#F8F8F2", - "infoForeground": "#6272A4", - "lineSeparatorColor": "#44475A" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#282A36", - "capsLockIconColor": "#FF79C5", - "caretForeground": "#FF79C5", - "foreground": "#F8F8F2", - "inactiveForeground": "#6272A4", - "selectionBackground": "#44475A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#282A36", - "disabledForeground": "#6272A4", - "eapTagBackground": "#6272A4", - "hoverBackground": "#44475A50", - "lightSelectionBackground": "#44475A", - "paidTagBackground": "#6272A4", - "selectionBackground": "#44475A", - "tagForeground": "#FF79C5", - "tagBackground": "#6272A4", - "trialTagBackground": "#6272A4", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#393C4B", - "installBorderColor": "#393C4B", - "installForeground": "#F8F8F2", - "installFocusedBackground": "#6272A4", - "installFillForeground": "#6272A4", - "installFillBackground": "#393C4B", - "updateBackground": "#FF79C5", - "updateBorderColor": "#393C4B", - "updateForeground": "#F8F8F2" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#282A36", - "borderColor": "#21222C" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#282A36", - "foreground": "#F8F8F2" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#44475A", - "selectedForeground": "#8BE9FD", - "selectedBackground": "#44475A" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#282A36", - "borderColor": "#282A36", - "foreground": "#FF79C5" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#191A21", - "inactiveBorderColor": "#282A36", - "innerBorderColor": "#282A36", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#282A36", - "inactiveBackground": "#191A21" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#F8F8F2", - "separatorColor": "#282A36", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#191A21", - "background": "#191A21", - "borderColor": "#191A21" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#282A36", + "background": "bg", "border": "2,0,2,0", - "foreground": "#F8F8F2", - "translucentBackground": "#282A36" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#282A36", - "foreground": "#FF79C5", - "indeterminateEndColor": "#FF79C5", - "indeterminateStartColor": "#FF79C5", - "progressColor": "#FF79C5", - "selectionBackground": "#6272A4", - "trackColor": "#6272A4" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#FF79C5" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#282A36", - "disabledText": "#6272A4", - "foreground": "#F8F8F2" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#6272A4", - "acceleratorSelectionForeground": "#6272A4", - "background": "#282A36", - "disabledBackground": "#282A36", - "disabledForeground": "#6272A4", - "foreground": "#F8F8F2", - "selectionBackground": "#44475A", - "selectionForeground": "#8BE9FD" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#21222C", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#282A36", - "hoverThumbBorderColor": "#FF79C5", - "hoverThumbColor": "#FF79C5", - "hoverTrackColor": "#282A3630", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#FF79C5", - "hoverThumbColor": "#FF79C5", - "hoverTrackColor": "#282A3630", - "thumbBorderColor": "#FF79C570", - "thumbColor": "#FF79C570", - "trackColor": "#282A3630", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#FF79C5", - "hoverThumbColor": "#FF79C5", - "hoverTrackColor": "#282A3630", - "thumbBorderColor": "#FF79C570", - "thumbColor": "#FF79C570", - "trackColor": "#282A3630" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#6272A4", - "thumbBorderColor": "#FF79C570", - "thumbColor": "#FF79C570", - "trackColor": "#282A3630", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#FF79C5", - "hoverThumbColor": "#FF79C5", - "hoverTrackColor": "#282A3630", - "thumbBorderColor": "#FF79C570", - "thumbColor": "#FF79C570", - "trackColor": "#282A3630" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#191A21", - "foreground": "#6272A4" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#282A36" + "background": "bg" }, "List": { - "separatorForeground": "#6272A4", - "separatorColor": "#21222C" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#282A36", - "borderColor": "#191A21", - "infoForeground": "#6272A4" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#6272A4" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#FF79C5", - "startBackground": "#FF79C5", - "endColor": "#FF79C5", - "startColor": "#FF79C5" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#1D2228", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#44475A" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#6272A4", - "Repeated.File.Foreground": "#F8F8F2" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#282A36", - "foreground": "#282A36", - "separatorColor": "#282A36" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#282A36" + "background": "hc" }, "Slider": { - "background": "#282A36", - "buttonBorderColor": "#FF79C5", - "buttonColor": "#FF79C5", - "foreground": "#F8F8F2", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#282A36", - "trackColor": "#44475A", - "trackWidth": 7, - "thumb": "#FF79C5" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#6272A4", - "borderColor": "#21222C", - "foreground": "#F8F8F2", - "errorForeground": "#F8F8F2" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#282A36", + "background": "bg", "border": "3,3,3,3", - "foreground": "#F8F8F2", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#282A36", - "highlight": "#282A36" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#282A36", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#282A36", - "hoverBackground": "#6272A4", - "LightEditBackground": "#44475A" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#282A36", - "contentAreaColor": "#6272A4", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#21222C", - "disabledForeground": "#6272A4", - "disabledUnderlineColor": "#6272A4", - "focus": "#44475A", - "focusColor": "#44475A", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#F8F8F2", - "highlight": "#21222C", - "hoverColor": "#6272A4", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#FF79C5" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#282A36", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#191A21", - "background": "#282A36", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#6272A4", - "dropLineColor": "#FF79C5", - "dropLineShortColor": "#FF79C5", - "focusCellBackground": "#44475A", - "focusCellForeground": "#FFFFFF", - "foreground": "#F8F8F2", - "gridColor": "#282A36", - "highlightOuter": "#44475A", - "hoverBackground": "#44475A50", - "hoverInactiveBackground": "#44475A", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#6272A4", - "lightSelectionInactiveBackground": "#282A36", - "selectionBackground": "#44475A", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#44475A", - "selectionInactiveForeground": "#8BE9FD", - "sortIconColor": "#F8F8F2", - "stripeColor": "#191A21" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#282A36", - "borderColor": "#282A36", - "bottomSeparatorColor": "#282A36", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#6272A4", - "foreground": "#F8F8F2", - "focusCellBackground": "#44475A", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#282A36" + "separatorColor": "second" }, - "text": "#6272A4", - "textInactiveText": "#6272A4", - "textText": "#6272A4", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#282A36", - "caretForeground": "#FF79C5", - "foreground": "#F8F8F2", - "inactiveForeground": "#6272A4", - "selectionBackground": "#44475A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#282A36", - "caretForeground": "#FF79C5", - "foreground": "#F8F8F2", - "inactiveForeground": "#6272A4", - "selectionBackground": "#44475A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#282A36", - "caretForeground": "#FF79C5", - "foreground": "#F8F8F2", - "inactiveForeground": "#6272A4", - "selectionBackground": "#44475A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#191A21", - "Button.hoverBackground": "#6272A4", - "inactiveBackground": "#282A36", - "infoForeground": "#6272A4", - "inactiveInfoForeground": "#6272A4" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#F8F8F2", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#393C4B", - "buttonColor": "#F8F8F2", - "disabledText": "#6272A4", - "foreground": "#F8F8F2", - "offForeground": "#282A36", - "offBackground": "#282A36", - "onBackground": "#FF79C5", - "onForeground": "#FF79C5" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#282A36", - "borderHandleColor": "#6272A4", - "floatingForeground": "#6272A4", - "foreground": "#F8F8F2" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#282A36", - "Actions.infoForeground": "#6272A4", - "background": "#1D2228", - "borderColor": "#21222C", - "foreground": "#F8F8F2", - "infoForeground": "#6272A4", - "separatorColor": "#21222C", - "shortcutForeground": "#6272A4" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#44475A", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#191A21" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#282A36", - "borderColor": "#282A36", - "inactiveBackground": "#282A36" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#282A36" + "background": "bg" }, "HeaderTab": { - "borderColor": "#6272A4", - "hoverBackground": "#6272A4", - "hoverInactiveBackground": "#6272A4", - "inactiveUnderlineColor": "#FF79C5", - "selectedBackground": "#191A21", - "selectedInactiveBackground": "#191A21", - "underlineColor": "#FF79C5", - "underlinedTabBackground": "#44475A", - "underlinedTabInactiveBackground": "#282A36", - "underlinedTabForeground": "#8BE9FD", - "underlinedTabInactiveForeground": "#F8F8F2" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#282A36", - "foreground": "#6272A4", - "hash": "#21222C", - "hoverBackground": "#44475A50", - "hoverInactiveBackground": "#44475A", - "modifiedItemForeground": "#FF79C5", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#44475A50", - "selectionForeground": "#8BE9FD", - "selectionInactiveForeground": "#8BE9FD", - "selectionInactiveBackground": "#44475A50", - "textBackground": "#282A36" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#21222C", - "Canvas.background": "#191A21", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#282A36", - "foreground": "#F8F8F2" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#21222C", - "background": "#282A36", - "foreground": "#F8F8F2", - "hoverBorderColor": "#6272A4" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#21222C", - "hoverBorderColor": "#6272A4" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#191A21", - "highStroke.foreground": "#F8F8F2", - "Label.foreground": "#6272A4", - "List.selectionBackground": "#44475A50", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#21222C", - "Component.foreground": "#F8F8F2", - "ConstraintSetText.foreground": "#6272A4", - "ConstraintSet.background": "#282A36", - "CSPanel.SelectedFocusBackground": "#44475A", - "CSPanel.SelectedBackground": "#44475A50", - "cs_FocusText.infoForeground": "#6272A4", - "CursorTextColor.foreground": "#F8F8F2", - "HoverColor.disabledBackground": "#6272A4", - "motionGraph.background": "#282A36", - "Notification.background": "#1D2228", - "ourAvg.background": "#282A36", - "ourCS.background": "#282A36", - "ourCS_Border.borderColor": "#21222C", - "ourCS_TextColor.foreground": "#6272A4", - "ourCS_SelectedFocusBackground.selectionForeground": "#8BE9FD", - "ourCS_SelectedBackground.selectionInactiveBackground": "#44475A", - "ourCS_SelectedBorder.pressedBorderColor": "#6272A4", - "ourML_BarColor.separatorColor": "#21222C", - "PrimaryPanel.background": "#191A21", - "SecondaryPanel.background": "#282A36", - "SecondaryPanel.header.foreground": "#6272A4", - "SecondaryPanel.header.background": "#191A21", - "timeLine.disabledBorderColor": "#21222C" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#21222C", - "background": "#282A36" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#F8F8F2", + "percent.foreground": "fg", "Placeholder": { - "background": "#282A36", - "borderColor": "#21222C", - "foreground": "#F8F8F2", - "selectedForeground": "#8BE9FD" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#282A36", - "stroke.acceleratorForeground": "#6272A4" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#1D2228", - "errorBorderColor": "#1D2228", - "warningBackground": "#1D2228", - "warningBorderColor": "#1D2228" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#282A36" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#6272A4" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#FF79C5", - "otherIconColor": "#6272A4", - "remoteBranchIconColor": "#F8F8F2", - "tagIconColor": "#6272A4" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#FF79C5", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#6272A4", - "localTagIconColor": "#6272A4", - "mqTagIconColor": "#6272A4", - "tagIconColor": "#6272A4", - "tipIconColor": "#6272A4" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#6272A4", - "Commit.currentBranchBackground": "#282A36", - "Commit.hoveredBackground": "#44475A50" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#6272A4" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#282A36", - "foreground": "#F8F8F2" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#282A36", - "background": "#282A36", - "borderColor": "#282A36", - "captionBackground": "#191A21", - "captionForeground": "#F8F8F2", - "Details.background": "#282A36", - "footerBackground": "#191A21", - "footerForeground": "#F8F8F2", - "headerBackground": "#282A36", - "headerForeground": "#F8F8F2", - "List.background": "#191A21", - "separatorColor": "#21222C", - "SidePanel.background": "#282A36", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#191A21", - "actions.selectionBackground": "#6272A4", - "background": "#282A36", - "selectionBackground": "#44475A", - "selectionInactiveBackground": "#282A36" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#282A36", - "windowBorder": "#21222C", - "windowText": "#6272A4", - "Window.border": "#21222C" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#191A21", - "#6B6B6B": "#6272A4", - "#A7A7A7": "#282A36", - "#3D6185": "#FF79C5", - "#466D94": "#FF79C5", - "#3C3F41": "#282A36", - "#545556": "#6272A4", - "#606060": "#6272A4", - "#9AA7B0": "#F8F8F2", - "#675133": "#FF79C5", - "Actions.Blue": "#8aff80", - "Actions.Green": "#feff80", - "Actions.Grey": "#6272A4", - "Actions.GreyInline": "#6272A4", - "Actions.GreyInline.Dark": "#F8F8F2", - "Actions.Red": "#f780bf", - "Actions.Yellow": "#8aff80", - "Checkbox.Background.Default": "#191A21", - "Checkbox.Background.Default.Dark": "#191A21", - "Checkbox.Background.Disabled": "#313341", - "Checkbox.Background.Disabled.Dark": "#313341", - "Checkbox.Border.Default": "#21222C", - "Checkbox.Border.Default.Dark": "#21222C", - "Checkbox.Border.Disabled": "#6272A4", - "Checkbox.Border.Disabled.Dark": "#6272A4", - "Checkbox.Focus.Thin.Default": "#FF79C5", - "Checkbox.Focus.Thin.Default.Dark": "#FF79C5", - "Checkbox.Focus.Wide": "#FF79C5", - "Checkbox.Focus.Wide.Dark": "#FF79C5", - "Checkbox.Foreground.Disabled": "#6272A4", - "Checkbox.Foreground.Disabled.Dark": "#6272A4", - "Checkbox.Background.Selected": "#FF79C5", - "Checkbox.Background.Selected.Dark": "#282A36", - "Checkbox.Border.Selected": "#FF79C5", - "Checkbox.Border.Selected.Dark": "#FF79C5", - "Checkbox.Foreground.Selected": "#FF79C5", - "Checkbox.Foreground.Selected.Dark": "#FF79C5", - "Checkbox.Focus.Thin.Selected": "#F8F8F2", - "Checkbox.Focus.Thin.Selected.Dark": "#F8F8F2", - "Objects.Grey": "#6272A4", - "Objects.Blue": "#8aff80", - "Objects.RedStatus": "#f780bf", - "Objects.Red": "#f780bf", - "Objects.Pink": "#f780bf", - "Objects.Yellow": "#8aff80", - "Objects.Green": "#feff80", - "Objects.Purple": "#f780bf", - "Objects.BlackText": "#F8F8F2", - "Objects.YellowDark": "#9580ff", - "Objects.GreenAndroid": "#feff80" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/GitHub Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/GitHub Contrast.theme.json index 4bcd28ff..1bfffe4c 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/GitHub Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/GitHub Contrast.theme.json @@ -2,1004 +2,1089 @@ "name": "GitHub Contrast", "dark": false, "author": "Mallowigi", + "colors": { + "bg": "#F7F8FA", + "bg30": "#F7F8FA30", + "fg": "#5B6168", + "text": "#292D31", + "selBg": "#c6e5ff", + "selFg": "#111111", + "activeFg": "#111111", + "border": "#DFE1E4", + "excl": "#dcdcdc", + "second": "#F3f3f3", + "dis": "#9ba0a3", + "accent": "#79CB60", + "accent2": "#79CB602", + "accent50": "#79CB6050", + "accent70": "#79CB6070", + "cs": "#fafbfc", + "button": "#edf1f5", + "table": "#cce5ff", + "tree": "#e1e4e8", + "hl": "#CCE5FF", + "notif": "#DFECFE", + "hc": "#fafbfc", + "white": "#24292E", + "blue": "#6F42C1", + "red": "#22863A", + "yellow": "#6F42C1", + "green": "#032F62", + "gray": "#6A737D", + "purple": "#D73A49", + "orange": "#005CC5" + }, "editorScheme": "colors/GitHub.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#292D31", - "background": "#F7F8FA", - "borderColor": "#DFE1E4", - "disabledBackground": "#dcdcdc", - "disabledForeground": "#9ba0a3", - "disabledText": "#9ba0a3", - "focusColor": "#CCE5FF", - "focusedBorderColor": "#79CB60", - "foreground": "#5B6168", - "inactiveBackground": "#dcdcdc", - "inactiveForeground": "#292D31", - "infoForeground": "#292D31", - "selectionBackground": "#3A66D150", - "selectionBackgroundInactive": "#F3f3f3", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#F3f3f3", - "separatorColor": "#DFE1E4" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#F7F8FA", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#79CB6050", - "hoverBorderColor": "#79CB6050", - "hoverSeparatorColor": "#edf1f5", - "focusedBorderColor": "#79CB6050", - "pressedBackground": "#79CB6050", - "pressedBorderColor": "#79CB6050" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#3A66D150" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#F7F8FA", - "Borders.color": "#DFE1E4", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#F7F8FA", + "background": "bg", "default": { - "endBackground": "#cce5ff", - "endBorderColor": "#cce5ff", - "foreground": "#111111", - "focusColor": "#79CB60", - "focusedBorderColor": "#79CB60", - "shadowColor": "#cce5ff", - "startBackground": "#cce5ff", - "startBorderColor": "#cce5ff" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#edf1f5", - "disabledText": "#9ba0a3", - "endBackground": "#edf1f5", - "endBorderColor": "#edf1f5", - "focus": "#CCE5FF", - "focusedBorderColor": "#79CB60", - "foreground": "#292D31", - "highlight": "#FFFFFF", - "mt.background": "#edf1f5", - "mt.foreground": "#292D31", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#cce5ff", - "mt.selection.color2": "#cce5ff", - "startBackground": "#edf1f5", - "startBorderColor": "#edf1f5", - "shadowColor": "#edf1f5", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#DFE1E4", - "Tooltip.background": "#DFECFE" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#fafbfc", - "selectionBackground": "#3A66D150" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#F7F8FA", - "disabledText": "#9ba0a3", - "foreground": "#5B6168", - "select": "#79CB60" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#292D31", - "acceleratorSelectionForeground": "#292D31", - "background": "#F7F8FA", - "disabledBackground": "#F7F8FA", - "disabledForeground": "#9ba0a3", - "foreground": "#5B6168", - "selectionBackground": "#3A66D150", - "selectionForeground": "#111111" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#5B6168", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#79CB60", - "dropdownBorder": "#F3f3f3", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#F7F8FA", - "foreground": "#5B6168", - "swatchesDefaultRecentColor": "#5B6168" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#edf1f5", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#edf1f5", - "disabledIconColor": "#9ba0a3", - "iconColor": "#5B6168", - "nonEditableBackground": "#F7F8FA" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#fafbfc", - "buttonBackground": "#edf1f5", - "darcula.hoveredArrowButtonForeground": "#79CB60", - "disabledForeground": "#9ba0a3", - "foreground": "#5B6168", - "modifiedItemForeground": "#79CB60", - "nonEditableBackground": "#F3f3f3", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#cce5ff", - "selectionForeground": "#111111" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#DFE1E4", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#F3f3f3", - "foreground": "#5B6168", - "infoForeground": "#292D31", - "matchForeground": "#79CB60", - "matchSelectionForeground": "#79CB60", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#292D31", - "selectionInactiveBackground": "#CCE5FF", - "selectionBackground": "#3A66D150", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#CCE5FF", - "disabledBorderColor": "#edf1f5", - "focusColor": "#79CB60", - "focusedBorderColor": "#79CB60", - "hoverIconColor": "#79CB60", - "infoForeground": "#292D31", - "iconColor": "#5B6168" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#F7F8FA", - "controlText": "#292D31", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#79CB60", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#292D31", - "changedValueForeground": "#79CB60", - "errorMessageForeground": "#22863A", - "evaluatingExpressionForeground": "#292D31", - "exceptionForeground": "#6F42C1", - "modifyingValueForeground": "#79CB60", - "valueForeground": "#79CB60" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#CCE5FF", - "underlinedTabBackground": "#CCE5FF" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#CCE5FF" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#F7F8FA", - "borderColor": "#F7F8FA", - "hoverBackground": "#cce5ff", - "hoverColor": "#fafbfc", - "hoverMaskColor": "#CCE5FF", - "inactiveColoredTabBackground": "#F7F8FA", - "inactiveColoredFileBackground": "#edf1f5", - "inactiveUnderlineColor": "#79CB60", - "inactiveMaskColor": "#fafbfc", - "underlineColor": "#79CB60", - "underlinedTabBackground": "#cce5ff", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#F7F8FA", - "DialogWrapper.southPanelBackground": "#F7F8FA", - "DialogWrapper.southPanelDivider": "#F7F8FA", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#F7F8FA", - "areaBorderColor": "#F7F8FA", - "areaForeground": "#5B6168" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#fafbfc", - "foreground": "#5B6168", - "shortcutForeground": "#292D31" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#fafbfc", - "caretForeground": "#79CB60", - "foreground": "#5B6168", - "inactiveBackground": "#F7F8FA", - "inactiveForeground": "#9ba0a3", - "selectionBackground": "#3A66D150", - "selectionForeground": "#111111" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#F3f3f3", - "hoverBackground": "#CCE5FF", - "hoverColor": "#CCE5FF", - "hoverMaskColor": "#CCE5FF", - "inactiveMaskColor": "#F7F8FA", - "inactiveColoredFileBackground": "#F7F8FA", - "inactiveUnderlineColor": "#9ba0a3", - "selectedForeground": "#5B6168", - "selectedBackground": "#cce5ff", - "underlineColor": "#79CB60", - "underlinedTabBackground": "#cce5ff", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#F7F8FA", - "borderColor": "#F3f3f3", - "hoverBackground": "#CCE5FF", - "hoverColor": "#CCE5FF", - "inactiveUnderlineColor": "#79CB60", - "underlineColor": "#79CB60", - "underlinedTabBackground": "#cce5ff", - "underlinedTabForeground": "#5B6168" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#dcdcdc", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#DFE1E4", + "Focus.color": "border", "FormattedTextField": { - "background": "#fafbfc", - "caretForeground": "#79CB60", - "foreground": "#5B6168", - "inactiveBackground": "#edf1f5", - "inactiveForeground": "#9ba0a3", - "selectionForeground": "#111111", - "selectionBackground": "#cce5ff" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#DFECFE", "Group": { - "disabledSeparatorColor": "#DFE1E4", - "separatorColor": "#DFE1E4" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#292D31", - "lineSeparatorColor": "#F7F8FA" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#F7F8FA", - "inactive": "#fafbfc" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#F7F8FA", - "borderColor": "#DFE1E4", - "foreground": "#5B6168", - "infoForeground": "#292D31", - "shortcutForeground": "#292D31" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#79CB60", - "inactiveCaption": "#F3f3f3", - "inactiveCaptionBorder": "#F7F8FA", - "inactiveCaptionText": "#292D31", - "info": "#292D31", - "infoText": "#292D31", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#DFE1E4", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#F7F8FA" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#5B6168", - "background": "#F7F8FA", - "inactiveTitleForeground": "#292D31" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#F7F8FA", - "disabledForeground": "#9ba0a3", - "disabledShadow": "#F7F8FA", - "disabledText": "#9ba0a3", - "foreground": "#5B6168", - "infoForeground": "#292D31", - "selectedForeground": "#111111", - "selectedDisabledForeground": "#5B6168" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#79CB60", - "hoverForeground": "#79CB60", - "pressedForeground": "#79CB60", - "secondaryForeground": "#292D31", - "visitedForeground": "#79CB60" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#79CB60", + "link.foreground": "accent", "List": { - "background": "#F3f3f3", - "foreground": "#5B6168", - "hoverBackground": "#3A66D1", - "hoverInactiveBackground": "#cce5ff", - "selectionBackground": "#3A66D150", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#111111", - "selectionInactiveBackground": "#3A66D1" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#F7F8FA", - "branchColor": "#5B6168", - "contrast": "#fafbfc", - "foreground": "#5B6168", - "mergeCommits": "#edf1f5", - "primaryColor": "#292D31", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#F7F8FA", - "tab.borderColor": "#79CB60", - "tagColor": "#292D31" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#F3f3f3", - "usedColor": "#CCE5FF", - "usedBackground": "#CCE5FF" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#292D31", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#F7F8FA", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#F3f3f3", - "disabledBackground": "#F3f3f3", - "disabledForeground": "#9ba0a3", - "foreground": "#5B6168", - "selectionBackground": "#3A66D150", - "selectionForeground": "#FFFFFF", - "separatorColor": "#DFE1E4" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#fafbfc", - "borderColor": "#F7F8FA", - "disabledBackground": "#F7F8FA", - "disabledForeground": "#9ba0a3", - "foreground": "#5B6168", - "highlight": "#F7F8FA", - "selectionBackground": "#3A66D150", - "selectionForeground": "#FFFFFF", - "shadow": "#fafbfc" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#292D31", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#F7F8FA", - "disabledBackground": "#F7F8FA", - "disabledForeground": "#9ba0a3", - "foreground": "#5B6168", - "selectionBackground": "#3A66D150", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#5B6168", - "borderColor": "#F7F8FA" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#F7F8FA" + "background": "bg" }, "SearchField": { - "background": "#fafbfc" + "background": "hc" } }, - "NewPSD.warning": "#79CB60", + "NewPSD.warning": "accent", "Notification": { - "background": "#DFECFE", - "borderColor": "#DFECFE", - "errorBackground": "#DFECFE", - "errorBorderColor": "#DFECFE", - "foreground": "#5B6168", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#edf1f5", - "foreground": "#5B6168", - "innerBorderColor": "#edf1f5" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#DFECFE", - "errorBorderColor": "#DFECFE", - "informativeBackground": "#DFECFE", - "informativeBorderColor": "#DFECFE", - "warningBackground": "#DFECFE", - "warningBorderColor": "#DFECFE" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#DFE1E4", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#F7F8FA", - "foreground": "#5B6168", - "messageForeground": "#5B6168" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#edf1f5", - "focusedColor": "#79CB60", - "disabledColor": "#9ba0a3" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#F7F8FA", - "foreground": "#5B6168" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#F3f3f3", - "borderColor": "#cce5ff", - "currentOverloadBackground": "#CCE5FF", - "currentParameterForeground": "#79CB60", - "disabledForeground": "#9ba0a3", - "foreground": "#5B6168", - "infoForeground": "#292D31", - "lineSeparatorColor": "#cce5ff" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#fafbfc", - "capsLockIconColor": "#79CB60", - "caretForeground": "#79CB60", - "foreground": "#5B6168", - "inactiveForeground": "#9ba0a3", - "selectionBackground": "#cce5ff", - "selectionForeground": "#111111" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#F7F8FA", - "disabledForeground": "#9ba0a3", - "eapTagBackground": "#CCE5FF", - "hoverBackground": "#3A66D1", - "lightSelectionBackground": "#cce5ff", - "paidTagBackground": "#CCE5FF", - "selectionBackground": "#3A66D150", - "tagForeground": "#79CB60", - "tagBackground": "#CCE5FF", - "trialTagBackground": "#CCE5FF", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#edf1f5", - "installBorderColor": "#edf1f5", - "installForeground": "#5B6168", - "installFocusedBackground": "#CCE5FF", - "installFillForeground": "#9ba0a3", - "installFillBackground": "#edf1f5", - "updateBackground": "#79CB60", - "updateBorderColor": "#edf1f5", - "updateForeground": "#5B6168" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#fafbfc", - "borderColor": "#DFE1E4" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#F3f3f3", - "foreground": "#5B6168" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#cce5ff", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#cce5ff" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#F7F8FA", - "borderColor": "#F7F8FA", - "foreground": "#79CB60" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#fafbfc", - "inactiveBorderColor": "#F7F8FA", - "innerBorderColor": "#F3f3f3", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#F7F8FA", - "inactiveBackground": "#fafbfc" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#5B6168", - "separatorColor": "#F3f3f3", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#fafbfc", - "background": "#fafbfc", - "borderColor": "#fafbfc" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#F7F8FA", + "background": "bg", "border": "2,0,2,0", - "foreground": "#5B6168", - "translucentBackground": "#F7F8FA" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#F7F8FA", - "foreground": "#79CB60", - "indeterminateEndColor": "#79CB60", - "indeterminateStartColor": "#79CB60", - "progressColor": "#79CB60", - "selectionBackground": "#CCE5FF", - "trackColor": "#CCE5FF" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#79CB60" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#F7F8FA", - "disabledText": "#9ba0a3", - "foreground": "#5B6168" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#292D31", - "acceleratorSelectionForeground": "#292D31", - "background": "#F7F8FA", - "disabledBackground": "#F7F8FA", - "disabledForeground": "#9ba0a3", - "foreground": "#5B6168", - "selectionBackground": "#3A66D150", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#DFE1E4", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#F7F8FA", - "hoverThumbBorderColor": "#79CB60", - "hoverThumbColor": "#79CB60", - "hoverTrackColor": "#F7F8FA30", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#79CB60", - "hoverThumbColor": "#79CB60", - "hoverTrackColor": "#F7F8FA30", - "thumbBorderColor": "#79CB6070", - "thumbColor": "#79CB6070", - "trackColor": "#F7F8FA30", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#79CB60", - "hoverThumbColor": "#79CB60", - "hoverTrackColor": "#F7F8FA30", - "thumbBorderColor": "#79CB6070", - "thumbColor": "#79CB6070", - "trackColor": "#F7F8FA30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#CCE5FF", - "thumbBorderColor": "#79CB6070", - "thumbColor": "#79CB6070", - "trackColor": "#F7F8FA30", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#79CB60", - "hoverThumbColor": "#79CB60", - "hoverTrackColor": "#F7F8FA30", - "thumbBorderColor": "#79CB6070", - "thumbColor": "#79CB6070", - "trackColor": "#F7F8FA30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#fafbfc", - "foreground": "#292D31" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#F7F8FA" + "background": "bg" }, "List": { - "separatorForeground": "#292D31", - "separatorColor": "#DFE1E4" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#F7F8FA", - "borderColor": "#fafbfc", - "infoForeground": "#292D31" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#111111", - "selectedForeground": "#111111", - "selectedBackground": "#CCE5FF" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#79CB60", - "startBackground": "#79CB60", - "endColor": "#79CB60", - "startColor": "#79CB60" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#DFECFE", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#cce5ff" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#292D31", - "Repeated.File.Foreground": "#5B6168" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#F3f3f3", - "foreground": "#F3f3f3", - "separatorColor": "#F3f3f3" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#fafbfc" + "background": "hc" }, "Slider": { - "background": "#F7F8FA", - "buttonBorderColor": "#79CB60", - "buttonColor": "#79CB60", - "foreground": "#5B6168", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#F3f3f3", - "trackColor": "#cce5ff", - "trackWidth": 7, - "thumb": "#79CB60" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#CCE5FF", - "borderColor": "#DFE1E4", - "foreground": "#5B6168", - "errorForeground": "#5B6168" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#F7F8FA", + "background": "bg", "border": "3,3,3,3", - "foreground": "#5B6168", - "selectionForeground": "#111111" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#F7F8FA", - "highlight": "#fafbfc" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#F3f3f3", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#F7F8FA", - "hoverBackground": "#CCE5FF", - "LightEditBackground": "#cce5ff" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#F7F8FA", - "contentAreaColor": "#CCE5FF", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#DFE1E4", - "disabledForeground": "#9ba0a3", - "disabledUnderlineColor": "#9ba0a3", - "focus": "#cce5ff", - "focusColor": "#cce5ff", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#5B6168", - "highlight": "#DFE1E4", - "hoverColor": "#CCE5FF", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#111111", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#79CB60" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#fafbfc", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#fafbfc", - "background": "#F7F8FA", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#9ba0a3", - "dropLineColor": "#79CB60", - "dropLineShortColor": "#79CB60", - "focusCellBackground": "#cce5ff", - "focusCellForeground": "#111111", - "foreground": "#5B6168", - "gridColor": "#F7F8FA", - "highlightOuter": "#cce5ff", - "hoverBackground": "#3A66D1", - "hoverInactiveBackground": "#cce5ff", - "lightSelectionForeground": "#111111", - "lightSelectionInactiveForeground": "#292D31", - "lightSelectionInactiveBackground": "#F3f3f3", - "selectionBackground": "#cce5ff", - "selectionForeground": "#111111", - "selectionInactiveBackground": "#cce5ff", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#5B6168", - "stripeColor": "#fafbfc" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#F7F8FA", - "borderColor": "#F7F8FA", - "bottomSeparatorColor": "#F3f3f3", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#9ba0a3", - "foreground": "#5B6168", - "focusCellBackground": "#cce5ff", - "focusCellForeground": "#111111", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#F3f3f3" + "separatorColor": "second" }, - "text": "#292D31", - "textInactiveText": "#292D31", - "textText": "#292D31", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#fafbfc", - "caretForeground": "#79CB60", - "foreground": "#5B6168", - "inactiveForeground": "#9ba0a3", - "selectionBackground": "#cce5ff", - "selectionForeground": "#111111" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#fafbfc", - "caretForeground": "#79CB60", - "foreground": "#5B6168", - "inactiveForeground": "#9ba0a3", - "selectionBackground": "#cce5ff", - "selectionForeground": "#111111" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#fafbfc", - "caretForeground": "#79CB60", - "foreground": "#5B6168", - "inactiveForeground": "#9ba0a3", - "selectionBackground": "#cce5ff", - "selectionForeground": "#111111" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#fafbfc", - "Button.hoverBackground": "#CCE5FF", - "inactiveBackground": "#F7F8FA", - "infoForeground": "#292D31", - "inactiveInfoForeground": "#292D31" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#5B6168", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#edf1f5", - "buttonColor": "#5B6168", - "disabledText": "#9ba0a3", - "foreground": "#5B6168", - "offForeground": "#F7F8FA", - "offBackground": "#F7F8FA", - "onBackground": "#79CB60", - "onForeground": "#79CB60" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#fafbfc", - "borderHandleColor": "#292D31", - "floatingForeground": "#292D31", - "foreground": "#5B6168" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#F7F8FA", - "Actions.infoForeground": "#292D31", - "background": "#DFECFE", - "borderColor": "#DFE1E4", - "foreground": "#5B6168", - "infoForeground": "#292D31", - "separatorColor": "#DFE1E4", - "shortcutForeground": "#292D31" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#cce5ff", - "selectedForeground": "#111111", - "selectedBackground": "#fafbfc" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#F7F8FA", - "borderColor": "#F3f3f3", - "inactiveBackground": "#F7F8FA" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#F7F8FA" + "background": "bg" }, "HeaderTab": { - "borderColor": "#CCE5FF", - "hoverBackground": "#CCE5FF", - "hoverInactiveBackground": "#CCE5FF", - "inactiveUnderlineColor": "#79CB60", - "selectedBackground": "#fafbfc", - "selectedInactiveBackground": "#fafbfc", - "underlineColor": "#79CB60", - "underlinedTabBackground": "#cce5ff", - "underlinedTabInactiveBackground": "#F3f3f3", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#5B6168" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#fafbfc", - "foreground": "#292D31", - "hash": "#DFE1E4", - "hoverBackground": "#3A66D1", - "hoverInactiveBackground": "#cce5ff", - "modifiedItemForeground": "#79CB60", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#3A66D1", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#3A66D1", - "textBackground": "#fafbfc" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#DFE1E4", - "Canvas.background": "#fafbfc", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#F7F8FA", - "foreground": "#5B6168" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#DFE1E4", - "background": "#F7F8FA", - "foreground": "#5B6168", - "hoverBorderColor": "#CCE5FF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#DFE1E4", - "hoverBorderColor": "#CCE5FF" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#fafbfc", - "highStroke.foreground": "#5B6168", - "Label.foreground": "#292D31", - "List.selectionBackground": "#3A66D1", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#DFE1E4", - "Component.foreground": "#5B6168", - "ConstraintSetText.foreground": "#292D31", - "ConstraintSet.background": "#F3f3f3", - "CSPanel.SelectedFocusBackground": "#3A66D150", - "CSPanel.SelectedBackground": "#3A66D1", - "cs_FocusText.infoForeground": "#292D31", - "CursorTextColor.foreground": "#5B6168", - "HoverColor.disabledBackground": "#9ba0a3", - "motionGraph.background": "#F7F8FA", - "Notification.background": "#DFECFE", - "ourAvg.background": "#F3f3f3", - "ourCS.background": "#F3f3f3", - "ourCS_Border.borderColor": "#DFE1E4", - "ourCS_TextColor.foreground": "#292D31", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#cce5ff", - "ourCS_SelectedBorder.pressedBorderColor": "#CCE5FF", - "ourML_BarColor.separatorColor": "#DFE1E4", - "PrimaryPanel.background": "#fafbfc", - "SecondaryPanel.background": "#F7F8FA", - "SecondaryPanel.header.foreground": "#292D31", - "SecondaryPanel.header.background": "#fafbfc", - "timeLine.disabledBorderColor": "#DFE1E4" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#DFE1E4", - "background": "#F7F8FA" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#5B6168", + "percent.foreground": "fg", "Placeholder": { - "background": "#F7F8FA", - "borderColor": "#DFE1E4", - "foreground": "#5B6168", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#F7F8FA", - "stroke.acceleratorForeground": "#292D31" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#DFECFE", - "errorBorderColor": "#DFECFE", - "warningBackground": "#DFECFE", - "warningBorderColor": "#DFECFE" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#F7F8FA" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#CCE5FF" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#79CB60", - "otherIconColor": "#292D31", - "remoteBranchIconColor": "#5B6168", - "tagIconColor": "#292D31" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#79CB60", - "bookmarkIconColor": "#111111", - "closedBranchIconColor": "#9ba0a3", - "localTagIconColor": "#292D31", - "mqTagIconColor": "#292D31", - "tagIconColor": "#292D31", - "tipIconColor": "#292D31" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#292D31", - "Commit.currentBranchBackground": "#F3f3f3", - "Commit.hoveredBackground": "#3A66D1" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#111111", - "backgroundBase": "#CCE5FF" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#fafbfc", - "foreground": "#5B6168" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#F7F8FA", - "background": "#F7F8FA", - "borderColor": "#F7F8FA", - "captionBackground": "#fafbfc", - "captionForeground": "#5B6168", - "Details.background": "#F7F8FA", - "footerBackground": "#fafbfc", - "footerForeground": "#5B6168", - "headerBackground": "#F7F8FA", - "headerForeground": "#5B6168", - "List.background": "#fafbfc", - "separatorColor": "#DFE1E4", - "SidePanel.background": "#F3f3f3", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#fafbfc", - "actions.selectionBackground": "#CCE5FF", - "background": "#F3f3f3", - "selectionBackground": "#3A66D150", - "selectionInactiveBackground": "#F3f3f3" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#fafbfc", - "windowBorder": "#DFE1E4", - "windowText": "#292D31", - "Window.border": "#DFE1E4" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#fafbfc", - "#6B6B6B": "#292D31", - "#A7A7A7": "#F7F8FA", - "#3D6185": "#79CB60", - "#466D94": "#79CB60", - "#3C3F41": "#F7F8FA", - "#545556": "#9ba0a3", - "#606060": "#9ba0a3", - "#9AA7B0": "#5B6168", - "#675133": "#79CB60", - "Actions.Blue": "#6F42C1", - "Actions.Green": "#032F62", - "Actions.Grey": "#292D31", - "Actions.GreyInline": "#6A737D", - "Actions.GreyInline.Dark": "#5B6168", - "Actions.Red": "#22863A", - "Actions.Yellow": "#6F42C1", - "Checkbox.Background.Default": "#fafbfc", - "Checkbox.Background.Default.Dark": "#fafbfc", - "Checkbox.Background.Disabled": "#dcdcdc", - "Checkbox.Background.Disabled.Dark": "#dcdcdc", - "Checkbox.Border.Default": "#DFE1E4", - "Checkbox.Border.Default.Dark": "#DFE1E4", - "Checkbox.Border.Disabled": "#9ba0a3", - "Checkbox.Border.Disabled.Dark": "#9ba0a3", - "Checkbox.Focus.Thin.Default": "#79CB60", - "Checkbox.Focus.Thin.Default.Dark": "#79CB60", - "Checkbox.Focus.Wide": "#79CB60", - "Checkbox.Focus.Wide.Dark": "#79CB60", - "Checkbox.Foreground.Disabled": "#9ba0a3", - "Checkbox.Foreground.Disabled.Dark": "#9ba0a3", - "Checkbox.Background.Selected": "#79CB60", - "Checkbox.Background.Selected.Dark": "#F7F8FA", - "Checkbox.Border.Selected": "#79CB60", - "Checkbox.Border.Selected.Dark": "#79CB60", - "Checkbox.Foreground.Selected": "#79CB60", - "Checkbox.Foreground.Selected.Dark": "#79CB60", - "Checkbox.Focus.Thin.Selected": "#5B6168", - "Checkbox.Focus.Thin.Selected.Dark": "#5B6168", - "Objects.Grey": "#6A737D", - "Objects.Blue": "#6F42C1", - "Objects.RedStatus": "#22863A", - "Objects.Red": "#22863A", - "Objects.Pink": "#D73A49", - "Objects.Yellow": "#6F42C1", - "Objects.Green": "#032F62", - "Objects.Purple": "#D73A49", - "Objects.BlackText": "#5B6168", - "Objects.YellowDark": "#005CC5", - "Objects.GreenAndroid": "#032F62" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/GitHub Dark Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/GitHub Dark Contrast.theme.json index b5c74595..ef305b9b 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/GitHub Dark Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/GitHub Dark Contrast.theme.json @@ -2,1004 +2,1089 @@ "name": "GitHub Dark Contrast", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#24292e", + "bg30": "#24292e30", + "fg": "#e1e4e8", + "text": "#959da5", + "selBg": "#3392FF", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#1b1f23", + "excl": "#2f363d", + "second": "#2f363d", + "dis": "#6a737d", + "accent": "#f9826c", + "accent2": "#f9826c2", + "accent50": "#f9826c50", + "accent70": "#f9826c70", + "cs": "#1e2428", + "button": "#39414a", + "table": "#2b3036", + "tree": "#39414a", + "hl": "#444d56", + "notif": "#2f363d", + "hc": "#1e2428", + "white": "#d1d5da", + "blue": "#b392f0", + "red": "#85e89d", + "yellow": "#b392f0", + "green": "#79b8ff", + "gray": "#959da5", + "purple": "#f97583", + "orange": "#79b8ff" + }, "editorScheme": "colors/GitHub Dark.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#959da5", - "background": "#24292e", - "borderColor": "#1b1f23", - "disabledBackground": "#2f363d", - "disabledForeground": "#6a737d", - "disabledText": "#6a737d", - "focusColor": "#444d56", - "focusedBorderColor": "#f9826c", - "foreground": "#e1e4e8", - "inactiveBackground": "#2f363d", - "inactiveForeground": "#959da5", - "infoForeground": "#959da5", - "selectionBackground": "#3392FF44", - "selectionBackgroundInactive": "#2f363d", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#2f363d", - "separatorColor": "#1b1f23" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#24292e", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#f9826c50", - "hoverBorderColor": "#f9826c50", - "hoverSeparatorColor": "#39414a", - "focusedBorderColor": "#f9826c50", - "pressedBackground": "#f9826c50", - "pressedBorderColor": "#f9826c50" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#3392FF44" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#24292e", - "Borders.color": "#1b1f23", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#24292e", + "background": "bg", "default": { - "endBackground": "#2b3036", - "endBorderColor": "#2b3036", - "foreground": "#FFFFFF", - "focusColor": "#f9826c", - "focusedBorderColor": "#f9826c", - "shadowColor": "#2b3036", - "startBackground": "#2b3036", - "startBorderColor": "#2b3036" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#39414a", - "disabledText": "#6a737d", - "endBackground": "#39414a", - "endBorderColor": "#39414a", - "focus": "#444d56", - "focusedBorderColor": "#f9826c", - "foreground": "#959da5", - "highlight": "#FFFFFF", - "mt.background": "#39414a", - "mt.foreground": "#959da5", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#2b3036", - "mt.selection.color2": "#2b3036", - "startBackground": "#39414a", - "startBorderColor": "#39414a", - "shadowColor": "#39414a", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#1b1f23", - "Tooltip.background": "#2f363d" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#1e2428", - "selectionBackground": "#3392FF44" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#24292e", - "disabledText": "#6a737d", - "foreground": "#e1e4e8", - "select": "#f9826c" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#959da5", - "acceleratorSelectionForeground": "#959da5", - "background": "#24292e", - "disabledBackground": "#24292e", - "disabledForeground": "#6a737d", - "foreground": "#e1e4e8", - "selectionBackground": "#3392FF44", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#e1e4e8", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#f9826c", - "dropdownBorder": "#2f363d", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#24292e", - "foreground": "#e1e4e8", - "swatchesDefaultRecentColor": "#e1e4e8" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#39414a", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#39414a", - "disabledIconColor": "#6a737d", - "iconColor": "#e1e4e8", - "nonEditableBackground": "#24292e" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#1e2428", - "buttonBackground": "#39414a", - "darcula.hoveredArrowButtonForeground": "#f9826c", - "disabledForeground": "#6a737d", - "foreground": "#e1e4e8", - "modifiedItemForeground": "#f9826c", - "nonEditableBackground": "#2f363d", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#2b3036", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#1b1f23", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#2f363d", - "foreground": "#e1e4e8", - "infoForeground": "#959da5", - "matchForeground": "#f9826c", - "matchSelectionForeground": "#f9826c", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#959da5", - "selectionInactiveBackground": "#444d56", - "selectionBackground": "#3392FF44", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#444d56", - "disabledBorderColor": "#39414a", - "focusColor": "#f9826c", - "focusedBorderColor": "#f9826c", - "hoverIconColor": "#f9826c", - "infoForeground": "#959da5", - "iconColor": "#e1e4e8" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#24292e", - "controlText": "#959da5", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#f9826c", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#959da5", - "changedValueForeground": "#f9826c", - "errorMessageForeground": "#85e89d", - "evaluatingExpressionForeground": "#959da5", - "exceptionForeground": "#b392f0", - "modifyingValueForeground": "#f9826c", - "valueForeground": "#f9826c" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#444d56", - "underlinedTabBackground": "#444d56" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#444d56" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#24292e", - "borderColor": "#24292e", - "hoverBackground": "#2b3036", - "hoverColor": "#1e2428", - "hoverMaskColor": "#444d56", - "inactiveColoredTabBackground": "#24292e", - "inactiveColoredFileBackground": "#39414a", - "inactiveUnderlineColor": "#f9826c", - "inactiveMaskColor": "#1e2428", - "underlineColor": "#f9826c", - "underlinedTabBackground": "#2b3036", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#24292e", - "DialogWrapper.southPanelBackground": "#24292e", - "DialogWrapper.southPanelDivider": "#24292e", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#24292e", - "areaBorderColor": "#24292e", - "areaForeground": "#e1e4e8" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#1e2428", - "foreground": "#e1e4e8", - "shortcutForeground": "#959da5" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#1e2428", - "caretForeground": "#f9826c", - "foreground": "#e1e4e8", - "inactiveBackground": "#24292e", - "inactiveForeground": "#6a737d", - "selectionBackground": "#3392FF44", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#2f363d", - "hoverBackground": "#444d56", - "hoverColor": "#444d56", - "hoverMaskColor": "#444d56", - "inactiveMaskColor": "#24292e", - "inactiveColoredFileBackground": "#24292e", - "inactiveUnderlineColor": "#6a737d", - "selectedForeground": "#e1e4e8", - "selectedBackground": "#2b3036", - "underlineColor": "#f9826c", - "underlinedTabBackground": "#2b3036", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#24292e", - "borderColor": "#2f363d", - "hoverBackground": "#444d56", - "hoverColor": "#444d56", - "inactiveUnderlineColor": "#f9826c", - "underlineColor": "#f9826c", - "underlinedTabBackground": "#2b3036", - "underlinedTabForeground": "#e1e4e8" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#2f363d", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#1b1f23", + "Focus.color": "border", "FormattedTextField": { - "background": "#1e2428", - "caretForeground": "#f9826c", - "foreground": "#e1e4e8", - "inactiveBackground": "#39414a", - "inactiveForeground": "#6a737d", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#2b3036" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#2f363d", "Group": { - "disabledSeparatorColor": "#1b1f23", - "separatorColor": "#1b1f23" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#959da5", - "lineSeparatorColor": "#24292e" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#24292e", - "inactive": "#1e2428" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#24292e", - "borderColor": "#1b1f23", - "foreground": "#e1e4e8", - "infoForeground": "#959da5", - "shortcutForeground": "#959da5" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#f9826c", - "inactiveCaption": "#2f363d", - "inactiveCaptionBorder": "#24292e", - "inactiveCaptionText": "#959da5", - "info": "#959da5", - "infoText": "#959da5", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#1b1f23", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#24292e" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#e1e4e8", - "background": "#24292e", - "inactiveTitleForeground": "#959da5" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#24292e", - "disabledForeground": "#6a737d", - "disabledShadow": "#24292e", - "disabledText": "#6a737d", - "foreground": "#e1e4e8", - "infoForeground": "#959da5", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#e1e4e8" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#f9826c", - "hoverForeground": "#f9826c", - "pressedForeground": "#f9826c", - "secondaryForeground": "#959da5", - "visitedForeground": "#f9826c" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#f9826c", + "link.foreground": "accent", "List": { - "background": "#2f363d", - "foreground": "#e1e4e8", - "hoverBackground": "#39414a", - "hoverInactiveBackground": "#2b3036", - "selectionBackground": "#3392FF44", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#39414a" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#24292e", - "branchColor": "#e1e4e8", - "contrast": "#1e2428", - "foreground": "#e1e4e8", - "mergeCommits": "#39414a", - "primaryColor": "#959da5", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#24292e", - "tab.borderColor": "#f9826c", - "tagColor": "#959da5" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#2f363d", - "usedColor": "#444d56", - "usedBackground": "#444d56" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#959da5", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#24292e", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#2f363d", - "disabledBackground": "#2f363d", - "disabledForeground": "#6a737d", - "foreground": "#e1e4e8", - "selectionBackground": "#3392FF44", - "selectionForeground": "#FFFFFF", - "separatorColor": "#1b1f23" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#1e2428", - "borderColor": "#24292e", - "disabledBackground": "#24292e", - "disabledForeground": "#6a737d", - "foreground": "#e1e4e8", - "highlight": "#24292e", - "selectionBackground": "#3392FF44", - "selectionForeground": "#FFFFFF", - "shadow": "#1e2428" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#959da5", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#24292e", - "disabledBackground": "#24292e", - "disabledForeground": "#6a737d", - "foreground": "#e1e4e8", - "selectionBackground": "#3392FF44", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#e1e4e8", - "borderColor": "#24292e" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#24292e" + "background": "bg" }, "SearchField": { - "background": "#1e2428" + "background": "hc" } }, - "NewPSD.warning": "#f9826c", + "NewPSD.warning": "accent", "Notification": { - "background": "#2f363d", - "borderColor": "#2f363d", - "errorBackground": "#2f363d", - "errorBorderColor": "#2f363d", - "foreground": "#e1e4e8", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#39414a", - "foreground": "#e1e4e8", - "innerBorderColor": "#39414a" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#2f363d", - "errorBorderColor": "#2f363d", - "informativeBackground": "#2f363d", - "informativeBorderColor": "#2f363d", - "warningBackground": "#2f363d", - "warningBorderColor": "#2f363d" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#1b1f23", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#24292e", - "foreground": "#e1e4e8", - "messageForeground": "#e1e4e8" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#39414a", - "focusedColor": "#f9826c", - "disabledColor": "#6a737d" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#24292e", - "foreground": "#e1e4e8" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#2f363d", - "borderColor": "#2b3036", - "currentOverloadBackground": "#444d56", - "currentParameterForeground": "#f9826c", - "disabledForeground": "#6a737d", - "foreground": "#e1e4e8", - "infoForeground": "#959da5", - "lineSeparatorColor": "#2b3036" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#1e2428", - "capsLockIconColor": "#f9826c", - "caretForeground": "#f9826c", - "foreground": "#e1e4e8", - "inactiveForeground": "#6a737d", - "selectionBackground": "#2b3036", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#24292e", - "disabledForeground": "#6a737d", - "eapTagBackground": "#444d56", - "hoverBackground": "#39414a", - "lightSelectionBackground": "#2b3036", - "paidTagBackground": "#444d56", - "selectionBackground": "#3392FF44", - "tagForeground": "#f9826c", - "tagBackground": "#444d56", - "trialTagBackground": "#444d56", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#39414a", - "installBorderColor": "#39414a", - "installForeground": "#e1e4e8", - "installFocusedBackground": "#444d56", - "installFillForeground": "#6a737d", - "installFillBackground": "#39414a", - "updateBackground": "#f9826c", - "updateBorderColor": "#39414a", - "updateForeground": "#e1e4e8" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#1e2428", - "borderColor": "#1b1f23" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#2f363d", - "foreground": "#e1e4e8" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#2b3036", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#2b3036" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#24292e", - "borderColor": "#24292e", - "foreground": "#f9826c" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#1e2428", - "inactiveBorderColor": "#24292e", - "innerBorderColor": "#2f363d", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#24292e", - "inactiveBackground": "#1e2428" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#e1e4e8", - "separatorColor": "#2f363d", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#1e2428", - "background": "#1e2428", - "borderColor": "#1e2428" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#24292e", + "background": "bg", "border": "2,0,2,0", - "foreground": "#e1e4e8", - "translucentBackground": "#24292e" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#24292e", - "foreground": "#f9826c", - "indeterminateEndColor": "#f9826c", - "indeterminateStartColor": "#f9826c", - "progressColor": "#f9826c", - "selectionBackground": "#444d56", - "trackColor": "#444d56" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#f9826c" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#24292e", - "disabledText": "#6a737d", - "foreground": "#e1e4e8" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#959da5", - "acceleratorSelectionForeground": "#959da5", - "background": "#24292e", - "disabledBackground": "#24292e", - "disabledForeground": "#6a737d", - "foreground": "#e1e4e8", - "selectionBackground": "#3392FF44", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#1b1f23", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#24292e", - "hoverThumbBorderColor": "#f9826c", - "hoverThumbColor": "#f9826c", - "hoverTrackColor": "#24292e30", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#f9826c", - "hoverThumbColor": "#f9826c", - "hoverTrackColor": "#24292e30", - "thumbBorderColor": "#f9826c70", - "thumbColor": "#f9826c70", - "trackColor": "#24292e30", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#f9826c", - "hoverThumbColor": "#f9826c", - "hoverTrackColor": "#24292e30", - "thumbBorderColor": "#f9826c70", - "thumbColor": "#f9826c70", - "trackColor": "#24292e30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#444d56", - "thumbBorderColor": "#f9826c70", - "thumbColor": "#f9826c70", - "trackColor": "#24292e30", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#f9826c", - "hoverThumbColor": "#f9826c", - "hoverTrackColor": "#24292e30", - "thumbBorderColor": "#f9826c70", - "thumbColor": "#f9826c70", - "trackColor": "#24292e30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#1e2428", - "foreground": "#959da5" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#24292e" + "background": "bg" }, "List": { - "separatorForeground": "#959da5", - "separatorColor": "#1b1f23" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#24292e", - "borderColor": "#1e2428", - "infoForeground": "#959da5" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#444d56" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#f9826c", - "startBackground": "#f9826c", - "endColor": "#f9826c", - "startColor": "#f9826c" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#2f363d", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#2b3036" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#959da5", - "Repeated.File.Foreground": "#e1e4e8" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#2f363d", - "foreground": "#2f363d", - "separatorColor": "#2f363d" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#1e2428" + "background": "hc" }, "Slider": { - "background": "#24292e", - "buttonBorderColor": "#f9826c", - "buttonColor": "#f9826c", - "foreground": "#e1e4e8", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#2f363d", - "trackColor": "#2b3036", - "trackWidth": 7, - "thumb": "#f9826c" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#444d56", - "borderColor": "#1b1f23", - "foreground": "#e1e4e8", - "errorForeground": "#e1e4e8" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#24292e", + "background": "bg", "border": "3,3,3,3", - "foreground": "#e1e4e8", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#24292e", - "highlight": "#1e2428" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#2f363d", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#24292e", - "hoverBackground": "#444d56", - "LightEditBackground": "#2b3036" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#24292e", - "contentAreaColor": "#444d56", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#1b1f23", - "disabledForeground": "#6a737d", - "disabledUnderlineColor": "#6a737d", - "focus": "#2b3036", - "focusColor": "#2b3036", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#e1e4e8", - "highlight": "#1b1f23", - "hoverColor": "#444d56", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#f9826c" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#1e2428", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#1e2428", - "background": "#24292e", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#6a737d", - "dropLineColor": "#f9826c", - "dropLineShortColor": "#f9826c", - "focusCellBackground": "#2b3036", - "focusCellForeground": "#FFFFFF", - "foreground": "#e1e4e8", - "gridColor": "#24292e", - "highlightOuter": "#2b3036", - "hoverBackground": "#39414a", - "hoverInactiveBackground": "#2b3036", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#959da5", - "lightSelectionInactiveBackground": "#2f363d", - "selectionBackground": "#2b3036", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#2b3036", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#e1e4e8", - "stripeColor": "#1e2428" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#24292e", - "borderColor": "#24292e", - "bottomSeparatorColor": "#2f363d", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#6a737d", - "foreground": "#e1e4e8", - "focusCellBackground": "#2b3036", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#2f363d" + "separatorColor": "second" }, - "text": "#959da5", - "textInactiveText": "#959da5", - "textText": "#959da5", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#1e2428", - "caretForeground": "#f9826c", - "foreground": "#e1e4e8", - "inactiveForeground": "#6a737d", - "selectionBackground": "#2b3036", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#1e2428", - "caretForeground": "#f9826c", - "foreground": "#e1e4e8", - "inactiveForeground": "#6a737d", - "selectionBackground": "#2b3036", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#1e2428", - "caretForeground": "#f9826c", - "foreground": "#e1e4e8", - "inactiveForeground": "#6a737d", - "selectionBackground": "#2b3036", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#1e2428", - "Button.hoverBackground": "#444d56", - "inactiveBackground": "#24292e", - "infoForeground": "#959da5", - "inactiveInfoForeground": "#959da5" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#e1e4e8", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#39414a", - "buttonColor": "#e1e4e8", - "disabledText": "#6a737d", - "foreground": "#e1e4e8", - "offForeground": "#24292e", - "offBackground": "#24292e", - "onBackground": "#f9826c", - "onForeground": "#f9826c" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#1e2428", - "borderHandleColor": "#959da5", - "floatingForeground": "#959da5", - "foreground": "#e1e4e8" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#24292e", - "Actions.infoForeground": "#959da5", - "background": "#2f363d", - "borderColor": "#1b1f23", - "foreground": "#e1e4e8", - "infoForeground": "#959da5", - "separatorColor": "#1b1f23", - "shortcutForeground": "#959da5" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#2b3036", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#1e2428" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#24292e", - "borderColor": "#2f363d", - "inactiveBackground": "#24292e" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#24292e" + "background": "bg" }, "HeaderTab": { - "borderColor": "#444d56", - "hoverBackground": "#444d56", - "hoverInactiveBackground": "#444d56", - "inactiveUnderlineColor": "#f9826c", - "selectedBackground": "#1e2428", - "selectedInactiveBackground": "#1e2428", - "underlineColor": "#f9826c", - "underlinedTabBackground": "#2b3036", - "underlinedTabInactiveBackground": "#2f363d", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#e1e4e8" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#1e2428", - "foreground": "#959da5", - "hash": "#1b1f23", - "hoverBackground": "#39414a", - "hoverInactiveBackground": "#2b3036", - "modifiedItemForeground": "#f9826c", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#39414a", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#39414a", - "textBackground": "#1e2428" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#1b1f23", - "Canvas.background": "#1e2428", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#24292e", - "foreground": "#e1e4e8" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#1b1f23", - "background": "#24292e", - "foreground": "#e1e4e8", - "hoverBorderColor": "#444d56" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#1b1f23", - "hoverBorderColor": "#444d56" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#1e2428", - "highStroke.foreground": "#e1e4e8", - "Label.foreground": "#959da5", - "List.selectionBackground": "#39414a", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#1b1f23", - "Component.foreground": "#e1e4e8", - "ConstraintSetText.foreground": "#959da5", - "ConstraintSet.background": "#2f363d", - "CSPanel.SelectedFocusBackground": "#3392FF44", - "CSPanel.SelectedBackground": "#39414a", - "cs_FocusText.infoForeground": "#959da5", - "CursorTextColor.foreground": "#e1e4e8", - "HoverColor.disabledBackground": "#6a737d", - "motionGraph.background": "#24292e", - "Notification.background": "#2f363d", - "ourAvg.background": "#2f363d", - "ourCS.background": "#2f363d", - "ourCS_Border.borderColor": "#1b1f23", - "ourCS_TextColor.foreground": "#959da5", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#2b3036", - "ourCS_SelectedBorder.pressedBorderColor": "#444d56", - "ourML_BarColor.separatorColor": "#1b1f23", - "PrimaryPanel.background": "#1e2428", - "SecondaryPanel.background": "#24292e", - "SecondaryPanel.header.foreground": "#959da5", - "SecondaryPanel.header.background": "#1e2428", - "timeLine.disabledBorderColor": "#1b1f23" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#1b1f23", - "background": "#24292e" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#e1e4e8", + "percent.foreground": "fg", "Placeholder": { - "background": "#24292e", - "borderColor": "#1b1f23", - "foreground": "#e1e4e8", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#24292e", - "stroke.acceleratorForeground": "#959da5" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#2f363d", - "errorBorderColor": "#2f363d", - "warningBackground": "#2f363d", - "warningBorderColor": "#2f363d" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#24292e" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#444d56" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#f9826c", - "otherIconColor": "#959da5", - "remoteBranchIconColor": "#e1e4e8", - "tagIconColor": "#959da5" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#f9826c", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#6a737d", - "localTagIconColor": "#959da5", - "mqTagIconColor": "#959da5", - "tagIconColor": "#959da5", - "tipIconColor": "#959da5" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#959da5", - "Commit.currentBranchBackground": "#2f363d", - "Commit.hoveredBackground": "#39414a" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#444d56" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#1e2428", - "foreground": "#e1e4e8" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#24292e", - "background": "#24292e", - "borderColor": "#24292e", - "captionBackground": "#1e2428", - "captionForeground": "#e1e4e8", - "Details.background": "#24292e", - "footerBackground": "#1e2428", - "footerForeground": "#e1e4e8", - "headerBackground": "#24292e", - "headerForeground": "#e1e4e8", - "List.background": "#1e2428", - "separatorColor": "#1b1f23", - "SidePanel.background": "#2f363d", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#1e2428", - "actions.selectionBackground": "#444d56", - "background": "#2f363d", - "selectionBackground": "#3392FF44", - "selectionInactiveBackground": "#2f363d" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#1e2428", - "windowBorder": "#1b1f23", - "windowText": "#959da5", - "Window.border": "#1b1f23" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#1e2428", - "#6B6B6B": "#959da5", - "#A7A7A7": "#24292e", - "#3D6185": "#f9826c", - "#466D94": "#f9826c", - "#3C3F41": "#24292e", - "#545556": "#6a737d", - "#606060": "#6a737d", - "#9AA7B0": "#e1e4e8", - "#675133": "#f9826c", - "Actions.Blue": "#b392f0", - "Actions.Green": "#79b8ff", - "Actions.Grey": "#959da5", - "Actions.GreyInline": "#959da5", - "Actions.GreyInline.Dark": "#e1e4e8", - "Actions.Red": "#85e89d", - "Actions.Yellow": "#b392f0", - "Checkbox.Background.Default": "#1e2428", - "Checkbox.Background.Default.Dark": "#1e2428", - "Checkbox.Background.Disabled": "#2f363d", - "Checkbox.Background.Disabled.Dark": "#2f363d", - "Checkbox.Border.Default": "#1b1f23", - "Checkbox.Border.Default.Dark": "#1b1f23", - "Checkbox.Border.Disabled": "#6a737d", - "Checkbox.Border.Disabled.Dark": "#6a737d", - "Checkbox.Focus.Thin.Default": "#f9826c", - "Checkbox.Focus.Thin.Default.Dark": "#f9826c", - "Checkbox.Focus.Wide": "#f9826c", - "Checkbox.Focus.Wide.Dark": "#f9826c", - "Checkbox.Foreground.Disabled": "#6a737d", - "Checkbox.Foreground.Disabled.Dark": "#6a737d", - "Checkbox.Background.Selected": "#f9826c", - "Checkbox.Background.Selected.Dark": "#24292e", - "Checkbox.Border.Selected": "#f9826c", - "Checkbox.Border.Selected.Dark": "#f9826c", - "Checkbox.Foreground.Selected": "#f9826c", - "Checkbox.Foreground.Selected.Dark": "#f9826c", - "Checkbox.Focus.Thin.Selected": "#e1e4e8", - "Checkbox.Focus.Thin.Selected.Dark": "#e1e4e8", - "Objects.Grey": "#959da5", - "Objects.Blue": "#b392f0", - "Objects.RedStatus": "#85e89d", - "Objects.Red": "#85e89d", - "Objects.Pink": "#f97583", - "Objects.Yellow": "#b392f0", - "Objects.Green": "#79b8ff", - "Objects.Purple": "#f97583", - "Objects.BlackText": "#e1e4e8", - "Objects.YellowDark": "#79b8ff", - "Objects.GreenAndroid": "#79b8ff" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/GitHub Dark.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/GitHub Dark.theme.json index 22d78114..53e4cb4b 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/GitHub Dark.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/GitHub Dark.theme.json @@ -2,1004 +2,1089 @@ "name": "GitHub Dark", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#24292e", + "bg30": "#24292e30", + "fg": "#e1e4e8", + "text": "#959da5", + "selBg": "#3392FF", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#1b1f23", + "excl": "#2f363d", + "second": "#2f363d", + "dis": "#6a737d", + "accent": "#f9826c", + "accent2": "#f9826c2", + "accent50": "#f9826c50", + "accent70": "#f9826c70", + "cs": "#1e2428", + "button": "#39414a", + "table": "#2b3036", + "tree": "#39414a", + "hl": "#444d56", + "notif": "#2f363d", + "hc": "#24292e", + "white": "#d1d5da", + "blue": "#b392f0", + "red": "#85e89d", + "yellow": "#b392f0", + "green": "#79b8ff", + "gray": "#959da5", + "purple": "#f97583", + "orange": "#79b8ff" + }, "editorScheme": "colors/GitHub Dark.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#959da5", - "background": "#24292e", - "borderColor": "#1b1f23", - "disabledBackground": "#2f363d", - "disabledForeground": "#6a737d", - "disabledText": "#6a737d", - "focusColor": "#444d56", - "focusedBorderColor": "#f9826c", - "foreground": "#e1e4e8", - "inactiveBackground": "#2f363d", - "inactiveForeground": "#959da5", - "infoForeground": "#959da5", - "selectionBackground": "#3392FF44", - "selectionBackgroundInactive": "#2f363d", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#2f363d", - "separatorColor": "#1b1f23" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#24292e", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#f9826c50", - "hoverBorderColor": "#f9826c50", - "hoverSeparatorColor": "#39414a", - "focusedBorderColor": "#f9826c50", - "pressedBackground": "#f9826c50", - "pressedBorderColor": "#f9826c50" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#3392FF44" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#24292e", - "Borders.color": "#1b1f23", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#24292e", + "background": "bg", "default": { - "endBackground": "#2b3036", - "endBorderColor": "#2b3036", - "foreground": "#FFFFFF", - "focusColor": "#f9826c", - "focusedBorderColor": "#f9826c", - "shadowColor": "#2b3036", - "startBackground": "#2b3036", - "startBorderColor": "#2b3036" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#39414a", - "disabledText": "#6a737d", - "endBackground": "#39414a", - "endBorderColor": "#39414a", - "focus": "#444d56", - "focusedBorderColor": "#f9826c", - "foreground": "#959da5", - "highlight": "#FFFFFF", - "mt.background": "#39414a", - "mt.foreground": "#959da5", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#2b3036", - "mt.selection.color2": "#2b3036", - "startBackground": "#39414a", - "startBorderColor": "#39414a", - "shadowColor": "#39414a", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#1b1f23", - "Tooltip.background": "#2f363d" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#1e2428", - "selectionBackground": "#3392FF44" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#24292e", - "disabledText": "#6a737d", - "foreground": "#e1e4e8", - "select": "#f9826c" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#959da5", - "acceleratorSelectionForeground": "#959da5", - "background": "#24292e", - "disabledBackground": "#24292e", - "disabledForeground": "#6a737d", - "foreground": "#e1e4e8", - "selectionBackground": "#3392FF44", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#e1e4e8", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#f9826c", - "dropdownBorder": "#2f363d", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#24292e", - "foreground": "#e1e4e8", - "swatchesDefaultRecentColor": "#e1e4e8" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#39414a", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#39414a", - "disabledIconColor": "#6a737d", - "iconColor": "#e1e4e8", - "nonEditableBackground": "#24292e" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#24292e", - "buttonBackground": "#39414a", - "darcula.hoveredArrowButtonForeground": "#f9826c", - "disabledForeground": "#6a737d", - "foreground": "#e1e4e8", - "modifiedItemForeground": "#f9826c", - "nonEditableBackground": "#2f363d", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#2b3036", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#1b1f23", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#2f363d", - "foreground": "#e1e4e8", - "infoForeground": "#959da5", - "matchForeground": "#f9826c", - "matchSelectionForeground": "#f9826c", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#959da5", - "selectionInactiveBackground": "#444d56", - "selectionBackground": "#3392FF44", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#444d56", - "disabledBorderColor": "#39414a", - "focusColor": "#f9826c", - "focusedBorderColor": "#f9826c", - "hoverIconColor": "#f9826c", - "infoForeground": "#959da5", - "iconColor": "#e1e4e8" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#24292e", - "controlText": "#959da5", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#f9826c", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#959da5", - "changedValueForeground": "#f9826c", - "errorMessageForeground": "#85e89d", - "evaluatingExpressionForeground": "#959da5", - "exceptionForeground": "#b392f0", - "modifyingValueForeground": "#f9826c", - "valueForeground": "#f9826c" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#444d56", - "underlinedTabBackground": "#444d56" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#444d56" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#24292e", - "borderColor": "#24292e", - "hoverBackground": "#2b3036", - "hoverColor": "#24292e", - "hoverMaskColor": "#444d56", - "inactiveColoredTabBackground": "#24292e", - "inactiveColoredFileBackground": "#39414a", - "inactiveUnderlineColor": "#f9826c", - "inactiveMaskColor": "#24292e", - "underlineColor": "#f9826c", - "underlinedTabBackground": "#2b3036", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#24292e", - "DialogWrapper.southPanelBackground": "#24292e", - "DialogWrapper.southPanelDivider": "#24292e", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#24292e", - "areaBorderColor": "#24292e", - "areaForeground": "#e1e4e8" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#24292e", - "foreground": "#e1e4e8", - "shortcutForeground": "#959da5" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#24292e", - "caretForeground": "#f9826c", - "foreground": "#e1e4e8", - "inactiveBackground": "#24292e", - "inactiveForeground": "#6a737d", - "selectionBackground": "#3392FF44", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#2f363d", - "hoverBackground": "#444d56", - "hoverColor": "#444d56", - "hoverMaskColor": "#444d56", - "inactiveMaskColor": "#24292e", - "inactiveColoredFileBackground": "#24292e", - "inactiveUnderlineColor": "#6a737d", - "selectedForeground": "#e1e4e8", - "selectedBackground": "#2b3036", - "underlineColor": "#f9826c", - "underlinedTabBackground": "#2b3036", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#24292e", - "borderColor": "#2f363d", - "hoverBackground": "#444d56", - "hoverColor": "#444d56", - "inactiveUnderlineColor": "#f9826c", - "underlineColor": "#f9826c", - "underlinedTabBackground": "#2b3036", - "underlinedTabForeground": "#e1e4e8" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#2f363d", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#1b1f23", + "Focus.color": "border", "FormattedTextField": { - "background": "#24292e", - "caretForeground": "#f9826c", - "foreground": "#e1e4e8", - "inactiveBackground": "#39414a", - "inactiveForeground": "#6a737d", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#2b3036" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#2f363d", "Group": { - "disabledSeparatorColor": "#1b1f23", - "separatorColor": "#1b1f23" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#959da5", - "lineSeparatorColor": "#24292e" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#24292e", - "inactive": "#1e2428" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#24292e", - "borderColor": "#1b1f23", - "foreground": "#e1e4e8", - "infoForeground": "#959da5", - "shortcutForeground": "#959da5" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#f9826c", - "inactiveCaption": "#2f363d", - "inactiveCaptionBorder": "#24292e", - "inactiveCaptionText": "#959da5", - "info": "#959da5", - "infoText": "#959da5", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#1b1f23", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#24292e" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#e1e4e8", - "background": "#24292e", - "inactiveTitleForeground": "#959da5" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#24292e", - "disabledForeground": "#6a737d", - "disabledShadow": "#24292e", - "disabledText": "#6a737d", - "foreground": "#e1e4e8", - "infoForeground": "#959da5", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#e1e4e8" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#f9826c", - "hoverForeground": "#f9826c", - "pressedForeground": "#f9826c", - "secondaryForeground": "#959da5", - "visitedForeground": "#f9826c" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#f9826c", + "link.foreground": "accent", "List": { - "background": "#2f363d", - "foreground": "#e1e4e8", - "hoverBackground": "#39414a", - "hoverInactiveBackground": "#2b3036", - "selectionBackground": "#3392FF44", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#39414a" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#24292e", - "branchColor": "#e1e4e8", - "contrast": "#1e2428", - "foreground": "#e1e4e8", - "mergeCommits": "#39414a", - "primaryColor": "#959da5", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#24292e", - "tab.borderColor": "#f9826c", - "tagColor": "#959da5" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#2f363d", - "usedColor": "#444d56", - "usedBackground": "#444d56" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#959da5", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#24292e", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#2f363d", - "disabledBackground": "#2f363d", - "disabledForeground": "#6a737d", - "foreground": "#e1e4e8", - "selectionBackground": "#3392FF44", - "selectionForeground": "#FFFFFF", - "separatorColor": "#1b1f23" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#24292e", - "borderColor": "#24292e", - "disabledBackground": "#24292e", - "disabledForeground": "#6a737d", - "foreground": "#e1e4e8", - "highlight": "#24292e", - "selectionBackground": "#3392FF44", - "selectionForeground": "#FFFFFF", - "shadow": "#24292e" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#959da5", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#24292e", - "disabledBackground": "#24292e", - "disabledForeground": "#6a737d", - "foreground": "#e1e4e8", - "selectionBackground": "#3392FF44", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#e1e4e8", - "borderColor": "#24292e" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#24292e" + "background": "bg" }, "SearchField": { - "background": "#24292e" + "background": "hc" } }, - "NewPSD.warning": "#f9826c", + "NewPSD.warning": "accent", "Notification": { - "background": "#2f363d", - "borderColor": "#2f363d", - "errorBackground": "#2f363d", - "errorBorderColor": "#2f363d", - "foreground": "#e1e4e8", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#39414a", - "foreground": "#e1e4e8", - "innerBorderColor": "#39414a" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#2f363d", - "errorBorderColor": "#2f363d", - "informativeBackground": "#2f363d", - "informativeBorderColor": "#2f363d", - "warningBackground": "#2f363d", - "warningBorderColor": "#2f363d" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#1b1f23", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#24292e", - "foreground": "#e1e4e8", - "messageForeground": "#e1e4e8" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#39414a", - "focusedColor": "#f9826c", - "disabledColor": "#6a737d" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#24292e", - "foreground": "#e1e4e8" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#2f363d", - "borderColor": "#2b3036", - "currentOverloadBackground": "#444d56", - "currentParameterForeground": "#f9826c", - "disabledForeground": "#6a737d", - "foreground": "#e1e4e8", - "infoForeground": "#959da5", - "lineSeparatorColor": "#2b3036" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#24292e", - "capsLockIconColor": "#f9826c", - "caretForeground": "#f9826c", - "foreground": "#e1e4e8", - "inactiveForeground": "#6a737d", - "selectionBackground": "#2b3036", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#24292e", - "disabledForeground": "#6a737d", - "eapTagBackground": "#444d56", - "hoverBackground": "#39414a", - "lightSelectionBackground": "#2b3036", - "paidTagBackground": "#444d56", - "selectionBackground": "#3392FF44", - "tagForeground": "#f9826c", - "tagBackground": "#444d56", - "trialTagBackground": "#444d56", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#39414a", - "installBorderColor": "#39414a", - "installForeground": "#e1e4e8", - "installFocusedBackground": "#444d56", - "installFillForeground": "#6a737d", - "installFillBackground": "#39414a", - "updateBackground": "#f9826c", - "updateBorderColor": "#39414a", - "updateForeground": "#e1e4e8" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#24292e", - "borderColor": "#1b1f23" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#2f363d", - "foreground": "#e1e4e8" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#2b3036", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#2b3036" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#24292e", - "borderColor": "#24292e", - "foreground": "#f9826c" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#1e2428", - "inactiveBorderColor": "#24292e", - "innerBorderColor": "#2f363d", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#24292e", - "inactiveBackground": "#1e2428" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#e1e4e8", - "separatorColor": "#2f363d", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#1e2428", - "background": "#1e2428", - "borderColor": "#1e2428" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#24292e", + "background": "bg", "border": "2,0,2,0", - "foreground": "#e1e4e8", - "translucentBackground": "#24292e" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#24292e", - "foreground": "#f9826c", - "indeterminateEndColor": "#f9826c", - "indeterminateStartColor": "#f9826c", - "progressColor": "#f9826c", - "selectionBackground": "#444d56", - "trackColor": "#444d56" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#f9826c" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#24292e", - "disabledText": "#6a737d", - "foreground": "#e1e4e8" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#959da5", - "acceleratorSelectionForeground": "#959da5", - "background": "#24292e", - "disabledBackground": "#24292e", - "disabledForeground": "#6a737d", - "foreground": "#e1e4e8", - "selectionBackground": "#3392FF44", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#1b1f23", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#24292e", - "hoverThumbBorderColor": "#f9826c", - "hoverThumbColor": "#f9826c", - "hoverTrackColor": "#24292e30", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#f9826c", - "hoverThumbColor": "#f9826c", - "hoverTrackColor": "#24292e30", - "thumbBorderColor": "#f9826c70", - "thumbColor": "#f9826c70", - "trackColor": "#24292e30", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#f9826c", - "hoverThumbColor": "#f9826c", - "hoverTrackColor": "#24292e30", - "thumbBorderColor": "#f9826c70", - "thumbColor": "#f9826c70", - "trackColor": "#24292e30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#444d56", - "thumbBorderColor": "#f9826c70", - "thumbColor": "#f9826c70", - "trackColor": "#24292e30", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#f9826c", - "hoverThumbColor": "#f9826c", - "hoverTrackColor": "#24292e30", - "thumbBorderColor": "#f9826c70", - "thumbColor": "#f9826c70", - "trackColor": "#24292e30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#1e2428", - "foreground": "#959da5" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#24292e" + "background": "bg" }, "List": { - "separatorForeground": "#959da5", - "separatorColor": "#1b1f23" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#24292e", - "borderColor": "#1e2428", - "infoForeground": "#959da5" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#444d56" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#f9826c", - "startBackground": "#f9826c", - "endColor": "#f9826c", - "startColor": "#f9826c" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#2f363d", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#2b3036" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#959da5", - "Repeated.File.Foreground": "#e1e4e8" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#2f363d", - "foreground": "#2f363d", - "separatorColor": "#2f363d" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#24292e" + "background": "hc" }, "Slider": { - "background": "#24292e", - "buttonBorderColor": "#f9826c", - "buttonColor": "#f9826c", - "foreground": "#e1e4e8", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#2f363d", - "trackColor": "#2b3036", - "trackWidth": 7, - "thumb": "#f9826c" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#444d56", - "borderColor": "#1b1f23", - "foreground": "#e1e4e8", - "errorForeground": "#e1e4e8" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#24292e", + "background": "bg", "border": "3,3,3,3", - "foreground": "#e1e4e8", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#24292e", - "highlight": "#24292e" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#2f363d", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#24292e", - "hoverBackground": "#444d56", - "LightEditBackground": "#2b3036" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#24292e", - "contentAreaColor": "#444d56", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#1b1f23", - "disabledForeground": "#6a737d", - "disabledUnderlineColor": "#6a737d", - "focus": "#2b3036", - "focusColor": "#2b3036", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#e1e4e8", - "highlight": "#1b1f23", - "hoverColor": "#444d56", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#f9826c" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#24292e", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#1e2428", - "background": "#24292e", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#6a737d", - "dropLineColor": "#f9826c", - "dropLineShortColor": "#f9826c", - "focusCellBackground": "#2b3036", - "focusCellForeground": "#FFFFFF", - "foreground": "#e1e4e8", - "gridColor": "#24292e", - "highlightOuter": "#2b3036", - "hoverBackground": "#39414a", - "hoverInactiveBackground": "#2b3036", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#959da5", - "lightSelectionInactiveBackground": "#2f363d", - "selectionBackground": "#2b3036", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#2b3036", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#e1e4e8", - "stripeColor": "#1e2428" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#24292e", - "borderColor": "#24292e", - "bottomSeparatorColor": "#2f363d", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#6a737d", - "foreground": "#e1e4e8", - "focusCellBackground": "#2b3036", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#2f363d" + "separatorColor": "second" }, - "text": "#959da5", - "textInactiveText": "#959da5", - "textText": "#959da5", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#24292e", - "caretForeground": "#f9826c", - "foreground": "#e1e4e8", - "inactiveForeground": "#6a737d", - "selectionBackground": "#2b3036", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#24292e", - "caretForeground": "#f9826c", - "foreground": "#e1e4e8", - "inactiveForeground": "#6a737d", - "selectionBackground": "#2b3036", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#24292e", - "caretForeground": "#f9826c", - "foreground": "#e1e4e8", - "inactiveForeground": "#6a737d", - "selectionBackground": "#2b3036", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#1e2428", - "Button.hoverBackground": "#444d56", - "inactiveBackground": "#24292e", - "infoForeground": "#959da5", - "inactiveInfoForeground": "#959da5" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#e1e4e8", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#39414a", - "buttonColor": "#e1e4e8", - "disabledText": "#6a737d", - "foreground": "#e1e4e8", - "offForeground": "#24292e", - "offBackground": "#24292e", - "onBackground": "#f9826c", - "onForeground": "#f9826c" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#24292e", - "borderHandleColor": "#959da5", - "floatingForeground": "#959da5", - "foreground": "#e1e4e8" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#24292e", - "Actions.infoForeground": "#959da5", - "background": "#2f363d", - "borderColor": "#1b1f23", - "foreground": "#e1e4e8", - "infoForeground": "#959da5", - "separatorColor": "#1b1f23", - "shortcutForeground": "#959da5" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#2b3036", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#1e2428" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#24292e", - "borderColor": "#2f363d", - "inactiveBackground": "#24292e" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#24292e" + "background": "bg" }, "HeaderTab": { - "borderColor": "#444d56", - "hoverBackground": "#444d56", - "hoverInactiveBackground": "#444d56", - "inactiveUnderlineColor": "#f9826c", - "selectedBackground": "#1e2428", - "selectedInactiveBackground": "#1e2428", - "underlineColor": "#f9826c", - "underlinedTabBackground": "#2b3036", - "underlinedTabInactiveBackground": "#2f363d", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#e1e4e8" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#24292e", - "foreground": "#959da5", - "hash": "#1b1f23", - "hoverBackground": "#39414a", - "hoverInactiveBackground": "#2b3036", - "modifiedItemForeground": "#f9826c", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#39414a", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#39414a", - "textBackground": "#24292e" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#1b1f23", - "Canvas.background": "#1e2428", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#24292e", - "foreground": "#e1e4e8" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#1b1f23", - "background": "#24292e", - "foreground": "#e1e4e8", - "hoverBorderColor": "#444d56" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#1b1f23", - "hoverBorderColor": "#444d56" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#1e2428", - "highStroke.foreground": "#e1e4e8", - "Label.foreground": "#959da5", - "List.selectionBackground": "#39414a", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#1b1f23", - "Component.foreground": "#e1e4e8", - "ConstraintSetText.foreground": "#959da5", - "ConstraintSet.background": "#2f363d", - "CSPanel.SelectedFocusBackground": "#3392FF44", - "CSPanel.SelectedBackground": "#39414a", - "cs_FocusText.infoForeground": "#959da5", - "CursorTextColor.foreground": "#e1e4e8", - "HoverColor.disabledBackground": "#6a737d", - "motionGraph.background": "#24292e", - "Notification.background": "#2f363d", - "ourAvg.background": "#2f363d", - "ourCS.background": "#2f363d", - "ourCS_Border.borderColor": "#1b1f23", - "ourCS_TextColor.foreground": "#959da5", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#2b3036", - "ourCS_SelectedBorder.pressedBorderColor": "#444d56", - "ourML_BarColor.separatorColor": "#1b1f23", - "PrimaryPanel.background": "#1e2428", - "SecondaryPanel.background": "#24292e", - "SecondaryPanel.header.foreground": "#959da5", - "SecondaryPanel.header.background": "#1e2428", - "timeLine.disabledBorderColor": "#1b1f23" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#1b1f23", - "background": "#24292e" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#e1e4e8", + "percent.foreground": "fg", "Placeholder": { - "background": "#24292e", - "borderColor": "#1b1f23", - "foreground": "#e1e4e8", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#24292e", - "stroke.acceleratorForeground": "#959da5" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#2f363d", - "errorBorderColor": "#2f363d", - "warningBackground": "#2f363d", - "warningBorderColor": "#2f363d" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#24292e" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#444d56" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#f9826c", - "otherIconColor": "#959da5", - "remoteBranchIconColor": "#e1e4e8", - "tagIconColor": "#959da5" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#f9826c", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#6a737d", - "localTagIconColor": "#959da5", - "mqTagIconColor": "#959da5", - "tagIconColor": "#959da5", - "tipIconColor": "#959da5" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#959da5", - "Commit.currentBranchBackground": "#2f363d", - "Commit.hoveredBackground": "#39414a" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#444d56" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#24292e", - "foreground": "#e1e4e8" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#24292e", - "background": "#24292e", - "borderColor": "#24292e", - "captionBackground": "#1e2428", - "captionForeground": "#e1e4e8", - "Details.background": "#24292e", - "footerBackground": "#1e2428", - "footerForeground": "#e1e4e8", - "headerBackground": "#24292e", - "headerForeground": "#e1e4e8", - "List.background": "#1e2428", - "separatorColor": "#1b1f23", - "SidePanel.background": "#2f363d", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#1e2428", - "actions.selectionBackground": "#444d56", - "background": "#2f363d", - "selectionBackground": "#3392FF44", - "selectionInactiveBackground": "#2f363d" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#24292e", - "windowBorder": "#1b1f23", - "windowText": "#959da5", - "Window.border": "#1b1f23" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#1e2428", - "#6B6B6B": "#959da5", - "#A7A7A7": "#24292e", - "#3D6185": "#f9826c", - "#466D94": "#f9826c", - "#3C3F41": "#24292e", - "#545556": "#6a737d", - "#606060": "#6a737d", - "#9AA7B0": "#e1e4e8", - "#675133": "#f9826c", - "Actions.Blue": "#b392f0", - "Actions.Green": "#79b8ff", - "Actions.Grey": "#959da5", - "Actions.GreyInline": "#959da5", - "Actions.GreyInline.Dark": "#e1e4e8", - "Actions.Red": "#85e89d", - "Actions.Yellow": "#b392f0", - "Checkbox.Background.Default": "#1e2428", - "Checkbox.Background.Default.Dark": "#1e2428", - "Checkbox.Background.Disabled": "#2f363d", - "Checkbox.Background.Disabled.Dark": "#2f363d", - "Checkbox.Border.Default": "#1b1f23", - "Checkbox.Border.Default.Dark": "#1b1f23", - "Checkbox.Border.Disabled": "#6a737d", - "Checkbox.Border.Disabled.Dark": "#6a737d", - "Checkbox.Focus.Thin.Default": "#f9826c", - "Checkbox.Focus.Thin.Default.Dark": "#f9826c", - "Checkbox.Focus.Wide": "#f9826c", - "Checkbox.Focus.Wide.Dark": "#f9826c", - "Checkbox.Foreground.Disabled": "#6a737d", - "Checkbox.Foreground.Disabled.Dark": "#6a737d", - "Checkbox.Background.Selected": "#f9826c", - "Checkbox.Background.Selected.Dark": "#24292e", - "Checkbox.Border.Selected": "#f9826c", - "Checkbox.Border.Selected.Dark": "#f9826c", - "Checkbox.Foreground.Selected": "#f9826c", - "Checkbox.Foreground.Selected.Dark": "#f9826c", - "Checkbox.Focus.Thin.Selected": "#e1e4e8", - "Checkbox.Focus.Thin.Selected.Dark": "#e1e4e8", - "Objects.Grey": "#959da5", - "Objects.Blue": "#b392f0", - "Objects.RedStatus": "#85e89d", - "Objects.Red": "#85e89d", - "Objects.Pink": "#f97583", - "Objects.Yellow": "#b392f0", - "Objects.Green": "#79b8ff", - "Objects.Purple": "#f97583", - "Objects.BlackText": "#e1e4e8", - "Objects.YellowDark": "#79b8ff", - "Objects.GreenAndroid": "#79b8ff" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/GitHub.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/GitHub.theme.json index 7cf379b7..f158c95e 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/GitHub.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/GitHub.theme.json @@ -2,1004 +2,1089 @@ "name": "GitHub", "dark": false, "author": "Mallowigi", + "colors": { + "bg": "#F7F8FA", + "bg30": "#F7F8FA30", + "fg": "#5B6168", + "text": "#292D31", + "selBg": "#c6e5ff", + "selFg": "#111111", + "activeFg": "#111111", + "border": "#DFE1E4", + "excl": "#dcdcdc", + "second": "#F3f3f3", + "dis": "#9ba0a3", + "accent": "#79CB60", + "accent2": "#79CB602", + "accent50": "#79CB6050", + "accent70": "#79CB6070", + "cs": "#fafbfc", + "button": "#edf1f5", + "table": "#cce5ff", + "tree": "#e1e4e8", + "hl": "#CCE5FF", + "notif": "#DFECFE", + "hc": "#F7F8FA", + "white": "#24292E", + "blue": "#6F42C1", + "red": "#22863A", + "yellow": "#6F42C1", + "green": "#032F62", + "gray": "#6A737D", + "purple": "#D73A49", + "orange": "#005CC5" + }, "editorScheme": "colors/GitHub.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#292D31", - "background": "#F7F8FA", - "borderColor": "#DFE1E4", - "disabledBackground": "#dcdcdc", - "disabledForeground": "#9ba0a3", - "disabledText": "#9ba0a3", - "focusColor": "#CCE5FF", - "focusedBorderColor": "#79CB60", - "foreground": "#5B6168", - "inactiveBackground": "#dcdcdc", - "inactiveForeground": "#292D31", - "infoForeground": "#292D31", - "selectionBackground": "#3A66D150", - "selectionBackgroundInactive": "#F3f3f3", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#F3f3f3", - "separatorColor": "#DFE1E4" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#F7F8FA", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#79CB6050", - "hoverBorderColor": "#79CB6050", - "hoverSeparatorColor": "#edf1f5", - "focusedBorderColor": "#79CB6050", - "pressedBackground": "#79CB6050", - "pressedBorderColor": "#79CB6050" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#3A66D150" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#F7F8FA", - "Borders.color": "#DFE1E4", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#F7F8FA", + "background": "bg", "default": { - "endBackground": "#cce5ff", - "endBorderColor": "#cce5ff", - "foreground": "#111111", - "focusColor": "#79CB60", - "focusedBorderColor": "#79CB60", - "shadowColor": "#cce5ff", - "startBackground": "#cce5ff", - "startBorderColor": "#cce5ff" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#edf1f5", - "disabledText": "#9ba0a3", - "endBackground": "#edf1f5", - "endBorderColor": "#edf1f5", - "focus": "#CCE5FF", - "focusedBorderColor": "#79CB60", - "foreground": "#292D31", - "highlight": "#FFFFFF", - "mt.background": "#edf1f5", - "mt.foreground": "#292D31", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#cce5ff", - "mt.selection.color2": "#cce5ff", - "startBackground": "#edf1f5", - "startBorderColor": "#edf1f5", - "shadowColor": "#edf1f5", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#DFE1E4", - "Tooltip.background": "#DFECFE" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#fafbfc", - "selectionBackground": "#3A66D150" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#F7F8FA", - "disabledText": "#9ba0a3", - "foreground": "#5B6168", - "select": "#79CB60" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#292D31", - "acceleratorSelectionForeground": "#292D31", - "background": "#F7F8FA", - "disabledBackground": "#F7F8FA", - "disabledForeground": "#9ba0a3", - "foreground": "#5B6168", - "selectionBackground": "#3A66D150", - "selectionForeground": "#111111" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#5B6168", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#79CB60", - "dropdownBorder": "#F3f3f3", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#F7F8FA", - "foreground": "#5B6168", - "swatchesDefaultRecentColor": "#5B6168" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#edf1f5", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#edf1f5", - "disabledIconColor": "#9ba0a3", - "iconColor": "#5B6168", - "nonEditableBackground": "#F7F8FA" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#F7F8FA", - "buttonBackground": "#edf1f5", - "darcula.hoveredArrowButtonForeground": "#79CB60", - "disabledForeground": "#9ba0a3", - "foreground": "#5B6168", - "modifiedItemForeground": "#79CB60", - "nonEditableBackground": "#F3f3f3", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#cce5ff", - "selectionForeground": "#111111" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#DFE1E4", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#F3f3f3", - "foreground": "#5B6168", - "infoForeground": "#292D31", - "matchForeground": "#79CB60", - "matchSelectionForeground": "#79CB60", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#292D31", - "selectionInactiveBackground": "#CCE5FF", - "selectionBackground": "#3A66D150", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#CCE5FF", - "disabledBorderColor": "#edf1f5", - "focusColor": "#79CB60", - "focusedBorderColor": "#79CB60", - "hoverIconColor": "#79CB60", - "infoForeground": "#292D31", - "iconColor": "#5B6168" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#F7F8FA", - "controlText": "#292D31", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#79CB60", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#292D31", - "changedValueForeground": "#79CB60", - "errorMessageForeground": "#22863A", - "evaluatingExpressionForeground": "#292D31", - "exceptionForeground": "#6F42C1", - "modifyingValueForeground": "#79CB60", - "valueForeground": "#79CB60" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#CCE5FF", - "underlinedTabBackground": "#CCE5FF" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#CCE5FF" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#F7F8FA", - "borderColor": "#F7F8FA", - "hoverBackground": "#cce5ff", - "hoverColor": "#F7F8FA", - "hoverMaskColor": "#CCE5FF", - "inactiveColoredTabBackground": "#F7F8FA", - "inactiveColoredFileBackground": "#edf1f5", - "inactiveUnderlineColor": "#79CB60", - "inactiveMaskColor": "#F7F8FA", - "underlineColor": "#79CB60", - "underlinedTabBackground": "#cce5ff", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#F7F8FA", - "DialogWrapper.southPanelBackground": "#F7F8FA", - "DialogWrapper.southPanelDivider": "#F7F8FA", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#F7F8FA", - "areaBorderColor": "#F7F8FA", - "areaForeground": "#5B6168" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#F7F8FA", - "foreground": "#5B6168", - "shortcutForeground": "#292D31" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#F7F8FA", - "caretForeground": "#79CB60", - "foreground": "#5B6168", - "inactiveBackground": "#F7F8FA", - "inactiveForeground": "#9ba0a3", - "selectionBackground": "#3A66D150", - "selectionForeground": "#111111" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#F3f3f3", - "hoverBackground": "#CCE5FF", - "hoverColor": "#CCE5FF", - "hoverMaskColor": "#CCE5FF", - "inactiveMaskColor": "#F7F8FA", - "inactiveColoredFileBackground": "#F7F8FA", - "inactiveUnderlineColor": "#9ba0a3", - "selectedForeground": "#5B6168", - "selectedBackground": "#cce5ff", - "underlineColor": "#79CB60", - "underlinedTabBackground": "#cce5ff", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#F7F8FA", - "borderColor": "#F3f3f3", - "hoverBackground": "#CCE5FF", - "hoverColor": "#CCE5FF", - "inactiveUnderlineColor": "#79CB60", - "underlineColor": "#79CB60", - "underlinedTabBackground": "#cce5ff", - "underlinedTabForeground": "#5B6168" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#dcdcdc", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#DFE1E4", + "Focus.color": "border", "FormattedTextField": { - "background": "#F7F8FA", - "caretForeground": "#79CB60", - "foreground": "#5B6168", - "inactiveBackground": "#edf1f5", - "inactiveForeground": "#9ba0a3", - "selectionForeground": "#111111", - "selectionBackground": "#cce5ff" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#DFECFE", "Group": { - "disabledSeparatorColor": "#DFE1E4", - "separatorColor": "#DFE1E4" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#292D31", - "lineSeparatorColor": "#F7F8FA" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#F7F8FA", - "inactive": "#fafbfc" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#F7F8FA", - "borderColor": "#DFE1E4", - "foreground": "#5B6168", - "infoForeground": "#292D31", - "shortcutForeground": "#292D31" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#79CB60", - "inactiveCaption": "#F3f3f3", - "inactiveCaptionBorder": "#F7F8FA", - "inactiveCaptionText": "#292D31", - "info": "#292D31", - "infoText": "#292D31", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#DFE1E4", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#F7F8FA" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#5B6168", - "background": "#F7F8FA", - "inactiveTitleForeground": "#292D31" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#F7F8FA", - "disabledForeground": "#9ba0a3", - "disabledShadow": "#F7F8FA", - "disabledText": "#9ba0a3", - "foreground": "#5B6168", - "infoForeground": "#292D31", - "selectedForeground": "#111111", - "selectedDisabledForeground": "#5B6168" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#79CB60", - "hoverForeground": "#79CB60", - "pressedForeground": "#79CB60", - "secondaryForeground": "#292D31", - "visitedForeground": "#79CB60" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#79CB60", + "link.foreground": "accent", "List": { - "background": "#F3f3f3", - "foreground": "#5B6168", - "hoverBackground": "#3A66D1", - "hoverInactiveBackground": "#cce5ff", - "selectionBackground": "#3A66D150", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#111111", - "selectionInactiveBackground": "#3A66D1" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#F7F8FA", - "branchColor": "#5B6168", - "contrast": "#fafbfc", - "foreground": "#5B6168", - "mergeCommits": "#edf1f5", - "primaryColor": "#292D31", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#F7F8FA", - "tab.borderColor": "#79CB60", - "tagColor": "#292D31" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#F3f3f3", - "usedColor": "#CCE5FF", - "usedBackground": "#CCE5FF" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#292D31", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#F7F8FA", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#F3f3f3", - "disabledBackground": "#F3f3f3", - "disabledForeground": "#9ba0a3", - "foreground": "#5B6168", - "selectionBackground": "#3A66D150", - "selectionForeground": "#FFFFFF", - "separatorColor": "#DFE1E4" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#F7F8FA", - "borderColor": "#F7F8FA", - "disabledBackground": "#F7F8FA", - "disabledForeground": "#9ba0a3", - "foreground": "#5B6168", - "highlight": "#F7F8FA", - "selectionBackground": "#3A66D150", - "selectionForeground": "#FFFFFF", - "shadow": "#F7F8FA" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#292D31", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#F7F8FA", - "disabledBackground": "#F7F8FA", - "disabledForeground": "#9ba0a3", - "foreground": "#5B6168", - "selectionBackground": "#3A66D150", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#5B6168", - "borderColor": "#F7F8FA" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#F7F8FA" + "background": "bg" }, "SearchField": { - "background": "#F7F8FA" + "background": "hc" } }, - "NewPSD.warning": "#79CB60", + "NewPSD.warning": "accent", "Notification": { - "background": "#DFECFE", - "borderColor": "#DFECFE", - "errorBackground": "#DFECFE", - "errorBorderColor": "#DFECFE", - "foreground": "#5B6168", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#edf1f5", - "foreground": "#5B6168", - "innerBorderColor": "#edf1f5" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#DFECFE", - "errorBorderColor": "#DFECFE", - "informativeBackground": "#DFECFE", - "informativeBorderColor": "#DFECFE", - "warningBackground": "#DFECFE", - "warningBorderColor": "#DFECFE" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#DFE1E4", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#F7F8FA", - "foreground": "#5B6168", - "messageForeground": "#5B6168" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#edf1f5", - "focusedColor": "#79CB60", - "disabledColor": "#9ba0a3" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#F7F8FA", - "foreground": "#5B6168" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#F3f3f3", - "borderColor": "#cce5ff", - "currentOverloadBackground": "#CCE5FF", - "currentParameterForeground": "#79CB60", - "disabledForeground": "#9ba0a3", - "foreground": "#5B6168", - "infoForeground": "#292D31", - "lineSeparatorColor": "#cce5ff" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#F7F8FA", - "capsLockIconColor": "#79CB60", - "caretForeground": "#79CB60", - "foreground": "#5B6168", - "inactiveForeground": "#9ba0a3", - "selectionBackground": "#cce5ff", - "selectionForeground": "#111111" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#F7F8FA", - "disabledForeground": "#9ba0a3", - "eapTagBackground": "#CCE5FF", - "hoverBackground": "#3A66D1", - "lightSelectionBackground": "#cce5ff", - "paidTagBackground": "#CCE5FF", - "selectionBackground": "#3A66D150", - "tagForeground": "#79CB60", - "tagBackground": "#CCE5FF", - "trialTagBackground": "#CCE5FF", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#edf1f5", - "installBorderColor": "#edf1f5", - "installForeground": "#5B6168", - "installFocusedBackground": "#CCE5FF", - "installFillForeground": "#9ba0a3", - "installFillBackground": "#edf1f5", - "updateBackground": "#79CB60", - "updateBorderColor": "#edf1f5", - "updateForeground": "#5B6168" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#F7F8FA", - "borderColor": "#DFE1E4" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#F3f3f3", - "foreground": "#5B6168" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#cce5ff", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#cce5ff" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#F7F8FA", - "borderColor": "#F7F8FA", - "foreground": "#79CB60" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#fafbfc", - "inactiveBorderColor": "#F7F8FA", - "innerBorderColor": "#F3f3f3", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#F7F8FA", - "inactiveBackground": "#fafbfc" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#5B6168", - "separatorColor": "#F3f3f3", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#fafbfc", - "background": "#fafbfc", - "borderColor": "#fafbfc" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#F7F8FA", + "background": "bg", "border": "2,0,2,0", - "foreground": "#5B6168", - "translucentBackground": "#F7F8FA" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#F7F8FA", - "foreground": "#79CB60", - "indeterminateEndColor": "#79CB60", - "indeterminateStartColor": "#79CB60", - "progressColor": "#79CB60", - "selectionBackground": "#CCE5FF", - "trackColor": "#CCE5FF" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#79CB60" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#F7F8FA", - "disabledText": "#9ba0a3", - "foreground": "#5B6168" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#292D31", - "acceleratorSelectionForeground": "#292D31", - "background": "#F7F8FA", - "disabledBackground": "#F7F8FA", - "disabledForeground": "#9ba0a3", - "foreground": "#5B6168", - "selectionBackground": "#3A66D150", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#DFE1E4", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#F7F8FA", - "hoverThumbBorderColor": "#79CB60", - "hoverThumbColor": "#79CB60", - "hoverTrackColor": "#F7F8FA30", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#79CB60", - "hoverThumbColor": "#79CB60", - "hoverTrackColor": "#F7F8FA30", - "thumbBorderColor": "#79CB6070", - "thumbColor": "#79CB6070", - "trackColor": "#F7F8FA30", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#79CB60", - "hoverThumbColor": "#79CB60", - "hoverTrackColor": "#F7F8FA30", - "thumbBorderColor": "#79CB6070", - "thumbColor": "#79CB6070", - "trackColor": "#F7F8FA30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#CCE5FF", - "thumbBorderColor": "#79CB6070", - "thumbColor": "#79CB6070", - "trackColor": "#F7F8FA30", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#79CB60", - "hoverThumbColor": "#79CB60", - "hoverTrackColor": "#F7F8FA30", - "thumbBorderColor": "#79CB6070", - "thumbColor": "#79CB6070", - "trackColor": "#F7F8FA30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#fafbfc", - "foreground": "#292D31" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#F7F8FA" + "background": "bg" }, "List": { - "separatorForeground": "#292D31", - "separatorColor": "#DFE1E4" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#F7F8FA", - "borderColor": "#fafbfc", - "infoForeground": "#292D31" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#111111", - "selectedForeground": "#111111", - "selectedBackground": "#CCE5FF" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#79CB60", - "startBackground": "#79CB60", - "endColor": "#79CB60", - "startColor": "#79CB60" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#DFECFE", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#cce5ff" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#292D31", - "Repeated.File.Foreground": "#5B6168" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#F3f3f3", - "foreground": "#F3f3f3", - "separatorColor": "#F3f3f3" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#F7F8FA" + "background": "hc" }, "Slider": { - "background": "#F7F8FA", - "buttonBorderColor": "#79CB60", - "buttonColor": "#79CB60", - "foreground": "#5B6168", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#F3f3f3", - "trackColor": "#cce5ff", - "trackWidth": 7, - "thumb": "#79CB60" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#CCE5FF", - "borderColor": "#DFE1E4", - "foreground": "#5B6168", - "errorForeground": "#5B6168" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#F7F8FA", + "background": "bg", "border": "3,3,3,3", - "foreground": "#5B6168", - "selectionForeground": "#111111" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#F7F8FA", - "highlight": "#F7F8FA" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#F3f3f3", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#F7F8FA", - "hoverBackground": "#CCE5FF", - "LightEditBackground": "#cce5ff" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#F7F8FA", - "contentAreaColor": "#CCE5FF", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#DFE1E4", - "disabledForeground": "#9ba0a3", - "disabledUnderlineColor": "#9ba0a3", - "focus": "#cce5ff", - "focusColor": "#cce5ff", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#5B6168", - "highlight": "#DFE1E4", - "hoverColor": "#CCE5FF", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#111111", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#79CB60" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#F7F8FA", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#fafbfc", - "background": "#F7F8FA", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#9ba0a3", - "dropLineColor": "#79CB60", - "dropLineShortColor": "#79CB60", - "focusCellBackground": "#cce5ff", - "focusCellForeground": "#111111", - "foreground": "#5B6168", - "gridColor": "#F7F8FA", - "highlightOuter": "#cce5ff", - "hoverBackground": "#3A66D1", - "hoverInactiveBackground": "#cce5ff", - "lightSelectionForeground": "#111111", - "lightSelectionInactiveForeground": "#292D31", - "lightSelectionInactiveBackground": "#F3f3f3", - "selectionBackground": "#cce5ff", - "selectionForeground": "#111111", - "selectionInactiveBackground": "#cce5ff", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#5B6168", - "stripeColor": "#fafbfc" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#F7F8FA", - "borderColor": "#F7F8FA", - "bottomSeparatorColor": "#F3f3f3", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#9ba0a3", - "foreground": "#5B6168", - "focusCellBackground": "#cce5ff", - "focusCellForeground": "#111111", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#F3f3f3" + "separatorColor": "second" }, - "text": "#292D31", - "textInactiveText": "#292D31", - "textText": "#292D31", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#F7F8FA", - "caretForeground": "#79CB60", - "foreground": "#5B6168", - "inactiveForeground": "#9ba0a3", - "selectionBackground": "#cce5ff", - "selectionForeground": "#111111" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#F7F8FA", - "caretForeground": "#79CB60", - "foreground": "#5B6168", - "inactiveForeground": "#9ba0a3", - "selectionBackground": "#cce5ff", - "selectionForeground": "#111111" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#F7F8FA", - "caretForeground": "#79CB60", - "foreground": "#5B6168", - "inactiveForeground": "#9ba0a3", - "selectionBackground": "#cce5ff", - "selectionForeground": "#111111" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#fafbfc", - "Button.hoverBackground": "#CCE5FF", - "inactiveBackground": "#F7F8FA", - "infoForeground": "#292D31", - "inactiveInfoForeground": "#292D31" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#5B6168", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#edf1f5", - "buttonColor": "#5B6168", - "disabledText": "#9ba0a3", - "foreground": "#5B6168", - "offForeground": "#F7F8FA", - "offBackground": "#F7F8FA", - "onBackground": "#79CB60", - "onForeground": "#79CB60" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#F7F8FA", - "borderHandleColor": "#292D31", - "floatingForeground": "#292D31", - "foreground": "#5B6168" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#F7F8FA", - "Actions.infoForeground": "#292D31", - "background": "#DFECFE", - "borderColor": "#DFE1E4", - "foreground": "#5B6168", - "infoForeground": "#292D31", - "separatorColor": "#DFE1E4", - "shortcutForeground": "#292D31" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#cce5ff", - "selectedForeground": "#111111", - "selectedBackground": "#fafbfc" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#F7F8FA", - "borderColor": "#F3f3f3", - "inactiveBackground": "#F7F8FA" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#F7F8FA" + "background": "bg" }, "HeaderTab": { - "borderColor": "#CCE5FF", - "hoverBackground": "#CCE5FF", - "hoverInactiveBackground": "#CCE5FF", - "inactiveUnderlineColor": "#79CB60", - "selectedBackground": "#fafbfc", - "selectedInactiveBackground": "#fafbfc", - "underlineColor": "#79CB60", - "underlinedTabBackground": "#cce5ff", - "underlinedTabInactiveBackground": "#F3f3f3", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#5B6168" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#F7F8FA", - "foreground": "#292D31", - "hash": "#DFE1E4", - "hoverBackground": "#3A66D1", - "hoverInactiveBackground": "#cce5ff", - "modifiedItemForeground": "#79CB60", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#3A66D1", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#3A66D1", - "textBackground": "#F7F8FA" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#DFE1E4", - "Canvas.background": "#fafbfc", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#F7F8FA", - "foreground": "#5B6168" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#DFE1E4", - "background": "#F7F8FA", - "foreground": "#5B6168", - "hoverBorderColor": "#CCE5FF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#DFE1E4", - "hoverBorderColor": "#CCE5FF" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#fafbfc", - "highStroke.foreground": "#5B6168", - "Label.foreground": "#292D31", - "List.selectionBackground": "#3A66D1", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#DFE1E4", - "Component.foreground": "#5B6168", - "ConstraintSetText.foreground": "#292D31", - "ConstraintSet.background": "#F3f3f3", - "CSPanel.SelectedFocusBackground": "#3A66D150", - "CSPanel.SelectedBackground": "#3A66D1", - "cs_FocusText.infoForeground": "#292D31", - "CursorTextColor.foreground": "#5B6168", - "HoverColor.disabledBackground": "#9ba0a3", - "motionGraph.background": "#F7F8FA", - "Notification.background": "#DFECFE", - "ourAvg.background": "#F3f3f3", - "ourCS.background": "#F3f3f3", - "ourCS_Border.borderColor": "#DFE1E4", - "ourCS_TextColor.foreground": "#292D31", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#cce5ff", - "ourCS_SelectedBorder.pressedBorderColor": "#CCE5FF", - "ourML_BarColor.separatorColor": "#DFE1E4", - "PrimaryPanel.background": "#fafbfc", - "SecondaryPanel.background": "#F7F8FA", - "SecondaryPanel.header.foreground": "#292D31", - "SecondaryPanel.header.background": "#fafbfc", - "timeLine.disabledBorderColor": "#DFE1E4" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#DFE1E4", - "background": "#F7F8FA" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#5B6168", + "percent.foreground": "fg", "Placeholder": { - "background": "#F7F8FA", - "borderColor": "#DFE1E4", - "foreground": "#5B6168", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#F7F8FA", - "stroke.acceleratorForeground": "#292D31" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#DFECFE", - "errorBorderColor": "#DFECFE", - "warningBackground": "#DFECFE", - "warningBorderColor": "#DFECFE" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#F7F8FA" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#CCE5FF" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#79CB60", - "otherIconColor": "#292D31", - "remoteBranchIconColor": "#5B6168", - "tagIconColor": "#292D31" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#79CB60", - "bookmarkIconColor": "#111111", - "closedBranchIconColor": "#9ba0a3", - "localTagIconColor": "#292D31", - "mqTagIconColor": "#292D31", - "tagIconColor": "#292D31", - "tipIconColor": "#292D31" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#292D31", - "Commit.currentBranchBackground": "#F3f3f3", - "Commit.hoveredBackground": "#3A66D1" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#111111", - "backgroundBase": "#CCE5FF" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#F7F8FA", - "foreground": "#5B6168" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#F7F8FA", - "background": "#F7F8FA", - "borderColor": "#F7F8FA", - "captionBackground": "#fafbfc", - "captionForeground": "#5B6168", - "Details.background": "#F7F8FA", - "footerBackground": "#fafbfc", - "footerForeground": "#5B6168", - "headerBackground": "#F7F8FA", - "headerForeground": "#5B6168", - "List.background": "#fafbfc", - "separatorColor": "#DFE1E4", - "SidePanel.background": "#F3f3f3", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#fafbfc", - "actions.selectionBackground": "#CCE5FF", - "background": "#F3f3f3", - "selectionBackground": "#3A66D150", - "selectionInactiveBackground": "#F3f3f3" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#F7F8FA", - "windowBorder": "#DFE1E4", - "windowText": "#292D31", - "Window.border": "#DFE1E4" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#fafbfc", - "#6B6B6B": "#292D31", - "#A7A7A7": "#F7F8FA", - "#3D6185": "#79CB60", - "#466D94": "#79CB60", - "#3C3F41": "#F7F8FA", - "#545556": "#9ba0a3", - "#606060": "#9ba0a3", - "#9AA7B0": "#5B6168", - "#675133": "#79CB60", - "Actions.Blue": "#6F42C1", - "Actions.Green": "#032F62", - "Actions.Grey": "#292D31", - "Actions.GreyInline": "#6A737D", - "Actions.GreyInline.Dark": "#5B6168", - "Actions.Red": "#22863A", - "Actions.Yellow": "#6F42C1", - "Checkbox.Background.Default": "#fafbfc", - "Checkbox.Background.Default.Dark": "#fafbfc", - "Checkbox.Background.Disabled": "#dcdcdc", - "Checkbox.Background.Disabled.Dark": "#dcdcdc", - "Checkbox.Border.Default": "#DFE1E4", - "Checkbox.Border.Default.Dark": "#DFE1E4", - "Checkbox.Border.Disabled": "#9ba0a3", - "Checkbox.Border.Disabled.Dark": "#9ba0a3", - "Checkbox.Focus.Thin.Default": "#79CB60", - "Checkbox.Focus.Thin.Default.Dark": "#79CB60", - "Checkbox.Focus.Wide": "#79CB60", - "Checkbox.Focus.Wide.Dark": "#79CB60", - "Checkbox.Foreground.Disabled": "#9ba0a3", - "Checkbox.Foreground.Disabled.Dark": "#9ba0a3", - "Checkbox.Background.Selected": "#79CB60", - "Checkbox.Background.Selected.Dark": "#F7F8FA", - "Checkbox.Border.Selected": "#79CB60", - "Checkbox.Border.Selected.Dark": "#79CB60", - "Checkbox.Foreground.Selected": "#79CB60", - "Checkbox.Foreground.Selected.Dark": "#79CB60", - "Checkbox.Focus.Thin.Selected": "#5B6168", - "Checkbox.Focus.Thin.Selected.Dark": "#5B6168", - "Objects.Grey": "#6A737D", - "Objects.Blue": "#6F42C1", - "Objects.RedStatus": "#22863A", - "Objects.Red": "#22863A", - "Objects.Pink": "#D73A49", - "Objects.Yellow": "#6F42C1", - "Objects.Green": "#032F62", - "Objects.Purple": "#D73A49", - "Objects.BlackText": "#5B6168", - "Objects.YellowDark": "#005CC5", - "Objects.GreenAndroid": "#032F62" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Light Owl Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Light Owl Contrast.theme.json index c3f39ee6..2ecc877b 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Light Owl Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Light Owl Contrast.theme.json @@ -2,1004 +2,1089 @@ "name": "Light Owl Contrast", "dark": false, "author": "Mallowigi", + "colors": { + "bg": "#F0F0F0", + "bg30": "#F0F0F030", + "fg": "#403f53", + "text": "#90A7B2", + "selBg": "#d3e8f8", + "selFg": "#403f53", + "activeFg": "#FFFFFF", + "border": "#d9d9d9", + "excl": "#E0E7EA", + "second": "#FBFBFB", + "dis": "#93A1A1", + "accent": "#2AA298", + "accent2": "#2AA2982", + "accent50": "#2AA29850", + "accent70": "#2AA29870", + "cs": "#f0f0f0", + "button": "#d9d9d9", + "table": "#d3e8f8", + "tree": "#d3e8f87c", + "hl": "#CCCCCC", + "notif": "#F0F0F0", + "hc": "#f0f0f0", + "white": "#4876d6", + "blue": "#4876d6", + "red": "#994cc3", + "yellow": "#0c969b", + "green": "#c96765", + "gray": "#989fb1", + "purple": "#994cc3", + "orange": "#aa0982" + }, "editorScheme": "colors/Light Owl.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#90A7B2", - "background": "#F0F0F0", - "borderColor": "#d9d9d9", - "disabledBackground": "#E0E7EA", - "disabledForeground": "#93A1A1", - "disabledText": "#93A1A1", - "focusColor": "#CCCCCC", - "focusedBorderColor": "#2AA298", - "foreground": "#403f53", - "inactiveBackground": "#E0E7EA", - "inactiveForeground": "#90A7B2", - "infoForeground": "#90A7B2", - "selectionBackground": "#d3e8f8", - "selectionBackgroundInactive": "#FBFBFB", - "selectionForeground": "#403f53", - "selectionInactiveBackground": "#FBFBFB", - "separatorColor": "#d9d9d9" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#F0F0F0", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#2AA29850", - "hoverBorderColor": "#2AA29850", - "hoverSeparatorColor": "#d9d9d9", - "focusedBorderColor": "#2AA29850", - "pressedBackground": "#2AA29850", - "pressedBorderColor": "#2AA29850" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#d3e8f8" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#F0F0F0", - "Borders.color": "#d9d9d9", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#F0F0F0", + "background": "bg", "default": { - "endBackground": "#d3e8f8", - "endBorderColor": "#d3e8f8", - "foreground": "#FFFFFF", - "focusColor": "#2AA298", - "focusedBorderColor": "#2AA298", - "shadowColor": "#d3e8f8", - "startBackground": "#d3e8f8", - "startBorderColor": "#d3e8f8" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#d9d9d9", - "disabledText": "#93A1A1", - "endBackground": "#d9d9d9", - "endBorderColor": "#d9d9d9", - "focus": "#CCCCCC", - "focusedBorderColor": "#2AA298", - "foreground": "#90A7B2", - "highlight": "#403f53", - "mt.background": "#d9d9d9", - "mt.foreground": "#90A7B2", - "mt.selectedForeground": "#403f53", - "mt.selection.color1": "#d3e8f8", - "mt.selection.color2": "#d3e8f8", - "startBackground": "#d9d9d9", - "startBorderColor": "#d9d9d9", - "shadowColor": "#d9d9d9", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#d9d9d9", - "Tooltip.background": "#F0F0F0" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#f0f0f0", - "selectionBackground": "#d3e8f8" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#F0F0F0", - "disabledText": "#93A1A1", - "foreground": "#403f53", - "select": "#2AA298" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#90A7B2", - "acceleratorSelectionForeground": "#90A7B2", - "background": "#F0F0F0", - "disabledBackground": "#F0F0F0", - "disabledForeground": "#93A1A1", - "foreground": "#403f53", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#403f53", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#2AA298", - "dropdownBorder": "#FBFBFB", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#F0F0F0", - "foreground": "#403f53", - "swatchesDefaultRecentColor": "#403f53" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#d9d9d9", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#d9d9d9", - "disabledIconColor": "#93A1A1", - "iconColor": "#403f53", - "nonEditableBackground": "#F0F0F0" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#f0f0f0", - "buttonBackground": "#d9d9d9", - "darcula.hoveredArrowButtonForeground": "#2AA298", - "disabledForeground": "#93A1A1", - "foreground": "#403f53", - "modifiedItemForeground": "#2AA298", - "nonEditableBackground": "#FBFBFB", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#d9d9d9", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#FBFBFB", - "foreground": "#403f53", - "infoForeground": "#90A7B2", - "matchForeground": "#2AA298", - "matchSelectionForeground": "#2AA298", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#403f53", - "selectedGrayedForeground": "#403f53", - "selectionGrayForeground": "#403f53", - "selectionInactiveInfoForeground": "#90A7B2", - "selectionInactiveBackground": "#CCCCCC", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#403f53", - "selectionInfoForeground": "#403f53" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#CCCCCC", - "disabledBorderColor": "#d9d9d9", - "focusColor": "#2AA298", - "focusedBorderColor": "#2AA298", - "hoverIconColor": "#2AA298", - "infoForeground": "#90A7B2", - "iconColor": "#403f53" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#F0F0F0", - "controlText": "#90A7B2", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#2AA298", - "foreground": "#403f53" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#90A7B2", - "changedValueForeground": "#2AA298", - "errorMessageForeground": "#994cc3", - "evaluatingExpressionForeground": "#90A7B2", - "exceptionForeground": "#0c969b", - "modifyingValueForeground": "#2AA298", - "valueForeground": "#2AA298" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#CCCCCC", - "underlinedTabBackground": "#CCCCCC" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#CCCCCC" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#F0F0F0", - "borderColor": "#F0F0F0", - "hoverBackground": "#d3e8f8", - "hoverColor": "#f0f0f0", - "hoverMaskColor": "#CCCCCC", - "inactiveColoredTabBackground": "#F0F0F0", - "inactiveColoredFileBackground": "#d9d9d9", - "inactiveUnderlineColor": "#2AA298", - "inactiveMaskColor": "#f0f0f0", - "underlineColor": "#2AA298", - "underlinedTabBackground": "#d3e8f8", - "underlinedTabForeground": "#403f53" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#F0F0F0", - "DialogWrapper.southPanelBackground": "#F0F0F0", - "DialogWrapper.southPanelDivider": "#F0F0F0", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#F0F0F0", - "areaBorderColor": "#F0F0F0", - "areaForeground": "#403f53" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#f0f0f0", - "foreground": "#403f53", - "shortcutForeground": "#90A7B2" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#f0f0f0", - "caretForeground": "#2AA298", - "foreground": "#403f53", - "inactiveBackground": "#F0F0F0", - "inactiveForeground": "#93A1A1", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#FBFBFB", - "hoverBackground": "#CCCCCC", - "hoverColor": "#CCCCCC", - "hoverMaskColor": "#CCCCCC", - "inactiveMaskColor": "#F0F0F0", - "inactiveColoredFileBackground": "#F0F0F0", - "inactiveUnderlineColor": "#93A1A1", - "selectedForeground": "#403f53", - "selectedBackground": "#d3e8f8", - "underlineColor": "#2AA298", - "underlinedTabBackground": "#d3e8f8", - "underlinedTabForeground": "#403f53" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#F0F0F0", - "borderColor": "#FBFBFB", - "hoverBackground": "#CCCCCC", - "hoverColor": "#CCCCCC", - "inactiveUnderlineColor": "#2AA298", - "underlineColor": "#2AA298", - "underlinedTabBackground": "#d3e8f8", - "underlinedTabForeground": "#403f53" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#E0E7EA", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#d9d9d9", + "Focus.color": "border", "FormattedTextField": { - "background": "#f0f0f0", - "caretForeground": "#2AA298", - "foreground": "#403f53", - "inactiveBackground": "#d9d9d9", - "inactiveForeground": "#93A1A1", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#d3e8f8" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#F0F0F0", "Group": { - "disabledSeparatorColor": "#d9d9d9", - "separatorColor": "#d9d9d9" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#90A7B2", - "lineSeparatorColor": "#F0F0F0" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#F0F0F0", - "inactive": "#f0f0f0" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#F0F0F0", - "borderColor": "#d9d9d9", - "foreground": "#403f53", - "infoForeground": "#90A7B2", - "shortcutForeground": "#90A7B2" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#2AA298", - "inactiveCaption": "#FBFBFB", - "inactiveCaptionBorder": "#F0F0F0", - "inactiveCaptionText": "#90A7B2", - "info": "#90A7B2", - "infoText": "#90A7B2", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#d9d9d9", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#F0F0F0" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#403f53", - "background": "#F0F0F0", - "inactiveTitleForeground": "#90A7B2" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#F0F0F0", - "disabledForeground": "#93A1A1", - "disabledShadow": "#F0F0F0", - "disabledText": "#93A1A1", - "foreground": "#403f53", - "infoForeground": "#90A7B2", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#403f53" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#2AA298", - "hoverForeground": "#2AA298", - "pressedForeground": "#2AA298", - "secondaryForeground": "#90A7B2", - "visitedForeground": "#2AA298" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#2AA298", + "link.foreground": "accent", "List": { - "background": "#FBFBFB", - "foreground": "#403f53", - "hoverBackground": "#d3e8f87c", - "hoverInactiveBackground": "#d3e8f8", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#403f53", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#d3e8f87c" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#F0F0F0", - "branchColor": "#403f53", - "contrast": "#f0f0f0", - "foreground": "#403f53", - "mergeCommits": "#d9d9d9", - "primaryColor": "#90A7B2", - "selectionForeground": "#403f53", - "tab.backgroundColor": "#F0F0F0", - "tab.borderColor": "#2AA298", - "tagColor": "#90A7B2" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#FBFBFB", - "usedColor": "#CCCCCC", - "usedBackground": "#CCCCCC" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#90A7B2", - "acceleratorSelectionForeground": "#403f53", - "background": "#F0F0F0", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#FBFBFB", - "disabledBackground": "#FBFBFB", - "disabledForeground": "#93A1A1", - "foreground": "#403f53", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#403f53", - "separatorColor": "#d9d9d9" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#f0f0f0", - "borderColor": "#F0F0F0", - "disabledBackground": "#F0F0F0", - "disabledForeground": "#93A1A1", - "foreground": "#403f53", - "highlight": "#F0F0F0", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#403f53", - "shadow": "#f0f0f0" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#90A7B2", - "acceleratorSelectionForeground": "#403f53", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#F0F0F0", - "disabledBackground": "#F0F0F0", - "disabledForeground": "#93A1A1", - "foreground": "#403f53", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#403f53" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#403f53", - "borderColor": "#F0F0F0" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#F0F0F0" + "background": "bg" }, "SearchField": { - "background": "#f0f0f0" + "background": "hc" } }, - "NewPSD.warning": "#2AA298", + "NewPSD.warning": "accent", "Notification": { - "background": "#F0F0F0", - "borderColor": "#F0F0F0", - "errorBackground": "#F0F0F0", - "errorBorderColor": "#F0F0F0", - "foreground": "#403f53", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#d9d9d9", - "foreground": "#403f53", - "innerBorderColor": "#d9d9d9" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#F0F0F0", - "errorBorderColor": "#F0F0F0", - "informativeBackground": "#F0F0F0", - "informativeBorderColor": "#F0F0F0", - "warningBackground": "#F0F0F0", - "warningBorderColor": "#F0F0F0" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#d9d9d9", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#F0F0F0", - "foreground": "#403f53", - "messageForeground": "#403f53" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#d9d9d9", - "focusedColor": "#2AA298", - "disabledColor": "#93A1A1" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#F0F0F0", - "foreground": "#403f53" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#FBFBFB", - "borderColor": "#d3e8f8", - "currentOverloadBackground": "#CCCCCC", - "currentParameterForeground": "#2AA298", - "disabledForeground": "#93A1A1", - "foreground": "#403f53", - "infoForeground": "#90A7B2", - "lineSeparatorColor": "#d3e8f8" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#f0f0f0", - "capsLockIconColor": "#2AA298", - "caretForeground": "#2AA298", - "foreground": "#403f53", - "inactiveForeground": "#93A1A1", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#F0F0F0", - "disabledForeground": "#93A1A1", - "eapTagBackground": "#CCCCCC", - "hoverBackground": "#d3e8f87c", - "lightSelectionBackground": "#d3e8f8", - "paidTagBackground": "#CCCCCC", - "selectionBackground": "#d3e8f8", - "tagForeground": "#2AA298", - "tagBackground": "#CCCCCC", - "trialTagBackground": "#CCCCCC", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#d9d9d9", - "installBorderColor": "#d9d9d9", - "installForeground": "#403f53", - "installFocusedBackground": "#CCCCCC", - "installFillForeground": "#93A1A1", - "installFillBackground": "#d9d9d9", - "updateBackground": "#2AA298", - "updateBorderColor": "#d9d9d9", - "updateForeground": "#403f53" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#f0f0f0", - "borderColor": "#d9d9d9" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#FBFBFB", - "foreground": "#403f53" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#d3e8f8", - "selectedForeground": "#403f53", - "selectedBackground": "#d3e8f8" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#F0F0F0", - "borderColor": "#F0F0F0", - "foreground": "#2AA298" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#f0f0f0", - "inactiveBorderColor": "#F0F0F0", - "innerBorderColor": "#FBFBFB", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#F0F0F0", - "inactiveBackground": "#f0f0f0" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#403f53", - "separatorColor": "#FBFBFB", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#f0f0f0", - "background": "#f0f0f0", - "borderColor": "#f0f0f0" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#F0F0F0", + "background": "bg", "border": "2,0,2,0", - "foreground": "#403f53", - "translucentBackground": "#F0F0F0" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#F0F0F0", - "foreground": "#2AA298", - "indeterminateEndColor": "#2AA298", - "indeterminateStartColor": "#2AA298", - "progressColor": "#2AA298", - "selectionBackground": "#CCCCCC", - "trackColor": "#CCCCCC" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#2AA298" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#F0F0F0", - "disabledText": "#93A1A1", - "foreground": "#403f53" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#90A7B2", - "acceleratorSelectionForeground": "#90A7B2", - "background": "#F0F0F0", - "disabledBackground": "#F0F0F0", - "disabledForeground": "#93A1A1", - "foreground": "#403f53", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#403f53" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#d9d9d9", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#F0F0F0", - "hoverThumbBorderColor": "#2AA298", - "hoverThumbColor": "#2AA298", - "hoverTrackColor": "#F0F0F030", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#2AA298", - "hoverThumbColor": "#2AA298", - "hoverTrackColor": "#F0F0F030", - "thumbBorderColor": "#2AA29870", - "thumbColor": "#2AA29870", - "trackColor": "#F0F0F030", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#2AA298", - "hoverThumbColor": "#2AA298", - "hoverTrackColor": "#F0F0F030", - "thumbBorderColor": "#2AA29870", - "thumbColor": "#2AA29870", - "trackColor": "#F0F0F030" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#CCCCCC", - "thumbBorderColor": "#2AA29870", - "thumbColor": "#2AA29870", - "trackColor": "#F0F0F030", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#2AA298", - "hoverThumbColor": "#2AA298", - "hoverTrackColor": "#F0F0F030", - "thumbBorderColor": "#2AA29870", - "thumbColor": "#2AA29870", - "trackColor": "#F0F0F030" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#f0f0f0", - "foreground": "#90A7B2" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#F0F0F0" + "background": "bg" }, "List": { - "separatorForeground": "#90A7B2", - "separatorColor": "#d9d9d9" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#F0F0F0", - "borderColor": "#f0f0f0", - "infoForeground": "#90A7B2" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#CCCCCC" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#2AA298", - "startBackground": "#2AA298", - "endColor": "#2AA298", - "startColor": "#2AA298" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#F0F0F0", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#d3e8f8" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#90A7B2", - "Repeated.File.Foreground": "#403f53" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#FBFBFB", - "foreground": "#FBFBFB", - "separatorColor": "#FBFBFB" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#f0f0f0" + "background": "hc" }, "Slider": { - "background": "#F0F0F0", - "buttonBorderColor": "#2AA298", - "buttonColor": "#2AA298", - "foreground": "#403f53", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#FBFBFB", - "trackColor": "#d3e8f8", - "trackWidth": 7, - "thumb": "#2AA298" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#CCCCCC", - "borderColor": "#d9d9d9", - "foreground": "#403f53", - "errorForeground": "#403f53" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#F0F0F0", + "background": "bg", "border": "3,3,3,3", - "foreground": "#403f53", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#F0F0F0", - "highlight": "#f0f0f0" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#FBFBFB", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#F0F0F0", - "hoverBackground": "#CCCCCC", - "LightEditBackground": "#d3e8f8" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#F0F0F0", - "contentAreaColor": "#CCCCCC", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#d9d9d9", - "disabledForeground": "#93A1A1", - "disabledUnderlineColor": "#93A1A1", - "focus": "#d3e8f8", - "focusColor": "#d3e8f8", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#403f53", - "highlight": "#d9d9d9", - "hoverColor": "#CCCCCC", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#2AA298" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#f0f0f0", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#f0f0f0", - "background": "#F0F0F0", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#93A1A1", - "dropLineColor": "#2AA298", - "dropLineShortColor": "#2AA298", - "focusCellBackground": "#d3e8f8", - "focusCellForeground": "#FFFFFF", - "foreground": "#403f53", - "gridColor": "#F0F0F0", - "highlightOuter": "#d3e8f8", - "hoverBackground": "#d3e8f87c", - "hoverInactiveBackground": "#d3e8f8", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#90A7B2", - "lightSelectionInactiveBackground": "#FBFBFB", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#d3e8f8", - "selectionInactiveForeground": "#403f53", - "sortIconColor": "#403f53", - "stripeColor": "#f0f0f0" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#F0F0F0", - "borderColor": "#F0F0F0", - "bottomSeparatorColor": "#FBFBFB", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#93A1A1", - "foreground": "#403f53", - "focusCellBackground": "#d3e8f8", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#FBFBFB" + "separatorColor": "second" }, - "text": "#90A7B2", - "textInactiveText": "#90A7B2", - "textText": "#90A7B2", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#f0f0f0", - "caretForeground": "#2AA298", - "foreground": "#403f53", - "inactiveForeground": "#93A1A1", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#f0f0f0", - "caretForeground": "#2AA298", - "foreground": "#403f53", - "inactiveForeground": "#93A1A1", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#f0f0f0", - "caretForeground": "#2AA298", - "foreground": "#403f53", - "inactiveForeground": "#93A1A1", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#f0f0f0", - "Button.hoverBackground": "#CCCCCC", - "inactiveBackground": "#F0F0F0", - "infoForeground": "#90A7B2", - "inactiveInfoForeground": "#90A7B2" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#403f53", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#d9d9d9", - "buttonColor": "#403f53", - "disabledText": "#93A1A1", - "foreground": "#403f53", - "offForeground": "#F0F0F0", - "offBackground": "#F0F0F0", - "onBackground": "#2AA298", - "onForeground": "#2AA298" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#f0f0f0", - "borderHandleColor": "#90A7B2", - "floatingForeground": "#90A7B2", - "foreground": "#403f53" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#F0F0F0", - "Actions.infoForeground": "#90A7B2", - "background": "#F0F0F0", - "borderColor": "#d9d9d9", - "foreground": "#403f53", - "infoForeground": "#90A7B2", - "separatorColor": "#d9d9d9", - "shortcutForeground": "#90A7B2" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#d3e8f8", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#f0f0f0" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#F0F0F0", - "borderColor": "#FBFBFB", - "inactiveBackground": "#F0F0F0" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#F0F0F0" + "background": "bg" }, "HeaderTab": { - "borderColor": "#CCCCCC", - "hoverBackground": "#CCCCCC", - "hoverInactiveBackground": "#CCCCCC", - "inactiveUnderlineColor": "#2AA298", - "selectedBackground": "#f0f0f0", - "selectedInactiveBackground": "#f0f0f0", - "underlineColor": "#2AA298", - "underlinedTabBackground": "#d3e8f8", - "underlinedTabInactiveBackground": "#FBFBFB", - "underlinedTabForeground": "#403f53", - "underlinedTabInactiveForeground": "#403f53" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#f0f0f0", - "foreground": "#90A7B2", - "hash": "#d9d9d9", - "hoverBackground": "#d3e8f87c", - "hoverInactiveBackground": "#d3e8f8", - "modifiedItemForeground": "#2AA298", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#d3e8f87c", - "selectionForeground": "#403f53", - "selectionInactiveForeground": "#403f53", - "selectionInactiveBackground": "#d3e8f87c", - "textBackground": "#f0f0f0" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#d9d9d9", - "Canvas.background": "#f0f0f0", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#F0F0F0", - "foreground": "#403f53" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#d9d9d9", - "background": "#F0F0F0", - "foreground": "#403f53", - "hoverBorderColor": "#CCCCCC" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#d9d9d9", - "hoverBorderColor": "#CCCCCC" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#f0f0f0", - "highStroke.foreground": "#403f53", - "Label.foreground": "#90A7B2", - "List.selectionBackground": "#d3e8f87c", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#d9d9d9", - "Component.foreground": "#403f53", - "ConstraintSetText.foreground": "#90A7B2", - "ConstraintSet.background": "#FBFBFB", - "CSPanel.SelectedFocusBackground": "#d3e8f8", - "CSPanel.SelectedBackground": "#d3e8f87c", - "cs_FocusText.infoForeground": "#90A7B2", - "CursorTextColor.foreground": "#403f53", - "HoverColor.disabledBackground": "#93A1A1", - "motionGraph.background": "#F0F0F0", - "Notification.background": "#F0F0F0", - "ourAvg.background": "#FBFBFB", - "ourCS.background": "#FBFBFB", - "ourCS_Border.borderColor": "#d9d9d9", - "ourCS_TextColor.foreground": "#90A7B2", - "ourCS_SelectedFocusBackground.selectionForeground": "#403f53", - "ourCS_SelectedBackground.selectionInactiveBackground": "#d3e8f8", - "ourCS_SelectedBorder.pressedBorderColor": "#CCCCCC", - "ourML_BarColor.separatorColor": "#d9d9d9", - "PrimaryPanel.background": "#f0f0f0", - "SecondaryPanel.background": "#F0F0F0", - "SecondaryPanel.header.foreground": "#90A7B2", - "SecondaryPanel.header.background": "#f0f0f0", - "timeLine.disabledBorderColor": "#d9d9d9" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#d9d9d9", - "background": "#F0F0F0" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#403f53", + "percent.foreground": "fg", "Placeholder": { - "background": "#F0F0F0", - "borderColor": "#d9d9d9", - "foreground": "#403f53", - "selectedForeground": "#403f53" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#F0F0F0", - "stroke.acceleratorForeground": "#90A7B2" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#F0F0F0", - "errorBorderColor": "#F0F0F0", - "warningBackground": "#F0F0F0", - "warningBorderColor": "#F0F0F0" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#F0F0F0" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#CCCCCC" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#2AA298", - "otherIconColor": "#90A7B2", - "remoteBranchIconColor": "#403f53", - "tagIconColor": "#90A7B2" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#2AA298", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#93A1A1", - "localTagIconColor": "#90A7B2", - "mqTagIconColor": "#90A7B2", - "tagIconColor": "#90A7B2", - "tipIconColor": "#90A7B2" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#90A7B2", - "Commit.currentBranchBackground": "#FBFBFB", - "Commit.hoveredBackground": "#d3e8f87c" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#CCCCCC" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#f0f0f0", - "foreground": "#403f53" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#F0F0F0", - "background": "#F0F0F0", - "borderColor": "#F0F0F0", - "captionBackground": "#f0f0f0", - "captionForeground": "#403f53", - "Details.background": "#F0F0F0", - "footerBackground": "#f0f0f0", - "footerForeground": "#403f53", - "headerBackground": "#F0F0F0", - "headerForeground": "#403f53", - "List.background": "#f0f0f0", - "separatorColor": "#d9d9d9", - "SidePanel.background": "#FBFBFB", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#f0f0f0", - "actions.selectionBackground": "#CCCCCC", - "background": "#FBFBFB", - "selectionBackground": "#d3e8f8", - "selectionInactiveBackground": "#FBFBFB" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#f0f0f0", - "windowBorder": "#d9d9d9", - "windowText": "#90A7B2", - "Window.border": "#d9d9d9" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#f0f0f0", - "#6B6B6B": "#90A7B2", - "#A7A7A7": "#F0F0F0", - "#3D6185": "#2AA298", - "#466D94": "#2AA298", - "#3C3F41": "#F0F0F0", - "#545556": "#93A1A1", - "#606060": "#93A1A1", - "#9AA7B0": "#403f53", - "#675133": "#2AA298", - "Actions.Blue": "#4876d6", - "Actions.Green": "#c96765", - "Actions.Grey": "#90A7B2", - "Actions.GreyInline": "#989fb1", - "Actions.GreyInline.Dark": "#403f53", - "Actions.Red": "#994cc3", - "Actions.Yellow": "#0c969b", - "Checkbox.Background.Default": "#f0f0f0", - "Checkbox.Background.Default.Dark": "#f0f0f0", - "Checkbox.Background.Disabled": "#E0E7EA", - "Checkbox.Background.Disabled.Dark": "#E0E7EA", - "Checkbox.Border.Default": "#d9d9d9", - "Checkbox.Border.Default.Dark": "#d9d9d9", - "Checkbox.Border.Disabled": "#93A1A1", - "Checkbox.Border.Disabled.Dark": "#93A1A1", - "Checkbox.Focus.Thin.Default": "#2AA298", - "Checkbox.Focus.Thin.Default.Dark": "#2AA298", - "Checkbox.Focus.Wide": "#2AA298", - "Checkbox.Focus.Wide.Dark": "#2AA298", - "Checkbox.Foreground.Disabled": "#93A1A1", - "Checkbox.Foreground.Disabled.Dark": "#93A1A1", - "Checkbox.Background.Selected": "#2AA298", - "Checkbox.Background.Selected.Dark": "#F0F0F0", - "Checkbox.Border.Selected": "#2AA298", - "Checkbox.Border.Selected.Dark": "#2AA298", - "Checkbox.Foreground.Selected": "#2AA298", - "Checkbox.Foreground.Selected.Dark": "#2AA298", - "Checkbox.Focus.Thin.Selected": "#403f53", - "Checkbox.Focus.Thin.Selected.Dark": "#403f53", - "Objects.Grey": "#989fb1", - "Objects.Blue": "#4876d6", - "Objects.RedStatus": "#994cc3", - "Objects.Red": "#994cc3", - "Objects.Pink": "#994cc3", - "Objects.Yellow": "#0c969b", - "Objects.Green": "#c96765", - "Objects.Purple": "#994cc3", - "Objects.BlackText": "#403f53", - "Objects.YellowDark": "#aa0982", - "Objects.GreenAndroid": "#c96765" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Light Owl.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Light Owl.theme.json index 153c28ec..94a9d7ba 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Light Owl.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Light Owl.theme.json @@ -2,1004 +2,1089 @@ "name": "Light Owl", "dark": false, "author": "Mallowigi", + "colors": { + "bg": "#F0F0F0", + "bg30": "#F0F0F030", + "fg": "#403f53", + "text": "#90A7B2", + "selBg": "#d3e8f8", + "selFg": "#403f53", + "activeFg": "#FFFFFF", + "border": "#d9d9d9", + "excl": "#E0E7EA", + "second": "#FBFBFB", + "dis": "#93A1A1", + "accent": "#2AA298", + "accent2": "#2AA2982", + "accent50": "#2AA29850", + "accent70": "#2AA29870", + "cs": "#f0f0f0", + "button": "#d9d9d9", + "table": "#d3e8f8", + "tree": "#d3e8f87c", + "hl": "#CCCCCC", + "notif": "#F0F0F0", + "hc": "#F0F0F0", + "white": "#4876d6", + "blue": "#4876d6", + "red": "#994cc3", + "yellow": "#0c969b", + "green": "#c96765", + "gray": "#989fb1", + "purple": "#994cc3", + "orange": "#aa0982" + }, "editorScheme": "colors/Light Owl.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#90A7B2", - "background": "#F0F0F0", - "borderColor": "#d9d9d9", - "disabledBackground": "#E0E7EA", - "disabledForeground": "#93A1A1", - "disabledText": "#93A1A1", - "focusColor": "#CCCCCC", - "focusedBorderColor": "#2AA298", - "foreground": "#403f53", - "inactiveBackground": "#E0E7EA", - "inactiveForeground": "#90A7B2", - "infoForeground": "#90A7B2", - "selectionBackground": "#d3e8f8", - "selectionBackgroundInactive": "#FBFBFB", - "selectionForeground": "#403f53", - "selectionInactiveBackground": "#FBFBFB", - "separatorColor": "#d9d9d9" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#F0F0F0", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#2AA29850", - "hoverBorderColor": "#2AA29850", - "hoverSeparatorColor": "#d9d9d9", - "focusedBorderColor": "#2AA29850", - "pressedBackground": "#2AA29850", - "pressedBorderColor": "#2AA29850" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#d3e8f8" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#F0F0F0", - "Borders.color": "#d9d9d9", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#F0F0F0", + "background": "bg", "default": { - "endBackground": "#d3e8f8", - "endBorderColor": "#d3e8f8", - "foreground": "#FFFFFF", - "focusColor": "#2AA298", - "focusedBorderColor": "#2AA298", - "shadowColor": "#d3e8f8", - "startBackground": "#d3e8f8", - "startBorderColor": "#d3e8f8" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#d9d9d9", - "disabledText": "#93A1A1", - "endBackground": "#d9d9d9", - "endBorderColor": "#d9d9d9", - "focus": "#CCCCCC", - "focusedBorderColor": "#2AA298", - "foreground": "#90A7B2", - "highlight": "#403f53", - "mt.background": "#d9d9d9", - "mt.foreground": "#90A7B2", - "mt.selectedForeground": "#403f53", - "mt.selection.color1": "#d3e8f8", - "mt.selection.color2": "#d3e8f8", - "startBackground": "#d9d9d9", - "startBorderColor": "#d9d9d9", - "shadowColor": "#d9d9d9", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#d9d9d9", - "Tooltip.background": "#F0F0F0" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#f0f0f0", - "selectionBackground": "#d3e8f8" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#F0F0F0", - "disabledText": "#93A1A1", - "foreground": "#403f53", - "select": "#2AA298" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#90A7B2", - "acceleratorSelectionForeground": "#90A7B2", - "background": "#F0F0F0", - "disabledBackground": "#F0F0F0", - "disabledForeground": "#93A1A1", - "foreground": "#403f53", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#403f53", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#2AA298", - "dropdownBorder": "#FBFBFB", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#F0F0F0", - "foreground": "#403f53", - "swatchesDefaultRecentColor": "#403f53" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#d9d9d9", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#d9d9d9", - "disabledIconColor": "#93A1A1", - "iconColor": "#403f53", - "nonEditableBackground": "#F0F0F0" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#F0F0F0", - "buttonBackground": "#d9d9d9", - "darcula.hoveredArrowButtonForeground": "#2AA298", - "disabledForeground": "#93A1A1", - "foreground": "#403f53", - "modifiedItemForeground": "#2AA298", - "nonEditableBackground": "#FBFBFB", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#d9d9d9", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#FBFBFB", - "foreground": "#403f53", - "infoForeground": "#90A7B2", - "matchForeground": "#2AA298", - "matchSelectionForeground": "#2AA298", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#403f53", - "selectedGrayedForeground": "#403f53", - "selectionGrayForeground": "#403f53", - "selectionInactiveInfoForeground": "#90A7B2", - "selectionInactiveBackground": "#CCCCCC", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#403f53", - "selectionInfoForeground": "#403f53" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#CCCCCC", - "disabledBorderColor": "#d9d9d9", - "focusColor": "#2AA298", - "focusedBorderColor": "#2AA298", - "hoverIconColor": "#2AA298", - "infoForeground": "#90A7B2", - "iconColor": "#403f53" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#F0F0F0", - "controlText": "#90A7B2", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#2AA298", - "foreground": "#403f53" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#90A7B2", - "changedValueForeground": "#2AA298", - "errorMessageForeground": "#994cc3", - "evaluatingExpressionForeground": "#90A7B2", - "exceptionForeground": "#0c969b", - "modifyingValueForeground": "#2AA298", - "valueForeground": "#2AA298" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#CCCCCC", - "underlinedTabBackground": "#CCCCCC" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#CCCCCC" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#F0F0F0", - "borderColor": "#F0F0F0", - "hoverBackground": "#d3e8f8", - "hoverColor": "#F0F0F0", - "hoverMaskColor": "#CCCCCC", - "inactiveColoredTabBackground": "#F0F0F0", - "inactiveColoredFileBackground": "#d9d9d9", - "inactiveUnderlineColor": "#2AA298", - "inactiveMaskColor": "#F0F0F0", - "underlineColor": "#2AA298", - "underlinedTabBackground": "#d3e8f8", - "underlinedTabForeground": "#403f53" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#F0F0F0", - "DialogWrapper.southPanelBackground": "#F0F0F0", - "DialogWrapper.southPanelDivider": "#F0F0F0", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#F0F0F0", - "areaBorderColor": "#F0F0F0", - "areaForeground": "#403f53" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#F0F0F0", - "foreground": "#403f53", - "shortcutForeground": "#90A7B2" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#F0F0F0", - "caretForeground": "#2AA298", - "foreground": "#403f53", - "inactiveBackground": "#F0F0F0", - "inactiveForeground": "#93A1A1", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#FBFBFB", - "hoverBackground": "#CCCCCC", - "hoverColor": "#CCCCCC", - "hoverMaskColor": "#CCCCCC", - "inactiveMaskColor": "#F0F0F0", - "inactiveColoredFileBackground": "#F0F0F0", - "inactiveUnderlineColor": "#93A1A1", - "selectedForeground": "#403f53", - "selectedBackground": "#d3e8f8", - "underlineColor": "#2AA298", - "underlinedTabBackground": "#d3e8f8", - "underlinedTabForeground": "#403f53" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#F0F0F0", - "borderColor": "#FBFBFB", - "hoverBackground": "#CCCCCC", - "hoverColor": "#CCCCCC", - "inactiveUnderlineColor": "#2AA298", - "underlineColor": "#2AA298", - "underlinedTabBackground": "#d3e8f8", - "underlinedTabForeground": "#403f53" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#E0E7EA", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#d9d9d9", + "Focus.color": "border", "FormattedTextField": { - "background": "#F0F0F0", - "caretForeground": "#2AA298", - "foreground": "#403f53", - "inactiveBackground": "#d9d9d9", - "inactiveForeground": "#93A1A1", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#d3e8f8" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#F0F0F0", "Group": { - "disabledSeparatorColor": "#d9d9d9", - "separatorColor": "#d9d9d9" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#90A7B2", - "lineSeparatorColor": "#F0F0F0" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#F0F0F0", - "inactive": "#f0f0f0" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#F0F0F0", - "borderColor": "#d9d9d9", - "foreground": "#403f53", - "infoForeground": "#90A7B2", - "shortcutForeground": "#90A7B2" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#2AA298", - "inactiveCaption": "#FBFBFB", - "inactiveCaptionBorder": "#F0F0F0", - "inactiveCaptionText": "#90A7B2", - "info": "#90A7B2", - "infoText": "#90A7B2", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#d9d9d9", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#F0F0F0" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#403f53", - "background": "#F0F0F0", - "inactiveTitleForeground": "#90A7B2" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#F0F0F0", - "disabledForeground": "#93A1A1", - "disabledShadow": "#F0F0F0", - "disabledText": "#93A1A1", - "foreground": "#403f53", - "infoForeground": "#90A7B2", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#403f53" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#2AA298", - "hoverForeground": "#2AA298", - "pressedForeground": "#2AA298", - "secondaryForeground": "#90A7B2", - "visitedForeground": "#2AA298" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#2AA298", + "link.foreground": "accent", "List": { - "background": "#FBFBFB", - "foreground": "#403f53", - "hoverBackground": "#d3e8f87c", - "hoverInactiveBackground": "#d3e8f8", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#403f53", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#d3e8f87c" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#F0F0F0", - "branchColor": "#403f53", - "contrast": "#f0f0f0", - "foreground": "#403f53", - "mergeCommits": "#d9d9d9", - "primaryColor": "#90A7B2", - "selectionForeground": "#403f53", - "tab.backgroundColor": "#F0F0F0", - "tab.borderColor": "#2AA298", - "tagColor": "#90A7B2" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#FBFBFB", - "usedColor": "#CCCCCC", - "usedBackground": "#CCCCCC" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#90A7B2", - "acceleratorSelectionForeground": "#403f53", - "background": "#F0F0F0", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#FBFBFB", - "disabledBackground": "#FBFBFB", - "disabledForeground": "#93A1A1", - "foreground": "#403f53", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#403f53", - "separatorColor": "#d9d9d9" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#F0F0F0", - "borderColor": "#F0F0F0", - "disabledBackground": "#F0F0F0", - "disabledForeground": "#93A1A1", - "foreground": "#403f53", - "highlight": "#F0F0F0", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#403f53", - "shadow": "#F0F0F0" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#90A7B2", - "acceleratorSelectionForeground": "#403f53", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#F0F0F0", - "disabledBackground": "#F0F0F0", - "disabledForeground": "#93A1A1", - "foreground": "#403f53", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#403f53" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#403f53", - "borderColor": "#F0F0F0" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#F0F0F0" + "background": "bg" }, "SearchField": { - "background": "#F0F0F0" + "background": "hc" } }, - "NewPSD.warning": "#2AA298", + "NewPSD.warning": "accent", "Notification": { - "background": "#F0F0F0", - "borderColor": "#F0F0F0", - "errorBackground": "#F0F0F0", - "errorBorderColor": "#F0F0F0", - "foreground": "#403f53", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#d9d9d9", - "foreground": "#403f53", - "innerBorderColor": "#d9d9d9" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#F0F0F0", - "errorBorderColor": "#F0F0F0", - "informativeBackground": "#F0F0F0", - "informativeBorderColor": "#F0F0F0", - "warningBackground": "#F0F0F0", - "warningBorderColor": "#F0F0F0" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#d9d9d9", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#F0F0F0", - "foreground": "#403f53", - "messageForeground": "#403f53" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#d9d9d9", - "focusedColor": "#2AA298", - "disabledColor": "#93A1A1" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#F0F0F0", - "foreground": "#403f53" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#FBFBFB", - "borderColor": "#d3e8f8", - "currentOverloadBackground": "#CCCCCC", - "currentParameterForeground": "#2AA298", - "disabledForeground": "#93A1A1", - "foreground": "#403f53", - "infoForeground": "#90A7B2", - "lineSeparatorColor": "#d3e8f8" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#F0F0F0", - "capsLockIconColor": "#2AA298", - "caretForeground": "#2AA298", - "foreground": "#403f53", - "inactiveForeground": "#93A1A1", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#F0F0F0", - "disabledForeground": "#93A1A1", - "eapTagBackground": "#CCCCCC", - "hoverBackground": "#d3e8f87c", - "lightSelectionBackground": "#d3e8f8", - "paidTagBackground": "#CCCCCC", - "selectionBackground": "#d3e8f8", - "tagForeground": "#2AA298", - "tagBackground": "#CCCCCC", - "trialTagBackground": "#CCCCCC", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#d9d9d9", - "installBorderColor": "#d9d9d9", - "installForeground": "#403f53", - "installFocusedBackground": "#CCCCCC", - "installFillForeground": "#93A1A1", - "installFillBackground": "#d9d9d9", - "updateBackground": "#2AA298", - "updateBorderColor": "#d9d9d9", - "updateForeground": "#403f53" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#F0F0F0", - "borderColor": "#d9d9d9" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#FBFBFB", - "foreground": "#403f53" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#d3e8f8", - "selectedForeground": "#403f53", - "selectedBackground": "#d3e8f8" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#F0F0F0", - "borderColor": "#F0F0F0", - "foreground": "#2AA298" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#f0f0f0", - "inactiveBorderColor": "#F0F0F0", - "innerBorderColor": "#FBFBFB", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#F0F0F0", - "inactiveBackground": "#f0f0f0" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#403f53", - "separatorColor": "#FBFBFB", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#f0f0f0", - "background": "#f0f0f0", - "borderColor": "#f0f0f0" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#F0F0F0", + "background": "bg", "border": "2,0,2,0", - "foreground": "#403f53", - "translucentBackground": "#F0F0F0" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#F0F0F0", - "foreground": "#2AA298", - "indeterminateEndColor": "#2AA298", - "indeterminateStartColor": "#2AA298", - "progressColor": "#2AA298", - "selectionBackground": "#CCCCCC", - "trackColor": "#CCCCCC" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#2AA298" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#F0F0F0", - "disabledText": "#93A1A1", - "foreground": "#403f53" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#90A7B2", - "acceleratorSelectionForeground": "#90A7B2", - "background": "#F0F0F0", - "disabledBackground": "#F0F0F0", - "disabledForeground": "#93A1A1", - "foreground": "#403f53", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#403f53" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#d9d9d9", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#F0F0F0", - "hoverThumbBorderColor": "#2AA298", - "hoverThumbColor": "#2AA298", - "hoverTrackColor": "#F0F0F030", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#2AA298", - "hoverThumbColor": "#2AA298", - "hoverTrackColor": "#F0F0F030", - "thumbBorderColor": "#2AA29870", - "thumbColor": "#2AA29870", - "trackColor": "#F0F0F030", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#2AA298", - "hoverThumbColor": "#2AA298", - "hoverTrackColor": "#F0F0F030", - "thumbBorderColor": "#2AA29870", - "thumbColor": "#2AA29870", - "trackColor": "#F0F0F030" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#CCCCCC", - "thumbBorderColor": "#2AA29870", - "thumbColor": "#2AA29870", - "trackColor": "#F0F0F030", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#2AA298", - "hoverThumbColor": "#2AA298", - "hoverTrackColor": "#F0F0F030", - "thumbBorderColor": "#2AA29870", - "thumbColor": "#2AA29870", - "trackColor": "#F0F0F030" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#f0f0f0", - "foreground": "#90A7B2" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#F0F0F0" + "background": "bg" }, "List": { - "separatorForeground": "#90A7B2", - "separatorColor": "#d9d9d9" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#F0F0F0", - "borderColor": "#f0f0f0", - "infoForeground": "#90A7B2" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#CCCCCC" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#2AA298", - "startBackground": "#2AA298", - "endColor": "#2AA298", - "startColor": "#2AA298" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#F0F0F0", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#d3e8f8" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#90A7B2", - "Repeated.File.Foreground": "#403f53" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#FBFBFB", - "foreground": "#FBFBFB", - "separatorColor": "#FBFBFB" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#F0F0F0" + "background": "hc" }, "Slider": { - "background": "#F0F0F0", - "buttonBorderColor": "#2AA298", - "buttonColor": "#2AA298", - "foreground": "#403f53", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#FBFBFB", - "trackColor": "#d3e8f8", - "trackWidth": 7, - "thumb": "#2AA298" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#CCCCCC", - "borderColor": "#d9d9d9", - "foreground": "#403f53", - "errorForeground": "#403f53" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#F0F0F0", + "background": "bg", "border": "3,3,3,3", - "foreground": "#403f53", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#F0F0F0", - "highlight": "#F0F0F0" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#FBFBFB", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#F0F0F0", - "hoverBackground": "#CCCCCC", - "LightEditBackground": "#d3e8f8" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#F0F0F0", - "contentAreaColor": "#CCCCCC", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#d9d9d9", - "disabledForeground": "#93A1A1", - "disabledUnderlineColor": "#93A1A1", - "focus": "#d3e8f8", - "focusColor": "#d3e8f8", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#403f53", - "highlight": "#d9d9d9", - "hoverColor": "#CCCCCC", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#2AA298" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#F0F0F0", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#f0f0f0", - "background": "#F0F0F0", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#93A1A1", - "dropLineColor": "#2AA298", - "dropLineShortColor": "#2AA298", - "focusCellBackground": "#d3e8f8", - "focusCellForeground": "#FFFFFF", - "foreground": "#403f53", - "gridColor": "#F0F0F0", - "highlightOuter": "#d3e8f8", - "hoverBackground": "#d3e8f87c", - "hoverInactiveBackground": "#d3e8f8", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#90A7B2", - "lightSelectionInactiveBackground": "#FBFBFB", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#d3e8f8", - "selectionInactiveForeground": "#403f53", - "sortIconColor": "#403f53", - "stripeColor": "#f0f0f0" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#F0F0F0", - "borderColor": "#F0F0F0", - "bottomSeparatorColor": "#FBFBFB", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#93A1A1", - "foreground": "#403f53", - "focusCellBackground": "#d3e8f8", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#FBFBFB" + "separatorColor": "second" }, - "text": "#90A7B2", - "textInactiveText": "#90A7B2", - "textText": "#90A7B2", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#F0F0F0", - "caretForeground": "#2AA298", - "foreground": "#403f53", - "inactiveForeground": "#93A1A1", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#F0F0F0", - "caretForeground": "#2AA298", - "foreground": "#403f53", - "inactiveForeground": "#93A1A1", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#F0F0F0", - "caretForeground": "#2AA298", - "foreground": "#403f53", - "inactiveForeground": "#93A1A1", - "selectionBackground": "#d3e8f8", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#f0f0f0", - "Button.hoverBackground": "#CCCCCC", - "inactiveBackground": "#F0F0F0", - "infoForeground": "#90A7B2", - "inactiveInfoForeground": "#90A7B2" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#403f53", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#d9d9d9", - "buttonColor": "#403f53", - "disabledText": "#93A1A1", - "foreground": "#403f53", - "offForeground": "#F0F0F0", - "offBackground": "#F0F0F0", - "onBackground": "#2AA298", - "onForeground": "#2AA298" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#F0F0F0", - "borderHandleColor": "#90A7B2", - "floatingForeground": "#90A7B2", - "foreground": "#403f53" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#F0F0F0", - "Actions.infoForeground": "#90A7B2", - "background": "#F0F0F0", - "borderColor": "#d9d9d9", - "foreground": "#403f53", - "infoForeground": "#90A7B2", - "separatorColor": "#d9d9d9", - "shortcutForeground": "#90A7B2" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#d3e8f8", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#f0f0f0" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#F0F0F0", - "borderColor": "#FBFBFB", - "inactiveBackground": "#F0F0F0" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#F0F0F0" + "background": "bg" }, "HeaderTab": { - "borderColor": "#CCCCCC", - "hoverBackground": "#CCCCCC", - "hoverInactiveBackground": "#CCCCCC", - "inactiveUnderlineColor": "#2AA298", - "selectedBackground": "#f0f0f0", - "selectedInactiveBackground": "#f0f0f0", - "underlineColor": "#2AA298", - "underlinedTabBackground": "#d3e8f8", - "underlinedTabInactiveBackground": "#FBFBFB", - "underlinedTabForeground": "#403f53", - "underlinedTabInactiveForeground": "#403f53" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#F0F0F0", - "foreground": "#90A7B2", - "hash": "#d9d9d9", - "hoverBackground": "#d3e8f87c", - "hoverInactiveBackground": "#d3e8f8", - "modifiedItemForeground": "#2AA298", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#d3e8f87c", - "selectionForeground": "#403f53", - "selectionInactiveForeground": "#403f53", - "selectionInactiveBackground": "#d3e8f87c", - "textBackground": "#F0F0F0" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#d9d9d9", - "Canvas.background": "#f0f0f0", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#F0F0F0", - "foreground": "#403f53" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#d9d9d9", - "background": "#F0F0F0", - "foreground": "#403f53", - "hoverBorderColor": "#CCCCCC" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#d9d9d9", - "hoverBorderColor": "#CCCCCC" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#f0f0f0", - "highStroke.foreground": "#403f53", - "Label.foreground": "#90A7B2", - "List.selectionBackground": "#d3e8f87c", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#d9d9d9", - "Component.foreground": "#403f53", - "ConstraintSetText.foreground": "#90A7B2", - "ConstraintSet.background": "#FBFBFB", - "CSPanel.SelectedFocusBackground": "#d3e8f8", - "CSPanel.SelectedBackground": "#d3e8f87c", - "cs_FocusText.infoForeground": "#90A7B2", - "CursorTextColor.foreground": "#403f53", - "HoverColor.disabledBackground": "#93A1A1", - "motionGraph.background": "#F0F0F0", - "Notification.background": "#F0F0F0", - "ourAvg.background": "#FBFBFB", - "ourCS.background": "#FBFBFB", - "ourCS_Border.borderColor": "#d9d9d9", - "ourCS_TextColor.foreground": "#90A7B2", - "ourCS_SelectedFocusBackground.selectionForeground": "#403f53", - "ourCS_SelectedBackground.selectionInactiveBackground": "#d3e8f8", - "ourCS_SelectedBorder.pressedBorderColor": "#CCCCCC", - "ourML_BarColor.separatorColor": "#d9d9d9", - "PrimaryPanel.background": "#f0f0f0", - "SecondaryPanel.background": "#F0F0F0", - "SecondaryPanel.header.foreground": "#90A7B2", - "SecondaryPanel.header.background": "#f0f0f0", - "timeLine.disabledBorderColor": "#d9d9d9" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#d9d9d9", - "background": "#F0F0F0" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#403f53", + "percent.foreground": "fg", "Placeholder": { - "background": "#F0F0F0", - "borderColor": "#d9d9d9", - "foreground": "#403f53", - "selectedForeground": "#403f53" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#F0F0F0", - "stroke.acceleratorForeground": "#90A7B2" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#F0F0F0", - "errorBorderColor": "#F0F0F0", - "warningBackground": "#F0F0F0", - "warningBorderColor": "#F0F0F0" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#F0F0F0" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#CCCCCC" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#2AA298", - "otherIconColor": "#90A7B2", - "remoteBranchIconColor": "#403f53", - "tagIconColor": "#90A7B2" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#2AA298", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#93A1A1", - "localTagIconColor": "#90A7B2", - "mqTagIconColor": "#90A7B2", - "tagIconColor": "#90A7B2", - "tipIconColor": "#90A7B2" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#90A7B2", - "Commit.currentBranchBackground": "#FBFBFB", - "Commit.hoveredBackground": "#d3e8f87c" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#CCCCCC" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#F0F0F0", - "foreground": "#403f53" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#F0F0F0", - "background": "#F0F0F0", - "borderColor": "#F0F0F0", - "captionBackground": "#f0f0f0", - "captionForeground": "#403f53", - "Details.background": "#F0F0F0", - "footerBackground": "#f0f0f0", - "footerForeground": "#403f53", - "headerBackground": "#F0F0F0", - "headerForeground": "#403f53", - "List.background": "#f0f0f0", - "separatorColor": "#d9d9d9", - "SidePanel.background": "#FBFBFB", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#f0f0f0", - "actions.selectionBackground": "#CCCCCC", - "background": "#FBFBFB", - "selectionBackground": "#d3e8f8", - "selectionInactiveBackground": "#FBFBFB" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#F0F0F0", - "windowBorder": "#d9d9d9", - "windowText": "#90A7B2", - "Window.border": "#d9d9d9" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#f0f0f0", - "#6B6B6B": "#90A7B2", - "#A7A7A7": "#F0F0F0", - "#3D6185": "#2AA298", - "#466D94": "#2AA298", - "#3C3F41": "#F0F0F0", - "#545556": "#93A1A1", - "#606060": "#93A1A1", - "#9AA7B0": "#403f53", - "#675133": "#2AA298", - "Actions.Blue": "#4876d6", - "Actions.Green": "#c96765", - "Actions.Grey": "#90A7B2", - "Actions.GreyInline": "#989fb1", - "Actions.GreyInline.Dark": "#403f53", - "Actions.Red": "#994cc3", - "Actions.Yellow": "#0c969b", - "Checkbox.Background.Default": "#f0f0f0", - "Checkbox.Background.Default.Dark": "#f0f0f0", - "Checkbox.Background.Disabled": "#E0E7EA", - "Checkbox.Background.Disabled.Dark": "#E0E7EA", - "Checkbox.Border.Default": "#d9d9d9", - "Checkbox.Border.Default.Dark": "#d9d9d9", - "Checkbox.Border.Disabled": "#93A1A1", - "Checkbox.Border.Disabled.Dark": "#93A1A1", - "Checkbox.Focus.Thin.Default": "#2AA298", - "Checkbox.Focus.Thin.Default.Dark": "#2AA298", - "Checkbox.Focus.Wide": "#2AA298", - "Checkbox.Focus.Wide.Dark": "#2AA298", - "Checkbox.Foreground.Disabled": "#93A1A1", - "Checkbox.Foreground.Disabled.Dark": "#93A1A1", - "Checkbox.Background.Selected": "#2AA298", - "Checkbox.Background.Selected.Dark": "#F0F0F0", - "Checkbox.Border.Selected": "#2AA298", - "Checkbox.Border.Selected.Dark": "#2AA298", - "Checkbox.Foreground.Selected": "#2AA298", - "Checkbox.Foreground.Selected.Dark": "#2AA298", - "Checkbox.Focus.Thin.Selected": "#403f53", - "Checkbox.Focus.Thin.Selected.Dark": "#403f53", - "Objects.Grey": "#989fb1", - "Objects.Blue": "#4876d6", - "Objects.RedStatus": "#994cc3", - "Objects.Red": "#994cc3", - "Objects.Pink": "#994cc3", - "Objects.Yellow": "#0c969b", - "Objects.Green": "#c96765", - "Objects.Purple": "#994cc3", - "Objects.BlackText": "#403f53", - "Objects.YellowDark": "#aa0982", - "Objects.GreenAndroid": "#c96765" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Darker Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Darker Contrast.theme.json index 2bf97ad4..67f12392 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Darker Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Darker Contrast.theme.json @@ -2,1004 +2,1089 @@ "name": "Material Darker Contrast", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#212121", + "bg30": "#21212130", + "fg": "#B0BEC5", + "text": "#727272", + "selBg": "#404040", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#292929", + "excl": "#323232", + "second": "#292929", + "dis": "#474747", + "accent": "#FF9800", + "accent2": "#FF98002", + "accent50": "#FF980050", + "accent70": "#FF980070", + "cs": "#1A1A1A", + "button": "#2A2A2A", + "table": "#323232", + "tree": "#323232C0", + "hl": "#3F3F3F", + "notif": "#1A1A1A", + "hc": "#1A1A1A", + "white": "#eeffff", + "blue": "#82aaff", + "red": "#f07178", + "yellow": "#ffcb6b", + "green": "#c3e88d", + "gray": "#616161", + "purple": "#c792ea", + "orange": "#f78c6c" + }, "editorScheme": "colors/Material Darker.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#727272", - "background": "#212121", - "borderColor": "#292929", - "disabledBackground": "#323232", - "disabledForeground": "#474747", - "disabledText": "#474747", - "focusColor": "#3F3F3F", - "focusedBorderColor": "#FF9800", - "foreground": "#B0BEC5", - "inactiveBackground": "#323232", - "inactiveForeground": "#727272", - "infoForeground": "#727272", - "selectionBackground": "#404040", - "selectionBackgroundInactive": "#292929", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#292929", - "separatorColor": "#292929" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#212121", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#FF980050", - "hoverBorderColor": "#FF980050", - "hoverSeparatorColor": "#2A2A2A", - "focusedBorderColor": "#FF980050", - "pressedBackground": "#FF980050", - "pressedBorderColor": "#FF980050" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#404040" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#212121", - "Borders.color": "#292929", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#212121", + "background": "bg", "default": { - "endBackground": "#323232", - "endBorderColor": "#323232", - "foreground": "#FFFFFF", - "focusColor": "#FF9800", - "focusedBorderColor": "#FF9800", - "shadowColor": "#323232", - "startBackground": "#323232", - "startBorderColor": "#323232" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#2A2A2A", - "disabledText": "#474747", - "endBackground": "#2A2A2A", - "endBorderColor": "#2A2A2A", - "focus": "#3F3F3F", - "focusedBorderColor": "#FF9800", - "foreground": "#727272", - "highlight": "#FFFFFF", - "mt.background": "#2A2A2A", - "mt.foreground": "#727272", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#323232", - "mt.selection.color2": "#323232", - "startBackground": "#2A2A2A", - "startBorderColor": "#2A2A2A", - "shadowColor": "#2A2A2A", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#292929", - "Tooltip.background": "#1A1A1A" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#1A1A1A", - "selectionBackground": "#404040" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#212121", - "disabledText": "#474747", - "foreground": "#B0BEC5", - "select": "#FF9800" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#727272", - "acceleratorSelectionForeground": "#727272", - "background": "#212121", - "disabledBackground": "#212121", - "disabledForeground": "#474747", - "foreground": "#B0BEC5", - "selectionBackground": "#404040", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#B0BEC5", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#FF9800", - "dropdownBorder": "#292929", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#212121", - "foreground": "#B0BEC5", - "swatchesDefaultRecentColor": "#B0BEC5" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#2A2A2A", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#2A2A2A", - "disabledIconColor": "#474747", - "iconColor": "#B0BEC5", - "nonEditableBackground": "#212121" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#1A1A1A", - "buttonBackground": "#2A2A2A", - "darcula.hoveredArrowButtonForeground": "#FF9800", - "disabledForeground": "#474747", - "foreground": "#B0BEC5", - "modifiedItemForeground": "#FF9800", - "nonEditableBackground": "#292929", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#323232", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#292929", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#292929", - "foreground": "#B0BEC5", - "infoForeground": "#727272", - "matchForeground": "#FF9800", - "matchSelectionForeground": "#FF9800", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#727272", - "selectionInactiveBackground": "#3F3F3F", - "selectionBackground": "#404040", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#3F3F3F", - "disabledBorderColor": "#2A2A2A", - "focusColor": "#FF9800", - "focusedBorderColor": "#FF9800", - "hoverIconColor": "#FF9800", - "infoForeground": "#727272", - "iconColor": "#B0BEC5" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#212121", - "controlText": "#727272", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#FF9800", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#727272", - "changedValueForeground": "#FF9800", - "errorMessageForeground": "#f07178", - "evaluatingExpressionForeground": "#727272", - "exceptionForeground": "#ffcb6b", - "modifyingValueForeground": "#FF9800", - "valueForeground": "#FF9800" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#3F3F3F", - "underlinedTabBackground": "#3F3F3F" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#3F3F3F" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#212121", - "borderColor": "#212121", - "hoverBackground": "#323232", - "hoverColor": "#1A1A1A", - "hoverMaskColor": "#3F3F3F", - "inactiveColoredTabBackground": "#212121", - "inactiveColoredFileBackground": "#2A2A2A", - "inactiveUnderlineColor": "#FF9800", - "inactiveMaskColor": "#1A1A1A", - "underlineColor": "#FF9800", - "underlinedTabBackground": "#323232", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#212121", - "DialogWrapper.southPanelBackground": "#212121", - "DialogWrapper.southPanelDivider": "#212121", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#212121", - "areaBorderColor": "#212121", - "areaForeground": "#B0BEC5" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#1A1A1A", - "foreground": "#B0BEC5", - "shortcutForeground": "#727272" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#1A1A1A", - "caretForeground": "#FF9800", - "foreground": "#B0BEC5", - "inactiveBackground": "#212121", - "inactiveForeground": "#474747", - "selectionBackground": "#404040", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#292929", - "hoverBackground": "#3F3F3F", - "hoverColor": "#3F3F3F", - "hoverMaskColor": "#3F3F3F", - "inactiveMaskColor": "#212121", - "inactiveColoredFileBackground": "#212121", - "inactiveUnderlineColor": "#474747", - "selectedForeground": "#B0BEC5", - "selectedBackground": "#323232", - "underlineColor": "#FF9800", - "underlinedTabBackground": "#323232", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#212121", - "borderColor": "#292929", - "hoverBackground": "#3F3F3F", - "hoverColor": "#3F3F3F", - "inactiveUnderlineColor": "#FF9800", - "underlineColor": "#FF9800", - "underlinedTabBackground": "#323232", - "underlinedTabForeground": "#B0BEC5" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#323232", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#292929", + "Focus.color": "border", "FormattedTextField": { - "background": "#1A1A1A", - "caretForeground": "#FF9800", - "foreground": "#B0BEC5", - "inactiveBackground": "#2A2A2A", - "inactiveForeground": "#474747", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#323232" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#1A1A1A", "Group": { - "disabledSeparatorColor": "#292929", - "separatorColor": "#292929" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#727272", - "lineSeparatorColor": "#212121" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#212121", - "inactive": "#1A1A1A" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#212121", - "borderColor": "#292929", - "foreground": "#B0BEC5", - "infoForeground": "#727272", - "shortcutForeground": "#727272" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#FF9800", - "inactiveCaption": "#292929", - "inactiveCaptionBorder": "#212121", - "inactiveCaptionText": "#727272", - "info": "#727272", - "infoText": "#727272", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#292929", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#212121" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#B0BEC5", - "background": "#212121", - "inactiveTitleForeground": "#727272" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#212121", - "disabledForeground": "#474747", - "disabledShadow": "#212121", - "disabledText": "#474747", - "foreground": "#B0BEC5", - "infoForeground": "#727272", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#B0BEC5" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#FF9800", - "hoverForeground": "#FF9800", - "pressedForeground": "#FF9800", - "secondaryForeground": "#727272", - "visitedForeground": "#FF9800" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#FF9800", + "link.foreground": "accent", "List": { - "background": "#292929", - "foreground": "#B0BEC5", - "hoverBackground": "#323232C0", - "hoverInactiveBackground": "#323232", - "selectionBackground": "#404040", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#323232C0" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#212121", - "branchColor": "#B0BEC5", - "contrast": "#1A1A1A", - "foreground": "#B0BEC5", - "mergeCommits": "#2A2A2A", - "primaryColor": "#727272", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#212121", - "tab.borderColor": "#FF9800", - "tagColor": "#727272" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#292929", - "usedColor": "#3F3F3F", - "usedBackground": "#3F3F3F" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#727272", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#212121", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#292929", - "disabledBackground": "#292929", - "disabledForeground": "#474747", - "foreground": "#B0BEC5", - "selectionBackground": "#404040", - "selectionForeground": "#FFFFFF", - "separatorColor": "#292929" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#1A1A1A", - "borderColor": "#212121", - "disabledBackground": "#212121", - "disabledForeground": "#474747", - "foreground": "#B0BEC5", - "highlight": "#212121", - "selectionBackground": "#404040", - "selectionForeground": "#FFFFFF", - "shadow": "#1A1A1A" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#727272", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#212121", - "disabledBackground": "#212121", - "disabledForeground": "#474747", - "foreground": "#B0BEC5", - "selectionBackground": "#404040", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#B0BEC5", - "borderColor": "#212121" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#212121" + "background": "bg" }, "SearchField": { - "background": "#1A1A1A" + "background": "hc" } }, - "NewPSD.warning": "#FF9800", + "NewPSD.warning": "accent", "Notification": { - "background": "#1A1A1A", - "borderColor": "#1A1A1A", - "errorBackground": "#1A1A1A", - "errorBorderColor": "#1A1A1A", - "foreground": "#B0BEC5", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#2A2A2A", - "foreground": "#B0BEC5", - "innerBorderColor": "#2A2A2A" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#1A1A1A", - "errorBorderColor": "#1A1A1A", - "informativeBackground": "#1A1A1A", - "informativeBorderColor": "#1A1A1A", - "warningBackground": "#1A1A1A", - "warningBorderColor": "#1A1A1A" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#292929", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#212121", - "foreground": "#B0BEC5", - "messageForeground": "#B0BEC5" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#2A2A2A", - "focusedColor": "#FF9800", - "disabledColor": "#474747" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#212121", - "foreground": "#B0BEC5" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#292929", - "borderColor": "#323232", - "currentOverloadBackground": "#3F3F3F", - "currentParameterForeground": "#FF9800", - "disabledForeground": "#474747", - "foreground": "#B0BEC5", - "infoForeground": "#727272", - "lineSeparatorColor": "#323232" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#1A1A1A", - "capsLockIconColor": "#FF9800", - "caretForeground": "#FF9800", - "foreground": "#B0BEC5", - "inactiveForeground": "#474747", - "selectionBackground": "#323232", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#212121", - "disabledForeground": "#474747", - "eapTagBackground": "#3F3F3F", - "hoverBackground": "#323232C0", - "lightSelectionBackground": "#323232", - "paidTagBackground": "#3F3F3F", - "selectionBackground": "#404040", - "tagForeground": "#FF9800", - "tagBackground": "#3F3F3F", - "trialTagBackground": "#3F3F3F", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#2A2A2A", - "installBorderColor": "#2A2A2A", - "installForeground": "#B0BEC5", - "installFocusedBackground": "#3F3F3F", - "installFillForeground": "#474747", - "installFillBackground": "#2A2A2A", - "updateBackground": "#FF9800", - "updateBorderColor": "#2A2A2A", - "updateForeground": "#B0BEC5" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#1A1A1A", - "borderColor": "#292929" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#292929", - "foreground": "#B0BEC5" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#323232", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#323232" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#212121", - "borderColor": "#212121", - "foreground": "#FF9800" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#1A1A1A", - "inactiveBorderColor": "#212121", - "innerBorderColor": "#292929", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#212121", - "inactiveBackground": "#1A1A1A" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#B0BEC5", - "separatorColor": "#292929", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#1A1A1A", - "background": "#1A1A1A", - "borderColor": "#1A1A1A" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#212121", + "background": "bg", "border": "2,0,2,0", - "foreground": "#B0BEC5", - "translucentBackground": "#212121" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#212121", - "foreground": "#FF9800", - "indeterminateEndColor": "#FF9800", - "indeterminateStartColor": "#FF9800", - "progressColor": "#FF9800", - "selectionBackground": "#3F3F3F", - "trackColor": "#3F3F3F" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#FF9800" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#212121", - "disabledText": "#474747", - "foreground": "#B0BEC5" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#727272", - "acceleratorSelectionForeground": "#727272", - "background": "#212121", - "disabledBackground": "#212121", - "disabledForeground": "#474747", - "foreground": "#B0BEC5", - "selectionBackground": "#404040", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#292929", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#212121", - "hoverThumbBorderColor": "#FF9800", - "hoverThumbColor": "#FF9800", - "hoverTrackColor": "#21212130", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#FF9800", - "hoverThumbColor": "#FF9800", - "hoverTrackColor": "#21212130", - "thumbBorderColor": "#FF980070", - "thumbColor": "#FF980070", - "trackColor": "#21212130", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#FF9800", - "hoverThumbColor": "#FF9800", - "hoverTrackColor": "#21212130", - "thumbBorderColor": "#FF980070", - "thumbColor": "#FF980070", - "trackColor": "#21212130" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#3F3F3F", - "thumbBorderColor": "#FF980070", - "thumbColor": "#FF980070", - "trackColor": "#21212130", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#FF9800", - "hoverThumbColor": "#FF9800", - "hoverTrackColor": "#21212130", - "thumbBorderColor": "#FF980070", - "thumbColor": "#FF980070", - "trackColor": "#21212130" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#1A1A1A", - "foreground": "#727272" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#212121" + "background": "bg" }, "List": { - "separatorForeground": "#727272", - "separatorColor": "#292929" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#212121", - "borderColor": "#1A1A1A", - "infoForeground": "#727272" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#3F3F3F" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#FF9800", - "startBackground": "#FF9800", - "endColor": "#FF9800", - "startColor": "#FF9800" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#1A1A1A", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#323232" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#727272", - "Repeated.File.Foreground": "#B0BEC5" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#292929", - "foreground": "#292929", - "separatorColor": "#292929" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#1A1A1A" + "background": "hc" }, "Slider": { - "background": "#212121", - "buttonBorderColor": "#FF9800", - "buttonColor": "#FF9800", - "foreground": "#B0BEC5", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#292929", - "trackColor": "#323232", - "trackWidth": 7, - "thumb": "#FF9800" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#3F3F3F", - "borderColor": "#292929", - "foreground": "#B0BEC5", - "errorForeground": "#B0BEC5" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#212121", + "background": "bg", "border": "3,3,3,3", - "foreground": "#B0BEC5", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#212121", - "highlight": "#1A1A1A" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#292929", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#212121", - "hoverBackground": "#3F3F3F", - "LightEditBackground": "#323232" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#212121", - "contentAreaColor": "#3F3F3F", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#292929", - "disabledForeground": "#474747", - "disabledUnderlineColor": "#474747", - "focus": "#323232", - "focusColor": "#323232", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#B0BEC5", - "highlight": "#292929", - "hoverColor": "#3F3F3F", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#FF9800" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#1A1A1A", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#1A1A1A", - "background": "#212121", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#474747", - "dropLineColor": "#FF9800", - "dropLineShortColor": "#FF9800", - "focusCellBackground": "#323232", - "focusCellForeground": "#FFFFFF", - "foreground": "#B0BEC5", - "gridColor": "#212121", - "highlightOuter": "#323232", - "hoverBackground": "#323232C0", - "hoverInactiveBackground": "#323232", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#727272", - "lightSelectionInactiveBackground": "#292929", - "selectionBackground": "#323232", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#323232", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#B0BEC5", - "stripeColor": "#1A1A1A" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#212121", - "borderColor": "#212121", - "bottomSeparatorColor": "#292929", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#474747", - "foreground": "#B0BEC5", - "focusCellBackground": "#323232", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#292929" + "separatorColor": "second" }, - "text": "#727272", - "textInactiveText": "#727272", - "textText": "#727272", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#1A1A1A", - "caretForeground": "#FF9800", - "foreground": "#B0BEC5", - "inactiveForeground": "#474747", - "selectionBackground": "#323232", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#1A1A1A", - "caretForeground": "#FF9800", - "foreground": "#B0BEC5", - "inactiveForeground": "#474747", - "selectionBackground": "#323232", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#1A1A1A", - "caretForeground": "#FF9800", - "foreground": "#B0BEC5", - "inactiveForeground": "#474747", - "selectionBackground": "#323232", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#1A1A1A", - "Button.hoverBackground": "#3F3F3F", - "inactiveBackground": "#212121", - "infoForeground": "#727272", - "inactiveInfoForeground": "#727272" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#B0BEC5", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#2A2A2A", - "buttonColor": "#B0BEC5", - "disabledText": "#474747", - "foreground": "#B0BEC5", - "offForeground": "#212121", - "offBackground": "#212121", - "onBackground": "#FF9800", - "onForeground": "#FF9800" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#1A1A1A", - "borderHandleColor": "#727272", - "floatingForeground": "#727272", - "foreground": "#B0BEC5" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#212121", - "Actions.infoForeground": "#727272", - "background": "#1A1A1A", - "borderColor": "#292929", - "foreground": "#B0BEC5", - "infoForeground": "#727272", - "separatorColor": "#292929", - "shortcutForeground": "#727272" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#323232", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#1A1A1A" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#212121", - "borderColor": "#292929", - "inactiveBackground": "#212121" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#212121" + "background": "bg" }, "HeaderTab": { - "borderColor": "#3F3F3F", - "hoverBackground": "#3F3F3F", - "hoverInactiveBackground": "#3F3F3F", - "inactiveUnderlineColor": "#FF9800", - "selectedBackground": "#1A1A1A", - "selectedInactiveBackground": "#1A1A1A", - "underlineColor": "#FF9800", - "underlinedTabBackground": "#323232", - "underlinedTabInactiveBackground": "#292929", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#B0BEC5" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#1A1A1A", - "foreground": "#727272", - "hash": "#292929", - "hoverBackground": "#323232C0", - "hoverInactiveBackground": "#323232", - "modifiedItemForeground": "#FF9800", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#323232C0", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#323232C0", - "textBackground": "#1A1A1A" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#292929", - "Canvas.background": "#1A1A1A", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#212121", - "foreground": "#B0BEC5" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#292929", - "background": "#212121", - "foreground": "#B0BEC5", - "hoverBorderColor": "#3F3F3F" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#292929", - "hoverBorderColor": "#3F3F3F" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#1A1A1A", - "highStroke.foreground": "#B0BEC5", - "Label.foreground": "#727272", - "List.selectionBackground": "#323232C0", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#292929", - "Component.foreground": "#B0BEC5", - "ConstraintSetText.foreground": "#727272", - "ConstraintSet.background": "#292929", - "CSPanel.SelectedFocusBackground": "#404040", - "CSPanel.SelectedBackground": "#323232C0", - "cs_FocusText.infoForeground": "#727272", - "CursorTextColor.foreground": "#B0BEC5", - "HoverColor.disabledBackground": "#474747", - "motionGraph.background": "#212121", - "Notification.background": "#1A1A1A", - "ourAvg.background": "#292929", - "ourCS.background": "#292929", - "ourCS_Border.borderColor": "#292929", - "ourCS_TextColor.foreground": "#727272", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#323232", - "ourCS_SelectedBorder.pressedBorderColor": "#3F3F3F", - "ourML_BarColor.separatorColor": "#292929", - "PrimaryPanel.background": "#1A1A1A", - "SecondaryPanel.background": "#212121", - "SecondaryPanel.header.foreground": "#727272", - "SecondaryPanel.header.background": "#1A1A1A", - "timeLine.disabledBorderColor": "#292929" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#292929", - "background": "#212121" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#B0BEC5", + "percent.foreground": "fg", "Placeholder": { - "background": "#212121", - "borderColor": "#292929", - "foreground": "#B0BEC5", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#212121", - "stroke.acceleratorForeground": "#727272" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#1A1A1A", - "errorBorderColor": "#1A1A1A", - "warningBackground": "#1A1A1A", - "warningBorderColor": "#1A1A1A" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#212121" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#3F3F3F" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#FF9800", - "otherIconColor": "#727272", - "remoteBranchIconColor": "#B0BEC5", - "tagIconColor": "#727272" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#FF9800", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#474747", - "localTagIconColor": "#727272", - "mqTagIconColor": "#727272", - "tagIconColor": "#727272", - "tipIconColor": "#727272" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#727272", - "Commit.currentBranchBackground": "#292929", - "Commit.hoveredBackground": "#323232C0" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#3F3F3F" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#1A1A1A", - "foreground": "#B0BEC5" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#212121", - "background": "#212121", - "borderColor": "#212121", - "captionBackground": "#1A1A1A", - "captionForeground": "#B0BEC5", - "Details.background": "#212121", - "footerBackground": "#1A1A1A", - "footerForeground": "#B0BEC5", - "headerBackground": "#212121", - "headerForeground": "#B0BEC5", - "List.background": "#1A1A1A", - "separatorColor": "#292929", - "SidePanel.background": "#292929", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#1A1A1A", - "actions.selectionBackground": "#3F3F3F", - "background": "#292929", - "selectionBackground": "#404040", - "selectionInactiveBackground": "#292929" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#1A1A1A", - "windowBorder": "#292929", - "windowText": "#727272", - "Window.border": "#292929" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#1A1A1A", - "#6B6B6B": "#727272", - "#A7A7A7": "#212121", - "#3D6185": "#FF9800", - "#466D94": "#FF9800", - "#3C3F41": "#212121", - "#545556": "#474747", - "#606060": "#474747", - "#9AA7B0": "#B0BEC5", - "#675133": "#FF9800", - "Actions.Blue": "#82aaff", - "Actions.Green": "#c3e88d", - "Actions.Grey": "#727272", - "Actions.GreyInline": "#616161", - "Actions.GreyInline.Dark": "#B0BEC5", - "Actions.Red": "#f07178", - "Actions.Yellow": "#ffcb6b", - "Checkbox.Background.Default": "#1A1A1A", - "Checkbox.Background.Default.Dark": "#1A1A1A", - "Checkbox.Background.Disabled": "#323232", - "Checkbox.Background.Disabled.Dark": "#323232", - "Checkbox.Border.Default": "#292929", - "Checkbox.Border.Default.Dark": "#292929", - "Checkbox.Border.Disabled": "#474747", - "Checkbox.Border.Disabled.Dark": "#474747", - "Checkbox.Focus.Thin.Default": "#FF9800", - "Checkbox.Focus.Thin.Default.Dark": "#FF9800", - "Checkbox.Focus.Wide": "#FF9800", - "Checkbox.Focus.Wide.Dark": "#FF9800", - "Checkbox.Foreground.Disabled": "#474747", - "Checkbox.Foreground.Disabled.Dark": "#474747", - "Checkbox.Background.Selected": "#FF9800", - "Checkbox.Background.Selected.Dark": "#212121", - "Checkbox.Border.Selected": "#FF9800", - "Checkbox.Border.Selected.Dark": "#FF9800", - "Checkbox.Foreground.Selected": "#FF9800", - "Checkbox.Foreground.Selected.Dark": "#FF9800", - "Checkbox.Focus.Thin.Selected": "#B0BEC5", - "Checkbox.Focus.Thin.Selected.Dark": "#B0BEC5", - "Objects.Grey": "#616161", - "Objects.Blue": "#82aaff", - "Objects.RedStatus": "#f07178", - "Objects.Red": "#f07178", - "Objects.Pink": "#c792ea", - "Objects.Yellow": "#ffcb6b", - "Objects.Green": "#c3e88d", - "Objects.Purple": "#c792ea", - "Objects.BlackText": "#B0BEC5", - "Objects.YellowDark": "#f78c6c", - "Objects.GreenAndroid": "#c3e88d" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Darker.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Darker.theme.json index edbaaa29..dffe56d8 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Darker.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Darker.theme.json @@ -2,1004 +2,1089 @@ "name": "Material Darker", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#212121", + "bg30": "#21212130", + "fg": "#B0BEC5", + "text": "#727272", + "selBg": "#404040", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#292929", + "excl": "#323232", + "second": "#292929", + "dis": "#474747", + "accent": "#FF9800", + "accent2": "#FF98002", + "accent50": "#FF980050", + "accent70": "#FF980070", + "cs": "#1A1A1A", + "button": "#2A2A2A", + "table": "#323232", + "tree": "#323232C0", + "hl": "#3F3F3F", + "notif": "#1A1A1A", + "hc": "#212121", + "white": "#eeffff", + "blue": "#82aaff", + "red": "#f07178", + "yellow": "#ffcb6b", + "green": "#c3e88d", + "gray": "#616161", + "purple": "#c792ea", + "orange": "#f78c6c" + }, "editorScheme": "colors/Material Darker.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#727272", - "background": "#212121", - "borderColor": "#292929", - "disabledBackground": "#323232", - "disabledForeground": "#474747", - "disabledText": "#474747", - "focusColor": "#3F3F3F", - "focusedBorderColor": "#FF9800", - "foreground": "#B0BEC5", - "inactiveBackground": "#323232", - "inactiveForeground": "#727272", - "infoForeground": "#727272", - "selectionBackground": "#404040", - "selectionBackgroundInactive": "#292929", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#292929", - "separatorColor": "#292929" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#212121", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#FF980050", - "hoverBorderColor": "#FF980050", - "hoverSeparatorColor": "#2A2A2A", - "focusedBorderColor": "#FF980050", - "pressedBackground": "#FF980050", - "pressedBorderColor": "#FF980050" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#404040" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#212121", - "Borders.color": "#292929", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#212121", + "background": "bg", "default": { - "endBackground": "#323232", - "endBorderColor": "#323232", - "foreground": "#FFFFFF", - "focusColor": "#FF9800", - "focusedBorderColor": "#FF9800", - "shadowColor": "#323232", - "startBackground": "#323232", - "startBorderColor": "#323232" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#2A2A2A", - "disabledText": "#474747", - "endBackground": "#2A2A2A", - "endBorderColor": "#2A2A2A", - "focus": "#3F3F3F", - "focusedBorderColor": "#FF9800", - "foreground": "#727272", - "highlight": "#FFFFFF", - "mt.background": "#2A2A2A", - "mt.foreground": "#727272", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#323232", - "mt.selection.color2": "#323232", - "startBackground": "#2A2A2A", - "startBorderColor": "#2A2A2A", - "shadowColor": "#2A2A2A", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#292929", - "Tooltip.background": "#1A1A1A" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#1A1A1A", - "selectionBackground": "#404040" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#212121", - "disabledText": "#474747", - "foreground": "#B0BEC5", - "select": "#FF9800" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#727272", - "acceleratorSelectionForeground": "#727272", - "background": "#212121", - "disabledBackground": "#212121", - "disabledForeground": "#474747", - "foreground": "#B0BEC5", - "selectionBackground": "#404040", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#B0BEC5", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#FF9800", - "dropdownBorder": "#292929", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#212121", - "foreground": "#B0BEC5", - "swatchesDefaultRecentColor": "#B0BEC5" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#2A2A2A", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#2A2A2A", - "disabledIconColor": "#474747", - "iconColor": "#B0BEC5", - "nonEditableBackground": "#212121" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#212121", - "buttonBackground": "#2A2A2A", - "darcula.hoveredArrowButtonForeground": "#FF9800", - "disabledForeground": "#474747", - "foreground": "#B0BEC5", - "modifiedItemForeground": "#FF9800", - "nonEditableBackground": "#292929", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#323232", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#292929", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#292929", - "foreground": "#B0BEC5", - "infoForeground": "#727272", - "matchForeground": "#FF9800", - "matchSelectionForeground": "#FF9800", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#727272", - "selectionInactiveBackground": "#3F3F3F", - "selectionBackground": "#404040", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#3F3F3F", - "disabledBorderColor": "#2A2A2A", - "focusColor": "#FF9800", - "focusedBorderColor": "#FF9800", - "hoverIconColor": "#FF9800", - "infoForeground": "#727272", - "iconColor": "#B0BEC5" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#212121", - "controlText": "#727272", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#FF9800", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#727272", - "changedValueForeground": "#FF9800", - "errorMessageForeground": "#f07178", - "evaluatingExpressionForeground": "#727272", - "exceptionForeground": "#ffcb6b", - "modifyingValueForeground": "#FF9800", - "valueForeground": "#FF9800" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#3F3F3F", - "underlinedTabBackground": "#3F3F3F" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#3F3F3F" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#212121", - "borderColor": "#212121", - "hoverBackground": "#323232", - "hoverColor": "#212121", - "hoverMaskColor": "#3F3F3F", - "inactiveColoredTabBackground": "#212121", - "inactiveColoredFileBackground": "#2A2A2A", - "inactiveUnderlineColor": "#FF9800", - "inactiveMaskColor": "#212121", - "underlineColor": "#FF9800", - "underlinedTabBackground": "#323232", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#212121", - "DialogWrapper.southPanelBackground": "#212121", - "DialogWrapper.southPanelDivider": "#212121", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#212121", - "areaBorderColor": "#212121", - "areaForeground": "#B0BEC5" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#212121", - "foreground": "#B0BEC5", - "shortcutForeground": "#727272" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#212121", - "caretForeground": "#FF9800", - "foreground": "#B0BEC5", - "inactiveBackground": "#212121", - "inactiveForeground": "#474747", - "selectionBackground": "#404040", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#292929", - "hoverBackground": "#3F3F3F", - "hoverColor": "#3F3F3F", - "hoverMaskColor": "#3F3F3F", - "inactiveMaskColor": "#212121", - "inactiveColoredFileBackground": "#212121", - "inactiveUnderlineColor": "#474747", - "selectedForeground": "#B0BEC5", - "selectedBackground": "#323232", - "underlineColor": "#FF9800", - "underlinedTabBackground": "#323232", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#212121", - "borderColor": "#292929", - "hoverBackground": "#3F3F3F", - "hoverColor": "#3F3F3F", - "inactiveUnderlineColor": "#FF9800", - "underlineColor": "#FF9800", - "underlinedTabBackground": "#323232", - "underlinedTabForeground": "#B0BEC5" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#323232", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#292929", + "Focus.color": "border", "FormattedTextField": { - "background": "#212121", - "caretForeground": "#FF9800", - "foreground": "#B0BEC5", - "inactiveBackground": "#2A2A2A", - "inactiveForeground": "#474747", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#323232" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#1A1A1A", "Group": { - "disabledSeparatorColor": "#292929", - "separatorColor": "#292929" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#727272", - "lineSeparatorColor": "#212121" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#212121", - "inactive": "#1A1A1A" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#212121", - "borderColor": "#292929", - "foreground": "#B0BEC5", - "infoForeground": "#727272", - "shortcutForeground": "#727272" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#FF9800", - "inactiveCaption": "#292929", - "inactiveCaptionBorder": "#212121", - "inactiveCaptionText": "#727272", - "info": "#727272", - "infoText": "#727272", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#292929", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#212121" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#B0BEC5", - "background": "#212121", - "inactiveTitleForeground": "#727272" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#212121", - "disabledForeground": "#474747", - "disabledShadow": "#212121", - "disabledText": "#474747", - "foreground": "#B0BEC5", - "infoForeground": "#727272", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#B0BEC5" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#FF9800", - "hoverForeground": "#FF9800", - "pressedForeground": "#FF9800", - "secondaryForeground": "#727272", - "visitedForeground": "#FF9800" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#FF9800", + "link.foreground": "accent", "List": { - "background": "#292929", - "foreground": "#B0BEC5", - "hoverBackground": "#323232C0", - "hoverInactiveBackground": "#323232", - "selectionBackground": "#404040", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#323232C0" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#212121", - "branchColor": "#B0BEC5", - "contrast": "#1A1A1A", - "foreground": "#B0BEC5", - "mergeCommits": "#2A2A2A", - "primaryColor": "#727272", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#212121", - "tab.borderColor": "#FF9800", - "tagColor": "#727272" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#292929", - "usedColor": "#3F3F3F", - "usedBackground": "#3F3F3F" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#727272", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#212121", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#292929", - "disabledBackground": "#292929", - "disabledForeground": "#474747", - "foreground": "#B0BEC5", - "selectionBackground": "#404040", - "selectionForeground": "#FFFFFF", - "separatorColor": "#292929" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#212121", - "borderColor": "#212121", - "disabledBackground": "#212121", - "disabledForeground": "#474747", - "foreground": "#B0BEC5", - "highlight": "#212121", - "selectionBackground": "#404040", - "selectionForeground": "#FFFFFF", - "shadow": "#212121" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#727272", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#212121", - "disabledBackground": "#212121", - "disabledForeground": "#474747", - "foreground": "#B0BEC5", - "selectionBackground": "#404040", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#B0BEC5", - "borderColor": "#212121" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#212121" + "background": "bg" }, "SearchField": { - "background": "#212121" + "background": "hc" } }, - "NewPSD.warning": "#FF9800", + "NewPSD.warning": "accent", "Notification": { - "background": "#1A1A1A", - "borderColor": "#1A1A1A", - "errorBackground": "#1A1A1A", - "errorBorderColor": "#1A1A1A", - "foreground": "#B0BEC5", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#2A2A2A", - "foreground": "#B0BEC5", - "innerBorderColor": "#2A2A2A" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#1A1A1A", - "errorBorderColor": "#1A1A1A", - "informativeBackground": "#1A1A1A", - "informativeBorderColor": "#1A1A1A", - "warningBackground": "#1A1A1A", - "warningBorderColor": "#1A1A1A" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#292929", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#212121", - "foreground": "#B0BEC5", - "messageForeground": "#B0BEC5" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#2A2A2A", - "focusedColor": "#FF9800", - "disabledColor": "#474747" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#212121", - "foreground": "#B0BEC5" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#292929", - "borderColor": "#323232", - "currentOverloadBackground": "#3F3F3F", - "currentParameterForeground": "#FF9800", - "disabledForeground": "#474747", - "foreground": "#B0BEC5", - "infoForeground": "#727272", - "lineSeparatorColor": "#323232" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#212121", - "capsLockIconColor": "#FF9800", - "caretForeground": "#FF9800", - "foreground": "#B0BEC5", - "inactiveForeground": "#474747", - "selectionBackground": "#323232", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#212121", - "disabledForeground": "#474747", - "eapTagBackground": "#3F3F3F", - "hoverBackground": "#323232C0", - "lightSelectionBackground": "#323232", - "paidTagBackground": "#3F3F3F", - "selectionBackground": "#404040", - "tagForeground": "#FF9800", - "tagBackground": "#3F3F3F", - "trialTagBackground": "#3F3F3F", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#2A2A2A", - "installBorderColor": "#2A2A2A", - "installForeground": "#B0BEC5", - "installFocusedBackground": "#3F3F3F", - "installFillForeground": "#474747", - "installFillBackground": "#2A2A2A", - "updateBackground": "#FF9800", - "updateBorderColor": "#2A2A2A", - "updateForeground": "#B0BEC5" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#212121", - "borderColor": "#292929" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#292929", - "foreground": "#B0BEC5" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#323232", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#323232" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#212121", - "borderColor": "#212121", - "foreground": "#FF9800" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#1A1A1A", - "inactiveBorderColor": "#212121", - "innerBorderColor": "#292929", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#212121", - "inactiveBackground": "#1A1A1A" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#B0BEC5", - "separatorColor": "#292929", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#1A1A1A", - "background": "#1A1A1A", - "borderColor": "#1A1A1A" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#212121", + "background": "bg", "border": "2,0,2,0", - "foreground": "#B0BEC5", - "translucentBackground": "#212121" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#212121", - "foreground": "#FF9800", - "indeterminateEndColor": "#FF9800", - "indeterminateStartColor": "#FF9800", - "progressColor": "#FF9800", - "selectionBackground": "#3F3F3F", - "trackColor": "#3F3F3F" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#FF9800" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#212121", - "disabledText": "#474747", - "foreground": "#B0BEC5" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#727272", - "acceleratorSelectionForeground": "#727272", - "background": "#212121", - "disabledBackground": "#212121", - "disabledForeground": "#474747", - "foreground": "#B0BEC5", - "selectionBackground": "#404040", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#292929", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#212121", - "hoverThumbBorderColor": "#FF9800", - "hoverThumbColor": "#FF9800", - "hoverTrackColor": "#21212130", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#FF9800", - "hoverThumbColor": "#FF9800", - "hoverTrackColor": "#21212130", - "thumbBorderColor": "#FF980070", - "thumbColor": "#FF980070", - "trackColor": "#21212130", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#FF9800", - "hoverThumbColor": "#FF9800", - "hoverTrackColor": "#21212130", - "thumbBorderColor": "#FF980070", - "thumbColor": "#FF980070", - "trackColor": "#21212130" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#3F3F3F", - "thumbBorderColor": "#FF980070", - "thumbColor": "#FF980070", - "trackColor": "#21212130", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#FF9800", - "hoverThumbColor": "#FF9800", - "hoverTrackColor": "#21212130", - "thumbBorderColor": "#FF980070", - "thumbColor": "#FF980070", - "trackColor": "#21212130" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#1A1A1A", - "foreground": "#727272" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#212121" + "background": "bg" }, "List": { - "separatorForeground": "#727272", - "separatorColor": "#292929" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#212121", - "borderColor": "#1A1A1A", - "infoForeground": "#727272" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#3F3F3F" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#FF9800", - "startBackground": "#FF9800", - "endColor": "#FF9800", - "startColor": "#FF9800" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#1A1A1A", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#323232" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#727272", - "Repeated.File.Foreground": "#B0BEC5" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#292929", - "foreground": "#292929", - "separatorColor": "#292929" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#212121" + "background": "hc" }, "Slider": { - "background": "#212121", - "buttonBorderColor": "#FF9800", - "buttonColor": "#FF9800", - "foreground": "#B0BEC5", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#292929", - "trackColor": "#323232", - "trackWidth": 7, - "thumb": "#FF9800" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#3F3F3F", - "borderColor": "#292929", - "foreground": "#B0BEC5", - "errorForeground": "#B0BEC5" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#212121", + "background": "bg", "border": "3,3,3,3", - "foreground": "#B0BEC5", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#212121", - "highlight": "#212121" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#292929", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#212121", - "hoverBackground": "#3F3F3F", - "LightEditBackground": "#323232" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#212121", - "contentAreaColor": "#3F3F3F", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#292929", - "disabledForeground": "#474747", - "disabledUnderlineColor": "#474747", - "focus": "#323232", - "focusColor": "#323232", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#B0BEC5", - "highlight": "#292929", - "hoverColor": "#3F3F3F", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#FF9800" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#212121", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#1A1A1A", - "background": "#212121", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#474747", - "dropLineColor": "#FF9800", - "dropLineShortColor": "#FF9800", - "focusCellBackground": "#323232", - "focusCellForeground": "#FFFFFF", - "foreground": "#B0BEC5", - "gridColor": "#212121", - "highlightOuter": "#323232", - "hoverBackground": "#323232C0", - "hoverInactiveBackground": "#323232", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#727272", - "lightSelectionInactiveBackground": "#292929", - "selectionBackground": "#323232", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#323232", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#B0BEC5", - "stripeColor": "#1A1A1A" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#212121", - "borderColor": "#212121", - "bottomSeparatorColor": "#292929", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#474747", - "foreground": "#B0BEC5", - "focusCellBackground": "#323232", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#292929" + "separatorColor": "second" }, - "text": "#727272", - "textInactiveText": "#727272", - "textText": "#727272", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#212121", - "caretForeground": "#FF9800", - "foreground": "#B0BEC5", - "inactiveForeground": "#474747", - "selectionBackground": "#323232", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#212121", - "caretForeground": "#FF9800", - "foreground": "#B0BEC5", - "inactiveForeground": "#474747", - "selectionBackground": "#323232", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#212121", - "caretForeground": "#FF9800", - "foreground": "#B0BEC5", - "inactiveForeground": "#474747", - "selectionBackground": "#323232", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#1A1A1A", - "Button.hoverBackground": "#3F3F3F", - "inactiveBackground": "#212121", - "infoForeground": "#727272", - "inactiveInfoForeground": "#727272" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#B0BEC5", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#2A2A2A", - "buttonColor": "#B0BEC5", - "disabledText": "#474747", - "foreground": "#B0BEC5", - "offForeground": "#212121", - "offBackground": "#212121", - "onBackground": "#FF9800", - "onForeground": "#FF9800" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#212121", - "borderHandleColor": "#727272", - "floatingForeground": "#727272", - "foreground": "#B0BEC5" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#212121", - "Actions.infoForeground": "#727272", - "background": "#1A1A1A", - "borderColor": "#292929", - "foreground": "#B0BEC5", - "infoForeground": "#727272", - "separatorColor": "#292929", - "shortcutForeground": "#727272" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#323232", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#1A1A1A" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#212121", - "borderColor": "#292929", - "inactiveBackground": "#212121" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#212121" + "background": "bg" }, "HeaderTab": { - "borderColor": "#3F3F3F", - "hoverBackground": "#3F3F3F", - "hoverInactiveBackground": "#3F3F3F", - "inactiveUnderlineColor": "#FF9800", - "selectedBackground": "#1A1A1A", - "selectedInactiveBackground": "#1A1A1A", - "underlineColor": "#FF9800", - "underlinedTabBackground": "#323232", - "underlinedTabInactiveBackground": "#292929", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#B0BEC5" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#212121", - "foreground": "#727272", - "hash": "#292929", - "hoverBackground": "#323232C0", - "hoverInactiveBackground": "#323232", - "modifiedItemForeground": "#FF9800", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#323232C0", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#323232C0", - "textBackground": "#212121" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#292929", - "Canvas.background": "#1A1A1A", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#212121", - "foreground": "#B0BEC5" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#292929", - "background": "#212121", - "foreground": "#B0BEC5", - "hoverBorderColor": "#3F3F3F" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#292929", - "hoverBorderColor": "#3F3F3F" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#1A1A1A", - "highStroke.foreground": "#B0BEC5", - "Label.foreground": "#727272", - "List.selectionBackground": "#323232C0", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#292929", - "Component.foreground": "#B0BEC5", - "ConstraintSetText.foreground": "#727272", - "ConstraintSet.background": "#292929", - "CSPanel.SelectedFocusBackground": "#404040", - "CSPanel.SelectedBackground": "#323232C0", - "cs_FocusText.infoForeground": "#727272", - "CursorTextColor.foreground": "#B0BEC5", - "HoverColor.disabledBackground": "#474747", - "motionGraph.background": "#212121", - "Notification.background": "#1A1A1A", - "ourAvg.background": "#292929", - "ourCS.background": "#292929", - "ourCS_Border.borderColor": "#292929", - "ourCS_TextColor.foreground": "#727272", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#323232", - "ourCS_SelectedBorder.pressedBorderColor": "#3F3F3F", - "ourML_BarColor.separatorColor": "#292929", - "PrimaryPanel.background": "#1A1A1A", - "SecondaryPanel.background": "#212121", - "SecondaryPanel.header.foreground": "#727272", - "SecondaryPanel.header.background": "#1A1A1A", - "timeLine.disabledBorderColor": "#292929" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#292929", - "background": "#212121" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#B0BEC5", + "percent.foreground": "fg", "Placeholder": { - "background": "#212121", - "borderColor": "#292929", - "foreground": "#B0BEC5", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#212121", - "stroke.acceleratorForeground": "#727272" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#1A1A1A", - "errorBorderColor": "#1A1A1A", - "warningBackground": "#1A1A1A", - "warningBorderColor": "#1A1A1A" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#212121" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#3F3F3F" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#FF9800", - "otherIconColor": "#727272", - "remoteBranchIconColor": "#B0BEC5", - "tagIconColor": "#727272" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#FF9800", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#474747", - "localTagIconColor": "#727272", - "mqTagIconColor": "#727272", - "tagIconColor": "#727272", - "tipIconColor": "#727272" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#727272", - "Commit.currentBranchBackground": "#292929", - "Commit.hoveredBackground": "#323232C0" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#3F3F3F" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#212121", - "foreground": "#B0BEC5" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#212121", - "background": "#212121", - "borderColor": "#212121", - "captionBackground": "#1A1A1A", - "captionForeground": "#B0BEC5", - "Details.background": "#212121", - "footerBackground": "#1A1A1A", - "footerForeground": "#B0BEC5", - "headerBackground": "#212121", - "headerForeground": "#B0BEC5", - "List.background": "#1A1A1A", - "separatorColor": "#292929", - "SidePanel.background": "#292929", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#1A1A1A", - "actions.selectionBackground": "#3F3F3F", - "background": "#292929", - "selectionBackground": "#404040", - "selectionInactiveBackground": "#292929" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#212121", - "windowBorder": "#292929", - "windowText": "#727272", - "Window.border": "#292929" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#1A1A1A", - "#6B6B6B": "#727272", - "#A7A7A7": "#212121", - "#3D6185": "#FF9800", - "#466D94": "#FF9800", - "#3C3F41": "#212121", - "#545556": "#474747", - "#606060": "#474747", - "#9AA7B0": "#B0BEC5", - "#675133": "#FF9800", - "Actions.Blue": "#82aaff", - "Actions.Green": "#c3e88d", - "Actions.Grey": "#727272", - "Actions.GreyInline": "#616161", - "Actions.GreyInline.Dark": "#B0BEC5", - "Actions.Red": "#f07178", - "Actions.Yellow": "#ffcb6b", - "Checkbox.Background.Default": "#1A1A1A", - "Checkbox.Background.Default.Dark": "#1A1A1A", - "Checkbox.Background.Disabled": "#323232", - "Checkbox.Background.Disabled.Dark": "#323232", - "Checkbox.Border.Default": "#292929", - "Checkbox.Border.Default.Dark": "#292929", - "Checkbox.Border.Disabled": "#474747", - "Checkbox.Border.Disabled.Dark": "#474747", - "Checkbox.Focus.Thin.Default": "#FF9800", - "Checkbox.Focus.Thin.Default.Dark": "#FF9800", - "Checkbox.Focus.Wide": "#FF9800", - "Checkbox.Focus.Wide.Dark": "#FF9800", - "Checkbox.Foreground.Disabled": "#474747", - "Checkbox.Foreground.Disabled.Dark": "#474747", - "Checkbox.Background.Selected": "#FF9800", - "Checkbox.Background.Selected.Dark": "#212121", - "Checkbox.Border.Selected": "#FF9800", - "Checkbox.Border.Selected.Dark": "#FF9800", - "Checkbox.Foreground.Selected": "#FF9800", - "Checkbox.Foreground.Selected.Dark": "#FF9800", - "Checkbox.Focus.Thin.Selected": "#B0BEC5", - "Checkbox.Focus.Thin.Selected.Dark": "#B0BEC5", - "Objects.Grey": "#616161", - "Objects.Blue": "#82aaff", - "Objects.RedStatus": "#f07178", - "Objects.Red": "#f07178", - "Objects.Pink": "#c792ea", - "Objects.Yellow": "#ffcb6b", - "Objects.Green": "#c3e88d", - "Objects.Purple": "#c792ea", - "Objects.BlackText": "#B0BEC5", - "Objects.YellowDark": "#f78c6c", - "Objects.GreenAndroid": "#c3e88d" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Deep Ocean Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Deep Ocean Contrast.theme.json index 539615ff..1f994f6d 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Deep Ocean Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Deep Ocean Contrast.theme.json @@ -2,1004 +2,1089 @@ "name": "Material Deep Ocean Contrast", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#0F111A", + "bg30": "#0F111A30", + "fg": "#8F93A2", + "text": "#4B526D", + "selBg": "#222533", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#0F111A", + "excl": "#292D3E", + "second": "#181A1F", + "dis": "#464B5D", + "accent": "#84ffff", + "accent2": "#84ffff2", + "accent50": "#84ffff50", + "accent70": "#84ffff70", + "cs": "#090B10", + "button": "#191A21", + "table": "#1A1C25", + "tree": "#717CB430", + "hl": "#1F2233", + "notif": "#090B10", + "hc": "#090B10", + "white": "#eeffff", + "blue": "#82aaff", + "red": "#f07178", + "yellow": "#ffcb6b", + "green": "#c3e88d", + "gray": "#717CB4", + "purple": "#c792ea", + "orange": "#f78c6c" + }, "editorScheme": "colors/Material Deep Ocean.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#4B526D", - "background": "#0F111A", - "borderColor": "#0F111A", - "disabledBackground": "#292D3E", - "disabledForeground": "#464B5D", - "disabledText": "#464B5D", - "focusColor": "#1F2233", - "focusedBorderColor": "#84ffff", - "foreground": "#8F93A2", - "inactiveBackground": "#292D3E", - "inactiveForeground": "#4B526D", - "infoForeground": "#4B526D", - "selectionBackground": "#717CB480", - "selectionBackgroundInactive": "#181A1F", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#181A1F", - "separatorColor": "#0F111A" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#0F111A", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#84ffff50", - "hoverBorderColor": "#84ffff50", - "hoverSeparatorColor": "#191A21", - "focusedBorderColor": "#84ffff50", - "pressedBackground": "#84ffff50", - "pressedBorderColor": "#84ffff50" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#717CB480" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#0F111A", - "Borders.color": "#0F111A", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#0F111A", + "background": "bg", "default": { - "endBackground": "#1A1C25", - "endBorderColor": "#1A1C25", - "foreground": "#FFFFFF", - "focusColor": "#84ffff", - "focusedBorderColor": "#84ffff", - "shadowColor": "#1A1C25", - "startBackground": "#1A1C25", - "startBorderColor": "#1A1C25" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#191A21", - "disabledText": "#464B5D", - "endBackground": "#191A21", - "endBorderColor": "#191A21", - "focus": "#1F2233", - "focusedBorderColor": "#84ffff", - "foreground": "#4B526D", - "highlight": "#FFFFFF", - "mt.background": "#191A21", - "mt.foreground": "#4B526D", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#1A1C25", - "mt.selection.color2": "#1A1C25", - "startBackground": "#191A21", - "startBorderColor": "#191A21", - "shadowColor": "#191A21", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#0F111A", - "Tooltip.background": "#090B10" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#090B10", - "selectionBackground": "#717CB480" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#0F111A", - "disabledText": "#464B5D", - "foreground": "#8F93A2", - "select": "#84ffff" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#4B526D", - "acceleratorSelectionForeground": "#4B526D", - "background": "#0F111A", - "disabledBackground": "#0F111A", - "disabledForeground": "#464B5D", - "foreground": "#8F93A2", - "selectionBackground": "#717CB480", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#8F93A2", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#84ffff", - "dropdownBorder": "#181A1F", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#0F111A", - "foreground": "#8F93A2", - "swatchesDefaultRecentColor": "#8F93A2" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#191A21", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#191A21", - "disabledIconColor": "#464B5D", - "iconColor": "#8F93A2", - "nonEditableBackground": "#0F111A" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#090B10", - "buttonBackground": "#191A21", - "darcula.hoveredArrowButtonForeground": "#84ffff", - "disabledForeground": "#464B5D", - "foreground": "#8F93A2", - "modifiedItemForeground": "#84ffff", - "nonEditableBackground": "#181A1F", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#1A1C25", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#0F111A", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#181A1F", - "foreground": "#8F93A2", - "infoForeground": "#4B526D", - "matchForeground": "#84ffff", - "matchSelectionForeground": "#84ffff", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#4B526D", - "selectionInactiveBackground": "#1F2233", - "selectionBackground": "#717CB480", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#1F2233", - "disabledBorderColor": "#191A21", - "focusColor": "#84ffff", - "focusedBorderColor": "#84ffff", - "hoverIconColor": "#84ffff", - "infoForeground": "#4B526D", - "iconColor": "#8F93A2" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#0F111A", - "controlText": "#4B526D", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#84ffff", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#4B526D", - "changedValueForeground": "#84ffff", - "errorMessageForeground": "#f07178", - "evaluatingExpressionForeground": "#4B526D", - "exceptionForeground": "#ffcb6b", - "modifyingValueForeground": "#84ffff", - "valueForeground": "#84ffff" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#1F2233", - "underlinedTabBackground": "#1F2233" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#1F2233" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#0F111A", - "borderColor": "#0F111A", - "hoverBackground": "#1A1C25", - "hoverColor": "#090B10", - "hoverMaskColor": "#1F2233", - "inactiveColoredTabBackground": "#0F111A", - "inactiveColoredFileBackground": "#191A21", - "inactiveUnderlineColor": "#84ffff", - "inactiveMaskColor": "#090B10", - "underlineColor": "#84ffff", - "underlinedTabBackground": "#1A1C25", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#0F111A", - "DialogWrapper.southPanelBackground": "#0F111A", - "DialogWrapper.southPanelDivider": "#0F111A", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#0F111A", - "areaBorderColor": "#0F111A", - "areaForeground": "#8F93A2" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#090B10", - "foreground": "#8F93A2", - "shortcutForeground": "#4B526D" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#090B10", - "caretForeground": "#84ffff", - "foreground": "#8F93A2", - "inactiveBackground": "#0F111A", - "inactiveForeground": "#464B5D", - "selectionBackground": "#717CB480", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#181A1F", - "hoverBackground": "#1F2233", - "hoverColor": "#1F2233", - "hoverMaskColor": "#1F2233", - "inactiveMaskColor": "#0F111A", - "inactiveColoredFileBackground": "#0F111A", - "inactiveUnderlineColor": "#464B5D", - "selectedForeground": "#8F93A2", - "selectedBackground": "#1A1C25", - "underlineColor": "#84ffff", - "underlinedTabBackground": "#1A1C25", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#0F111A", - "borderColor": "#181A1F", - "hoverBackground": "#1F2233", - "hoverColor": "#1F2233", - "inactiveUnderlineColor": "#84ffff", - "underlineColor": "#84ffff", - "underlinedTabBackground": "#1A1C25", - "underlinedTabForeground": "#8F93A2" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#292D3E", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#0F111A", + "Focus.color": "border", "FormattedTextField": { - "background": "#090B10", - "caretForeground": "#84ffff", - "foreground": "#8F93A2", - "inactiveBackground": "#191A21", - "inactiveForeground": "#464B5D", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#1A1C25" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#090B10", "Group": { - "disabledSeparatorColor": "#0F111A", - "separatorColor": "#0F111A" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#4B526D", - "lineSeparatorColor": "#0F111A" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#0F111A", - "inactive": "#090B10" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#0F111A", - "borderColor": "#0F111A", - "foreground": "#8F93A2", - "infoForeground": "#4B526D", - "shortcutForeground": "#4B526D" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#84ffff", - "inactiveCaption": "#181A1F", - "inactiveCaptionBorder": "#0F111A", - "inactiveCaptionText": "#4B526D", - "info": "#4B526D", - "infoText": "#4B526D", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#0F111A", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#0F111A" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#8F93A2", - "background": "#0F111A", - "inactiveTitleForeground": "#4B526D" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#0F111A", - "disabledForeground": "#464B5D", - "disabledShadow": "#0F111A", - "disabledText": "#464B5D", - "foreground": "#8F93A2", - "infoForeground": "#4B526D", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#8F93A2" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#84ffff", - "hoverForeground": "#84ffff", - "pressedForeground": "#84ffff", - "secondaryForeground": "#4B526D", - "visitedForeground": "#84ffff" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#84ffff", + "link.foreground": "accent", "List": { - "background": "#181A1F", - "foreground": "#8F93A2", - "hoverBackground": "#717CB430", - "hoverInactiveBackground": "#1A1C25", - "selectionBackground": "#717CB480", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#717CB430" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#0F111A", - "branchColor": "#8F93A2", - "contrast": "#090B10", - "foreground": "#8F93A2", - "mergeCommits": "#191A21", - "primaryColor": "#4B526D", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#0F111A", - "tab.borderColor": "#84ffff", - "tagColor": "#4B526D" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#181A1F", - "usedColor": "#1F2233", - "usedBackground": "#1F2233" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#4B526D", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#0F111A", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#181A1F", - "disabledBackground": "#181A1F", - "disabledForeground": "#464B5D", - "foreground": "#8F93A2", - "selectionBackground": "#717CB480", - "selectionForeground": "#FFFFFF", - "separatorColor": "#0F111A" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#090B10", - "borderColor": "#0F111A", - "disabledBackground": "#0F111A", - "disabledForeground": "#464B5D", - "foreground": "#8F93A2", - "highlight": "#0F111A", - "selectionBackground": "#717CB480", - "selectionForeground": "#FFFFFF", - "shadow": "#090B10" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#4B526D", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#0F111A", - "disabledBackground": "#0F111A", - "disabledForeground": "#464B5D", - "foreground": "#8F93A2", - "selectionBackground": "#717CB480", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#8F93A2", - "borderColor": "#0F111A" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#0F111A" + "background": "bg" }, "SearchField": { - "background": "#090B10" + "background": "hc" } }, - "NewPSD.warning": "#84ffff", + "NewPSD.warning": "accent", "Notification": { - "background": "#090B10", - "borderColor": "#090B10", - "errorBackground": "#090B10", - "errorBorderColor": "#090B10", - "foreground": "#8F93A2", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#191A21", - "foreground": "#8F93A2", - "innerBorderColor": "#191A21" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#090B10", - "errorBorderColor": "#090B10", - "informativeBackground": "#090B10", - "informativeBorderColor": "#090B10", - "warningBackground": "#090B10", - "warningBorderColor": "#090B10" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#0F111A", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#0F111A", - "foreground": "#8F93A2", - "messageForeground": "#8F93A2" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#191A21", - "focusedColor": "#84ffff", - "disabledColor": "#464B5D" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#0F111A", - "foreground": "#8F93A2" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#181A1F", - "borderColor": "#1A1C25", - "currentOverloadBackground": "#1F2233", - "currentParameterForeground": "#84ffff", - "disabledForeground": "#464B5D", - "foreground": "#8F93A2", - "infoForeground": "#4B526D", - "lineSeparatorColor": "#1A1C25" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#090B10", - "capsLockIconColor": "#84ffff", - "caretForeground": "#84ffff", - "foreground": "#8F93A2", - "inactiveForeground": "#464B5D", - "selectionBackground": "#1A1C25", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#0F111A", - "disabledForeground": "#464B5D", - "eapTagBackground": "#1F2233", - "hoverBackground": "#717CB430", - "lightSelectionBackground": "#1A1C25", - "paidTagBackground": "#1F2233", - "selectionBackground": "#717CB480", - "tagForeground": "#84ffff", - "tagBackground": "#1F2233", - "trialTagBackground": "#1F2233", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#191A21", - "installBorderColor": "#191A21", - "installForeground": "#8F93A2", - "installFocusedBackground": "#1F2233", - "installFillForeground": "#464B5D", - "installFillBackground": "#191A21", - "updateBackground": "#84ffff", - "updateBorderColor": "#191A21", - "updateForeground": "#8F93A2" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#090B10", - "borderColor": "#0F111A" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#181A1F", - "foreground": "#8F93A2" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#1A1C25", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#1A1C25" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#0F111A", - "borderColor": "#0F111A", - "foreground": "#84ffff" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#090B10", - "inactiveBorderColor": "#0F111A", - "innerBorderColor": "#181A1F", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#0F111A", - "inactiveBackground": "#090B10" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#8F93A2", - "separatorColor": "#181A1F", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#090B10", - "background": "#090B10", - "borderColor": "#090B10" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#0F111A", + "background": "bg", "border": "2,0,2,0", - "foreground": "#8F93A2", - "translucentBackground": "#0F111A" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#0F111A", - "foreground": "#84ffff", - "indeterminateEndColor": "#84ffff", - "indeterminateStartColor": "#84ffff", - "progressColor": "#84ffff", - "selectionBackground": "#1F2233", - "trackColor": "#1F2233" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#84ffff" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#0F111A", - "disabledText": "#464B5D", - "foreground": "#8F93A2" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#4B526D", - "acceleratorSelectionForeground": "#4B526D", - "background": "#0F111A", - "disabledBackground": "#0F111A", - "disabledForeground": "#464B5D", - "foreground": "#8F93A2", - "selectionBackground": "#717CB480", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#0F111A", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#0F111A", - "hoverThumbBorderColor": "#84ffff", - "hoverThumbColor": "#84ffff", - "hoverTrackColor": "#0F111A30", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#84ffff", - "hoverThumbColor": "#84ffff", - "hoverTrackColor": "#0F111A30", - "thumbBorderColor": "#84ffff70", - "thumbColor": "#84ffff70", - "trackColor": "#0F111A30", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#84ffff", - "hoverThumbColor": "#84ffff", - "hoverTrackColor": "#0F111A30", - "thumbBorderColor": "#84ffff70", - "thumbColor": "#84ffff70", - "trackColor": "#0F111A30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#1F2233", - "thumbBorderColor": "#84ffff70", - "thumbColor": "#84ffff70", - "trackColor": "#0F111A30", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#84ffff", - "hoverThumbColor": "#84ffff", - "hoverTrackColor": "#0F111A30", - "thumbBorderColor": "#84ffff70", - "thumbColor": "#84ffff70", - "trackColor": "#0F111A30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#090B10", - "foreground": "#4B526D" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#0F111A" + "background": "bg" }, "List": { - "separatorForeground": "#4B526D", - "separatorColor": "#0F111A" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#0F111A", - "borderColor": "#090B10", - "infoForeground": "#4B526D" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#1F2233" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#84ffff", - "startBackground": "#84ffff", - "endColor": "#84ffff", - "startColor": "#84ffff" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#090B10", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#1A1C25" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#4B526D", - "Repeated.File.Foreground": "#8F93A2" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#181A1F", - "foreground": "#181A1F", - "separatorColor": "#181A1F" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#090B10" + "background": "hc" }, "Slider": { - "background": "#0F111A", - "buttonBorderColor": "#84ffff", - "buttonColor": "#84ffff", - "foreground": "#8F93A2", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#181A1F", - "trackColor": "#1A1C25", - "trackWidth": 7, - "thumb": "#84ffff" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#1F2233", - "borderColor": "#0F111A", - "foreground": "#8F93A2", - "errorForeground": "#8F93A2" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#0F111A", + "background": "bg", "border": "3,3,3,3", - "foreground": "#8F93A2", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#0F111A", - "highlight": "#090B10" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#181A1F", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#0F111A", - "hoverBackground": "#1F2233", - "LightEditBackground": "#1A1C25" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#0F111A", - "contentAreaColor": "#1F2233", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#0F111A", - "disabledForeground": "#464B5D", - "disabledUnderlineColor": "#464B5D", - "focus": "#1A1C25", - "focusColor": "#1A1C25", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#8F93A2", - "highlight": "#0F111A", - "hoverColor": "#1F2233", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#84ffff" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#090B10", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#090B10", - "background": "#0F111A", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#464B5D", - "dropLineColor": "#84ffff", - "dropLineShortColor": "#84ffff", - "focusCellBackground": "#1A1C25", - "focusCellForeground": "#FFFFFF", - "foreground": "#8F93A2", - "gridColor": "#0F111A", - "highlightOuter": "#1A1C25", - "hoverBackground": "#717CB430", - "hoverInactiveBackground": "#1A1C25", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#4B526D", - "lightSelectionInactiveBackground": "#181A1F", - "selectionBackground": "#1A1C25", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#1A1C25", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#8F93A2", - "stripeColor": "#090B10" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#0F111A", - "borderColor": "#0F111A", - "bottomSeparatorColor": "#181A1F", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#464B5D", - "foreground": "#8F93A2", - "focusCellBackground": "#1A1C25", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#181A1F" + "separatorColor": "second" }, - "text": "#4B526D", - "textInactiveText": "#4B526D", - "textText": "#4B526D", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#090B10", - "caretForeground": "#84ffff", - "foreground": "#8F93A2", - "inactiveForeground": "#464B5D", - "selectionBackground": "#1A1C25", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#090B10", - "caretForeground": "#84ffff", - "foreground": "#8F93A2", - "inactiveForeground": "#464B5D", - "selectionBackground": "#1A1C25", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#090B10", - "caretForeground": "#84ffff", - "foreground": "#8F93A2", - "inactiveForeground": "#464B5D", - "selectionBackground": "#1A1C25", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#090B10", - "Button.hoverBackground": "#1F2233", - "inactiveBackground": "#0F111A", - "infoForeground": "#4B526D", - "inactiveInfoForeground": "#4B526D" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#8F93A2", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#191A21", - "buttonColor": "#8F93A2", - "disabledText": "#464B5D", - "foreground": "#8F93A2", - "offForeground": "#0F111A", - "offBackground": "#0F111A", - "onBackground": "#84ffff", - "onForeground": "#84ffff" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#090B10", - "borderHandleColor": "#4B526D", - "floatingForeground": "#4B526D", - "foreground": "#8F93A2" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#0F111A", - "Actions.infoForeground": "#4B526D", - "background": "#090B10", - "borderColor": "#0F111A", - "foreground": "#8F93A2", - "infoForeground": "#4B526D", - "separatorColor": "#0F111A", - "shortcutForeground": "#4B526D" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#1A1C25", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#090B10" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#0F111A", - "borderColor": "#181A1F", - "inactiveBackground": "#0F111A" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#0F111A" + "background": "bg" }, "HeaderTab": { - "borderColor": "#1F2233", - "hoverBackground": "#1F2233", - "hoverInactiveBackground": "#1F2233", - "inactiveUnderlineColor": "#84ffff", - "selectedBackground": "#090B10", - "selectedInactiveBackground": "#090B10", - "underlineColor": "#84ffff", - "underlinedTabBackground": "#1A1C25", - "underlinedTabInactiveBackground": "#181A1F", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#8F93A2" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#090B10", - "foreground": "#4B526D", - "hash": "#0F111A", - "hoverBackground": "#717CB430", - "hoverInactiveBackground": "#1A1C25", - "modifiedItemForeground": "#84ffff", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#717CB430", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#717CB430", - "textBackground": "#090B10" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#0F111A", - "Canvas.background": "#090B10", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#0F111A", - "foreground": "#8F93A2" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#0F111A", - "background": "#0F111A", - "foreground": "#8F93A2", - "hoverBorderColor": "#1F2233" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#0F111A", - "hoverBorderColor": "#1F2233" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#090B10", - "highStroke.foreground": "#8F93A2", - "Label.foreground": "#4B526D", - "List.selectionBackground": "#717CB430", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#0F111A", - "Component.foreground": "#8F93A2", - "ConstraintSetText.foreground": "#4B526D", - "ConstraintSet.background": "#181A1F", - "CSPanel.SelectedFocusBackground": "#717CB480", - "CSPanel.SelectedBackground": "#717CB430", - "cs_FocusText.infoForeground": "#4B526D", - "CursorTextColor.foreground": "#8F93A2", - "HoverColor.disabledBackground": "#464B5D", - "motionGraph.background": "#0F111A", - "Notification.background": "#090B10", - "ourAvg.background": "#181A1F", - "ourCS.background": "#181A1F", - "ourCS_Border.borderColor": "#0F111A", - "ourCS_TextColor.foreground": "#4B526D", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#1A1C25", - "ourCS_SelectedBorder.pressedBorderColor": "#1F2233", - "ourML_BarColor.separatorColor": "#0F111A", - "PrimaryPanel.background": "#090B10", - "SecondaryPanel.background": "#0F111A", - "SecondaryPanel.header.foreground": "#4B526D", - "SecondaryPanel.header.background": "#090B10", - "timeLine.disabledBorderColor": "#0F111A" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#0F111A", - "background": "#0F111A" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#8F93A2", + "percent.foreground": "fg", "Placeholder": { - "background": "#0F111A", - "borderColor": "#0F111A", - "foreground": "#8F93A2", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#0F111A", - "stroke.acceleratorForeground": "#4B526D" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#090B10", - "errorBorderColor": "#090B10", - "warningBackground": "#090B10", - "warningBorderColor": "#090B10" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#0F111A" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#1F2233" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#84ffff", - "otherIconColor": "#4B526D", - "remoteBranchIconColor": "#8F93A2", - "tagIconColor": "#4B526D" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#84ffff", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#464B5D", - "localTagIconColor": "#4B526D", - "mqTagIconColor": "#4B526D", - "tagIconColor": "#4B526D", - "tipIconColor": "#4B526D" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#4B526D", - "Commit.currentBranchBackground": "#181A1F", - "Commit.hoveredBackground": "#717CB430" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#1F2233" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#090B10", - "foreground": "#8F93A2" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#0F111A", - "background": "#0F111A", - "borderColor": "#0F111A", - "captionBackground": "#090B10", - "captionForeground": "#8F93A2", - "Details.background": "#0F111A", - "footerBackground": "#090B10", - "footerForeground": "#8F93A2", - "headerBackground": "#0F111A", - "headerForeground": "#8F93A2", - "List.background": "#090B10", - "separatorColor": "#0F111A", - "SidePanel.background": "#181A1F", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#090B10", - "actions.selectionBackground": "#1F2233", - "background": "#181A1F", - "selectionBackground": "#717CB480", - "selectionInactiveBackground": "#181A1F" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#090B10", - "windowBorder": "#0F111A", - "windowText": "#4B526D", - "Window.border": "#0F111A" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#090B10", - "#6B6B6B": "#4B526D", - "#A7A7A7": "#0F111A", - "#3D6185": "#84ffff", - "#466D94": "#84ffff", - "#3C3F41": "#0F111A", - "#545556": "#464B5D", - "#606060": "#464B5D", - "#9AA7B0": "#8F93A2", - "#675133": "#84ffff", - "Actions.Blue": "#82aaff", - "Actions.Green": "#c3e88d", - "Actions.Grey": "#4B526D", - "Actions.GreyInline": "#717CB4", - "Actions.GreyInline.Dark": "#8F93A2", - "Actions.Red": "#f07178", - "Actions.Yellow": "#ffcb6b", - "Checkbox.Background.Default": "#090B10", - "Checkbox.Background.Default.Dark": "#090B10", - "Checkbox.Background.Disabled": "#292D3E", - "Checkbox.Background.Disabled.Dark": "#292D3E", - "Checkbox.Border.Default": "#0F111A", - "Checkbox.Border.Default.Dark": "#0F111A", - "Checkbox.Border.Disabled": "#464B5D", - "Checkbox.Border.Disabled.Dark": "#464B5D", - "Checkbox.Focus.Thin.Default": "#84ffff", - "Checkbox.Focus.Thin.Default.Dark": "#84ffff", - "Checkbox.Focus.Wide": "#84ffff", - "Checkbox.Focus.Wide.Dark": "#84ffff", - "Checkbox.Foreground.Disabled": "#464B5D", - "Checkbox.Foreground.Disabled.Dark": "#464B5D", - "Checkbox.Background.Selected": "#84ffff", - "Checkbox.Background.Selected.Dark": "#0F111A", - "Checkbox.Border.Selected": "#84ffff", - "Checkbox.Border.Selected.Dark": "#84ffff", - "Checkbox.Foreground.Selected": "#84ffff", - "Checkbox.Foreground.Selected.Dark": "#84ffff", - "Checkbox.Focus.Thin.Selected": "#8F93A2", - "Checkbox.Focus.Thin.Selected.Dark": "#8F93A2", - "Objects.Grey": "#717CB4", - "Objects.Blue": "#82aaff", - "Objects.RedStatus": "#f07178", - "Objects.Red": "#f07178", - "Objects.Pink": "#c792ea", - "Objects.Yellow": "#ffcb6b", - "Objects.Green": "#c3e88d", - "Objects.Purple": "#c792ea", - "Objects.BlackText": "#8F93A2", - "Objects.YellowDark": "#f78c6c", - "Objects.GreenAndroid": "#c3e88d" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Deep Ocean.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Deep Ocean.theme.json index 351b2187..2af1ebbf 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Deep Ocean.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Deep Ocean.theme.json @@ -2,1004 +2,1089 @@ "name": "Material Deep Ocean", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#0F111A", + "bg30": "#0F111A30", + "fg": "#8F93A2", + "text": "#4B526D", + "selBg": "#222533", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#0F111A", + "excl": "#292D3E", + "second": "#181A1F", + "dis": "#464B5D", + "accent": "#84ffff", + "accent2": "#84ffff2", + "accent50": "#84ffff50", + "accent70": "#84ffff70", + "cs": "#090B10", + "button": "#191A21", + "table": "#1A1C25", + "tree": "#717CB430", + "hl": "#1F2233", + "notif": "#090B10", + "hc": "#0F111A", + "white": "#eeffff", + "blue": "#82aaff", + "red": "#f07178", + "yellow": "#ffcb6b", + "green": "#c3e88d", + "gray": "#717CB4", + "purple": "#c792ea", + "orange": "#f78c6c" + }, "editorScheme": "colors/Material Deep Ocean.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#4B526D", - "background": "#0F111A", - "borderColor": "#0F111A", - "disabledBackground": "#292D3E", - "disabledForeground": "#464B5D", - "disabledText": "#464B5D", - "focusColor": "#1F2233", - "focusedBorderColor": "#84ffff", - "foreground": "#8F93A2", - "inactiveBackground": "#292D3E", - "inactiveForeground": "#4B526D", - "infoForeground": "#4B526D", - "selectionBackground": "#717CB480", - "selectionBackgroundInactive": "#181A1F", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#181A1F", - "separatorColor": "#0F111A" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#0F111A", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#84ffff50", - "hoverBorderColor": "#84ffff50", - "hoverSeparatorColor": "#191A21", - "focusedBorderColor": "#84ffff50", - "pressedBackground": "#84ffff50", - "pressedBorderColor": "#84ffff50" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#717CB480" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#0F111A", - "Borders.color": "#0F111A", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#0F111A", + "background": "bg", "default": { - "endBackground": "#1A1C25", - "endBorderColor": "#1A1C25", - "foreground": "#FFFFFF", - "focusColor": "#84ffff", - "focusedBorderColor": "#84ffff", - "shadowColor": "#1A1C25", - "startBackground": "#1A1C25", - "startBorderColor": "#1A1C25" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#191A21", - "disabledText": "#464B5D", - "endBackground": "#191A21", - "endBorderColor": "#191A21", - "focus": "#1F2233", - "focusedBorderColor": "#84ffff", - "foreground": "#4B526D", - "highlight": "#FFFFFF", - "mt.background": "#191A21", - "mt.foreground": "#4B526D", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#1A1C25", - "mt.selection.color2": "#1A1C25", - "startBackground": "#191A21", - "startBorderColor": "#191A21", - "shadowColor": "#191A21", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#0F111A", - "Tooltip.background": "#090B10" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#090B10", - "selectionBackground": "#717CB480" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#0F111A", - "disabledText": "#464B5D", - "foreground": "#8F93A2", - "select": "#84ffff" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#4B526D", - "acceleratorSelectionForeground": "#4B526D", - "background": "#0F111A", - "disabledBackground": "#0F111A", - "disabledForeground": "#464B5D", - "foreground": "#8F93A2", - "selectionBackground": "#717CB480", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#8F93A2", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#84ffff", - "dropdownBorder": "#181A1F", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#0F111A", - "foreground": "#8F93A2", - "swatchesDefaultRecentColor": "#8F93A2" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#191A21", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#191A21", - "disabledIconColor": "#464B5D", - "iconColor": "#8F93A2", - "nonEditableBackground": "#0F111A" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#0F111A", - "buttonBackground": "#191A21", - "darcula.hoveredArrowButtonForeground": "#84ffff", - "disabledForeground": "#464B5D", - "foreground": "#8F93A2", - "modifiedItemForeground": "#84ffff", - "nonEditableBackground": "#181A1F", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#1A1C25", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#0F111A", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#181A1F", - "foreground": "#8F93A2", - "infoForeground": "#4B526D", - "matchForeground": "#84ffff", - "matchSelectionForeground": "#84ffff", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#4B526D", - "selectionInactiveBackground": "#1F2233", - "selectionBackground": "#717CB480", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#1F2233", - "disabledBorderColor": "#191A21", - "focusColor": "#84ffff", - "focusedBorderColor": "#84ffff", - "hoverIconColor": "#84ffff", - "infoForeground": "#4B526D", - "iconColor": "#8F93A2" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#0F111A", - "controlText": "#4B526D", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#84ffff", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#4B526D", - "changedValueForeground": "#84ffff", - "errorMessageForeground": "#f07178", - "evaluatingExpressionForeground": "#4B526D", - "exceptionForeground": "#ffcb6b", - "modifyingValueForeground": "#84ffff", - "valueForeground": "#84ffff" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#1F2233", - "underlinedTabBackground": "#1F2233" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#1F2233" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#0F111A", - "borderColor": "#0F111A", - "hoverBackground": "#1A1C25", - "hoverColor": "#0F111A", - "hoverMaskColor": "#1F2233", - "inactiveColoredTabBackground": "#0F111A", - "inactiveColoredFileBackground": "#191A21", - "inactiveUnderlineColor": "#84ffff", - "inactiveMaskColor": "#0F111A", - "underlineColor": "#84ffff", - "underlinedTabBackground": "#1A1C25", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#0F111A", - "DialogWrapper.southPanelBackground": "#0F111A", - "DialogWrapper.southPanelDivider": "#0F111A", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#0F111A", - "areaBorderColor": "#0F111A", - "areaForeground": "#8F93A2" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#0F111A", - "foreground": "#8F93A2", - "shortcutForeground": "#4B526D" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#0F111A", - "caretForeground": "#84ffff", - "foreground": "#8F93A2", - "inactiveBackground": "#0F111A", - "inactiveForeground": "#464B5D", - "selectionBackground": "#717CB480", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#181A1F", - "hoverBackground": "#1F2233", - "hoverColor": "#1F2233", - "hoverMaskColor": "#1F2233", - "inactiveMaskColor": "#0F111A", - "inactiveColoredFileBackground": "#0F111A", - "inactiveUnderlineColor": "#464B5D", - "selectedForeground": "#8F93A2", - "selectedBackground": "#1A1C25", - "underlineColor": "#84ffff", - "underlinedTabBackground": "#1A1C25", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#0F111A", - "borderColor": "#181A1F", - "hoverBackground": "#1F2233", - "hoverColor": "#1F2233", - "inactiveUnderlineColor": "#84ffff", - "underlineColor": "#84ffff", - "underlinedTabBackground": "#1A1C25", - "underlinedTabForeground": "#8F93A2" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#292D3E", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#0F111A", + "Focus.color": "border", "FormattedTextField": { - "background": "#0F111A", - "caretForeground": "#84ffff", - "foreground": "#8F93A2", - "inactiveBackground": "#191A21", - "inactiveForeground": "#464B5D", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#1A1C25" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#090B10", "Group": { - "disabledSeparatorColor": "#0F111A", - "separatorColor": "#0F111A" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#4B526D", - "lineSeparatorColor": "#0F111A" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#0F111A", - "inactive": "#090B10" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#0F111A", - "borderColor": "#0F111A", - "foreground": "#8F93A2", - "infoForeground": "#4B526D", - "shortcutForeground": "#4B526D" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#84ffff", - "inactiveCaption": "#181A1F", - "inactiveCaptionBorder": "#0F111A", - "inactiveCaptionText": "#4B526D", - "info": "#4B526D", - "infoText": "#4B526D", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#0F111A", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#0F111A" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#8F93A2", - "background": "#0F111A", - "inactiveTitleForeground": "#4B526D" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#0F111A", - "disabledForeground": "#464B5D", - "disabledShadow": "#0F111A", - "disabledText": "#464B5D", - "foreground": "#8F93A2", - "infoForeground": "#4B526D", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#8F93A2" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#84ffff", - "hoverForeground": "#84ffff", - "pressedForeground": "#84ffff", - "secondaryForeground": "#4B526D", - "visitedForeground": "#84ffff" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#84ffff", + "link.foreground": "accent", "List": { - "background": "#181A1F", - "foreground": "#8F93A2", - "hoverBackground": "#717CB430", - "hoverInactiveBackground": "#1A1C25", - "selectionBackground": "#717CB480", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#717CB430" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#0F111A", - "branchColor": "#8F93A2", - "contrast": "#090B10", - "foreground": "#8F93A2", - "mergeCommits": "#191A21", - "primaryColor": "#4B526D", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#0F111A", - "tab.borderColor": "#84ffff", - "tagColor": "#4B526D" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#181A1F", - "usedColor": "#1F2233", - "usedBackground": "#1F2233" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#4B526D", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#0F111A", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#181A1F", - "disabledBackground": "#181A1F", - "disabledForeground": "#464B5D", - "foreground": "#8F93A2", - "selectionBackground": "#717CB480", - "selectionForeground": "#FFFFFF", - "separatorColor": "#0F111A" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#0F111A", - "borderColor": "#0F111A", - "disabledBackground": "#0F111A", - "disabledForeground": "#464B5D", - "foreground": "#8F93A2", - "highlight": "#0F111A", - "selectionBackground": "#717CB480", - "selectionForeground": "#FFFFFF", - "shadow": "#0F111A" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#4B526D", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#0F111A", - "disabledBackground": "#0F111A", - "disabledForeground": "#464B5D", - "foreground": "#8F93A2", - "selectionBackground": "#717CB480", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#8F93A2", - "borderColor": "#0F111A" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#0F111A" + "background": "bg" }, "SearchField": { - "background": "#0F111A" + "background": "hc" } }, - "NewPSD.warning": "#84ffff", + "NewPSD.warning": "accent", "Notification": { - "background": "#090B10", - "borderColor": "#090B10", - "errorBackground": "#090B10", - "errorBorderColor": "#090B10", - "foreground": "#8F93A2", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#191A21", - "foreground": "#8F93A2", - "innerBorderColor": "#191A21" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#090B10", - "errorBorderColor": "#090B10", - "informativeBackground": "#090B10", - "informativeBorderColor": "#090B10", - "warningBackground": "#090B10", - "warningBorderColor": "#090B10" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#0F111A", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#0F111A", - "foreground": "#8F93A2", - "messageForeground": "#8F93A2" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#191A21", - "focusedColor": "#84ffff", - "disabledColor": "#464B5D" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#0F111A", - "foreground": "#8F93A2" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#181A1F", - "borderColor": "#1A1C25", - "currentOverloadBackground": "#1F2233", - "currentParameterForeground": "#84ffff", - "disabledForeground": "#464B5D", - "foreground": "#8F93A2", - "infoForeground": "#4B526D", - "lineSeparatorColor": "#1A1C25" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#0F111A", - "capsLockIconColor": "#84ffff", - "caretForeground": "#84ffff", - "foreground": "#8F93A2", - "inactiveForeground": "#464B5D", - "selectionBackground": "#1A1C25", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#0F111A", - "disabledForeground": "#464B5D", - "eapTagBackground": "#1F2233", - "hoverBackground": "#717CB430", - "lightSelectionBackground": "#1A1C25", - "paidTagBackground": "#1F2233", - "selectionBackground": "#717CB480", - "tagForeground": "#84ffff", - "tagBackground": "#1F2233", - "trialTagBackground": "#1F2233", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#191A21", - "installBorderColor": "#191A21", - "installForeground": "#8F93A2", - "installFocusedBackground": "#1F2233", - "installFillForeground": "#464B5D", - "installFillBackground": "#191A21", - "updateBackground": "#84ffff", - "updateBorderColor": "#191A21", - "updateForeground": "#8F93A2" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#0F111A", - "borderColor": "#0F111A" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#181A1F", - "foreground": "#8F93A2" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#1A1C25", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#1A1C25" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#0F111A", - "borderColor": "#0F111A", - "foreground": "#84ffff" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#090B10", - "inactiveBorderColor": "#0F111A", - "innerBorderColor": "#181A1F", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#0F111A", - "inactiveBackground": "#090B10" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#8F93A2", - "separatorColor": "#181A1F", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#090B10", - "background": "#090B10", - "borderColor": "#090B10" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#0F111A", + "background": "bg", "border": "2,0,2,0", - "foreground": "#8F93A2", - "translucentBackground": "#0F111A" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#0F111A", - "foreground": "#84ffff", - "indeterminateEndColor": "#84ffff", - "indeterminateStartColor": "#84ffff", - "progressColor": "#84ffff", - "selectionBackground": "#1F2233", - "trackColor": "#1F2233" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#84ffff" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#0F111A", - "disabledText": "#464B5D", - "foreground": "#8F93A2" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#4B526D", - "acceleratorSelectionForeground": "#4B526D", - "background": "#0F111A", - "disabledBackground": "#0F111A", - "disabledForeground": "#464B5D", - "foreground": "#8F93A2", - "selectionBackground": "#717CB480", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#0F111A", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#0F111A", - "hoverThumbBorderColor": "#84ffff", - "hoverThumbColor": "#84ffff", - "hoverTrackColor": "#0F111A30", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#84ffff", - "hoverThumbColor": "#84ffff", - "hoverTrackColor": "#0F111A30", - "thumbBorderColor": "#84ffff70", - "thumbColor": "#84ffff70", - "trackColor": "#0F111A30", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#84ffff", - "hoverThumbColor": "#84ffff", - "hoverTrackColor": "#0F111A30", - "thumbBorderColor": "#84ffff70", - "thumbColor": "#84ffff70", - "trackColor": "#0F111A30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#1F2233", - "thumbBorderColor": "#84ffff70", - "thumbColor": "#84ffff70", - "trackColor": "#0F111A30", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#84ffff", - "hoverThumbColor": "#84ffff", - "hoverTrackColor": "#0F111A30", - "thumbBorderColor": "#84ffff70", - "thumbColor": "#84ffff70", - "trackColor": "#0F111A30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#090B10", - "foreground": "#4B526D" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#0F111A" + "background": "bg" }, "List": { - "separatorForeground": "#4B526D", - "separatorColor": "#0F111A" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#0F111A", - "borderColor": "#090B10", - "infoForeground": "#4B526D" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#1F2233" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#84ffff", - "startBackground": "#84ffff", - "endColor": "#84ffff", - "startColor": "#84ffff" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#090B10", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#1A1C25" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#4B526D", - "Repeated.File.Foreground": "#8F93A2" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#181A1F", - "foreground": "#181A1F", - "separatorColor": "#181A1F" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#0F111A" + "background": "hc" }, "Slider": { - "background": "#0F111A", - "buttonBorderColor": "#84ffff", - "buttonColor": "#84ffff", - "foreground": "#8F93A2", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#181A1F", - "trackColor": "#1A1C25", - "trackWidth": 7, - "thumb": "#84ffff" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#1F2233", - "borderColor": "#0F111A", - "foreground": "#8F93A2", - "errorForeground": "#8F93A2" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#0F111A", + "background": "bg", "border": "3,3,3,3", - "foreground": "#8F93A2", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#0F111A", - "highlight": "#0F111A" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#181A1F", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#0F111A", - "hoverBackground": "#1F2233", - "LightEditBackground": "#1A1C25" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#0F111A", - "contentAreaColor": "#1F2233", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#0F111A", - "disabledForeground": "#464B5D", - "disabledUnderlineColor": "#464B5D", - "focus": "#1A1C25", - "focusColor": "#1A1C25", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#8F93A2", - "highlight": "#0F111A", - "hoverColor": "#1F2233", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#84ffff" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#0F111A", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#090B10", - "background": "#0F111A", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#464B5D", - "dropLineColor": "#84ffff", - "dropLineShortColor": "#84ffff", - "focusCellBackground": "#1A1C25", - "focusCellForeground": "#FFFFFF", - "foreground": "#8F93A2", - "gridColor": "#0F111A", - "highlightOuter": "#1A1C25", - "hoverBackground": "#717CB430", - "hoverInactiveBackground": "#1A1C25", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#4B526D", - "lightSelectionInactiveBackground": "#181A1F", - "selectionBackground": "#1A1C25", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#1A1C25", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#8F93A2", - "stripeColor": "#090B10" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#0F111A", - "borderColor": "#0F111A", - "bottomSeparatorColor": "#181A1F", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#464B5D", - "foreground": "#8F93A2", - "focusCellBackground": "#1A1C25", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#181A1F" + "separatorColor": "second" }, - "text": "#4B526D", - "textInactiveText": "#4B526D", - "textText": "#4B526D", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#0F111A", - "caretForeground": "#84ffff", - "foreground": "#8F93A2", - "inactiveForeground": "#464B5D", - "selectionBackground": "#1A1C25", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#0F111A", - "caretForeground": "#84ffff", - "foreground": "#8F93A2", - "inactiveForeground": "#464B5D", - "selectionBackground": "#1A1C25", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#0F111A", - "caretForeground": "#84ffff", - "foreground": "#8F93A2", - "inactiveForeground": "#464B5D", - "selectionBackground": "#1A1C25", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#090B10", - "Button.hoverBackground": "#1F2233", - "inactiveBackground": "#0F111A", - "infoForeground": "#4B526D", - "inactiveInfoForeground": "#4B526D" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#8F93A2", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#191A21", - "buttonColor": "#8F93A2", - "disabledText": "#464B5D", - "foreground": "#8F93A2", - "offForeground": "#0F111A", - "offBackground": "#0F111A", - "onBackground": "#84ffff", - "onForeground": "#84ffff" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#0F111A", - "borderHandleColor": "#4B526D", - "floatingForeground": "#4B526D", - "foreground": "#8F93A2" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#0F111A", - "Actions.infoForeground": "#4B526D", - "background": "#090B10", - "borderColor": "#0F111A", - "foreground": "#8F93A2", - "infoForeground": "#4B526D", - "separatorColor": "#0F111A", - "shortcutForeground": "#4B526D" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#1A1C25", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#090B10" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#0F111A", - "borderColor": "#181A1F", - "inactiveBackground": "#0F111A" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#0F111A" + "background": "bg" }, "HeaderTab": { - "borderColor": "#1F2233", - "hoverBackground": "#1F2233", - "hoverInactiveBackground": "#1F2233", - "inactiveUnderlineColor": "#84ffff", - "selectedBackground": "#090B10", - "selectedInactiveBackground": "#090B10", - "underlineColor": "#84ffff", - "underlinedTabBackground": "#1A1C25", - "underlinedTabInactiveBackground": "#181A1F", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#8F93A2" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#0F111A", - "foreground": "#4B526D", - "hash": "#0F111A", - "hoverBackground": "#717CB430", - "hoverInactiveBackground": "#1A1C25", - "modifiedItemForeground": "#84ffff", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#717CB430", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#717CB430", - "textBackground": "#0F111A" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#0F111A", - "Canvas.background": "#090B10", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#0F111A", - "foreground": "#8F93A2" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#0F111A", - "background": "#0F111A", - "foreground": "#8F93A2", - "hoverBorderColor": "#1F2233" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#0F111A", - "hoverBorderColor": "#1F2233" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#090B10", - "highStroke.foreground": "#8F93A2", - "Label.foreground": "#4B526D", - "List.selectionBackground": "#717CB430", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#0F111A", - "Component.foreground": "#8F93A2", - "ConstraintSetText.foreground": "#4B526D", - "ConstraintSet.background": "#181A1F", - "CSPanel.SelectedFocusBackground": "#717CB480", - "CSPanel.SelectedBackground": "#717CB430", - "cs_FocusText.infoForeground": "#4B526D", - "CursorTextColor.foreground": "#8F93A2", - "HoverColor.disabledBackground": "#464B5D", - "motionGraph.background": "#0F111A", - "Notification.background": "#090B10", - "ourAvg.background": "#181A1F", - "ourCS.background": "#181A1F", - "ourCS_Border.borderColor": "#0F111A", - "ourCS_TextColor.foreground": "#4B526D", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#1A1C25", - "ourCS_SelectedBorder.pressedBorderColor": "#1F2233", - "ourML_BarColor.separatorColor": "#0F111A", - "PrimaryPanel.background": "#090B10", - "SecondaryPanel.background": "#0F111A", - "SecondaryPanel.header.foreground": "#4B526D", - "SecondaryPanel.header.background": "#090B10", - "timeLine.disabledBorderColor": "#0F111A" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#0F111A", - "background": "#0F111A" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#8F93A2", + "percent.foreground": "fg", "Placeholder": { - "background": "#0F111A", - "borderColor": "#0F111A", - "foreground": "#8F93A2", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#0F111A", - "stroke.acceleratorForeground": "#4B526D" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#090B10", - "errorBorderColor": "#090B10", - "warningBackground": "#090B10", - "warningBorderColor": "#090B10" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#0F111A" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#1F2233" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#84ffff", - "otherIconColor": "#4B526D", - "remoteBranchIconColor": "#8F93A2", - "tagIconColor": "#4B526D" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#84ffff", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#464B5D", - "localTagIconColor": "#4B526D", - "mqTagIconColor": "#4B526D", - "tagIconColor": "#4B526D", - "tipIconColor": "#4B526D" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#4B526D", - "Commit.currentBranchBackground": "#181A1F", - "Commit.hoveredBackground": "#717CB430" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#1F2233" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#0F111A", - "foreground": "#8F93A2" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#0F111A", - "background": "#0F111A", - "borderColor": "#0F111A", - "captionBackground": "#090B10", - "captionForeground": "#8F93A2", - "Details.background": "#0F111A", - "footerBackground": "#090B10", - "footerForeground": "#8F93A2", - "headerBackground": "#0F111A", - "headerForeground": "#8F93A2", - "List.background": "#090B10", - "separatorColor": "#0F111A", - "SidePanel.background": "#181A1F", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#090B10", - "actions.selectionBackground": "#1F2233", - "background": "#181A1F", - "selectionBackground": "#717CB480", - "selectionInactiveBackground": "#181A1F" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#0F111A", - "windowBorder": "#0F111A", - "windowText": "#4B526D", - "Window.border": "#0F111A" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#090B10", - "#6B6B6B": "#4B526D", - "#A7A7A7": "#0F111A", - "#3D6185": "#84ffff", - "#466D94": "#84ffff", - "#3C3F41": "#0F111A", - "#545556": "#464B5D", - "#606060": "#464B5D", - "#9AA7B0": "#8F93A2", - "#675133": "#84ffff", - "Actions.Blue": "#82aaff", - "Actions.Green": "#c3e88d", - "Actions.Grey": "#4B526D", - "Actions.GreyInline": "#717CB4", - "Actions.GreyInline.Dark": "#8F93A2", - "Actions.Red": "#f07178", - "Actions.Yellow": "#ffcb6b", - "Checkbox.Background.Default": "#090B10", - "Checkbox.Background.Default.Dark": "#090B10", - "Checkbox.Background.Disabled": "#292D3E", - "Checkbox.Background.Disabled.Dark": "#292D3E", - "Checkbox.Border.Default": "#0F111A", - "Checkbox.Border.Default.Dark": "#0F111A", - "Checkbox.Border.Disabled": "#464B5D", - "Checkbox.Border.Disabled.Dark": "#464B5D", - "Checkbox.Focus.Thin.Default": "#84ffff", - "Checkbox.Focus.Thin.Default.Dark": "#84ffff", - "Checkbox.Focus.Wide": "#84ffff", - "Checkbox.Focus.Wide.Dark": "#84ffff", - "Checkbox.Foreground.Disabled": "#464B5D", - "Checkbox.Foreground.Disabled.Dark": "#464B5D", - "Checkbox.Background.Selected": "#84ffff", - "Checkbox.Background.Selected.Dark": "#0F111A", - "Checkbox.Border.Selected": "#84ffff", - "Checkbox.Border.Selected.Dark": "#84ffff", - "Checkbox.Foreground.Selected": "#84ffff", - "Checkbox.Foreground.Selected.Dark": "#84ffff", - "Checkbox.Focus.Thin.Selected": "#8F93A2", - "Checkbox.Focus.Thin.Selected.Dark": "#8F93A2", - "Objects.Grey": "#717CB4", - "Objects.Blue": "#82aaff", - "Objects.RedStatus": "#f07178", - "Objects.Red": "#f07178", - "Objects.Pink": "#c792ea", - "Objects.Yellow": "#ffcb6b", - "Objects.Green": "#c3e88d", - "Objects.Purple": "#c792ea", - "Objects.BlackText": "#8F93A2", - "Objects.YellowDark": "#f78c6c", - "Objects.GreenAndroid": "#c3e88d" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Lighter Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Lighter Contrast.theme.json index 0c72af92..e7889117 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Lighter Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Lighter Contrast.theme.json @@ -2,1004 +2,1089 @@ "name": "Material Lighter Contrast", "dark": false, "author": "Mallowigi", + "colors": { + "bg": "#FAFAFA", + "bg30": "#FAFAFA30", + "fg": "#546E7A", + "text": "#94A7B0", + "selBg": "#CCD7DA", + "selFg": "#546e7a", + "activeFg": "#272727", + "border": "#d3e1e8", + "excl": "#d3e1e8", + "second": "#FFFFFF", + "dis": "#D2D4D5", + "accent": "#00BCD4", + "accent2": "#00BCD42", + "accent50": "#00BCD450", + "accent70": "#00BCD470", + "cs": "#EEEEEE", + "button": "#F3F4F5", + "table": "#E7E7E8", + "tree": "#80CBC440", + "hl": "#E7E7E8", + "notif": "#eae8e8", + "hc": "#EEEEEE", + "white": "#272727", + "blue": "#6182B8", + "red": "#E53935", + "yellow": "#F6A434", + "green": "#91B859", + "gray": "#AABFC9", + "purple": "#7C4DFF", + "orange": "#F76D47" + }, "editorScheme": "colors/Material Lighter.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#94A7B0", - "background": "#FAFAFA", - "borderColor": "#d3e1e8", - "disabledBackground": "#CCD7DA50", - "disabledForeground": "#D2D4D5", - "disabledText": "#D2D4D5", - "focusColor": "#E7E7E8", - "focusedBorderColor": "#00BCD4", - "foreground": "#546E7A", - "inactiveBackground": "#CCD7DA50", - "inactiveForeground": "#94A7B0", - "infoForeground": "#94A7B0", - "selectionBackground": "#80CBC440", - "selectionBackgroundInactive": "#FFFFFF", - "selectionForeground": "#546e7a", - "selectionInactiveBackground": "#FFFFFF", - "separatorColor": "#d3e1e8" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#FAFAFA", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#00BCD450", - "hoverBorderColor": "#00BCD450", - "hoverSeparatorColor": "#F3F4F5", - "focusedBorderColor": "#00BCD450", - "pressedBackground": "#00BCD450", - "pressedBorderColor": "#00BCD450" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#80CBC440" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#FAFAFA", - "Borders.color": "#d3e1e8", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#FAFAFA", + "background": "bg", "default": { - "endBackground": "#E7E7E8", - "endBorderColor": "#E7E7E8", - "foreground": "#272727", - "focusColor": "#00BCD4", - "focusedBorderColor": "#00BCD4", - "shadowColor": "#E7E7E8", - "startBackground": "#E7E7E8", - "startBorderColor": "#E7E7E8" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#F3F4F5", - "disabledText": "#D2D4D5", - "endBackground": "#F3F4F5", - "endBorderColor": "#F3F4F5", - "focus": "#E7E7E8", - "focusedBorderColor": "#00BCD4", - "foreground": "#94A7B0", - "highlight": "#546e7a", - "mt.background": "#F3F4F5", - "mt.foreground": "#94A7B0", - "mt.selectedForeground": "#546e7a", - "mt.selection.color1": "#E7E7E8", - "mt.selection.color2": "#E7E7E8", - "startBackground": "#F3F4F5", - "startBorderColor": "#F3F4F5", - "shadowColor": "#F3F4F5", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#d3e1e8", - "Tooltip.background": "#eae8e8" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#EEEEEE", - "selectionBackground": "#80CBC440" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#FAFAFA", - "disabledText": "#D2D4D5", - "foreground": "#546E7A", - "select": "#00BCD4" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#94A7B0", - "acceleratorSelectionForeground": "#94A7B0", - "background": "#FAFAFA", - "disabledBackground": "#FAFAFA", - "disabledForeground": "#D2D4D5", - "foreground": "#546E7A", - "selectionBackground": "#80CBC440", - "selectionForeground": "#272727" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#546E7A", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#00BCD4", - "dropdownBorder": "#FFFFFF", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#FAFAFA", - "foreground": "#546E7A", - "swatchesDefaultRecentColor": "#546E7A" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#F3F4F5", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#F3F4F5", - "disabledIconColor": "#D2D4D5", - "iconColor": "#546E7A", - "nonEditableBackground": "#FAFAFA" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#EEEEEE", - "buttonBackground": "#F3F4F5", - "darcula.hoveredArrowButtonForeground": "#00BCD4", - "disabledForeground": "#D2D4D5", - "foreground": "#546E7A", - "modifiedItemForeground": "#00BCD4", - "nonEditableBackground": "#FFFFFF", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#E7E7E8", - "selectionForeground": "#272727" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#d3e1e8", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#FFFFFF", - "foreground": "#546E7A", - "infoForeground": "#94A7B0", - "matchForeground": "#00BCD4", - "matchSelectionForeground": "#00BCD4", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#546e7a", - "selectedGrayedForeground": "#546e7a", - "selectionGrayForeground": "#546e7a", - "selectionInactiveInfoForeground": "#94A7B0", - "selectionInactiveBackground": "#E7E7E8", - "selectionBackground": "#80CBC440", - "selectionForeground": "#546e7a", - "selectionInfoForeground": "#546e7a" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#E7E7E8", - "disabledBorderColor": "#F3F4F5", - "focusColor": "#00BCD4", - "focusedBorderColor": "#00BCD4", - "hoverIconColor": "#00BCD4", - "infoForeground": "#94A7B0", - "iconColor": "#546E7A" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#FAFAFA", - "controlText": "#94A7B0", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#00BCD4", - "foreground": "#546e7a" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#94A7B0", - "changedValueForeground": "#00BCD4", - "errorMessageForeground": "#E53935", - "evaluatingExpressionForeground": "#94A7B0", - "exceptionForeground": "#F6A434", - "modifyingValueForeground": "#00BCD4", - "valueForeground": "#00BCD4" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#E7E7E8", - "underlinedTabBackground": "#E7E7E8" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#E7E7E8" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#FAFAFA", - "borderColor": "#FAFAFA", - "hoverBackground": "#E7E7E8", - "hoverColor": "#EEEEEE", - "hoverMaskColor": "#E7E7E8", - "inactiveColoredTabBackground": "#FAFAFA", - "inactiveColoredFileBackground": "#F3F4F5", - "inactiveUnderlineColor": "#00BCD4", - "inactiveMaskColor": "#EEEEEE", - "underlineColor": "#00BCD4", - "underlinedTabBackground": "#E7E7E8", - "underlinedTabForeground": "#546e7a" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#FAFAFA", - "DialogWrapper.southPanelBackground": "#FAFAFA", - "DialogWrapper.southPanelDivider": "#FAFAFA", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#FAFAFA", - "areaBorderColor": "#FAFAFA", - "areaForeground": "#546E7A" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#EEEEEE", - "foreground": "#546E7A", - "shortcutForeground": "#94A7B0" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#EEEEEE", - "caretForeground": "#00BCD4", - "foreground": "#546E7A", - "inactiveBackground": "#FAFAFA", - "inactiveForeground": "#D2D4D5", - "selectionBackground": "#80CBC440", - "selectionForeground": "#272727" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#FFFFFF", - "hoverBackground": "#E7E7E8", - "hoverColor": "#E7E7E8", - "hoverMaskColor": "#E7E7E8", - "inactiveMaskColor": "#FAFAFA", - "inactiveColoredFileBackground": "#FAFAFA", - "inactiveUnderlineColor": "#D2D4D5", - "selectedForeground": "#546E7A", - "selectedBackground": "#E7E7E8", - "underlineColor": "#00BCD4", - "underlinedTabBackground": "#E7E7E8", - "underlinedTabForeground": "#546e7a" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#FAFAFA", - "borderColor": "#FFFFFF", - "hoverBackground": "#E7E7E8", - "hoverColor": "#E7E7E8", - "inactiveUnderlineColor": "#00BCD4", - "underlineColor": "#00BCD4", - "underlinedTabBackground": "#E7E7E8", - "underlinedTabForeground": "#546E7A" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#CCD7DA50", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#d3e1e8", + "Focus.color": "border", "FormattedTextField": { - "background": "#EEEEEE", - "caretForeground": "#00BCD4", - "foreground": "#546E7A", - "inactiveBackground": "#F3F4F5", - "inactiveForeground": "#D2D4D5", - "selectionForeground": "#272727", - "selectionBackground": "#E7E7E8" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#eae8e8", "Group": { - "disabledSeparatorColor": "#d3e1e8", - "separatorColor": "#d3e1e8" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#94A7B0", - "lineSeparatorColor": "#FAFAFA" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#FAFAFA", - "inactive": "#EEEEEE" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#FAFAFA", - "borderColor": "#d3e1e8", - "foreground": "#546E7A", - "infoForeground": "#94A7B0", - "shortcutForeground": "#94A7B0" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#00BCD4", - "inactiveCaption": "#FFFFFF", - "inactiveCaptionBorder": "#FAFAFA", - "inactiveCaptionText": "#94A7B0", - "info": "#94A7B0", - "infoText": "#94A7B0", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#d3e1e8", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#FAFAFA" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#546E7A", - "background": "#FAFAFA", - "inactiveTitleForeground": "#94A7B0" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#FAFAFA", - "disabledForeground": "#D2D4D5", - "disabledShadow": "#FAFAFA", - "disabledText": "#D2D4D5", - "foreground": "#546E7A", - "infoForeground": "#94A7B0", - "selectedForeground": "#272727", - "selectedDisabledForeground": "#546E7A" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#00BCD4", - "hoverForeground": "#00BCD4", - "pressedForeground": "#00BCD4", - "secondaryForeground": "#94A7B0", - "visitedForeground": "#00BCD4" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#00BCD4", + "link.foreground": "accent", "List": { - "background": "#FFFFFF", - "foreground": "#546E7A", - "hoverBackground": "#80CBC440", - "hoverInactiveBackground": "#E7E7E8", - "selectionBackground": "#80CBC440", - "selectionForeground": "#546e7a", - "selectionInactiveForeground": "#272727", - "selectionInactiveBackground": "#80CBC440" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#FAFAFA", - "branchColor": "#546E7A", - "contrast": "#EEEEEE", - "foreground": "#546E7A", - "mergeCommits": "#F3F4F5", - "primaryColor": "#94A7B0", - "selectionForeground": "#546e7a", - "tab.backgroundColor": "#FAFAFA", - "tab.borderColor": "#00BCD4", - "tagColor": "#94A7B0" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#FFFFFF", - "usedColor": "#E7E7E8", - "usedBackground": "#E7E7E8" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#94A7B0", - "acceleratorSelectionForeground": "#546e7a", - "background": "#FAFAFA", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#FFFFFF", - "disabledBackground": "#FFFFFF", - "disabledForeground": "#D2D4D5", - "foreground": "#546E7A", - "selectionBackground": "#80CBC440", - "selectionForeground": "#546e7a", - "separatorColor": "#d3e1e8" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#EEEEEE", - "borderColor": "#FAFAFA", - "disabledBackground": "#FAFAFA", - "disabledForeground": "#D2D4D5", - "foreground": "#546E7A", - "highlight": "#FAFAFA", - "selectionBackground": "#80CBC440", - "selectionForeground": "#546e7a", - "shadow": "#EEEEEE" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#94A7B0", - "acceleratorSelectionForeground": "#546e7a", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#FAFAFA", - "disabledBackground": "#FAFAFA", - "disabledForeground": "#D2D4D5", - "foreground": "#546E7A", - "selectionBackground": "#80CBC440", - "selectionForeground": "#546e7a" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#546E7A", - "borderColor": "#FAFAFA" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#FAFAFA" + "background": "bg" }, "SearchField": { - "background": "#EEEEEE" + "background": "hc" } }, - "NewPSD.warning": "#00BCD4", + "NewPSD.warning": "accent", "Notification": { - "background": "#eae8e8", - "borderColor": "#eae8e8", - "errorBackground": "#eae8e8", - "errorBorderColor": "#eae8e8", - "foreground": "#546E7A", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#F3F4F5", - "foreground": "#546E7A", - "innerBorderColor": "#F3F4F5" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#eae8e8", - "errorBorderColor": "#eae8e8", - "informativeBackground": "#eae8e8", - "informativeBorderColor": "#eae8e8", - "warningBackground": "#eae8e8", - "warningBorderColor": "#eae8e8" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#d3e1e8", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#FAFAFA", - "foreground": "#546E7A", - "messageForeground": "#546E7A" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#F3F4F5", - "focusedColor": "#00BCD4", - "disabledColor": "#D2D4D5" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#FAFAFA", - "foreground": "#546E7A" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#FFFFFF", - "borderColor": "#E7E7E8", - "currentOverloadBackground": "#E7E7E8", - "currentParameterForeground": "#00BCD4", - "disabledForeground": "#D2D4D5", - "foreground": "#546E7A", - "infoForeground": "#94A7B0", - "lineSeparatorColor": "#E7E7E8" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#EEEEEE", - "capsLockIconColor": "#00BCD4", - "caretForeground": "#00BCD4", - "foreground": "#546E7A", - "inactiveForeground": "#D2D4D5", - "selectionBackground": "#E7E7E8", - "selectionForeground": "#272727" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#FAFAFA", - "disabledForeground": "#D2D4D5", - "eapTagBackground": "#E7E7E8", - "hoverBackground": "#80CBC440", - "lightSelectionBackground": "#E7E7E8", - "paidTagBackground": "#E7E7E8", - "selectionBackground": "#80CBC440", - "tagForeground": "#00BCD4", - "tagBackground": "#E7E7E8", - "trialTagBackground": "#E7E7E8", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#F3F4F5", - "installBorderColor": "#F3F4F5", - "installForeground": "#546E7A", - "installFocusedBackground": "#E7E7E8", - "installFillForeground": "#D2D4D5", - "installFillBackground": "#F3F4F5", - "updateBackground": "#00BCD4", - "updateBorderColor": "#F3F4F5", - "updateForeground": "#546E7A" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#EEEEEE", - "borderColor": "#d3e1e8" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#FFFFFF", - "foreground": "#546E7A" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#E7E7E8", - "selectedForeground": "#546e7a", - "selectedBackground": "#E7E7E8" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#FAFAFA", - "borderColor": "#FAFAFA", - "foreground": "#00BCD4" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#EEEEEE", - "inactiveBorderColor": "#FAFAFA", - "innerBorderColor": "#FFFFFF", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#FAFAFA", - "inactiveBackground": "#EEEEEE" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#546E7A", - "separatorColor": "#FFFFFF", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#EEEEEE", - "background": "#EEEEEE", - "borderColor": "#EEEEEE" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#FAFAFA", + "background": "bg", "border": "2,0,2,0", - "foreground": "#546E7A", - "translucentBackground": "#FAFAFA" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#FAFAFA", - "foreground": "#00BCD4", - "indeterminateEndColor": "#00BCD4", - "indeterminateStartColor": "#00BCD4", - "progressColor": "#00BCD4", - "selectionBackground": "#E7E7E8", - "trackColor": "#E7E7E8" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#00BCD4" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#FAFAFA", - "disabledText": "#D2D4D5", - "foreground": "#546E7A" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#94A7B0", - "acceleratorSelectionForeground": "#94A7B0", - "background": "#FAFAFA", - "disabledBackground": "#FAFAFA", - "disabledForeground": "#D2D4D5", - "foreground": "#546E7A", - "selectionBackground": "#80CBC440", - "selectionForeground": "#546e7a" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#d3e1e8", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#FAFAFA", - "hoverThumbBorderColor": "#00BCD4", - "hoverThumbColor": "#00BCD4", - "hoverTrackColor": "#FAFAFA30", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#00BCD4", - "hoverThumbColor": "#00BCD4", - "hoverTrackColor": "#FAFAFA30", - "thumbBorderColor": "#00BCD470", - "thumbColor": "#00BCD470", - "trackColor": "#FAFAFA30", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#00BCD4", - "hoverThumbColor": "#00BCD4", - "hoverTrackColor": "#FAFAFA30", - "thumbBorderColor": "#00BCD470", - "thumbColor": "#00BCD470", - "trackColor": "#FAFAFA30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#E7E7E8", - "thumbBorderColor": "#00BCD470", - "thumbColor": "#00BCD470", - "trackColor": "#FAFAFA30", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#00BCD4", - "hoverThumbColor": "#00BCD4", - "hoverTrackColor": "#FAFAFA30", - "thumbBorderColor": "#00BCD470", - "thumbColor": "#00BCD470", - "trackColor": "#FAFAFA30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#EEEEEE", - "foreground": "#94A7B0" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#FAFAFA" + "background": "bg" }, "List": { - "separatorForeground": "#94A7B0", - "separatorColor": "#d3e1e8" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#FAFAFA", - "borderColor": "#EEEEEE", - "infoForeground": "#94A7B0" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#272727", - "selectedForeground": "#272727", - "selectedBackground": "#E7E7E8" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#00BCD4", - "startBackground": "#00BCD4", - "endColor": "#00BCD4", - "startColor": "#00BCD4" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#eae8e8", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#E7E7E8" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#94A7B0", - "Repeated.File.Foreground": "#546E7A" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#FFFFFF", - "foreground": "#FFFFFF", - "separatorColor": "#FFFFFF" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#EEEEEE" + "background": "hc" }, "Slider": { - "background": "#FAFAFA", - "buttonBorderColor": "#00BCD4", - "buttonColor": "#00BCD4", - "foreground": "#546E7A", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#FFFFFF", - "trackColor": "#E7E7E8", - "trackWidth": 7, - "thumb": "#00BCD4" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#E7E7E8", - "borderColor": "#d3e1e8", - "foreground": "#546E7A", - "errorForeground": "#546E7A" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#FAFAFA", + "background": "bg", "border": "3,3,3,3", - "foreground": "#546E7A", - "selectionForeground": "#272727" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#FAFAFA", - "highlight": "#EEEEEE" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#FFFFFF", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#FAFAFA", - "hoverBackground": "#E7E7E8", - "LightEditBackground": "#E7E7E8" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#FAFAFA", - "contentAreaColor": "#E7E7E8", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#d3e1e8", - "disabledForeground": "#D2D4D5", - "disabledUnderlineColor": "#D2D4D5", - "focus": "#E7E7E8", - "focusColor": "#E7E7E8", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#546E7A", - "highlight": "#d3e1e8", - "hoverColor": "#E7E7E8", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#272727", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#00BCD4" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#EEEEEE", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#EEEEEE", - "background": "#FAFAFA", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#D2D4D5", - "dropLineColor": "#00BCD4", - "dropLineShortColor": "#00BCD4", - "focusCellBackground": "#E7E7E8", - "focusCellForeground": "#272727", - "foreground": "#546E7A", - "gridColor": "#FAFAFA", - "highlightOuter": "#E7E7E8", - "hoverBackground": "#80CBC440", - "hoverInactiveBackground": "#E7E7E8", - "lightSelectionForeground": "#272727", - "lightSelectionInactiveForeground": "#94A7B0", - "lightSelectionInactiveBackground": "#FFFFFF", - "selectionBackground": "#E7E7E8", - "selectionForeground": "#272727", - "selectionInactiveBackground": "#E7E7E8", - "selectionInactiveForeground": "#546e7a", - "sortIconColor": "#546E7A", - "stripeColor": "#EEEEEE" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#FAFAFA", - "borderColor": "#FAFAFA", - "bottomSeparatorColor": "#FFFFFF", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#D2D4D5", - "foreground": "#546E7A", - "focusCellBackground": "#E7E7E8", - "focusCellForeground": "#272727", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#FFFFFF" + "separatorColor": "second" }, - "text": "#94A7B0", - "textInactiveText": "#94A7B0", - "textText": "#94A7B0", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#EEEEEE", - "caretForeground": "#00BCD4", - "foreground": "#546E7A", - "inactiveForeground": "#D2D4D5", - "selectionBackground": "#E7E7E8", - "selectionForeground": "#272727" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#EEEEEE", - "caretForeground": "#00BCD4", - "foreground": "#546E7A", - "inactiveForeground": "#D2D4D5", - "selectionBackground": "#E7E7E8", - "selectionForeground": "#272727" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#EEEEEE", - "caretForeground": "#00BCD4", - "foreground": "#546E7A", - "inactiveForeground": "#D2D4D5", - "selectionBackground": "#E7E7E8", - "selectionForeground": "#272727" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#EEEEEE", - "Button.hoverBackground": "#E7E7E8", - "inactiveBackground": "#FAFAFA", - "infoForeground": "#94A7B0", - "inactiveInfoForeground": "#94A7B0" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#546E7A", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#F3F4F5", - "buttonColor": "#546E7A", - "disabledText": "#D2D4D5", - "foreground": "#546E7A", - "offForeground": "#FAFAFA", - "offBackground": "#FAFAFA", - "onBackground": "#00BCD4", - "onForeground": "#00BCD4" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#EEEEEE", - "borderHandleColor": "#94A7B0", - "floatingForeground": "#94A7B0", - "foreground": "#546E7A" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#FAFAFA", - "Actions.infoForeground": "#94A7B0", - "background": "#eae8e8", - "borderColor": "#d3e1e8", - "foreground": "#546E7A", - "infoForeground": "#94A7B0", - "separatorColor": "#d3e1e8", - "shortcutForeground": "#94A7B0" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#E7E7E8", - "selectedForeground": "#272727", - "selectedBackground": "#EEEEEE" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#FAFAFA", - "borderColor": "#FFFFFF", - "inactiveBackground": "#FAFAFA" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#FAFAFA" + "background": "bg" }, "HeaderTab": { - "borderColor": "#E7E7E8", - "hoverBackground": "#E7E7E8", - "hoverInactiveBackground": "#E7E7E8", - "inactiveUnderlineColor": "#00BCD4", - "selectedBackground": "#EEEEEE", - "selectedInactiveBackground": "#EEEEEE", - "underlineColor": "#00BCD4", - "underlinedTabBackground": "#E7E7E8", - "underlinedTabInactiveBackground": "#FFFFFF", - "underlinedTabForeground": "#546e7a", - "underlinedTabInactiveForeground": "#546E7A" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#EEEEEE", - "foreground": "#94A7B0", - "hash": "#d3e1e8", - "hoverBackground": "#80CBC440", - "hoverInactiveBackground": "#E7E7E8", - "modifiedItemForeground": "#00BCD4", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#80CBC440", - "selectionForeground": "#546e7a", - "selectionInactiveForeground": "#546e7a", - "selectionInactiveBackground": "#80CBC440", - "textBackground": "#EEEEEE" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#d3e1e8", - "Canvas.background": "#EEEEEE", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#FAFAFA", - "foreground": "#546E7A" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#d3e1e8", - "background": "#FAFAFA", - "foreground": "#546E7A", - "hoverBorderColor": "#E7E7E8" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#d3e1e8", - "hoverBorderColor": "#E7E7E8" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#EEEEEE", - "highStroke.foreground": "#546E7A", - "Label.foreground": "#94A7B0", - "List.selectionBackground": "#80CBC440", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#d3e1e8", - "Component.foreground": "#546E7A", - "ConstraintSetText.foreground": "#94A7B0", - "ConstraintSet.background": "#FFFFFF", - "CSPanel.SelectedFocusBackground": "#80CBC440", - "CSPanel.SelectedBackground": "#80CBC440", - "cs_FocusText.infoForeground": "#94A7B0", - "CursorTextColor.foreground": "#546E7A", - "HoverColor.disabledBackground": "#D2D4D5", - "motionGraph.background": "#FAFAFA", - "Notification.background": "#eae8e8", - "ourAvg.background": "#FFFFFF", - "ourCS.background": "#FFFFFF", - "ourCS_Border.borderColor": "#d3e1e8", - "ourCS_TextColor.foreground": "#94A7B0", - "ourCS_SelectedFocusBackground.selectionForeground": "#546e7a", - "ourCS_SelectedBackground.selectionInactiveBackground": "#E7E7E8", - "ourCS_SelectedBorder.pressedBorderColor": "#E7E7E8", - "ourML_BarColor.separatorColor": "#d3e1e8", - "PrimaryPanel.background": "#EEEEEE", - "SecondaryPanel.background": "#FAFAFA", - "SecondaryPanel.header.foreground": "#94A7B0", - "SecondaryPanel.header.background": "#EEEEEE", - "timeLine.disabledBorderColor": "#d3e1e8" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#d3e1e8", - "background": "#FAFAFA" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#546E7A", + "percent.foreground": "fg", "Placeholder": { - "background": "#FAFAFA", - "borderColor": "#d3e1e8", - "foreground": "#546E7A", - "selectedForeground": "#546e7a" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#FAFAFA", - "stroke.acceleratorForeground": "#94A7B0" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#eae8e8", - "errorBorderColor": "#eae8e8", - "warningBackground": "#eae8e8", - "warningBorderColor": "#eae8e8" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#FAFAFA" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#E7E7E8" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#00BCD4", - "otherIconColor": "#94A7B0", - "remoteBranchIconColor": "#546E7A", - "tagIconColor": "#94A7B0" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#00BCD4", - "bookmarkIconColor": "#272727", - "closedBranchIconColor": "#D2D4D5", - "localTagIconColor": "#94A7B0", - "mqTagIconColor": "#94A7B0", - "tagIconColor": "#94A7B0", - "tipIconColor": "#94A7B0" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#94A7B0", - "Commit.currentBranchBackground": "#FFFFFF", - "Commit.hoveredBackground": "#80CBC440" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#272727", - "backgroundBase": "#E7E7E8" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#EEEEEE", - "foreground": "#546E7A" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#FAFAFA", - "background": "#FAFAFA", - "borderColor": "#FAFAFA", - "captionBackground": "#EEEEEE", - "captionForeground": "#546E7A", - "Details.background": "#FAFAFA", - "footerBackground": "#EEEEEE", - "footerForeground": "#546E7A", - "headerBackground": "#FAFAFA", - "headerForeground": "#546E7A", - "List.background": "#EEEEEE", - "separatorColor": "#d3e1e8", - "SidePanel.background": "#FFFFFF", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#EEEEEE", - "actions.selectionBackground": "#E7E7E8", - "background": "#FFFFFF", - "selectionBackground": "#80CBC440", - "selectionInactiveBackground": "#FFFFFF" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#EEEEEE", - "windowBorder": "#d3e1e8", - "windowText": "#94A7B0", - "Window.border": "#d3e1e8" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#EEEEEE", - "#6B6B6B": "#94A7B0", - "#A7A7A7": "#FAFAFA", - "#3D6185": "#00BCD4", - "#466D94": "#00BCD4", - "#3C3F41": "#FAFAFA", - "#545556": "#D2D4D5", - "#606060": "#D2D4D5", - "#9AA7B0": "#546E7A", - "#675133": "#00BCD4", - "Actions.Blue": "#6182B8", - "Actions.Green": "#91B859", - "Actions.Grey": "#94A7B0", - "Actions.GreyInline": "#AABFC9", - "Actions.GreyInline.Dark": "#546E7A", - "Actions.Red": "#E53935", - "Actions.Yellow": "#F6A434", - "Checkbox.Background.Default": "#EEEEEE", - "Checkbox.Background.Default.Dark": "#EEEEEE", - "Checkbox.Background.Disabled": "#CCD7DA50", - "Checkbox.Background.Disabled.Dark": "#CCD7DA50", - "Checkbox.Border.Default": "#d3e1e8", - "Checkbox.Border.Default.Dark": "#d3e1e8", - "Checkbox.Border.Disabled": "#D2D4D5", - "Checkbox.Border.Disabled.Dark": "#D2D4D5", - "Checkbox.Focus.Thin.Default": "#00BCD4", - "Checkbox.Focus.Thin.Default.Dark": "#00BCD4", - "Checkbox.Focus.Wide": "#00BCD4", - "Checkbox.Focus.Wide.Dark": "#00BCD4", - "Checkbox.Foreground.Disabled": "#D2D4D5", - "Checkbox.Foreground.Disabled.Dark": "#D2D4D5", - "Checkbox.Background.Selected": "#00BCD4", - "Checkbox.Background.Selected.Dark": "#FAFAFA", - "Checkbox.Border.Selected": "#00BCD4", - "Checkbox.Border.Selected.Dark": "#00BCD4", - "Checkbox.Foreground.Selected": "#00BCD4", - "Checkbox.Foreground.Selected.Dark": "#00BCD4", - "Checkbox.Focus.Thin.Selected": "#546E7A", - "Checkbox.Focus.Thin.Selected.Dark": "#546E7A", - "Objects.Grey": "#AABFC9", - "Objects.Blue": "#6182B8", - "Objects.RedStatus": "#E53935", - "Objects.Red": "#E53935", - "Objects.Pink": "#7C4DFF", - "Objects.Yellow": "#F6A434", - "Objects.Green": "#91B859", - "Objects.Purple": "#7C4DFF", - "Objects.BlackText": "#546E7A", - "Objects.YellowDark": "#F76D47", - "Objects.GreenAndroid": "#91B859" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Lighter.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Lighter.theme.json index e8399332..461dd611 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Lighter.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Lighter.theme.json @@ -2,1004 +2,1089 @@ "name": "Material Lighter", "dark": false, "author": "Mallowigi", + "colors": { + "bg": "#FAFAFA", + "bg30": "#FAFAFA30", + "fg": "#546E7A", + "text": "#94A7B0", + "selBg": "#CCD7DA", + "selFg": "#546e7a", + "activeFg": "#272727", + "border": "#d3e1e8", + "excl": "#d3e1e8", + "second": "#FFFFFF", + "dis": "#D2D4D5", + "accent": "#00BCD4", + "accent2": "#00BCD42", + "accent50": "#00BCD450", + "accent70": "#00BCD470", + "cs": "#EEEEEE", + "button": "#F3F4F5", + "table": "#E7E7E8", + "tree": "#80CBC440", + "hl": "#E7E7E8", + "notif": "#eae8e8", + "hc": "#FAFAFA", + "white": "#272727", + "blue": "#6182B8", + "red": "#E53935", + "yellow": "#F6A434", + "green": "#91B859", + "gray": "#AABFC9", + "purple": "#7C4DFF", + "orange": "#F76D47" + }, "editorScheme": "colors/Material Lighter.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#94A7B0", - "background": "#FAFAFA", - "borderColor": "#d3e1e8", - "disabledBackground": "#CCD7DA50", - "disabledForeground": "#D2D4D5", - "disabledText": "#D2D4D5", - "focusColor": "#E7E7E8", - "focusedBorderColor": "#00BCD4", - "foreground": "#546E7A", - "inactiveBackground": "#CCD7DA50", - "inactiveForeground": "#94A7B0", - "infoForeground": "#94A7B0", - "selectionBackground": "#80CBC440", - "selectionBackgroundInactive": "#FFFFFF", - "selectionForeground": "#546e7a", - "selectionInactiveBackground": "#FFFFFF", - "separatorColor": "#d3e1e8" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#FAFAFA", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#00BCD450", - "hoverBorderColor": "#00BCD450", - "hoverSeparatorColor": "#F3F4F5", - "focusedBorderColor": "#00BCD450", - "pressedBackground": "#00BCD450", - "pressedBorderColor": "#00BCD450" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#80CBC440" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#FAFAFA", - "Borders.color": "#d3e1e8", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#FAFAFA", + "background": "bg", "default": { - "endBackground": "#E7E7E8", - "endBorderColor": "#E7E7E8", - "foreground": "#272727", - "focusColor": "#00BCD4", - "focusedBorderColor": "#00BCD4", - "shadowColor": "#E7E7E8", - "startBackground": "#E7E7E8", - "startBorderColor": "#E7E7E8" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#F3F4F5", - "disabledText": "#D2D4D5", - "endBackground": "#F3F4F5", - "endBorderColor": "#F3F4F5", - "focus": "#E7E7E8", - "focusedBorderColor": "#00BCD4", - "foreground": "#94A7B0", - "highlight": "#546e7a", - "mt.background": "#F3F4F5", - "mt.foreground": "#94A7B0", - "mt.selectedForeground": "#546e7a", - "mt.selection.color1": "#E7E7E8", - "mt.selection.color2": "#E7E7E8", - "startBackground": "#F3F4F5", - "startBorderColor": "#F3F4F5", - "shadowColor": "#F3F4F5", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#d3e1e8", - "Tooltip.background": "#eae8e8" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#EEEEEE", - "selectionBackground": "#80CBC440" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#FAFAFA", - "disabledText": "#D2D4D5", - "foreground": "#546E7A", - "select": "#00BCD4" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#94A7B0", - "acceleratorSelectionForeground": "#94A7B0", - "background": "#FAFAFA", - "disabledBackground": "#FAFAFA", - "disabledForeground": "#D2D4D5", - "foreground": "#546E7A", - "selectionBackground": "#80CBC440", - "selectionForeground": "#272727" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#546E7A", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#00BCD4", - "dropdownBorder": "#FFFFFF", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#FAFAFA", - "foreground": "#546E7A", - "swatchesDefaultRecentColor": "#546E7A" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#F3F4F5", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#F3F4F5", - "disabledIconColor": "#D2D4D5", - "iconColor": "#546E7A", - "nonEditableBackground": "#FAFAFA" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#FAFAFA", - "buttonBackground": "#F3F4F5", - "darcula.hoveredArrowButtonForeground": "#00BCD4", - "disabledForeground": "#D2D4D5", - "foreground": "#546E7A", - "modifiedItemForeground": "#00BCD4", - "nonEditableBackground": "#FFFFFF", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#E7E7E8", - "selectionForeground": "#272727" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#d3e1e8", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#FFFFFF", - "foreground": "#546E7A", - "infoForeground": "#94A7B0", - "matchForeground": "#00BCD4", - "matchSelectionForeground": "#00BCD4", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#546e7a", - "selectedGrayedForeground": "#546e7a", - "selectionGrayForeground": "#546e7a", - "selectionInactiveInfoForeground": "#94A7B0", - "selectionInactiveBackground": "#E7E7E8", - "selectionBackground": "#80CBC440", - "selectionForeground": "#546e7a", - "selectionInfoForeground": "#546e7a" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#E7E7E8", - "disabledBorderColor": "#F3F4F5", - "focusColor": "#00BCD4", - "focusedBorderColor": "#00BCD4", - "hoverIconColor": "#00BCD4", - "infoForeground": "#94A7B0", - "iconColor": "#546E7A" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#FAFAFA", - "controlText": "#94A7B0", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#00BCD4", - "foreground": "#546e7a" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#94A7B0", - "changedValueForeground": "#00BCD4", - "errorMessageForeground": "#E53935", - "evaluatingExpressionForeground": "#94A7B0", - "exceptionForeground": "#F6A434", - "modifyingValueForeground": "#00BCD4", - "valueForeground": "#00BCD4" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#E7E7E8", - "underlinedTabBackground": "#E7E7E8" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#E7E7E8" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#FAFAFA", - "borderColor": "#FAFAFA", - "hoverBackground": "#E7E7E8", - "hoverColor": "#FAFAFA", - "hoverMaskColor": "#E7E7E8", - "inactiveColoredTabBackground": "#FAFAFA", - "inactiveColoredFileBackground": "#F3F4F5", - "inactiveUnderlineColor": "#00BCD4", - "inactiveMaskColor": "#FAFAFA", - "underlineColor": "#00BCD4", - "underlinedTabBackground": "#E7E7E8", - "underlinedTabForeground": "#546e7a" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#FAFAFA", - "DialogWrapper.southPanelBackground": "#FAFAFA", - "DialogWrapper.southPanelDivider": "#FAFAFA", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#FAFAFA", - "areaBorderColor": "#FAFAFA", - "areaForeground": "#546E7A" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#FAFAFA", - "foreground": "#546E7A", - "shortcutForeground": "#94A7B0" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#FAFAFA", - "caretForeground": "#00BCD4", - "foreground": "#546E7A", - "inactiveBackground": "#FAFAFA", - "inactiveForeground": "#D2D4D5", - "selectionBackground": "#80CBC440", - "selectionForeground": "#272727" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#FFFFFF", - "hoverBackground": "#E7E7E8", - "hoverColor": "#E7E7E8", - "hoverMaskColor": "#E7E7E8", - "inactiveMaskColor": "#FAFAFA", - "inactiveColoredFileBackground": "#FAFAFA", - "inactiveUnderlineColor": "#D2D4D5", - "selectedForeground": "#546E7A", - "selectedBackground": "#E7E7E8", - "underlineColor": "#00BCD4", - "underlinedTabBackground": "#E7E7E8", - "underlinedTabForeground": "#546e7a" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#FAFAFA", - "borderColor": "#FFFFFF", - "hoverBackground": "#E7E7E8", - "hoverColor": "#E7E7E8", - "inactiveUnderlineColor": "#00BCD4", - "underlineColor": "#00BCD4", - "underlinedTabBackground": "#E7E7E8", - "underlinedTabForeground": "#546E7A" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#CCD7DA50", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#d3e1e8", + "Focus.color": "border", "FormattedTextField": { - "background": "#FAFAFA", - "caretForeground": "#00BCD4", - "foreground": "#546E7A", - "inactiveBackground": "#F3F4F5", - "inactiveForeground": "#D2D4D5", - "selectionForeground": "#272727", - "selectionBackground": "#E7E7E8" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#eae8e8", "Group": { - "disabledSeparatorColor": "#d3e1e8", - "separatorColor": "#d3e1e8" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#94A7B0", - "lineSeparatorColor": "#FAFAFA" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#FAFAFA", - "inactive": "#EEEEEE" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#FAFAFA", - "borderColor": "#d3e1e8", - "foreground": "#546E7A", - "infoForeground": "#94A7B0", - "shortcutForeground": "#94A7B0" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#00BCD4", - "inactiveCaption": "#FFFFFF", - "inactiveCaptionBorder": "#FAFAFA", - "inactiveCaptionText": "#94A7B0", - "info": "#94A7B0", - "infoText": "#94A7B0", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#d3e1e8", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#FAFAFA" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#546E7A", - "background": "#FAFAFA", - "inactiveTitleForeground": "#94A7B0" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#FAFAFA", - "disabledForeground": "#D2D4D5", - "disabledShadow": "#FAFAFA", - "disabledText": "#D2D4D5", - "foreground": "#546E7A", - "infoForeground": "#94A7B0", - "selectedForeground": "#272727", - "selectedDisabledForeground": "#546E7A" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#00BCD4", - "hoverForeground": "#00BCD4", - "pressedForeground": "#00BCD4", - "secondaryForeground": "#94A7B0", - "visitedForeground": "#00BCD4" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#00BCD4", + "link.foreground": "accent", "List": { - "background": "#FFFFFF", - "foreground": "#546E7A", - "hoverBackground": "#80CBC440", - "hoverInactiveBackground": "#E7E7E8", - "selectionBackground": "#80CBC440", - "selectionForeground": "#546e7a", - "selectionInactiveForeground": "#272727", - "selectionInactiveBackground": "#80CBC440" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#FAFAFA", - "branchColor": "#546E7A", - "contrast": "#EEEEEE", - "foreground": "#546E7A", - "mergeCommits": "#F3F4F5", - "primaryColor": "#94A7B0", - "selectionForeground": "#546e7a", - "tab.backgroundColor": "#FAFAFA", - "tab.borderColor": "#00BCD4", - "tagColor": "#94A7B0" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#FFFFFF", - "usedColor": "#E7E7E8", - "usedBackground": "#E7E7E8" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#94A7B0", - "acceleratorSelectionForeground": "#546e7a", - "background": "#FAFAFA", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#FFFFFF", - "disabledBackground": "#FFFFFF", - "disabledForeground": "#D2D4D5", - "foreground": "#546E7A", - "selectionBackground": "#80CBC440", - "selectionForeground": "#546e7a", - "separatorColor": "#d3e1e8" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#FAFAFA", - "borderColor": "#FAFAFA", - "disabledBackground": "#FAFAFA", - "disabledForeground": "#D2D4D5", - "foreground": "#546E7A", - "highlight": "#FAFAFA", - "selectionBackground": "#80CBC440", - "selectionForeground": "#546e7a", - "shadow": "#FAFAFA" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#94A7B0", - "acceleratorSelectionForeground": "#546e7a", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#FAFAFA", - "disabledBackground": "#FAFAFA", - "disabledForeground": "#D2D4D5", - "foreground": "#546E7A", - "selectionBackground": "#80CBC440", - "selectionForeground": "#546e7a" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#546E7A", - "borderColor": "#FAFAFA" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#FAFAFA" + "background": "bg" }, "SearchField": { - "background": "#FAFAFA" + "background": "hc" } }, - "NewPSD.warning": "#00BCD4", + "NewPSD.warning": "accent", "Notification": { - "background": "#eae8e8", - "borderColor": "#eae8e8", - "errorBackground": "#eae8e8", - "errorBorderColor": "#eae8e8", - "foreground": "#546E7A", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#F3F4F5", - "foreground": "#546E7A", - "innerBorderColor": "#F3F4F5" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#eae8e8", - "errorBorderColor": "#eae8e8", - "informativeBackground": "#eae8e8", - "informativeBorderColor": "#eae8e8", - "warningBackground": "#eae8e8", - "warningBorderColor": "#eae8e8" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#d3e1e8", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#FAFAFA", - "foreground": "#546E7A", - "messageForeground": "#546E7A" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#F3F4F5", - "focusedColor": "#00BCD4", - "disabledColor": "#D2D4D5" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#FAFAFA", - "foreground": "#546E7A" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#FFFFFF", - "borderColor": "#E7E7E8", - "currentOverloadBackground": "#E7E7E8", - "currentParameterForeground": "#00BCD4", - "disabledForeground": "#D2D4D5", - "foreground": "#546E7A", - "infoForeground": "#94A7B0", - "lineSeparatorColor": "#E7E7E8" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#FAFAFA", - "capsLockIconColor": "#00BCD4", - "caretForeground": "#00BCD4", - "foreground": "#546E7A", - "inactiveForeground": "#D2D4D5", - "selectionBackground": "#E7E7E8", - "selectionForeground": "#272727" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#FAFAFA", - "disabledForeground": "#D2D4D5", - "eapTagBackground": "#E7E7E8", - "hoverBackground": "#80CBC440", - "lightSelectionBackground": "#E7E7E8", - "paidTagBackground": "#E7E7E8", - "selectionBackground": "#80CBC440", - "tagForeground": "#00BCD4", - "tagBackground": "#E7E7E8", - "trialTagBackground": "#E7E7E8", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#F3F4F5", - "installBorderColor": "#F3F4F5", - "installForeground": "#546E7A", - "installFocusedBackground": "#E7E7E8", - "installFillForeground": "#D2D4D5", - "installFillBackground": "#F3F4F5", - "updateBackground": "#00BCD4", - "updateBorderColor": "#F3F4F5", - "updateForeground": "#546E7A" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#FAFAFA", - "borderColor": "#d3e1e8" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#FFFFFF", - "foreground": "#546E7A" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#E7E7E8", - "selectedForeground": "#546e7a", - "selectedBackground": "#E7E7E8" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#FAFAFA", - "borderColor": "#FAFAFA", - "foreground": "#00BCD4" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#EEEEEE", - "inactiveBorderColor": "#FAFAFA", - "innerBorderColor": "#FFFFFF", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#FAFAFA", - "inactiveBackground": "#EEEEEE" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#546E7A", - "separatorColor": "#FFFFFF", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#EEEEEE", - "background": "#EEEEEE", - "borderColor": "#EEEEEE" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#FAFAFA", + "background": "bg", "border": "2,0,2,0", - "foreground": "#546E7A", - "translucentBackground": "#FAFAFA" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#FAFAFA", - "foreground": "#00BCD4", - "indeterminateEndColor": "#00BCD4", - "indeterminateStartColor": "#00BCD4", - "progressColor": "#00BCD4", - "selectionBackground": "#E7E7E8", - "trackColor": "#E7E7E8" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#00BCD4" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#FAFAFA", - "disabledText": "#D2D4D5", - "foreground": "#546E7A" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#94A7B0", - "acceleratorSelectionForeground": "#94A7B0", - "background": "#FAFAFA", - "disabledBackground": "#FAFAFA", - "disabledForeground": "#D2D4D5", - "foreground": "#546E7A", - "selectionBackground": "#80CBC440", - "selectionForeground": "#546e7a" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#d3e1e8", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#FAFAFA", - "hoverThumbBorderColor": "#00BCD4", - "hoverThumbColor": "#00BCD4", - "hoverTrackColor": "#FAFAFA30", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#00BCD4", - "hoverThumbColor": "#00BCD4", - "hoverTrackColor": "#FAFAFA30", - "thumbBorderColor": "#00BCD470", - "thumbColor": "#00BCD470", - "trackColor": "#FAFAFA30", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#00BCD4", - "hoverThumbColor": "#00BCD4", - "hoverTrackColor": "#FAFAFA30", - "thumbBorderColor": "#00BCD470", - "thumbColor": "#00BCD470", - "trackColor": "#FAFAFA30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#E7E7E8", - "thumbBorderColor": "#00BCD470", - "thumbColor": "#00BCD470", - "trackColor": "#FAFAFA30", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#00BCD4", - "hoverThumbColor": "#00BCD4", - "hoverTrackColor": "#FAFAFA30", - "thumbBorderColor": "#00BCD470", - "thumbColor": "#00BCD470", - "trackColor": "#FAFAFA30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#EEEEEE", - "foreground": "#94A7B0" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#FAFAFA" + "background": "bg" }, "List": { - "separatorForeground": "#94A7B0", - "separatorColor": "#d3e1e8" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#FAFAFA", - "borderColor": "#EEEEEE", - "infoForeground": "#94A7B0" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#272727", - "selectedForeground": "#272727", - "selectedBackground": "#E7E7E8" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#00BCD4", - "startBackground": "#00BCD4", - "endColor": "#00BCD4", - "startColor": "#00BCD4" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#eae8e8", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#E7E7E8" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#94A7B0", - "Repeated.File.Foreground": "#546E7A" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#FFFFFF", - "foreground": "#FFFFFF", - "separatorColor": "#FFFFFF" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#FAFAFA" + "background": "hc" }, "Slider": { - "background": "#FAFAFA", - "buttonBorderColor": "#00BCD4", - "buttonColor": "#00BCD4", - "foreground": "#546E7A", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#FFFFFF", - "trackColor": "#E7E7E8", - "trackWidth": 7, - "thumb": "#00BCD4" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#E7E7E8", - "borderColor": "#d3e1e8", - "foreground": "#546E7A", - "errorForeground": "#546E7A" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#FAFAFA", + "background": "bg", "border": "3,3,3,3", - "foreground": "#546E7A", - "selectionForeground": "#272727" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#FAFAFA", - "highlight": "#FAFAFA" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#FFFFFF", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#FAFAFA", - "hoverBackground": "#E7E7E8", - "LightEditBackground": "#E7E7E8" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#FAFAFA", - "contentAreaColor": "#E7E7E8", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#d3e1e8", - "disabledForeground": "#D2D4D5", - "disabledUnderlineColor": "#D2D4D5", - "focus": "#E7E7E8", - "focusColor": "#E7E7E8", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#546E7A", - "highlight": "#d3e1e8", - "hoverColor": "#E7E7E8", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#272727", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#00BCD4" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#FAFAFA", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#EEEEEE", - "background": "#FAFAFA", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#D2D4D5", - "dropLineColor": "#00BCD4", - "dropLineShortColor": "#00BCD4", - "focusCellBackground": "#E7E7E8", - "focusCellForeground": "#272727", - "foreground": "#546E7A", - "gridColor": "#FAFAFA", - "highlightOuter": "#E7E7E8", - "hoverBackground": "#80CBC440", - "hoverInactiveBackground": "#E7E7E8", - "lightSelectionForeground": "#272727", - "lightSelectionInactiveForeground": "#94A7B0", - "lightSelectionInactiveBackground": "#FFFFFF", - "selectionBackground": "#E7E7E8", - "selectionForeground": "#272727", - "selectionInactiveBackground": "#E7E7E8", - "selectionInactiveForeground": "#546e7a", - "sortIconColor": "#546E7A", - "stripeColor": "#EEEEEE" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#FAFAFA", - "borderColor": "#FAFAFA", - "bottomSeparatorColor": "#FFFFFF", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#D2D4D5", - "foreground": "#546E7A", - "focusCellBackground": "#E7E7E8", - "focusCellForeground": "#272727", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#FFFFFF" + "separatorColor": "second" }, - "text": "#94A7B0", - "textInactiveText": "#94A7B0", - "textText": "#94A7B0", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#FAFAFA", - "caretForeground": "#00BCD4", - "foreground": "#546E7A", - "inactiveForeground": "#D2D4D5", - "selectionBackground": "#E7E7E8", - "selectionForeground": "#272727" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#FAFAFA", - "caretForeground": "#00BCD4", - "foreground": "#546E7A", - "inactiveForeground": "#D2D4D5", - "selectionBackground": "#E7E7E8", - "selectionForeground": "#272727" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#FAFAFA", - "caretForeground": "#00BCD4", - "foreground": "#546E7A", - "inactiveForeground": "#D2D4D5", - "selectionBackground": "#E7E7E8", - "selectionForeground": "#272727" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#EEEEEE", - "Button.hoverBackground": "#E7E7E8", - "inactiveBackground": "#FAFAFA", - "infoForeground": "#94A7B0", - "inactiveInfoForeground": "#94A7B0" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#546E7A", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#F3F4F5", - "buttonColor": "#546E7A", - "disabledText": "#D2D4D5", - "foreground": "#546E7A", - "offForeground": "#FAFAFA", - "offBackground": "#FAFAFA", - "onBackground": "#00BCD4", - "onForeground": "#00BCD4" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#FAFAFA", - "borderHandleColor": "#94A7B0", - "floatingForeground": "#94A7B0", - "foreground": "#546E7A" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#FAFAFA", - "Actions.infoForeground": "#94A7B0", - "background": "#eae8e8", - "borderColor": "#d3e1e8", - "foreground": "#546E7A", - "infoForeground": "#94A7B0", - "separatorColor": "#d3e1e8", - "shortcutForeground": "#94A7B0" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#E7E7E8", - "selectedForeground": "#272727", - "selectedBackground": "#EEEEEE" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#FAFAFA", - "borderColor": "#FFFFFF", - "inactiveBackground": "#FAFAFA" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#FAFAFA" + "background": "bg" }, "HeaderTab": { - "borderColor": "#E7E7E8", - "hoverBackground": "#E7E7E8", - "hoverInactiveBackground": "#E7E7E8", - "inactiveUnderlineColor": "#00BCD4", - "selectedBackground": "#EEEEEE", - "selectedInactiveBackground": "#EEEEEE", - "underlineColor": "#00BCD4", - "underlinedTabBackground": "#E7E7E8", - "underlinedTabInactiveBackground": "#FFFFFF", - "underlinedTabForeground": "#546e7a", - "underlinedTabInactiveForeground": "#546E7A" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#FAFAFA", - "foreground": "#94A7B0", - "hash": "#d3e1e8", - "hoverBackground": "#80CBC440", - "hoverInactiveBackground": "#E7E7E8", - "modifiedItemForeground": "#00BCD4", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#80CBC440", - "selectionForeground": "#546e7a", - "selectionInactiveForeground": "#546e7a", - "selectionInactiveBackground": "#80CBC440", - "textBackground": "#FAFAFA" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#d3e1e8", - "Canvas.background": "#EEEEEE", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#FAFAFA", - "foreground": "#546E7A" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#d3e1e8", - "background": "#FAFAFA", - "foreground": "#546E7A", - "hoverBorderColor": "#E7E7E8" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#d3e1e8", - "hoverBorderColor": "#E7E7E8" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#EEEEEE", - "highStroke.foreground": "#546E7A", - "Label.foreground": "#94A7B0", - "List.selectionBackground": "#80CBC440", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#d3e1e8", - "Component.foreground": "#546E7A", - "ConstraintSetText.foreground": "#94A7B0", - "ConstraintSet.background": "#FFFFFF", - "CSPanel.SelectedFocusBackground": "#80CBC440", - "CSPanel.SelectedBackground": "#80CBC440", - "cs_FocusText.infoForeground": "#94A7B0", - "CursorTextColor.foreground": "#546E7A", - "HoverColor.disabledBackground": "#D2D4D5", - "motionGraph.background": "#FAFAFA", - "Notification.background": "#eae8e8", - "ourAvg.background": "#FFFFFF", - "ourCS.background": "#FFFFFF", - "ourCS_Border.borderColor": "#d3e1e8", - "ourCS_TextColor.foreground": "#94A7B0", - "ourCS_SelectedFocusBackground.selectionForeground": "#546e7a", - "ourCS_SelectedBackground.selectionInactiveBackground": "#E7E7E8", - "ourCS_SelectedBorder.pressedBorderColor": "#E7E7E8", - "ourML_BarColor.separatorColor": "#d3e1e8", - "PrimaryPanel.background": "#EEEEEE", - "SecondaryPanel.background": "#FAFAFA", - "SecondaryPanel.header.foreground": "#94A7B0", - "SecondaryPanel.header.background": "#EEEEEE", - "timeLine.disabledBorderColor": "#d3e1e8" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#d3e1e8", - "background": "#FAFAFA" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#546E7A", + "percent.foreground": "fg", "Placeholder": { - "background": "#FAFAFA", - "borderColor": "#d3e1e8", - "foreground": "#546E7A", - "selectedForeground": "#546e7a" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#FAFAFA", - "stroke.acceleratorForeground": "#94A7B0" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#eae8e8", - "errorBorderColor": "#eae8e8", - "warningBackground": "#eae8e8", - "warningBorderColor": "#eae8e8" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#FAFAFA" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#E7E7E8" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#00BCD4", - "otherIconColor": "#94A7B0", - "remoteBranchIconColor": "#546E7A", - "tagIconColor": "#94A7B0" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#00BCD4", - "bookmarkIconColor": "#272727", - "closedBranchIconColor": "#D2D4D5", - "localTagIconColor": "#94A7B0", - "mqTagIconColor": "#94A7B0", - "tagIconColor": "#94A7B0", - "tipIconColor": "#94A7B0" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#94A7B0", - "Commit.currentBranchBackground": "#FFFFFF", - "Commit.hoveredBackground": "#80CBC440" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#272727", - "backgroundBase": "#E7E7E8" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#FAFAFA", - "foreground": "#546E7A" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#FAFAFA", - "background": "#FAFAFA", - "borderColor": "#FAFAFA", - "captionBackground": "#EEEEEE", - "captionForeground": "#546E7A", - "Details.background": "#FAFAFA", - "footerBackground": "#EEEEEE", - "footerForeground": "#546E7A", - "headerBackground": "#FAFAFA", - "headerForeground": "#546E7A", - "List.background": "#EEEEEE", - "separatorColor": "#d3e1e8", - "SidePanel.background": "#FFFFFF", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#EEEEEE", - "actions.selectionBackground": "#E7E7E8", - "background": "#FFFFFF", - "selectionBackground": "#80CBC440", - "selectionInactiveBackground": "#FFFFFF" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#FAFAFA", - "windowBorder": "#d3e1e8", - "windowText": "#94A7B0", - "Window.border": "#d3e1e8" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#EEEEEE", - "#6B6B6B": "#94A7B0", - "#A7A7A7": "#FAFAFA", - "#3D6185": "#00BCD4", - "#466D94": "#00BCD4", - "#3C3F41": "#FAFAFA", - "#545556": "#D2D4D5", - "#606060": "#D2D4D5", - "#9AA7B0": "#546E7A", - "#675133": "#00BCD4", - "Actions.Blue": "#6182B8", - "Actions.Green": "#91B859", - "Actions.Grey": "#94A7B0", - "Actions.GreyInline": "#AABFC9", - "Actions.GreyInline.Dark": "#546E7A", - "Actions.Red": "#E53935", - "Actions.Yellow": "#F6A434", - "Checkbox.Background.Default": "#EEEEEE", - "Checkbox.Background.Default.Dark": "#EEEEEE", - "Checkbox.Background.Disabled": "#CCD7DA50", - "Checkbox.Background.Disabled.Dark": "#CCD7DA50", - "Checkbox.Border.Default": "#d3e1e8", - "Checkbox.Border.Default.Dark": "#d3e1e8", - "Checkbox.Border.Disabled": "#D2D4D5", - "Checkbox.Border.Disabled.Dark": "#D2D4D5", - "Checkbox.Focus.Thin.Default": "#00BCD4", - "Checkbox.Focus.Thin.Default.Dark": "#00BCD4", - "Checkbox.Focus.Wide": "#00BCD4", - "Checkbox.Focus.Wide.Dark": "#00BCD4", - "Checkbox.Foreground.Disabled": "#D2D4D5", - "Checkbox.Foreground.Disabled.Dark": "#D2D4D5", - "Checkbox.Background.Selected": "#00BCD4", - "Checkbox.Background.Selected.Dark": "#FAFAFA", - "Checkbox.Border.Selected": "#00BCD4", - "Checkbox.Border.Selected.Dark": "#00BCD4", - "Checkbox.Foreground.Selected": "#00BCD4", - "Checkbox.Foreground.Selected.Dark": "#00BCD4", - "Checkbox.Focus.Thin.Selected": "#546E7A", - "Checkbox.Focus.Thin.Selected.Dark": "#546E7A", - "Objects.Grey": "#AABFC9", - "Objects.Blue": "#6182B8", - "Objects.RedStatus": "#E53935", - "Objects.Red": "#E53935", - "Objects.Pink": "#7C4DFF", - "Objects.Yellow": "#F6A434", - "Objects.Green": "#91B859", - "Objects.Purple": "#7C4DFF", - "Objects.BlackText": "#546E7A", - "Objects.YellowDark": "#F76D47", - "Objects.GreenAndroid": "#91B859" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Oceanic Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Oceanic Contrast.theme.json index 7bd2bf87..b952c258 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Oceanic Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Oceanic Contrast.theme.json @@ -2,1004 +2,1089 @@ "name": "Material Oceanic Contrast", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#263238", + "bg30": "#26323830", + "fg": "#B0BEC5", + "text": "#607D8B", + "selBg": "#546E7A", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#2A373E", + "excl": "#2E3C43", + "second": "#32424A", + "dis": "#415967", + "accent": "#009688", + "accent2": "#0096882", + "accent50": "#00968850", + "accent70": "#00968870", + "cs": "#1E272C", + "button": "#2E3C43", + "table": "#314549", + "tree": "#546E7A70", + "hl": "#425B67", + "notif": "#1E272C", + "hc": "#1E272C", + "white": "#eeffff", + "blue": "#82aaff", + "red": "#f07178", + "yellow": "#ffcb6b", + "green": "#c3e88d", + "gray": "#546e7a", + "purple": "#c792ea", + "orange": "#f78c6c" + }, "editorScheme": "colors/Material Oceanic.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#607D8B", - "background": "#263238", - "borderColor": "#2A373E", - "disabledBackground": "#2E3C43", - "disabledForeground": "#415967", - "disabledText": "#415967", - "focusColor": "#425B67", - "focusedBorderColor": "#009688", - "foreground": "#B0BEC5", - "inactiveBackground": "#2E3C43", - "inactiveForeground": "#607D8B", - "infoForeground": "#607D8B", - "selectionBackground": "#546E7A", - "selectionBackgroundInactive": "#32424A", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#32424A", - "separatorColor": "#2A373E" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#263238", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#00968850", - "hoverBorderColor": "#00968850", - "hoverSeparatorColor": "#2E3C43", - "focusedBorderColor": "#00968850", - "pressedBackground": "#00968850", - "pressedBorderColor": "#00968850" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#546E7A" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#263238", - "Borders.color": "#2A373E", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#263238", + "background": "bg", "default": { - "endBackground": "#314549", - "endBorderColor": "#314549", - "foreground": "#FFFFFF", - "focusColor": "#009688", - "focusedBorderColor": "#009688", - "shadowColor": "#314549", - "startBackground": "#314549", - "startBorderColor": "#314549" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#2E3C43", - "disabledText": "#415967", - "endBackground": "#2E3C43", - "endBorderColor": "#2E3C43", - "focus": "#425B67", - "focusedBorderColor": "#009688", - "foreground": "#607D8B", - "highlight": "#FFFFFF", - "mt.background": "#2E3C43", - "mt.foreground": "#607D8B", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#314549", - "mt.selection.color2": "#314549", - "startBackground": "#2E3C43", - "startBorderColor": "#2E3C43", - "shadowColor": "#2E3C43", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#2A373E", - "Tooltip.background": "#1E272C" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#1E272C", - "selectionBackground": "#546E7A" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#263238", - "disabledText": "#415967", - "foreground": "#B0BEC5", - "select": "#009688" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#607D8B", - "acceleratorSelectionForeground": "#607D8B", - "background": "#263238", - "disabledBackground": "#263238", - "disabledForeground": "#415967", - "foreground": "#B0BEC5", - "selectionBackground": "#546E7A", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#B0BEC5", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#009688", - "dropdownBorder": "#32424A", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#263238", - "foreground": "#B0BEC5", - "swatchesDefaultRecentColor": "#B0BEC5" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#2E3C43", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#2E3C43", - "disabledIconColor": "#415967", - "iconColor": "#B0BEC5", - "nonEditableBackground": "#263238" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#1E272C", - "buttonBackground": "#2E3C43", - "darcula.hoveredArrowButtonForeground": "#009688", - "disabledForeground": "#415967", - "foreground": "#B0BEC5", - "modifiedItemForeground": "#009688", - "nonEditableBackground": "#32424A", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#314549", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#2A373E", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#32424A", - "foreground": "#B0BEC5", - "infoForeground": "#607D8B", - "matchForeground": "#009688", - "matchSelectionForeground": "#009688", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#607D8B", - "selectionInactiveBackground": "#425B67", - "selectionBackground": "#546E7A", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#425B67", - "disabledBorderColor": "#2E3C43", - "focusColor": "#009688", - "focusedBorderColor": "#009688", - "hoverIconColor": "#009688", - "infoForeground": "#607D8B", - "iconColor": "#B0BEC5" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#263238", - "controlText": "#607D8B", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#009688", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#607D8B", - "changedValueForeground": "#009688", - "errorMessageForeground": "#f07178", - "evaluatingExpressionForeground": "#607D8B", - "exceptionForeground": "#ffcb6b", - "modifyingValueForeground": "#009688", - "valueForeground": "#009688" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#425B67", - "underlinedTabBackground": "#425B67" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#425B67" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#263238", - "borderColor": "#263238", - "hoverBackground": "#314549", - "hoverColor": "#1E272C", - "hoverMaskColor": "#425B67", - "inactiveColoredTabBackground": "#263238", - "inactiveColoredFileBackground": "#2E3C43", - "inactiveUnderlineColor": "#009688", - "inactiveMaskColor": "#1E272C", - "underlineColor": "#009688", - "underlinedTabBackground": "#314549", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#263238", - "DialogWrapper.southPanelBackground": "#263238", - "DialogWrapper.southPanelDivider": "#263238", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#263238", - "areaBorderColor": "#263238", - "areaForeground": "#B0BEC5" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#1E272C", - "foreground": "#B0BEC5", - "shortcutForeground": "#607D8B" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#1E272C", - "caretForeground": "#009688", - "foreground": "#B0BEC5", - "inactiveBackground": "#263238", - "inactiveForeground": "#415967", - "selectionBackground": "#546E7A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#32424A", - "hoverBackground": "#425B67", - "hoverColor": "#425B67", - "hoverMaskColor": "#425B67", - "inactiveMaskColor": "#263238", - "inactiveColoredFileBackground": "#263238", - "inactiveUnderlineColor": "#415967", - "selectedForeground": "#B0BEC5", - "selectedBackground": "#314549", - "underlineColor": "#009688", - "underlinedTabBackground": "#314549", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#263238", - "borderColor": "#32424A", - "hoverBackground": "#425B67", - "hoverColor": "#425B67", - "inactiveUnderlineColor": "#009688", - "underlineColor": "#009688", - "underlinedTabBackground": "#314549", - "underlinedTabForeground": "#B0BEC5" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#2E3C43", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#2A373E", + "Focus.color": "border", "FormattedTextField": { - "background": "#1E272C", - "caretForeground": "#009688", - "foreground": "#B0BEC5", - "inactiveBackground": "#2E3C43", - "inactiveForeground": "#415967", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#314549" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#1E272C", "Group": { - "disabledSeparatorColor": "#2A373E", - "separatorColor": "#2A373E" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#607D8B", - "lineSeparatorColor": "#263238" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#263238", - "inactive": "#1E272C" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#263238", - "borderColor": "#2A373E", - "foreground": "#B0BEC5", - "infoForeground": "#607D8B", - "shortcutForeground": "#607D8B" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#009688", - "inactiveCaption": "#32424A", - "inactiveCaptionBorder": "#263238", - "inactiveCaptionText": "#607D8B", - "info": "#607D8B", - "infoText": "#607D8B", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#2A373E", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#263238" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#B0BEC5", - "background": "#263238", - "inactiveTitleForeground": "#607D8B" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#263238", - "disabledForeground": "#415967", - "disabledShadow": "#263238", - "disabledText": "#415967", - "foreground": "#B0BEC5", - "infoForeground": "#607D8B", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#B0BEC5" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#009688", - "hoverForeground": "#009688", - "pressedForeground": "#009688", - "secondaryForeground": "#607D8B", - "visitedForeground": "#009688" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#009688", + "link.foreground": "accent", "List": { - "background": "#32424A", - "foreground": "#B0BEC5", - "hoverBackground": "#546E7A70", - "hoverInactiveBackground": "#314549", - "selectionBackground": "#546E7A", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#546E7A70" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#263238", - "branchColor": "#B0BEC5", - "contrast": "#1E272C", - "foreground": "#B0BEC5", - "mergeCommits": "#2E3C43", - "primaryColor": "#607D8B", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#263238", - "tab.borderColor": "#009688", - "tagColor": "#607D8B" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#32424A", - "usedColor": "#425B67", - "usedBackground": "#425B67" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#607D8B", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#263238", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#32424A", - "disabledBackground": "#32424A", - "disabledForeground": "#415967", - "foreground": "#B0BEC5", - "selectionBackground": "#546E7A", - "selectionForeground": "#FFFFFF", - "separatorColor": "#2A373E" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#1E272C", - "borderColor": "#263238", - "disabledBackground": "#263238", - "disabledForeground": "#415967", - "foreground": "#B0BEC5", - "highlight": "#263238", - "selectionBackground": "#546E7A", - "selectionForeground": "#FFFFFF", - "shadow": "#1E272C" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#607D8B", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#263238", - "disabledBackground": "#263238", - "disabledForeground": "#415967", - "foreground": "#B0BEC5", - "selectionBackground": "#546E7A", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#B0BEC5", - "borderColor": "#263238" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#263238" + "background": "bg" }, "SearchField": { - "background": "#1E272C" + "background": "hc" } }, - "NewPSD.warning": "#009688", + "NewPSD.warning": "accent", "Notification": { - "background": "#1E272C", - "borderColor": "#1E272C", - "errorBackground": "#1E272C", - "errorBorderColor": "#1E272C", - "foreground": "#B0BEC5", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#2E3C43", - "foreground": "#B0BEC5", - "innerBorderColor": "#2E3C43" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#1E272C", - "errorBorderColor": "#1E272C", - "informativeBackground": "#1E272C", - "informativeBorderColor": "#1E272C", - "warningBackground": "#1E272C", - "warningBorderColor": "#1E272C" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#2A373E", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#263238", - "foreground": "#B0BEC5", - "messageForeground": "#B0BEC5" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#2E3C43", - "focusedColor": "#009688", - "disabledColor": "#415967" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#263238", - "foreground": "#B0BEC5" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#32424A", - "borderColor": "#314549", - "currentOverloadBackground": "#425B67", - "currentParameterForeground": "#009688", - "disabledForeground": "#415967", - "foreground": "#B0BEC5", - "infoForeground": "#607D8B", - "lineSeparatorColor": "#314549" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#1E272C", - "capsLockIconColor": "#009688", - "caretForeground": "#009688", - "foreground": "#B0BEC5", - "inactiveForeground": "#415967", - "selectionBackground": "#314549", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#263238", - "disabledForeground": "#415967", - "eapTagBackground": "#425B67", - "hoverBackground": "#546E7A70", - "lightSelectionBackground": "#314549", - "paidTagBackground": "#425B67", - "selectionBackground": "#546E7A", - "tagForeground": "#009688", - "tagBackground": "#425B67", - "trialTagBackground": "#425B67", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#2E3C43", - "installBorderColor": "#2E3C43", - "installForeground": "#B0BEC5", - "installFocusedBackground": "#425B67", - "installFillForeground": "#415967", - "installFillBackground": "#2E3C43", - "updateBackground": "#009688", - "updateBorderColor": "#2E3C43", - "updateForeground": "#B0BEC5" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#1E272C", - "borderColor": "#2A373E" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#32424A", - "foreground": "#B0BEC5" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#314549", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#314549" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#263238", - "borderColor": "#263238", - "foreground": "#009688" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#1E272C", - "inactiveBorderColor": "#263238", - "innerBorderColor": "#32424A", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#263238", - "inactiveBackground": "#1E272C" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#B0BEC5", - "separatorColor": "#32424A", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#1E272C", - "background": "#1E272C", - "borderColor": "#1E272C" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#263238", + "background": "bg", "border": "2,0,2,0", - "foreground": "#B0BEC5", - "translucentBackground": "#263238" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#263238", - "foreground": "#009688", - "indeterminateEndColor": "#009688", - "indeterminateStartColor": "#009688", - "progressColor": "#009688", - "selectionBackground": "#425B67", - "trackColor": "#425B67" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#009688" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#263238", - "disabledText": "#415967", - "foreground": "#B0BEC5" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#607D8B", - "acceleratorSelectionForeground": "#607D8B", - "background": "#263238", - "disabledBackground": "#263238", - "disabledForeground": "#415967", - "foreground": "#B0BEC5", - "selectionBackground": "#546E7A", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#2A373E", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#263238", - "hoverThumbBorderColor": "#009688", - "hoverThumbColor": "#009688", - "hoverTrackColor": "#26323830", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#009688", - "hoverThumbColor": "#009688", - "hoverTrackColor": "#26323830", - "thumbBorderColor": "#00968870", - "thumbColor": "#00968870", - "trackColor": "#26323830", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#009688", - "hoverThumbColor": "#009688", - "hoverTrackColor": "#26323830", - "thumbBorderColor": "#00968870", - "thumbColor": "#00968870", - "trackColor": "#26323830" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#425B67", - "thumbBorderColor": "#00968870", - "thumbColor": "#00968870", - "trackColor": "#26323830", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#009688", - "hoverThumbColor": "#009688", - "hoverTrackColor": "#26323830", - "thumbBorderColor": "#00968870", - "thumbColor": "#00968870", - "trackColor": "#26323830" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#1E272C", - "foreground": "#607D8B" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#263238" + "background": "bg" }, "List": { - "separatorForeground": "#607D8B", - "separatorColor": "#2A373E" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#263238", - "borderColor": "#1E272C", - "infoForeground": "#607D8B" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#425B67" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#009688", - "startBackground": "#009688", - "endColor": "#009688", - "startColor": "#009688" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#1E272C", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#314549" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#607D8B", - "Repeated.File.Foreground": "#B0BEC5" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#32424A", - "foreground": "#32424A", - "separatorColor": "#32424A" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#1E272C" + "background": "hc" }, "Slider": { - "background": "#263238", - "buttonBorderColor": "#009688", - "buttonColor": "#009688", - "foreground": "#B0BEC5", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#32424A", - "trackColor": "#314549", - "trackWidth": 7, - "thumb": "#009688" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#425B67", - "borderColor": "#2A373E", - "foreground": "#B0BEC5", - "errorForeground": "#B0BEC5" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#263238", + "background": "bg", "border": "3,3,3,3", - "foreground": "#B0BEC5", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#263238", - "highlight": "#1E272C" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#32424A", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#263238", - "hoverBackground": "#425B67", - "LightEditBackground": "#314549" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#263238", - "contentAreaColor": "#425B67", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#2A373E", - "disabledForeground": "#415967", - "disabledUnderlineColor": "#415967", - "focus": "#314549", - "focusColor": "#314549", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#B0BEC5", - "highlight": "#2A373E", - "hoverColor": "#425B67", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#009688" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#1E272C", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#1E272C", - "background": "#263238", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#415967", - "dropLineColor": "#009688", - "dropLineShortColor": "#009688", - "focusCellBackground": "#314549", - "focusCellForeground": "#FFFFFF", - "foreground": "#B0BEC5", - "gridColor": "#263238", - "highlightOuter": "#314549", - "hoverBackground": "#546E7A70", - "hoverInactiveBackground": "#314549", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#607D8B", - "lightSelectionInactiveBackground": "#32424A", - "selectionBackground": "#314549", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#314549", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#B0BEC5", - "stripeColor": "#1E272C" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#263238", - "borderColor": "#263238", - "bottomSeparatorColor": "#32424A", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#415967", - "foreground": "#B0BEC5", - "focusCellBackground": "#314549", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#32424A" + "separatorColor": "second" }, - "text": "#607D8B", - "textInactiveText": "#607D8B", - "textText": "#607D8B", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#1E272C", - "caretForeground": "#009688", - "foreground": "#B0BEC5", - "inactiveForeground": "#415967", - "selectionBackground": "#314549", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#1E272C", - "caretForeground": "#009688", - "foreground": "#B0BEC5", - "inactiveForeground": "#415967", - "selectionBackground": "#314549", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#1E272C", - "caretForeground": "#009688", - "foreground": "#B0BEC5", - "inactiveForeground": "#415967", - "selectionBackground": "#314549", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#1E272C", - "Button.hoverBackground": "#425B67", - "inactiveBackground": "#263238", - "infoForeground": "#607D8B", - "inactiveInfoForeground": "#607D8B" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#B0BEC5", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#2E3C43", - "buttonColor": "#B0BEC5", - "disabledText": "#415967", - "foreground": "#B0BEC5", - "offForeground": "#263238", - "offBackground": "#263238", - "onBackground": "#009688", - "onForeground": "#009688" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#1E272C", - "borderHandleColor": "#607D8B", - "floatingForeground": "#607D8B", - "foreground": "#B0BEC5" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#263238", - "Actions.infoForeground": "#607D8B", - "background": "#1E272C", - "borderColor": "#2A373E", - "foreground": "#B0BEC5", - "infoForeground": "#607D8B", - "separatorColor": "#2A373E", - "shortcutForeground": "#607D8B" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#314549", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#1E272C" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#263238", - "borderColor": "#32424A", - "inactiveBackground": "#263238" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#263238" + "background": "bg" }, "HeaderTab": { - "borderColor": "#425B67", - "hoverBackground": "#425B67", - "hoverInactiveBackground": "#425B67", - "inactiveUnderlineColor": "#009688", - "selectedBackground": "#1E272C", - "selectedInactiveBackground": "#1E272C", - "underlineColor": "#009688", - "underlinedTabBackground": "#314549", - "underlinedTabInactiveBackground": "#32424A", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#B0BEC5" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#1E272C", - "foreground": "#607D8B", - "hash": "#2A373E", - "hoverBackground": "#546E7A70", - "hoverInactiveBackground": "#314549", - "modifiedItemForeground": "#009688", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#546E7A70", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#546E7A70", - "textBackground": "#1E272C" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#2A373E", - "Canvas.background": "#1E272C", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#263238", - "foreground": "#B0BEC5" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#2A373E", - "background": "#263238", - "foreground": "#B0BEC5", - "hoverBorderColor": "#425B67" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#2A373E", - "hoverBorderColor": "#425B67" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#1E272C", - "highStroke.foreground": "#B0BEC5", - "Label.foreground": "#607D8B", - "List.selectionBackground": "#546E7A70", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#2A373E", - "Component.foreground": "#B0BEC5", - "ConstraintSetText.foreground": "#607D8B", - "ConstraintSet.background": "#32424A", - "CSPanel.SelectedFocusBackground": "#546E7A", - "CSPanel.SelectedBackground": "#546E7A70", - "cs_FocusText.infoForeground": "#607D8B", - "CursorTextColor.foreground": "#B0BEC5", - "HoverColor.disabledBackground": "#415967", - "motionGraph.background": "#263238", - "Notification.background": "#1E272C", - "ourAvg.background": "#32424A", - "ourCS.background": "#32424A", - "ourCS_Border.borderColor": "#2A373E", - "ourCS_TextColor.foreground": "#607D8B", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#314549", - "ourCS_SelectedBorder.pressedBorderColor": "#425B67", - "ourML_BarColor.separatorColor": "#2A373E", - "PrimaryPanel.background": "#1E272C", - "SecondaryPanel.background": "#263238", - "SecondaryPanel.header.foreground": "#607D8B", - "SecondaryPanel.header.background": "#1E272C", - "timeLine.disabledBorderColor": "#2A373E" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#2A373E", - "background": "#263238" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#B0BEC5", + "percent.foreground": "fg", "Placeholder": { - "background": "#263238", - "borderColor": "#2A373E", - "foreground": "#B0BEC5", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#263238", - "stroke.acceleratorForeground": "#607D8B" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#1E272C", - "errorBorderColor": "#1E272C", - "warningBackground": "#1E272C", - "warningBorderColor": "#1E272C" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#263238" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#425B67" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#009688", - "otherIconColor": "#607D8B", - "remoteBranchIconColor": "#B0BEC5", - "tagIconColor": "#607D8B" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#009688", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#415967", - "localTagIconColor": "#607D8B", - "mqTagIconColor": "#607D8B", - "tagIconColor": "#607D8B", - "tipIconColor": "#607D8B" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#607D8B", - "Commit.currentBranchBackground": "#32424A", - "Commit.hoveredBackground": "#546E7A70" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#425B67" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#1E272C", - "foreground": "#B0BEC5" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#263238", - "background": "#263238", - "borderColor": "#263238", - "captionBackground": "#1E272C", - "captionForeground": "#B0BEC5", - "Details.background": "#263238", - "footerBackground": "#1E272C", - "footerForeground": "#B0BEC5", - "headerBackground": "#263238", - "headerForeground": "#B0BEC5", - "List.background": "#1E272C", - "separatorColor": "#2A373E", - "SidePanel.background": "#32424A", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#1E272C", - "actions.selectionBackground": "#425B67", - "background": "#32424A", - "selectionBackground": "#546E7A", - "selectionInactiveBackground": "#32424A" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#1E272C", - "windowBorder": "#2A373E", - "windowText": "#607D8B", - "Window.border": "#2A373E" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#1E272C", - "#6B6B6B": "#607D8B", - "#A7A7A7": "#263238", - "#3D6185": "#009688", - "#466D94": "#009688", - "#3C3F41": "#263238", - "#545556": "#415967", - "#606060": "#415967", - "#9AA7B0": "#B0BEC5", - "#675133": "#009688", - "Actions.Blue": "#82aaff", - "Actions.Green": "#c3e88d", - "Actions.Grey": "#607D8B", - "Actions.GreyInline": "#546e7a", - "Actions.GreyInline.Dark": "#B0BEC5", - "Actions.Red": "#f07178", - "Actions.Yellow": "#ffcb6b", - "Checkbox.Background.Default": "#1E272C", - "Checkbox.Background.Default.Dark": "#1E272C", - "Checkbox.Background.Disabled": "#2E3C43", - "Checkbox.Background.Disabled.Dark": "#2E3C43", - "Checkbox.Border.Default": "#2A373E", - "Checkbox.Border.Default.Dark": "#2A373E", - "Checkbox.Border.Disabled": "#415967", - "Checkbox.Border.Disabled.Dark": "#415967", - "Checkbox.Focus.Thin.Default": "#009688", - "Checkbox.Focus.Thin.Default.Dark": "#009688", - "Checkbox.Focus.Wide": "#009688", - "Checkbox.Focus.Wide.Dark": "#009688", - "Checkbox.Foreground.Disabled": "#415967", - "Checkbox.Foreground.Disabled.Dark": "#415967", - "Checkbox.Background.Selected": "#009688", - "Checkbox.Background.Selected.Dark": "#263238", - "Checkbox.Border.Selected": "#009688", - "Checkbox.Border.Selected.Dark": "#009688", - "Checkbox.Foreground.Selected": "#009688", - "Checkbox.Foreground.Selected.Dark": "#009688", - "Checkbox.Focus.Thin.Selected": "#B0BEC5", - "Checkbox.Focus.Thin.Selected.Dark": "#B0BEC5", - "Objects.Grey": "#546e7a", - "Objects.Blue": "#82aaff", - "Objects.RedStatus": "#f07178", - "Objects.Red": "#f07178", - "Objects.Pink": "#c792ea", - "Objects.Yellow": "#ffcb6b", - "Objects.Green": "#c3e88d", - "Objects.Purple": "#c792ea", - "Objects.BlackText": "#B0BEC5", - "Objects.YellowDark": "#f78c6c", - "Objects.GreenAndroid": "#c3e88d" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Oceanic.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Oceanic.theme.json index c2fe7a83..65ae8b1f 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Oceanic.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Oceanic.theme.json @@ -2,1004 +2,1089 @@ "name": "Material Oceanic", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#263238", + "bg30": "#26323830", + "fg": "#B0BEC5", + "text": "#607D8B", + "selBg": "#546E7A", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#2A373E", + "excl": "#2E3C43", + "second": "#32424A", + "dis": "#415967", + "accent": "#009688", + "accent2": "#0096882", + "accent50": "#00968850", + "accent70": "#00968870", + "cs": "#1E272C", + "button": "#2E3C43", + "table": "#314549", + "tree": "#546E7A70", + "hl": "#425B67", + "notif": "#1E272C", + "hc": "#263238", + "white": "#eeffff", + "blue": "#82aaff", + "red": "#f07178", + "yellow": "#ffcb6b", + "green": "#c3e88d", + "gray": "#546e7a", + "purple": "#c792ea", + "orange": "#f78c6c" + }, "editorScheme": "colors/Material Oceanic.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#607D8B", - "background": "#263238", - "borderColor": "#2A373E", - "disabledBackground": "#2E3C43", - "disabledForeground": "#415967", - "disabledText": "#415967", - "focusColor": "#425B67", - "focusedBorderColor": "#009688", - "foreground": "#B0BEC5", - "inactiveBackground": "#2E3C43", - "inactiveForeground": "#607D8B", - "infoForeground": "#607D8B", - "selectionBackground": "#546E7A", - "selectionBackgroundInactive": "#32424A", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#32424A", - "separatorColor": "#2A373E" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#263238", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#00968850", - "hoverBorderColor": "#00968850", - "hoverSeparatorColor": "#2E3C43", - "focusedBorderColor": "#00968850", - "pressedBackground": "#00968850", - "pressedBorderColor": "#00968850" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#546E7A" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#263238", - "Borders.color": "#2A373E", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#263238", + "background": "bg", "default": { - "endBackground": "#314549", - "endBorderColor": "#314549", - "foreground": "#FFFFFF", - "focusColor": "#009688", - "focusedBorderColor": "#009688", - "shadowColor": "#314549", - "startBackground": "#314549", - "startBorderColor": "#314549" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#2E3C43", - "disabledText": "#415967", - "endBackground": "#2E3C43", - "endBorderColor": "#2E3C43", - "focus": "#425B67", - "focusedBorderColor": "#009688", - "foreground": "#607D8B", - "highlight": "#FFFFFF", - "mt.background": "#2E3C43", - "mt.foreground": "#607D8B", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#314549", - "mt.selection.color2": "#314549", - "startBackground": "#2E3C43", - "startBorderColor": "#2E3C43", - "shadowColor": "#2E3C43", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#2A373E", - "Tooltip.background": "#1E272C" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#1E272C", - "selectionBackground": "#546E7A" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#263238", - "disabledText": "#415967", - "foreground": "#B0BEC5", - "select": "#009688" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#607D8B", - "acceleratorSelectionForeground": "#607D8B", - "background": "#263238", - "disabledBackground": "#263238", - "disabledForeground": "#415967", - "foreground": "#B0BEC5", - "selectionBackground": "#546E7A", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#B0BEC5", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#009688", - "dropdownBorder": "#32424A", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#263238", - "foreground": "#B0BEC5", - "swatchesDefaultRecentColor": "#B0BEC5" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#2E3C43", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#2E3C43", - "disabledIconColor": "#415967", - "iconColor": "#B0BEC5", - "nonEditableBackground": "#263238" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#263238", - "buttonBackground": "#2E3C43", - "darcula.hoveredArrowButtonForeground": "#009688", - "disabledForeground": "#415967", - "foreground": "#B0BEC5", - "modifiedItemForeground": "#009688", - "nonEditableBackground": "#32424A", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#314549", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#2A373E", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#32424A", - "foreground": "#B0BEC5", - "infoForeground": "#607D8B", - "matchForeground": "#009688", - "matchSelectionForeground": "#009688", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#607D8B", - "selectionInactiveBackground": "#425B67", - "selectionBackground": "#546E7A", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#425B67", - "disabledBorderColor": "#2E3C43", - "focusColor": "#009688", - "focusedBorderColor": "#009688", - "hoverIconColor": "#009688", - "infoForeground": "#607D8B", - "iconColor": "#B0BEC5" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#263238", - "controlText": "#607D8B", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#009688", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#607D8B", - "changedValueForeground": "#009688", - "errorMessageForeground": "#f07178", - "evaluatingExpressionForeground": "#607D8B", - "exceptionForeground": "#ffcb6b", - "modifyingValueForeground": "#009688", - "valueForeground": "#009688" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#425B67", - "underlinedTabBackground": "#425B67" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#425B67" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#263238", - "borderColor": "#263238", - "hoverBackground": "#314549", - "hoverColor": "#263238", - "hoverMaskColor": "#425B67", - "inactiveColoredTabBackground": "#263238", - "inactiveColoredFileBackground": "#2E3C43", - "inactiveUnderlineColor": "#009688", - "inactiveMaskColor": "#263238", - "underlineColor": "#009688", - "underlinedTabBackground": "#314549", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#263238", - "DialogWrapper.southPanelBackground": "#263238", - "DialogWrapper.southPanelDivider": "#263238", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#263238", - "areaBorderColor": "#263238", - "areaForeground": "#B0BEC5" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#263238", - "foreground": "#B0BEC5", - "shortcutForeground": "#607D8B" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#263238", - "caretForeground": "#009688", - "foreground": "#B0BEC5", - "inactiveBackground": "#263238", - "inactiveForeground": "#415967", - "selectionBackground": "#546E7A", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#32424A", - "hoverBackground": "#425B67", - "hoverColor": "#425B67", - "hoverMaskColor": "#425B67", - "inactiveMaskColor": "#263238", - "inactiveColoredFileBackground": "#263238", - "inactiveUnderlineColor": "#415967", - "selectedForeground": "#B0BEC5", - "selectedBackground": "#314549", - "underlineColor": "#009688", - "underlinedTabBackground": "#314549", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#263238", - "borderColor": "#32424A", - "hoverBackground": "#425B67", - "hoverColor": "#425B67", - "inactiveUnderlineColor": "#009688", - "underlineColor": "#009688", - "underlinedTabBackground": "#314549", - "underlinedTabForeground": "#B0BEC5" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#2E3C43", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#2A373E", + "Focus.color": "border", "FormattedTextField": { - "background": "#263238", - "caretForeground": "#009688", - "foreground": "#B0BEC5", - "inactiveBackground": "#2E3C43", - "inactiveForeground": "#415967", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#314549" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#1E272C", "Group": { - "disabledSeparatorColor": "#2A373E", - "separatorColor": "#2A373E" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#607D8B", - "lineSeparatorColor": "#263238" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#263238", - "inactive": "#1E272C" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#263238", - "borderColor": "#2A373E", - "foreground": "#B0BEC5", - "infoForeground": "#607D8B", - "shortcutForeground": "#607D8B" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#009688", - "inactiveCaption": "#32424A", - "inactiveCaptionBorder": "#263238", - "inactiveCaptionText": "#607D8B", - "info": "#607D8B", - "infoText": "#607D8B", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#2A373E", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#263238" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#B0BEC5", - "background": "#263238", - "inactiveTitleForeground": "#607D8B" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#263238", - "disabledForeground": "#415967", - "disabledShadow": "#263238", - "disabledText": "#415967", - "foreground": "#B0BEC5", - "infoForeground": "#607D8B", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#B0BEC5" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#009688", - "hoverForeground": "#009688", - "pressedForeground": "#009688", - "secondaryForeground": "#607D8B", - "visitedForeground": "#009688" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#009688", + "link.foreground": "accent", "List": { - "background": "#32424A", - "foreground": "#B0BEC5", - "hoverBackground": "#546E7A70", - "hoverInactiveBackground": "#314549", - "selectionBackground": "#546E7A", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#546E7A70" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#263238", - "branchColor": "#B0BEC5", - "contrast": "#1E272C", - "foreground": "#B0BEC5", - "mergeCommits": "#2E3C43", - "primaryColor": "#607D8B", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#263238", - "tab.borderColor": "#009688", - "tagColor": "#607D8B" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#32424A", - "usedColor": "#425B67", - "usedBackground": "#425B67" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#607D8B", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#263238", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#32424A", - "disabledBackground": "#32424A", - "disabledForeground": "#415967", - "foreground": "#B0BEC5", - "selectionBackground": "#546E7A", - "selectionForeground": "#FFFFFF", - "separatorColor": "#2A373E" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#263238", - "borderColor": "#263238", - "disabledBackground": "#263238", - "disabledForeground": "#415967", - "foreground": "#B0BEC5", - "highlight": "#263238", - "selectionBackground": "#546E7A", - "selectionForeground": "#FFFFFF", - "shadow": "#263238" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#607D8B", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#263238", - "disabledBackground": "#263238", - "disabledForeground": "#415967", - "foreground": "#B0BEC5", - "selectionBackground": "#546E7A", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#B0BEC5", - "borderColor": "#263238" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#263238" + "background": "bg" }, "SearchField": { - "background": "#263238" + "background": "hc" } }, - "NewPSD.warning": "#009688", + "NewPSD.warning": "accent", "Notification": { - "background": "#1E272C", - "borderColor": "#1E272C", - "errorBackground": "#1E272C", - "errorBorderColor": "#1E272C", - "foreground": "#B0BEC5", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#2E3C43", - "foreground": "#B0BEC5", - "innerBorderColor": "#2E3C43" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#1E272C", - "errorBorderColor": "#1E272C", - "informativeBackground": "#1E272C", - "informativeBorderColor": "#1E272C", - "warningBackground": "#1E272C", - "warningBorderColor": "#1E272C" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#2A373E", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#263238", - "foreground": "#B0BEC5", - "messageForeground": "#B0BEC5" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#2E3C43", - "focusedColor": "#009688", - "disabledColor": "#415967" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#263238", - "foreground": "#B0BEC5" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#32424A", - "borderColor": "#314549", - "currentOverloadBackground": "#425B67", - "currentParameterForeground": "#009688", - "disabledForeground": "#415967", - "foreground": "#B0BEC5", - "infoForeground": "#607D8B", - "lineSeparatorColor": "#314549" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#263238", - "capsLockIconColor": "#009688", - "caretForeground": "#009688", - "foreground": "#B0BEC5", - "inactiveForeground": "#415967", - "selectionBackground": "#314549", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#263238", - "disabledForeground": "#415967", - "eapTagBackground": "#425B67", - "hoverBackground": "#546E7A70", - "lightSelectionBackground": "#314549", - "paidTagBackground": "#425B67", - "selectionBackground": "#546E7A", - "tagForeground": "#009688", - "tagBackground": "#425B67", - "trialTagBackground": "#425B67", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#2E3C43", - "installBorderColor": "#2E3C43", - "installForeground": "#B0BEC5", - "installFocusedBackground": "#425B67", - "installFillForeground": "#415967", - "installFillBackground": "#2E3C43", - "updateBackground": "#009688", - "updateBorderColor": "#2E3C43", - "updateForeground": "#B0BEC5" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#263238", - "borderColor": "#2A373E" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#32424A", - "foreground": "#B0BEC5" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#314549", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#314549" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#263238", - "borderColor": "#263238", - "foreground": "#009688" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#1E272C", - "inactiveBorderColor": "#263238", - "innerBorderColor": "#32424A", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#263238", - "inactiveBackground": "#1E272C" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#B0BEC5", - "separatorColor": "#32424A", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#1E272C", - "background": "#1E272C", - "borderColor": "#1E272C" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#263238", + "background": "bg", "border": "2,0,2,0", - "foreground": "#B0BEC5", - "translucentBackground": "#263238" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#263238", - "foreground": "#009688", - "indeterminateEndColor": "#009688", - "indeterminateStartColor": "#009688", - "progressColor": "#009688", - "selectionBackground": "#425B67", - "trackColor": "#425B67" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#009688" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#263238", - "disabledText": "#415967", - "foreground": "#B0BEC5" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#607D8B", - "acceleratorSelectionForeground": "#607D8B", - "background": "#263238", - "disabledBackground": "#263238", - "disabledForeground": "#415967", - "foreground": "#B0BEC5", - "selectionBackground": "#546E7A", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#2A373E", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#263238", - "hoverThumbBorderColor": "#009688", - "hoverThumbColor": "#009688", - "hoverTrackColor": "#26323830", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#009688", - "hoverThumbColor": "#009688", - "hoverTrackColor": "#26323830", - "thumbBorderColor": "#00968870", - "thumbColor": "#00968870", - "trackColor": "#26323830", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#009688", - "hoverThumbColor": "#009688", - "hoverTrackColor": "#26323830", - "thumbBorderColor": "#00968870", - "thumbColor": "#00968870", - "trackColor": "#26323830" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#425B67", - "thumbBorderColor": "#00968870", - "thumbColor": "#00968870", - "trackColor": "#26323830", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#009688", - "hoverThumbColor": "#009688", - "hoverTrackColor": "#26323830", - "thumbBorderColor": "#00968870", - "thumbColor": "#00968870", - "trackColor": "#26323830" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#1E272C", - "foreground": "#607D8B" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#263238" + "background": "bg" }, "List": { - "separatorForeground": "#607D8B", - "separatorColor": "#2A373E" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#263238", - "borderColor": "#1E272C", - "infoForeground": "#607D8B" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#425B67" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#009688", - "startBackground": "#009688", - "endColor": "#009688", - "startColor": "#009688" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#1E272C", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#314549" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#607D8B", - "Repeated.File.Foreground": "#B0BEC5" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#32424A", - "foreground": "#32424A", - "separatorColor": "#32424A" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#263238" + "background": "hc" }, "Slider": { - "background": "#263238", - "buttonBorderColor": "#009688", - "buttonColor": "#009688", - "foreground": "#B0BEC5", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#32424A", - "trackColor": "#314549", - "trackWidth": 7, - "thumb": "#009688" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#425B67", - "borderColor": "#2A373E", - "foreground": "#B0BEC5", - "errorForeground": "#B0BEC5" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#263238", + "background": "bg", "border": "3,3,3,3", - "foreground": "#B0BEC5", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#263238", - "highlight": "#263238" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#32424A", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#263238", - "hoverBackground": "#425B67", - "LightEditBackground": "#314549" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#263238", - "contentAreaColor": "#425B67", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#2A373E", - "disabledForeground": "#415967", - "disabledUnderlineColor": "#415967", - "focus": "#314549", - "focusColor": "#314549", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#B0BEC5", - "highlight": "#2A373E", - "hoverColor": "#425B67", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#009688" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#263238", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#1E272C", - "background": "#263238", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#415967", - "dropLineColor": "#009688", - "dropLineShortColor": "#009688", - "focusCellBackground": "#314549", - "focusCellForeground": "#FFFFFF", - "foreground": "#B0BEC5", - "gridColor": "#263238", - "highlightOuter": "#314549", - "hoverBackground": "#546E7A70", - "hoverInactiveBackground": "#314549", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#607D8B", - "lightSelectionInactiveBackground": "#32424A", - "selectionBackground": "#314549", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#314549", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#B0BEC5", - "stripeColor": "#1E272C" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#263238", - "borderColor": "#263238", - "bottomSeparatorColor": "#32424A", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#415967", - "foreground": "#B0BEC5", - "focusCellBackground": "#314549", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#32424A" + "separatorColor": "second" }, - "text": "#607D8B", - "textInactiveText": "#607D8B", - "textText": "#607D8B", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#263238", - "caretForeground": "#009688", - "foreground": "#B0BEC5", - "inactiveForeground": "#415967", - "selectionBackground": "#314549", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#263238", - "caretForeground": "#009688", - "foreground": "#B0BEC5", - "inactiveForeground": "#415967", - "selectionBackground": "#314549", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#263238", - "caretForeground": "#009688", - "foreground": "#B0BEC5", - "inactiveForeground": "#415967", - "selectionBackground": "#314549", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#1E272C", - "Button.hoverBackground": "#425B67", - "inactiveBackground": "#263238", - "infoForeground": "#607D8B", - "inactiveInfoForeground": "#607D8B" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#B0BEC5", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#2E3C43", - "buttonColor": "#B0BEC5", - "disabledText": "#415967", - "foreground": "#B0BEC5", - "offForeground": "#263238", - "offBackground": "#263238", - "onBackground": "#009688", - "onForeground": "#009688" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#263238", - "borderHandleColor": "#607D8B", - "floatingForeground": "#607D8B", - "foreground": "#B0BEC5" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#263238", - "Actions.infoForeground": "#607D8B", - "background": "#1E272C", - "borderColor": "#2A373E", - "foreground": "#B0BEC5", - "infoForeground": "#607D8B", - "separatorColor": "#2A373E", - "shortcutForeground": "#607D8B" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#314549", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#1E272C" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#263238", - "borderColor": "#32424A", - "inactiveBackground": "#263238" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#263238" + "background": "bg" }, "HeaderTab": { - "borderColor": "#425B67", - "hoverBackground": "#425B67", - "hoverInactiveBackground": "#425B67", - "inactiveUnderlineColor": "#009688", - "selectedBackground": "#1E272C", - "selectedInactiveBackground": "#1E272C", - "underlineColor": "#009688", - "underlinedTabBackground": "#314549", - "underlinedTabInactiveBackground": "#32424A", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#B0BEC5" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#263238", - "foreground": "#607D8B", - "hash": "#2A373E", - "hoverBackground": "#546E7A70", - "hoverInactiveBackground": "#314549", - "modifiedItemForeground": "#009688", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#546E7A70", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#546E7A70", - "textBackground": "#263238" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#2A373E", - "Canvas.background": "#1E272C", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#263238", - "foreground": "#B0BEC5" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#2A373E", - "background": "#263238", - "foreground": "#B0BEC5", - "hoverBorderColor": "#425B67" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#2A373E", - "hoverBorderColor": "#425B67" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#1E272C", - "highStroke.foreground": "#B0BEC5", - "Label.foreground": "#607D8B", - "List.selectionBackground": "#546E7A70", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#2A373E", - "Component.foreground": "#B0BEC5", - "ConstraintSetText.foreground": "#607D8B", - "ConstraintSet.background": "#32424A", - "CSPanel.SelectedFocusBackground": "#546E7A", - "CSPanel.SelectedBackground": "#546E7A70", - "cs_FocusText.infoForeground": "#607D8B", - "CursorTextColor.foreground": "#B0BEC5", - "HoverColor.disabledBackground": "#415967", - "motionGraph.background": "#263238", - "Notification.background": "#1E272C", - "ourAvg.background": "#32424A", - "ourCS.background": "#32424A", - "ourCS_Border.borderColor": "#2A373E", - "ourCS_TextColor.foreground": "#607D8B", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#314549", - "ourCS_SelectedBorder.pressedBorderColor": "#425B67", - "ourML_BarColor.separatorColor": "#2A373E", - "PrimaryPanel.background": "#1E272C", - "SecondaryPanel.background": "#263238", - "SecondaryPanel.header.foreground": "#607D8B", - "SecondaryPanel.header.background": "#1E272C", - "timeLine.disabledBorderColor": "#2A373E" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#2A373E", - "background": "#263238" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#B0BEC5", + "percent.foreground": "fg", "Placeholder": { - "background": "#263238", - "borderColor": "#2A373E", - "foreground": "#B0BEC5", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#263238", - "stroke.acceleratorForeground": "#607D8B" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#1E272C", - "errorBorderColor": "#1E272C", - "warningBackground": "#1E272C", - "warningBorderColor": "#1E272C" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#263238" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#425B67" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#009688", - "otherIconColor": "#607D8B", - "remoteBranchIconColor": "#B0BEC5", - "tagIconColor": "#607D8B" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#009688", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#415967", - "localTagIconColor": "#607D8B", - "mqTagIconColor": "#607D8B", - "tagIconColor": "#607D8B", - "tipIconColor": "#607D8B" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#607D8B", - "Commit.currentBranchBackground": "#32424A", - "Commit.hoveredBackground": "#546E7A70" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#425B67" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#263238", - "foreground": "#B0BEC5" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#263238", - "background": "#263238", - "borderColor": "#263238", - "captionBackground": "#1E272C", - "captionForeground": "#B0BEC5", - "Details.background": "#263238", - "footerBackground": "#1E272C", - "footerForeground": "#B0BEC5", - "headerBackground": "#263238", - "headerForeground": "#B0BEC5", - "List.background": "#1E272C", - "separatorColor": "#2A373E", - "SidePanel.background": "#32424A", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#1E272C", - "actions.selectionBackground": "#425B67", - "background": "#32424A", - "selectionBackground": "#546E7A", - "selectionInactiveBackground": "#32424A" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#263238", - "windowBorder": "#2A373E", - "windowText": "#607D8B", - "Window.border": "#2A373E" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#1E272C", - "#6B6B6B": "#607D8B", - "#A7A7A7": "#263238", - "#3D6185": "#009688", - "#466D94": "#009688", - "#3C3F41": "#263238", - "#545556": "#415967", - "#606060": "#415967", - "#9AA7B0": "#B0BEC5", - "#675133": "#009688", - "Actions.Blue": "#82aaff", - "Actions.Green": "#c3e88d", - "Actions.Grey": "#607D8B", - "Actions.GreyInline": "#546e7a", - "Actions.GreyInline.Dark": "#B0BEC5", - "Actions.Red": "#f07178", - "Actions.Yellow": "#ffcb6b", - "Checkbox.Background.Default": "#1E272C", - "Checkbox.Background.Default.Dark": "#1E272C", - "Checkbox.Background.Disabled": "#2E3C43", - "Checkbox.Background.Disabled.Dark": "#2E3C43", - "Checkbox.Border.Default": "#2A373E", - "Checkbox.Border.Default.Dark": "#2A373E", - "Checkbox.Border.Disabled": "#415967", - "Checkbox.Border.Disabled.Dark": "#415967", - "Checkbox.Focus.Thin.Default": "#009688", - "Checkbox.Focus.Thin.Default.Dark": "#009688", - "Checkbox.Focus.Wide": "#009688", - "Checkbox.Focus.Wide.Dark": "#009688", - "Checkbox.Foreground.Disabled": "#415967", - "Checkbox.Foreground.Disabled.Dark": "#415967", - "Checkbox.Background.Selected": "#009688", - "Checkbox.Background.Selected.Dark": "#263238", - "Checkbox.Border.Selected": "#009688", - "Checkbox.Border.Selected.Dark": "#009688", - "Checkbox.Foreground.Selected": "#009688", - "Checkbox.Foreground.Selected.Dark": "#009688", - "Checkbox.Focus.Thin.Selected": "#B0BEC5", - "Checkbox.Focus.Thin.Selected.Dark": "#B0BEC5", - "Objects.Grey": "#546e7a", - "Objects.Blue": "#82aaff", - "Objects.RedStatus": "#f07178", - "Objects.Red": "#f07178", - "Objects.Pink": "#c792ea", - "Objects.Yellow": "#ffcb6b", - "Objects.Green": "#c3e88d", - "Objects.Purple": "#c792ea", - "Objects.BlackText": "#B0BEC5", - "Objects.YellowDark": "#f78c6c", - "Objects.GreenAndroid": "#c3e88d" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Palenight Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Palenight Contrast.theme.json index b14a8e4b..9b38640e 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Palenight Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Palenight Contrast.theme.json @@ -2,1004 +2,1089 @@ "name": "Material Palenight Contrast", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#292D3E", + "bg30": "#292D3E30", + "fg": "#A6ACCD", + "text": "#676E95", + "selBg": "#4C578B", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#2b2a3e", + "excl": "#2f2e43", + "second": "#34324a", + "dis": "#515772", + "accent": "#ab47bc", + "accent2": "#ab47bc2", + "accent50": "#ab47bc50", + "accent70": "#ab47bc70", + "cs": "#202331", + "button": "#303348", + "table": "#414863", + "tree": "#676E9550", + "hl": "#444267", + "notif": "#202331", + "hc": "#202331", + "white": "#eeffff", + "blue": "#82aaff", + "red": "#f07178", + "yellow": "#ffcb6b", + "green": "#c3e88d", + "gray": "#676E95", + "purple": "#c792ea", + "orange": "#f78c6c" + }, "editorScheme": "colors/Material Palenight.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#676E95", - "background": "#292D3E", - "borderColor": "#2b2a3e", - "disabledBackground": "#2f2e43", - "disabledForeground": "#515772", - "disabledText": "#515772", - "focusColor": "#444267", - "focusedBorderColor": "#ab47bc", - "foreground": "#A6ACCD", - "inactiveBackground": "#2f2e43", - "inactiveForeground": "#676E95", - "infoForeground": "#676E95", - "selectionBackground": "#717CB470", - "selectionBackgroundInactive": "#34324a", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#34324a", - "separatorColor": "#2b2a3e" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#292D3E", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#ab47bc50", - "hoverBorderColor": "#ab47bc50", - "hoverSeparatorColor": "#303348", - "focusedBorderColor": "#ab47bc50", - "pressedBackground": "#ab47bc50", - "pressedBorderColor": "#ab47bc50" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#717CB470" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#292D3E", - "Borders.color": "#2b2a3e", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#292D3E", + "background": "bg", "default": { - "endBackground": "#414863", - "endBorderColor": "#414863", - "foreground": "#FFFFFF", - "focusColor": "#ab47bc", - "focusedBorderColor": "#ab47bc", - "shadowColor": "#414863", - "startBackground": "#414863", - "startBorderColor": "#414863" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#303348", - "disabledText": "#515772", - "endBackground": "#303348", - "endBorderColor": "#303348", - "focus": "#444267", - "focusedBorderColor": "#ab47bc", - "foreground": "#676E95", - "highlight": "#FFFFFF", - "mt.background": "#303348", - "mt.foreground": "#676E95", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#414863", - "mt.selection.color2": "#414863", - "startBackground": "#303348", - "startBorderColor": "#303348", - "shadowColor": "#303348", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#2b2a3e", - "Tooltip.background": "#202331" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#202331", - "selectionBackground": "#717CB470" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#292D3E", - "disabledText": "#515772", - "foreground": "#A6ACCD", - "select": "#ab47bc" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#676E95", - "acceleratorSelectionForeground": "#676E95", - "background": "#292D3E", - "disabledBackground": "#292D3E", - "disabledForeground": "#515772", - "foreground": "#A6ACCD", - "selectionBackground": "#717CB470", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#A6ACCD", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#ab47bc", - "dropdownBorder": "#34324a", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#292D3E", - "foreground": "#A6ACCD", - "swatchesDefaultRecentColor": "#A6ACCD" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#303348", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#303348", - "disabledIconColor": "#515772", - "iconColor": "#A6ACCD", - "nonEditableBackground": "#292D3E" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#202331", - "buttonBackground": "#303348", - "darcula.hoveredArrowButtonForeground": "#ab47bc", - "disabledForeground": "#515772", - "foreground": "#A6ACCD", - "modifiedItemForeground": "#ab47bc", - "nonEditableBackground": "#34324a", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#414863", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#2b2a3e", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#34324a", - "foreground": "#A6ACCD", - "infoForeground": "#676E95", - "matchForeground": "#ab47bc", - "matchSelectionForeground": "#ab47bc", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#676E95", - "selectionInactiveBackground": "#444267", - "selectionBackground": "#717CB470", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#444267", - "disabledBorderColor": "#303348", - "focusColor": "#ab47bc", - "focusedBorderColor": "#ab47bc", - "hoverIconColor": "#ab47bc", - "infoForeground": "#676E95", - "iconColor": "#A6ACCD" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#292D3E", - "controlText": "#676E95", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#ab47bc", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#676E95", - "changedValueForeground": "#ab47bc", - "errorMessageForeground": "#f07178", - "evaluatingExpressionForeground": "#676E95", - "exceptionForeground": "#ffcb6b", - "modifyingValueForeground": "#ab47bc", - "valueForeground": "#ab47bc" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#444267", - "underlinedTabBackground": "#444267" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#444267" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#292D3E", - "borderColor": "#292D3E", - "hoverBackground": "#414863", - "hoverColor": "#202331", - "hoverMaskColor": "#444267", - "inactiveColoredTabBackground": "#292D3E", - "inactiveColoredFileBackground": "#303348", - "inactiveUnderlineColor": "#ab47bc", - "inactiveMaskColor": "#202331", - "underlineColor": "#ab47bc", - "underlinedTabBackground": "#414863", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#292D3E", - "DialogWrapper.southPanelBackground": "#292D3E", - "DialogWrapper.southPanelDivider": "#292D3E", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#292D3E", - "areaBorderColor": "#292D3E", - "areaForeground": "#A6ACCD" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#202331", - "foreground": "#A6ACCD", - "shortcutForeground": "#676E95" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#202331", - "caretForeground": "#ab47bc", - "foreground": "#A6ACCD", - "inactiveBackground": "#292D3E", - "inactiveForeground": "#515772", - "selectionBackground": "#717CB470", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#34324a", - "hoverBackground": "#444267", - "hoverColor": "#444267", - "hoverMaskColor": "#444267", - "inactiveMaskColor": "#292D3E", - "inactiveColoredFileBackground": "#292D3E", - "inactiveUnderlineColor": "#515772", - "selectedForeground": "#A6ACCD", - "selectedBackground": "#414863", - "underlineColor": "#ab47bc", - "underlinedTabBackground": "#414863", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#292D3E", - "borderColor": "#34324a", - "hoverBackground": "#444267", - "hoverColor": "#444267", - "inactiveUnderlineColor": "#ab47bc", - "underlineColor": "#ab47bc", - "underlinedTabBackground": "#414863", - "underlinedTabForeground": "#A6ACCD" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#2f2e43", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#2b2a3e", + "Focus.color": "border", "FormattedTextField": { - "background": "#202331", - "caretForeground": "#ab47bc", - "foreground": "#A6ACCD", - "inactiveBackground": "#303348", - "inactiveForeground": "#515772", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#414863" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#202331", "Group": { - "disabledSeparatorColor": "#2b2a3e", - "separatorColor": "#2b2a3e" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#676E95", - "lineSeparatorColor": "#292D3E" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#292D3E", - "inactive": "#202331" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#292D3E", - "borderColor": "#2b2a3e", - "foreground": "#A6ACCD", - "infoForeground": "#676E95", - "shortcutForeground": "#676E95" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#ab47bc", - "inactiveCaption": "#34324a", - "inactiveCaptionBorder": "#292D3E", - "inactiveCaptionText": "#676E95", - "info": "#676E95", - "infoText": "#676E95", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#2b2a3e", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#292D3E" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#A6ACCD", - "background": "#292D3E", - "inactiveTitleForeground": "#676E95" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#292D3E", - "disabledForeground": "#515772", - "disabledShadow": "#292D3E", - "disabledText": "#515772", - "foreground": "#A6ACCD", - "infoForeground": "#676E95", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#A6ACCD" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#ab47bc", - "hoverForeground": "#ab47bc", - "pressedForeground": "#ab47bc", - "secondaryForeground": "#676E95", - "visitedForeground": "#ab47bc" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#ab47bc", + "link.foreground": "accent", "List": { - "background": "#34324a", - "foreground": "#A6ACCD", - "hoverBackground": "#676E95", - "hoverInactiveBackground": "#414863", - "selectionBackground": "#717CB470", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#676E95" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#292D3E", - "branchColor": "#A6ACCD", - "contrast": "#202331", - "foreground": "#A6ACCD", - "mergeCommits": "#303348", - "primaryColor": "#676E95", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#292D3E", - "tab.borderColor": "#ab47bc", - "tagColor": "#676E95" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#34324a", - "usedColor": "#444267", - "usedBackground": "#444267" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#676E95", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#292D3E", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#34324a", - "disabledBackground": "#34324a", - "disabledForeground": "#515772", - "foreground": "#A6ACCD", - "selectionBackground": "#717CB470", - "selectionForeground": "#FFFFFF", - "separatorColor": "#2b2a3e" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#202331", - "borderColor": "#292D3E", - "disabledBackground": "#292D3E", - "disabledForeground": "#515772", - "foreground": "#A6ACCD", - "highlight": "#292D3E", - "selectionBackground": "#717CB470", - "selectionForeground": "#FFFFFF", - "shadow": "#202331" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#676E95", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#292D3E", - "disabledBackground": "#292D3E", - "disabledForeground": "#515772", - "foreground": "#A6ACCD", - "selectionBackground": "#717CB470", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#A6ACCD", - "borderColor": "#292D3E" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#292D3E" + "background": "bg" }, "SearchField": { - "background": "#202331" + "background": "hc" } }, - "NewPSD.warning": "#ab47bc", + "NewPSD.warning": "accent", "Notification": { - "background": "#202331", - "borderColor": "#202331", - "errorBackground": "#202331", - "errorBorderColor": "#202331", - "foreground": "#A6ACCD", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#303348", - "foreground": "#A6ACCD", - "innerBorderColor": "#303348" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#202331", - "errorBorderColor": "#202331", - "informativeBackground": "#202331", - "informativeBorderColor": "#202331", - "warningBackground": "#202331", - "warningBorderColor": "#202331" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#2b2a3e", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#292D3E", - "foreground": "#A6ACCD", - "messageForeground": "#A6ACCD" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#303348", - "focusedColor": "#ab47bc", - "disabledColor": "#515772" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#292D3E", - "foreground": "#A6ACCD" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#34324a", - "borderColor": "#414863", - "currentOverloadBackground": "#444267", - "currentParameterForeground": "#ab47bc", - "disabledForeground": "#515772", - "foreground": "#A6ACCD", - "infoForeground": "#676E95", - "lineSeparatorColor": "#414863" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#202331", - "capsLockIconColor": "#ab47bc", - "caretForeground": "#ab47bc", - "foreground": "#A6ACCD", - "inactiveForeground": "#515772", - "selectionBackground": "#414863", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#292D3E", - "disabledForeground": "#515772", - "eapTagBackground": "#444267", - "hoverBackground": "#676E95", - "lightSelectionBackground": "#414863", - "paidTagBackground": "#444267", - "selectionBackground": "#717CB470", - "tagForeground": "#ab47bc", - "tagBackground": "#444267", - "trialTagBackground": "#444267", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#303348", - "installBorderColor": "#303348", - "installForeground": "#A6ACCD", - "installFocusedBackground": "#444267", - "installFillForeground": "#515772", - "installFillBackground": "#303348", - "updateBackground": "#ab47bc", - "updateBorderColor": "#303348", - "updateForeground": "#A6ACCD" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#202331", - "borderColor": "#2b2a3e" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#34324a", - "foreground": "#A6ACCD" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#414863", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#414863" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#292D3E", - "borderColor": "#292D3E", - "foreground": "#ab47bc" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#202331", - "inactiveBorderColor": "#292D3E", - "innerBorderColor": "#34324a", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#292D3E", - "inactiveBackground": "#202331" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#A6ACCD", - "separatorColor": "#34324a", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#202331", - "background": "#202331", - "borderColor": "#202331" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#292D3E", + "background": "bg", "border": "2,0,2,0", - "foreground": "#A6ACCD", - "translucentBackground": "#292D3E" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#292D3E", - "foreground": "#ab47bc", - "indeterminateEndColor": "#ab47bc", - "indeterminateStartColor": "#ab47bc", - "progressColor": "#ab47bc", - "selectionBackground": "#444267", - "trackColor": "#444267" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#ab47bc" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#292D3E", - "disabledText": "#515772", - "foreground": "#A6ACCD" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#676E95", - "acceleratorSelectionForeground": "#676E95", - "background": "#292D3E", - "disabledBackground": "#292D3E", - "disabledForeground": "#515772", - "foreground": "#A6ACCD", - "selectionBackground": "#717CB470", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#2b2a3e", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#292D3E", - "hoverThumbBorderColor": "#ab47bc", - "hoverThumbColor": "#ab47bc", - "hoverTrackColor": "#292D3E30", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#ab47bc", - "hoverThumbColor": "#ab47bc", - "hoverTrackColor": "#292D3E30", - "thumbBorderColor": "#ab47bc70", - "thumbColor": "#ab47bc70", - "trackColor": "#292D3E30", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#ab47bc", - "hoverThumbColor": "#ab47bc", - "hoverTrackColor": "#292D3E30", - "thumbBorderColor": "#ab47bc70", - "thumbColor": "#ab47bc70", - "trackColor": "#292D3E30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#444267", - "thumbBorderColor": "#ab47bc70", - "thumbColor": "#ab47bc70", - "trackColor": "#292D3E30", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#ab47bc", - "hoverThumbColor": "#ab47bc", - "hoverTrackColor": "#292D3E30", - "thumbBorderColor": "#ab47bc70", - "thumbColor": "#ab47bc70", - "trackColor": "#292D3E30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#202331", - "foreground": "#676E95" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#292D3E" + "background": "bg" }, "List": { - "separatorForeground": "#676E95", - "separatorColor": "#2b2a3e" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#292D3E", - "borderColor": "#202331", - "infoForeground": "#676E95" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#444267" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#ab47bc", - "startBackground": "#ab47bc", - "endColor": "#ab47bc", - "startColor": "#ab47bc" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#202331", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#414863" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#676E95", - "Repeated.File.Foreground": "#A6ACCD" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#34324a", - "foreground": "#34324a", - "separatorColor": "#34324a" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#202331" + "background": "hc" }, "Slider": { - "background": "#292D3E", - "buttonBorderColor": "#ab47bc", - "buttonColor": "#ab47bc", - "foreground": "#A6ACCD", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#34324a", - "trackColor": "#414863", - "trackWidth": 7, - "thumb": "#ab47bc" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#444267", - "borderColor": "#2b2a3e", - "foreground": "#A6ACCD", - "errorForeground": "#A6ACCD" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#292D3E", + "background": "bg", "border": "3,3,3,3", - "foreground": "#A6ACCD", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#292D3E", - "highlight": "#202331" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#34324a", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#292D3E", - "hoverBackground": "#444267", - "LightEditBackground": "#414863" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#292D3E", - "contentAreaColor": "#444267", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#2b2a3e", - "disabledForeground": "#515772", - "disabledUnderlineColor": "#515772", - "focus": "#414863", - "focusColor": "#414863", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#A6ACCD", - "highlight": "#2b2a3e", - "hoverColor": "#444267", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#ab47bc" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#202331", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#202331", - "background": "#292D3E", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#515772", - "dropLineColor": "#ab47bc", - "dropLineShortColor": "#ab47bc", - "focusCellBackground": "#414863", - "focusCellForeground": "#FFFFFF", - "foreground": "#A6ACCD", - "gridColor": "#292D3E", - "highlightOuter": "#414863", - "hoverBackground": "#676E95", - "hoverInactiveBackground": "#414863", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#676E95", - "lightSelectionInactiveBackground": "#34324a", - "selectionBackground": "#414863", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#414863", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#A6ACCD", - "stripeColor": "#202331" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#292D3E", - "borderColor": "#292D3E", - "bottomSeparatorColor": "#34324a", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#515772", - "foreground": "#A6ACCD", - "focusCellBackground": "#414863", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#34324a" + "separatorColor": "second" }, - "text": "#676E95", - "textInactiveText": "#676E95", - "textText": "#676E95", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#202331", - "caretForeground": "#ab47bc", - "foreground": "#A6ACCD", - "inactiveForeground": "#515772", - "selectionBackground": "#414863", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#202331", - "caretForeground": "#ab47bc", - "foreground": "#A6ACCD", - "inactiveForeground": "#515772", - "selectionBackground": "#414863", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#202331", - "caretForeground": "#ab47bc", - "foreground": "#A6ACCD", - "inactiveForeground": "#515772", - "selectionBackground": "#414863", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#202331", - "Button.hoverBackground": "#444267", - "inactiveBackground": "#292D3E", - "infoForeground": "#676E95", - "inactiveInfoForeground": "#676E95" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#A6ACCD", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#303348", - "buttonColor": "#A6ACCD", - "disabledText": "#515772", - "foreground": "#A6ACCD", - "offForeground": "#292D3E", - "offBackground": "#292D3E", - "onBackground": "#ab47bc", - "onForeground": "#ab47bc" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#202331", - "borderHandleColor": "#676E95", - "floatingForeground": "#676E95", - "foreground": "#A6ACCD" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#292D3E", - "Actions.infoForeground": "#676E95", - "background": "#202331", - "borderColor": "#2b2a3e", - "foreground": "#A6ACCD", - "infoForeground": "#676E95", - "separatorColor": "#2b2a3e", - "shortcutForeground": "#676E95" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#414863", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#202331" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#292D3E", - "borderColor": "#34324a", - "inactiveBackground": "#292D3E" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#292D3E" + "background": "bg" }, "HeaderTab": { - "borderColor": "#444267", - "hoverBackground": "#444267", - "hoverInactiveBackground": "#444267", - "inactiveUnderlineColor": "#ab47bc", - "selectedBackground": "#202331", - "selectedInactiveBackground": "#202331", - "underlineColor": "#ab47bc", - "underlinedTabBackground": "#414863", - "underlinedTabInactiveBackground": "#34324a", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#A6ACCD" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#202331", - "foreground": "#676E95", - "hash": "#2b2a3e", - "hoverBackground": "#676E95", - "hoverInactiveBackground": "#414863", - "modifiedItemForeground": "#ab47bc", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#676E95", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#676E95", - "textBackground": "#202331" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#2b2a3e", - "Canvas.background": "#202331", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#292D3E", - "foreground": "#A6ACCD" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#2b2a3e", - "background": "#292D3E", - "foreground": "#A6ACCD", - "hoverBorderColor": "#444267" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#2b2a3e", - "hoverBorderColor": "#444267" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#202331", - "highStroke.foreground": "#A6ACCD", - "Label.foreground": "#676E95", - "List.selectionBackground": "#676E95", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#2b2a3e", - "Component.foreground": "#A6ACCD", - "ConstraintSetText.foreground": "#676E95", - "ConstraintSet.background": "#34324a", - "CSPanel.SelectedFocusBackground": "#717CB470", - "CSPanel.SelectedBackground": "#676E95", - "cs_FocusText.infoForeground": "#676E95", - "CursorTextColor.foreground": "#A6ACCD", - "HoverColor.disabledBackground": "#515772", - "motionGraph.background": "#292D3E", - "Notification.background": "#202331", - "ourAvg.background": "#34324a", - "ourCS.background": "#34324a", - "ourCS_Border.borderColor": "#2b2a3e", - "ourCS_TextColor.foreground": "#676E95", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#414863", - "ourCS_SelectedBorder.pressedBorderColor": "#444267", - "ourML_BarColor.separatorColor": "#2b2a3e", - "PrimaryPanel.background": "#202331", - "SecondaryPanel.background": "#292D3E", - "SecondaryPanel.header.foreground": "#676E95", - "SecondaryPanel.header.background": "#202331", - "timeLine.disabledBorderColor": "#2b2a3e" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#2b2a3e", - "background": "#292D3E" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#A6ACCD", + "percent.foreground": "fg", "Placeholder": { - "background": "#292D3E", - "borderColor": "#2b2a3e", - "foreground": "#A6ACCD", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#292D3E", - "stroke.acceleratorForeground": "#676E95" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#202331", - "errorBorderColor": "#202331", - "warningBackground": "#202331", - "warningBorderColor": "#202331" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#292D3E" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#444267" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#ab47bc", - "otherIconColor": "#676E95", - "remoteBranchIconColor": "#A6ACCD", - "tagIconColor": "#676E95" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#ab47bc", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#515772", - "localTagIconColor": "#676E95", - "mqTagIconColor": "#676E95", - "tagIconColor": "#676E95", - "tipIconColor": "#676E95" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#676E95", - "Commit.currentBranchBackground": "#34324a", - "Commit.hoveredBackground": "#676E95" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#444267" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#202331", - "foreground": "#A6ACCD" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#292D3E", - "background": "#292D3E", - "borderColor": "#292D3E", - "captionBackground": "#202331", - "captionForeground": "#A6ACCD", - "Details.background": "#292D3E", - "footerBackground": "#202331", - "footerForeground": "#A6ACCD", - "headerBackground": "#292D3E", - "headerForeground": "#A6ACCD", - "List.background": "#202331", - "separatorColor": "#2b2a3e", - "SidePanel.background": "#34324a", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#202331", - "actions.selectionBackground": "#444267", - "background": "#34324a", - "selectionBackground": "#717CB470", - "selectionInactiveBackground": "#34324a" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#202331", - "windowBorder": "#2b2a3e", - "windowText": "#676E95", - "Window.border": "#2b2a3e" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#202331", - "#6B6B6B": "#676E95", - "#A7A7A7": "#292D3E", - "#3D6185": "#ab47bc", - "#466D94": "#ab47bc", - "#3C3F41": "#292D3E", - "#545556": "#515772", - "#606060": "#515772", - "#9AA7B0": "#A6ACCD", - "#675133": "#ab47bc", - "Actions.Blue": "#82aaff", - "Actions.Green": "#c3e88d", - "Actions.Grey": "#676E95", - "Actions.GreyInline": "#676E95", - "Actions.GreyInline.Dark": "#A6ACCD", - "Actions.Red": "#f07178", - "Actions.Yellow": "#ffcb6b", - "Checkbox.Background.Default": "#202331", - "Checkbox.Background.Default.Dark": "#202331", - "Checkbox.Background.Disabled": "#2f2e43", - "Checkbox.Background.Disabled.Dark": "#2f2e43", - "Checkbox.Border.Default": "#2b2a3e", - "Checkbox.Border.Default.Dark": "#2b2a3e", - "Checkbox.Border.Disabled": "#515772", - "Checkbox.Border.Disabled.Dark": "#515772", - "Checkbox.Focus.Thin.Default": "#ab47bc", - "Checkbox.Focus.Thin.Default.Dark": "#ab47bc", - "Checkbox.Focus.Wide": "#ab47bc", - "Checkbox.Focus.Wide.Dark": "#ab47bc", - "Checkbox.Foreground.Disabled": "#515772", - "Checkbox.Foreground.Disabled.Dark": "#515772", - "Checkbox.Background.Selected": "#ab47bc", - "Checkbox.Background.Selected.Dark": "#292D3E", - "Checkbox.Border.Selected": "#ab47bc", - "Checkbox.Border.Selected.Dark": "#ab47bc", - "Checkbox.Foreground.Selected": "#ab47bc", - "Checkbox.Foreground.Selected.Dark": "#ab47bc", - "Checkbox.Focus.Thin.Selected": "#A6ACCD", - "Checkbox.Focus.Thin.Selected.Dark": "#A6ACCD", - "Objects.Grey": "#676E95", - "Objects.Blue": "#82aaff", - "Objects.RedStatus": "#f07178", - "Objects.Red": "#f07178", - "Objects.Pink": "#c792ea", - "Objects.Yellow": "#ffcb6b", - "Objects.Green": "#c3e88d", - "Objects.Purple": "#c792ea", - "Objects.BlackText": "#A6ACCD", - "Objects.YellowDark": "#f78c6c", - "Objects.GreenAndroid": "#c3e88d" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Palenight.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Palenight.theme.json index 63245370..76588674 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Palenight.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Material Palenight.theme.json @@ -2,1004 +2,1089 @@ "name": "Material Palenight", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#292D3E", + "bg30": "#292D3E30", + "fg": "#A6ACCD", + "text": "#676E95", + "selBg": "#4C578B", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#2b2a3e", + "excl": "#2f2e43", + "second": "#34324a", + "dis": "#515772", + "accent": "#ab47bc", + "accent2": "#ab47bc2", + "accent50": "#ab47bc50", + "accent70": "#ab47bc70", + "cs": "#202331", + "button": "#303348", + "table": "#414863", + "tree": "#676E9550", + "hl": "#444267", + "notif": "#202331", + "hc": "#292D3E", + "white": "#eeffff", + "blue": "#82aaff", + "red": "#f07178", + "yellow": "#ffcb6b", + "green": "#c3e88d", + "gray": "#676E95", + "purple": "#c792ea", + "orange": "#f78c6c" + }, "editorScheme": "colors/Material Palenight.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#676E95", - "background": "#292D3E", - "borderColor": "#2b2a3e", - "disabledBackground": "#2f2e43", - "disabledForeground": "#515772", - "disabledText": "#515772", - "focusColor": "#444267", - "focusedBorderColor": "#ab47bc", - "foreground": "#A6ACCD", - "inactiveBackground": "#2f2e43", - "inactiveForeground": "#676E95", - "infoForeground": "#676E95", - "selectionBackground": "#717CB470", - "selectionBackgroundInactive": "#34324a", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#34324a", - "separatorColor": "#2b2a3e" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#292D3E", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#ab47bc50", - "hoverBorderColor": "#ab47bc50", - "hoverSeparatorColor": "#303348", - "focusedBorderColor": "#ab47bc50", - "pressedBackground": "#ab47bc50", - "pressedBorderColor": "#ab47bc50" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#717CB470" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#292D3E", - "Borders.color": "#2b2a3e", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#292D3E", + "background": "bg", "default": { - "endBackground": "#414863", - "endBorderColor": "#414863", - "foreground": "#FFFFFF", - "focusColor": "#ab47bc", - "focusedBorderColor": "#ab47bc", - "shadowColor": "#414863", - "startBackground": "#414863", - "startBorderColor": "#414863" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#303348", - "disabledText": "#515772", - "endBackground": "#303348", - "endBorderColor": "#303348", - "focus": "#444267", - "focusedBorderColor": "#ab47bc", - "foreground": "#676E95", - "highlight": "#FFFFFF", - "mt.background": "#303348", - "mt.foreground": "#676E95", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#414863", - "mt.selection.color2": "#414863", - "startBackground": "#303348", - "startBorderColor": "#303348", - "shadowColor": "#303348", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#2b2a3e", - "Tooltip.background": "#202331" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#202331", - "selectionBackground": "#717CB470" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#292D3E", - "disabledText": "#515772", - "foreground": "#A6ACCD", - "select": "#ab47bc" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#676E95", - "acceleratorSelectionForeground": "#676E95", - "background": "#292D3E", - "disabledBackground": "#292D3E", - "disabledForeground": "#515772", - "foreground": "#A6ACCD", - "selectionBackground": "#717CB470", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#A6ACCD", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#ab47bc", - "dropdownBorder": "#34324a", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#292D3E", - "foreground": "#A6ACCD", - "swatchesDefaultRecentColor": "#A6ACCD" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#303348", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#303348", - "disabledIconColor": "#515772", - "iconColor": "#A6ACCD", - "nonEditableBackground": "#292D3E" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#292D3E", - "buttonBackground": "#303348", - "darcula.hoveredArrowButtonForeground": "#ab47bc", - "disabledForeground": "#515772", - "foreground": "#A6ACCD", - "modifiedItemForeground": "#ab47bc", - "nonEditableBackground": "#34324a", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#414863", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#2b2a3e", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#34324a", - "foreground": "#A6ACCD", - "infoForeground": "#676E95", - "matchForeground": "#ab47bc", - "matchSelectionForeground": "#ab47bc", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#676E95", - "selectionInactiveBackground": "#444267", - "selectionBackground": "#717CB470", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#444267", - "disabledBorderColor": "#303348", - "focusColor": "#ab47bc", - "focusedBorderColor": "#ab47bc", - "hoverIconColor": "#ab47bc", - "infoForeground": "#676E95", - "iconColor": "#A6ACCD" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#292D3E", - "controlText": "#676E95", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#ab47bc", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#676E95", - "changedValueForeground": "#ab47bc", - "errorMessageForeground": "#f07178", - "evaluatingExpressionForeground": "#676E95", - "exceptionForeground": "#ffcb6b", - "modifyingValueForeground": "#ab47bc", - "valueForeground": "#ab47bc" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#444267", - "underlinedTabBackground": "#444267" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#444267" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#292D3E", - "borderColor": "#292D3E", - "hoverBackground": "#414863", - "hoverColor": "#292D3E", - "hoverMaskColor": "#444267", - "inactiveColoredTabBackground": "#292D3E", - "inactiveColoredFileBackground": "#303348", - "inactiveUnderlineColor": "#ab47bc", - "inactiveMaskColor": "#292D3E", - "underlineColor": "#ab47bc", - "underlinedTabBackground": "#414863", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#292D3E", - "DialogWrapper.southPanelBackground": "#292D3E", - "DialogWrapper.southPanelDivider": "#292D3E", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#292D3E", - "areaBorderColor": "#292D3E", - "areaForeground": "#A6ACCD" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#292D3E", - "foreground": "#A6ACCD", - "shortcutForeground": "#676E95" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#292D3E", - "caretForeground": "#ab47bc", - "foreground": "#A6ACCD", - "inactiveBackground": "#292D3E", - "inactiveForeground": "#515772", - "selectionBackground": "#717CB470", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#34324a", - "hoverBackground": "#444267", - "hoverColor": "#444267", - "hoverMaskColor": "#444267", - "inactiveMaskColor": "#292D3E", - "inactiveColoredFileBackground": "#292D3E", - "inactiveUnderlineColor": "#515772", - "selectedForeground": "#A6ACCD", - "selectedBackground": "#414863", - "underlineColor": "#ab47bc", - "underlinedTabBackground": "#414863", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#292D3E", - "borderColor": "#34324a", - "hoverBackground": "#444267", - "hoverColor": "#444267", - "inactiveUnderlineColor": "#ab47bc", - "underlineColor": "#ab47bc", - "underlinedTabBackground": "#414863", - "underlinedTabForeground": "#A6ACCD" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#2f2e43", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#2b2a3e", + "Focus.color": "border", "FormattedTextField": { - "background": "#292D3E", - "caretForeground": "#ab47bc", - "foreground": "#A6ACCD", - "inactiveBackground": "#303348", - "inactiveForeground": "#515772", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#414863" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#202331", "Group": { - "disabledSeparatorColor": "#2b2a3e", - "separatorColor": "#2b2a3e" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#676E95", - "lineSeparatorColor": "#292D3E" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#292D3E", - "inactive": "#202331" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#292D3E", - "borderColor": "#2b2a3e", - "foreground": "#A6ACCD", - "infoForeground": "#676E95", - "shortcutForeground": "#676E95" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#ab47bc", - "inactiveCaption": "#34324a", - "inactiveCaptionBorder": "#292D3E", - "inactiveCaptionText": "#676E95", - "info": "#676E95", - "infoText": "#676E95", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#2b2a3e", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#292D3E" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#A6ACCD", - "background": "#292D3E", - "inactiveTitleForeground": "#676E95" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#292D3E", - "disabledForeground": "#515772", - "disabledShadow": "#292D3E", - "disabledText": "#515772", - "foreground": "#A6ACCD", - "infoForeground": "#676E95", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#A6ACCD" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#ab47bc", - "hoverForeground": "#ab47bc", - "pressedForeground": "#ab47bc", - "secondaryForeground": "#676E95", - "visitedForeground": "#ab47bc" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#ab47bc", + "link.foreground": "accent", "List": { - "background": "#34324a", - "foreground": "#A6ACCD", - "hoverBackground": "#676E95", - "hoverInactiveBackground": "#414863", - "selectionBackground": "#717CB470", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#676E95" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#292D3E", - "branchColor": "#A6ACCD", - "contrast": "#202331", - "foreground": "#A6ACCD", - "mergeCommits": "#303348", - "primaryColor": "#676E95", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#292D3E", - "tab.borderColor": "#ab47bc", - "tagColor": "#676E95" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#34324a", - "usedColor": "#444267", - "usedBackground": "#444267" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#676E95", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#292D3E", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#34324a", - "disabledBackground": "#34324a", - "disabledForeground": "#515772", - "foreground": "#A6ACCD", - "selectionBackground": "#717CB470", - "selectionForeground": "#FFFFFF", - "separatorColor": "#2b2a3e" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#292D3E", - "borderColor": "#292D3E", - "disabledBackground": "#292D3E", - "disabledForeground": "#515772", - "foreground": "#A6ACCD", - "highlight": "#292D3E", - "selectionBackground": "#717CB470", - "selectionForeground": "#FFFFFF", - "shadow": "#292D3E" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#676E95", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#292D3E", - "disabledBackground": "#292D3E", - "disabledForeground": "#515772", - "foreground": "#A6ACCD", - "selectionBackground": "#717CB470", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#A6ACCD", - "borderColor": "#292D3E" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#292D3E" + "background": "bg" }, "SearchField": { - "background": "#292D3E" + "background": "hc" } }, - "NewPSD.warning": "#ab47bc", + "NewPSD.warning": "accent", "Notification": { - "background": "#202331", - "borderColor": "#202331", - "errorBackground": "#202331", - "errorBorderColor": "#202331", - "foreground": "#A6ACCD", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#303348", - "foreground": "#A6ACCD", - "innerBorderColor": "#303348" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#202331", - "errorBorderColor": "#202331", - "informativeBackground": "#202331", - "informativeBorderColor": "#202331", - "warningBackground": "#202331", - "warningBorderColor": "#202331" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#2b2a3e", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#292D3E", - "foreground": "#A6ACCD", - "messageForeground": "#A6ACCD" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#303348", - "focusedColor": "#ab47bc", - "disabledColor": "#515772" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#292D3E", - "foreground": "#A6ACCD" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#34324a", - "borderColor": "#414863", - "currentOverloadBackground": "#444267", - "currentParameterForeground": "#ab47bc", - "disabledForeground": "#515772", - "foreground": "#A6ACCD", - "infoForeground": "#676E95", - "lineSeparatorColor": "#414863" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#292D3E", - "capsLockIconColor": "#ab47bc", - "caretForeground": "#ab47bc", - "foreground": "#A6ACCD", - "inactiveForeground": "#515772", - "selectionBackground": "#414863", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#292D3E", - "disabledForeground": "#515772", - "eapTagBackground": "#444267", - "hoverBackground": "#676E95", - "lightSelectionBackground": "#414863", - "paidTagBackground": "#444267", - "selectionBackground": "#717CB470", - "tagForeground": "#ab47bc", - "tagBackground": "#444267", - "trialTagBackground": "#444267", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#303348", - "installBorderColor": "#303348", - "installForeground": "#A6ACCD", - "installFocusedBackground": "#444267", - "installFillForeground": "#515772", - "installFillBackground": "#303348", - "updateBackground": "#ab47bc", - "updateBorderColor": "#303348", - "updateForeground": "#A6ACCD" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#292D3E", - "borderColor": "#2b2a3e" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#34324a", - "foreground": "#A6ACCD" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#414863", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#414863" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#292D3E", - "borderColor": "#292D3E", - "foreground": "#ab47bc" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#202331", - "inactiveBorderColor": "#292D3E", - "innerBorderColor": "#34324a", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#292D3E", - "inactiveBackground": "#202331" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#A6ACCD", - "separatorColor": "#34324a", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#202331", - "background": "#202331", - "borderColor": "#202331" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#292D3E", + "background": "bg", "border": "2,0,2,0", - "foreground": "#A6ACCD", - "translucentBackground": "#292D3E" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#292D3E", - "foreground": "#ab47bc", - "indeterminateEndColor": "#ab47bc", - "indeterminateStartColor": "#ab47bc", - "progressColor": "#ab47bc", - "selectionBackground": "#444267", - "trackColor": "#444267" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#ab47bc" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#292D3E", - "disabledText": "#515772", - "foreground": "#A6ACCD" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#676E95", - "acceleratorSelectionForeground": "#676E95", - "background": "#292D3E", - "disabledBackground": "#292D3E", - "disabledForeground": "#515772", - "foreground": "#A6ACCD", - "selectionBackground": "#717CB470", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#2b2a3e", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#292D3E", - "hoverThumbBorderColor": "#ab47bc", - "hoverThumbColor": "#ab47bc", - "hoverTrackColor": "#292D3E30", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#ab47bc", - "hoverThumbColor": "#ab47bc", - "hoverTrackColor": "#292D3E30", - "thumbBorderColor": "#ab47bc70", - "thumbColor": "#ab47bc70", - "trackColor": "#292D3E30", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#ab47bc", - "hoverThumbColor": "#ab47bc", - "hoverTrackColor": "#292D3E30", - "thumbBorderColor": "#ab47bc70", - "thumbColor": "#ab47bc70", - "trackColor": "#292D3E30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#444267", - "thumbBorderColor": "#ab47bc70", - "thumbColor": "#ab47bc70", - "trackColor": "#292D3E30", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#ab47bc", - "hoverThumbColor": "#ab47bc", - "hoverTrackColor": "#292D3E30", - "thumbBorderColor": "#ab47bc70", - "thumbColor": "#ab47bc70", - "trackColor": "#292D3E30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#202331", - "foreground": "#676E95" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#292D3E" + "background": "bg" }, "List": { - "separatorForeground": "#676E95", - "separatorColor": "#2b2a3e" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#292D3E", - "borderColor": "#202331", - "infoForeground": "#676E95" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#444267" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#ab47bc", - "startBackground": "#ab47bc", - "endColor": "#ab47bc", - "startColor": "#ab47bc" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#202331", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#414863" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#676E95", - "Repeated.File.Foreground": "#A6ACCD" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#34324a", - "foreground": "#34324a", - "separatorColor": "#34324a" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#292D3E" + "background": "hc" }, "Slider": { - "background": "#292D3E", - "buttonBorderColor": "#ab47bc", - "buttonColor": "#ab47bc", - "foreground": "#A6ACCD", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#34324a", - "trackColor": "#414863", - "trackWidth": 7, - "thumb": "#ab47bc" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#444267", - "borderColor": "#2b2a3e", - "foreground": "#A6ACCD", - "errorForeground": "#A6ACCD" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#292D3E", + "background": "bg", "border": "3,3,3,3", - "foreground": "#A6ACCD", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#292D3E", - "highlight": "#292D3E" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#34324a", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#292D3E", - "hoverBackground": "#444267", - "LightEditBackground": "#414863" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#292D3E", - "contentAreaColor": "#444267", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#2b2a3e", - "disabledForeground": "#515772", - "disabledUnderlineColor": "#515772", - "focus": "#414863", - "focusColor": "#414863", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#A6ACCD", - "highlight": "#2b2a3e", - "hoverColor": "#444267", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#ab47bc" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#292D3E", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#202331", - "background": "#292D3E", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#515772", - "dropLineColor": "#ab47bc", - "dropLineShortColor": "#ab47bc", - "focusCellBackground": "#414863", - "focusCellForeground": "#FFFFFF", - "foreground": "#A6ACCD", - "gridColor": "#292D3E", - "highlightOuter": "#414863", - "hoverBackground": "#676E95", - "hoverInactiveBackground": "#414863", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#676E95", - "lightSelectionInactiveBackground": "#34324a", - "selectionBackground": "#414863", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#414863", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#A6ACCD", - "stripeColor": "#202331" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#292D3E", - "borderColor": "#292D3E", - "bottomSeparatorColor": "#34324a", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#515772", - "foreground": "#A6ACCD", - "focusCellBackground": "#414863", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#34324a" + "separatorColor": "second" }, - "text": "#676E95", - "textInactiveText": "#676E95", - "textText": "#676E95", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#292D3E", - "caretForeground": "#ab47bc", - "foreground": "#A6ACCD", - "inactiveForeground": "#515772", - "selectionBackground": "#414863", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#292D3E", - "caretForeground": "#ab47bc", - "foreground": "#A6ACCD", - "inactiveForeground": "#515772", - "selectionBackground": "#414863", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#292D3E", - "caretForeground": "#ab47bc", - "foreground": "#A6ACCD", - "inactiveForeground": "#515772", - "selectionBackground": "#414863", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#202331", - "Button.hoverBackground": "#444267", - "inactiveBackground": "#292D3E", - "infoForeground": "#676E95", - "inactiveInfoForeground": "#676E95" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#A6ACCD", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#303348", - "buttonColor": "#A6ACCD", - "disabledText": "#515772", - "foreground": "#A6ACCD", - "offForeground": "#292D3E", - "offBackground": "#292D3E", - "onBackground": "#ab47bc", - "onForeground": "#ab47bc" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#292D3E", - "borderHandleColor": "#676E95", - "floatingForeground": "#676E95", - "foreground": "#A6ACCD" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#292D3E", - "Actions.infoForeground": "#676E95", - "background": "#202331", - "borderColor": "#2b2a3e", - "foreground": "#A6ACCD", - "infoForeground": "#676E95", - "separatorColor": "#2b2a3e", - "shortcutForeground": "#676E95" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#414863", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#202331" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#292D3E", - "borderColor": "#34324a", - "inactiveBackground": "#292D3E" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#292D3E" + "background": "bg" }, "HeaderTab": { - "borderColor": "#444267", - "hoverBackground": "#444267", - "hoverInactiveBackground": "#444267", - "inactiveUnderlineColor": "#ab47bc", - "selectedBackground": "#202331", - "selectedInactiveBackground": "#202331", - "underlineColor": "#ab47bc", - "underlinedTabBackground": "#414863", - "underlinedTabInactiveBackground": "#34324a", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#A6ACCD" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#292D3E", - "foreground": "#676E95", - "hash": "#2b2a3e", - "hoverBackground": "#676E95", - "hoverInactiveBackground": "#414863", - "modifiedItemForeground": "#ab47bc", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#676E95", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#676E95", - "textBackground": "#292D3E" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#2b2a3e", - "Canvas.background": "#202331", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#292D3E", - "foreground": "#A6ACCD" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#2b2a3e", - "background": "#292D3E", - "foreground": "#A6ACCD", - "hoverBorderColor": "#444267" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#2b2a3e", - "hoverBorderColor": "#444267" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#202331", - "highStroke.foreground": "#A6ACCD", - "Label.foreground": "#676E95", - "List.selectionBackground": "#676E95", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#2b2a3e", - "Component.foreground": "#A6ACCD", - "ConstraintSetText.foreground": "#676E95", - "ConstraintSet.background": "#34324a", - "CSPanel.SelectedFocusBackground": "#717CB470", - "CSPanel.SelectedBackground": "#676E95", - "cs_FocusText.infoForeground": "#676E95", - "CursorTextColor.foreground": "#A6ACCD", - "HoverColor.disabledBackground": "#515772", - "motionGraph.background": "#292D3E", - "Notification.background": "#202331", - "ourAvg.background": "#34324a", - "ourCS.background": "#34324a", - "ourCS_Border.borderColor": "#2b2a3e", - "ourCS_TextColor.foreground": "#676E95", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#414863", - "ourCS_SelectedBorder.pressedBorderColor": "#444267", - "ourML_BarColor.separatorColor": "#2b2a3e", - "PrimaryPanel.background": "#202331", - "SecondaryPanel.background": "#292D3E", - "SecondaryPanel.header.foreground": "#676E95", - "SecondaryPanel.header.background": "#202331", - "timeLine.disabledBorderColor": "#2b2a3e" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#2b2a3e", - "background": "#292D3E" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#A6ACCD", + "percent.foreground": "fg", "Placeholder": { - "background": "#292D3E", - "borderColor": "#2b2a3e", - "foreground": "#A6ACCD", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#292D3E", - "stroke.acceleratorForeground": "#676E95" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#202331", - "errorBorderColor": "#202331", - "warningBackground": "#202331", - "warningBorderColor": "#202331" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#292D3E" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#444267" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#ab47bc", - "otherIconColor": "#676E95", - "remoteBranchIconColor": "#A6ACCD", - "tagIconColor": "#676E95" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#ab47bc", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#515772", - "localTagIconColor": "#676E95", - "mqTagIconColor": "#676E95", - "tagIconColor": "#676E95", - "tipIconColor": "#676E95" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#676E95", - "Commit.currentBranchBackground": "#34324a", - "Commit.hoveredBackground": "#676E95" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#444267" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#292D3E", - "foreground": "#A6ACCD" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#292D3E", - "background": "#292D3E", - "borderColor": "#292D3E", - "captionBackground": "#202331", - "captionForeground": "#A6ACCD", - "Details.background": "#292D3E", - "footerBackground": "#202331", - "footerForeground": "#A6ACCD", - "headerBackground": "#292D3E", - "headerForeground": "#A6ACCD", - "List.background": "#202331", - "separatorColor": "#2b2a3e", - "SidePanel.background": "#34324a", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#202331", - "actions.selectionBackground": "#444267", - "background": "#34324a", - "selectionBackground": "#717CB470", - "selectionInactiveBackground": "#34324a" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#292D3E", - "windowBorder": "#2b2a3e", - "windowText": "#676E95", - "Window.border": "#2b2a3e" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#202331", - "#6B6B6B": "#676E95", - "#A7A7A7": "#292D3E", - "#3D6185": "#ab47bc", - "#466D94": "#ab47bc", - "#3C3F41": "#292D3E", - "#545556": "#515772", - "#606060": "#515772", - "#9AA7B0": "#A6ACCD", - "#675133": "#ab47bc", - "Actions.Blue": "#82aaff", - "Actions.Green": "#c3e88d", - "Actions.Grey": "#676E95", - "Actions.GreyInline": "#676E95", - "Actions.GreyInline.Dark": "#A6ACCD", - "Actions.Red": "#f07178", - "Actions.Yellow": "#ffcb6b", - "Checkbox.Background.Default": "#202331", - "Checkbox.Background.Default.Dark": "#202331", - "Checkbox.Background.Disabled": "#2f2e43", - "Checkbox.Background.Disabled.Dark": "#2f2e43", - "Checkbox.Border.Default": "#2b2a3e", - "Checkbox.Border.Default.Dark": "#2b2a3e", - "Checkbox.Border.Disabled": "#515772", - "Checkbox.Border.Disabled.Dark": "#515772", - "Checkbox.Focus.Thin.Default": "#ab47bc", - "Checkbox.Focus.Thin.Default.Dark": "#ab47bc", - "Checkbox.Focus.Wide": "#ab47bc", - "Checkbox.Focus.Wide.Dark": "#ab47bc", - "Checkbox.Foreground.Disabled": "#515772", - "Checkbox.Foreground.Disabled.Dark": "#515772", - "Checkbox.Background.Selected": "#ab47bc", - "Checkbox.Background.Selected.Dark": "#292D3E", - "Checkbox.Border.Selected": "#ab47bc", - "Checkbox.Border.Selected.Dark": "#ab47bc", - "Checkbox.Foreground.Selected": "#ab47bc", - "Checkbox.Foreground.Selected.Dark": "#ab47bc", - "Checkbox.Focus.Thin.Selected": "#A6ACCD", - "Checkbox.Focus.Thin.Selected.Dark": "#A6ACCD", - "Objects.Grey": "#676E95", - "Objects.Blue": "#82aaff", - "Objects.RedStatus": "#f07178", - "Objects.Red": "#f07178", - "Objects.Pink": "#c792ea", - "Objects.Yellow": "#ffcb6b", - "Objects.Green": "#c3e88d", - "Objects.Purple": "#c792ea", - "Objects.BlackText": "#A6ACCD", - "Objects.YellowDark": "#f78c6c", - "Objects.GreenAndroid": "#c3e88d" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Monokai Pro Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Monokai Pro Contrast.theme.json index 75f0c679..d5ba0609 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Monokai Pro Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Monokai Pro Contrast.theme.json @@ -2,1004 +2,1089 @@ "name": "Monokai Pro Contrast", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#2D2A2E", + "bg30": "#2D2A2E30", + "fg": "#fcfcfa", + "text": "#939293", + "selBg": "#6E6C6F", + "selFg": "#ffd866", + "activeFg": "#FFFFFF", + "border": "#2d2a2e", + "excl": "#3a3a3c", + "second": "#403E41", + "dis": "#5b595c", + "accent": "#ffd866", + "accent2": "#ffd8662", + "accent50": "#ffd86650", + "accent70": "#ffd86670", + "cs": "#221F22", + "button": "#403E41", + "table": "#4A474B", + "tree": "#403E41", + "hl": "#5b595c", + "notif": "#363437", + "hc": "#221F22", + "white": "#FCFCFA", + "blue": "#A9DC76", + "red": "#FF6188", + "yellow": "#78DCE8", + "green": "#FFD866", + "gray": "#727072", + "purple": "#FF6188", + "orange": "#AB9DF2" + }, "editorScheme": "colors/Monokai Pro.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#939293", - "background": "#2D2A2E", - "borderColor": "#2d2a2e", - "disabledBackground": "#3a3a3c", - "disabledForeground": "#5b595c", - "disabledText": "#5b595c", - "focusColor": "#5b595c", - "focusedBorderColor": "#ffd866", - "foreground": "#fcfcfa", - "inactiveBackground": "#3a3a3c", - "inactiveForeground": "#939293", - "infoForeground": "#939293", - "selectionBackground": "#6E6C6F", - "selectionBackgroundInactive": "#403E41", - "selectionForeground": "#ffd866", - "selectionInactiveBackground": "#403E41", - "separatorColor": "#2d2a2e" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#2D2A2E", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#ffd86650", - "hoverBorderColor": "#ffd86650", - "hoverSeparatorColor": "#403E41", - "focusedBorderColor": "#ffd86650", - "pressedBackground": "#ffd86650", - "pressedBorderColor": "#ffd86650" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#6E6C6F" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#2D2A2E", - "Borders.color": "#2d2a2e", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#2D2A2E", + "background": "bg", "default": { - "endBackground": "#4A474B", - "endBorderColor": "#4A474B", - "foreground": "#FFFFFF", - "focusColor": "#ffd866", - "focusedBorderColor": "#ffd866", - "shadowColor": "#4A474B", - "startBackground": "#4A474B", - "startBorderColor": "#4A474B" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#403E41", - "disabledText": "#5b595c", - "endBackground": "#403E41", - "endBorderColor": "#403E41", - "focus": "#5b595c", - "focusedBorderColor": "#ffd866", - "foreground": "#939293", - "highlight": "#ffd866", - "mt.background": "#403E41", - "mt.foreground": "#939293", - "mt.selectedForeground": "#ffd866", - "mt.selection.color1": "#4A474B", - "mt.selection.color2": "#4A474B", - "startBackground": "#403E41", - "startBorderColor": "#403E41", - "shadowColor": "#403E41", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#2d2a2e", - "Tooltip.background": "#363437" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#221F22", - "selectionBackground": "#6E6C6F" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#2D2A2E", - "disabledText": "#5b595c", - "foreground": "#fcfcfa", - "select": "#ffd866" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#939293", - "acceleratorSelectionForeground": "#939293", - "background": "#2D2A2E", - "disabledBackground": "#2D2A2E", - "disabledForeground": "#5b595c", - "foreground": "#fcfcfa", - "selectionBackground": "#6E6C6F", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#fcfcfa", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#ffd866", - "dropdownBorder": "#403E41", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#2D2A2E", - "foreground": "#fcfcfa", - "swatchesDefaultRecentColor": "#fcfcfa" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#403E41", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#403E41", - "disabledIconColor": "#5b595c", - "iconColor": "#fcfcfa", - "nonEditableBackground": "#2D2A2E" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#221F22", - "buttonBackground": "#403E41", - "darcula.hoveredArrowButtonForeground": "#ffd866", - "disabledForeground": "#5b595c", - "foreground": "#fcfcfa", - "modifiedItemForeground": "#ffd866", - "nonEditableBackground": "#403E41", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#4A474B", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#2d2a2e", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#403E41", - "foreground": "#fcfcfa", - "infoForeground": "#939293", - "matchForeground": "#ffd866", - "matchSelectionForeground": "#ffd866", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#ffd866", - "selectedGrayedForeground": "#ffd866", - "selectionGrayForeground": "#ffd866", - "selectionInactiveInfoForeground": "#939293", - "selectionInactiveBackground": "#5b595c", - "selectionBackground": "#6E6C6F", - "selectionForeground": "#ffd866", - "selectionInfoForeground": "#ffd866" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#5b595c", - "disabledBorderColor": "#403E41", - "focusColor": "#ffd866", - "focusedBorderColor": "#ffd866", - "hoverIconColor": "#ffd866", - "infoForeground": "#939293", - "iconColor": "#fcfcfa" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#2D2A2E", - "controlText": "#939293", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#ffd866", - "foreground": "#ffd866" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#939293", - "changedValueForeground": "#ffd866", - "errorMessageForeground": "#FF6188", - "evaluatingExpressionForeground": "#939293", - "exceptionForeground": "#78DCE8", - "modifyingValueForeground": "#ffd866", - "valueForeground": "#ffd866" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#5b595c", - "underlinedTabBackground": "#5b595c" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#5b595c" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#2D2A2E", - "borderColor": "#2D2A2E", - "hoverBackground": "#4A474B", - "hoverColor": "#221F22", - "hoverMaskColor": "#5b595c", - "inactiveColoredTabBackground": "#2D2A2E", - "inactiveColoredFileBackground": "#403E41", - "inactiveUnderlineColor": "#ffd866", - "inactiveMaskColor": "#221F22", - "underlineColor": "#ffd866", - "underlinedTabBackground": "#4A474B", - "underlinedTabForeground": "#ffd866" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#2D2A2E", - "DialogWrapper.southPanelBackground": "#2D2A2E", - "DialogWrapper.southPanelDivider": "#2D2A2E", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#2D2A2E", - "areaBorderColor": "#2D2A2E", - "areaForeground": "#fcfcfa" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#221F22", - "foreground": "#fcfcfa", - "shortcutForeground": "#939293" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#221F22", - "caretForeground": "#ffd866", - "foreground": "#fcfcfa", - "inactiveBackground": "#2D2A2E", - "inactiveForeground": "#5b595c", - "selectionBackground": "#6E6C6F", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#403E41", - "hoverBackground": "#5b595c", - "hoverColor": "#5b595c", - "hoverMaskColor": "#5b595c", - "inactiveMaskColor": "#2D2A2E", - "inactiveColoredFileBackground": "#2D2A2E", - "inactiveUnderlineColor": "#5b595c", - "selectedForeground": "#fcfcfa", - "selectedBackground": "#4A474B", - "underlineColor": "#ffd866", - "underlinedTabBackground": "#4A474B", - "underlinedTabForeground": "#ffd866" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#2D2A2E", - "borderColor": "#403E41", - "hoverBackground": "#5b595c", - "hoverColor": "#5b595c", - "inactiveUnderlineColor": "#ffd866", - "underlineColor": "#ffd866", - "underlinedTabBackground": "#4A474B", - "underlinedTabForeground": "#fcfcfa" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#3a3a3c", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#2d2a2e", + "Focus.color": "border", "FormattedTextField": { - "background": "#221F22", - "caretForeground": "#ffd866", - "foreground": "#fcfcfa", - "inactiveBackground": "#403E41", - "inactiveForeground": "#5b595c", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#4A474B" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#363437", "Group": { - "disabledSeparatorColor": "#2d2a2e", - "separatorColor": "#2d2a2e" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#939293", - "lineSeparatorColor": "#2D2A2E" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#2D2A2E", - "inactive": "#221F22" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#2D2A2E", - "borderColor": "#2d2a2e", - "foreground": "#fcfcfa", - "infoForeground": "#939293", - "shortcutForeground": "#939293" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#ffd866", - "inactiveCaption": "#403E41", - "inactiveCaptionBorder": "#2D2A2E", - "inactiveCaptionText": "#939293", - "info": "#939293", - "infoText": "#939293", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#2d2a2e", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#2D2A2E" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#fcfcfa", - "background": "#2D2A2E", - "inactiveTitleForeground": "#939293" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#2D2A2E", - "disabledForeground": "#5b595c", - "disabledShadow": "#2D2A2E", - "disabledText": "#5b595c", - "foreground": "#fcfcfa", - "infoForeground": "#939293", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#fcfcfa" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#ffd866", - "hoverForeground": "#ffd866", - "pressedForeground": "#ffd866", - "secondaryForeground": "#939293", - "visitedForeground": "#ffd866" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#ffd866", + "link.foreground": "accent", "List": { - "background": "#403E41", - "foreground": "#fcfcfa", - "hoverBackground": "#403E41", - "hoverInactiveBackground": "#4A474B", - "selectionBackground": "#6E6C6F", - "selectionForeground": "#ffd866", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#403E41" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#2D2A2E", - "branchColor": "#fcfcfa", - "contrast": "#221F22", - "foreground": "#fcfcfa", - "mergeCommits": "#403E41", - "primaryColor": "#939293", - "selectionForeground": "#ffd866", - "tab.backgroundColor": "#2D2A2E", - "tab.borderColor": "#ffd866", - "tagColor": "#939293" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#403E41", - "usedColor": "#5b595c", - "usedBackground": "#5b595c" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#939293", - "acceleratorSelectionForeground": "#ffd866", - "background": "#2D2A2E", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#403E41", - "disabledBackground": "#403E41", - "disabledForeground": "#5b595c", - "foreground": "#fcfcfa", - "selectionBackground": "#6E6C6F", - "selectionForeground": "#ffd866", - "separatorColor": "#2d2a2e" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#221F22", - "borderColor": "#2D2A2E", - "disabledBackground": "#2D2A2E", - "disabledForeground": "#5b595c", - "foreground": "#fcfcfa", - "highlight": "#2D2A2E", - "selectionBackground": "#6E6C6F", - "selectionForeground": "#ffd866", - "shadow": "#221F22" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#939293", - "acceleratorSelectionForeground": "#ffd866", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#2D2A2E", - "disabledBackground": "#2D2A2E", - "disabledForeground": "#5b595c", - "foreground": "#fcfcfa", - "selectionBackground": "#6E6C6F", - "selectionForeground": "#ffd866" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#fcfcfa", - "borderColor": "#2D2A2E" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#2D2A2E" + "background": "bg" }, "SearchField": { - "background": "#221F22" + "background": "hc" } }, - "NewPSD.warning": "#ffd866", + "NewPSD.warning": "accent", "Notification": { - "background": "#363437", - "borderColor": "#363437", - "errorBackground": "#363437", - "errorBorderColor": "#363437", - "foreground": "#fcfcfa", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#403E41", - "foreground": "#fcfcfa", - "innerBorderColor": "#403E41" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#363437", - "errorBorderColor": "#363437", - "informativeBackground": "#363437", - "informativeBorderColor": "#363437", - "warningBackground": "#363437", - "warningBorderColor": "#363437" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#2d2a2e", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#2D2A2E", - "foreground": "#fcfcfa", - "messageForeground": "#fcfcfa" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#403E41", - "focusedColor": "#ffd866", - "disabledColor": "#5b595c" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#2D2A2E", - "foreground": "#fcfcfa" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#403E41", - "borderColor": "#4A474B", - "currentOverloadBackground": "#5b595c", - "currentParameterForeground": "#ffd866", - "disabledForeground": "#5b595c", - "foreground": "#fcfcfa", - "infoForeground": "#939293", - "lineSeparatorColor": "#4A474B" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#221F22", - "capsLockIconColor": "#ffd866", - "caretForeground": "#ffd866", - "foreground": "#fcfcfa", - "inactiveForeground": "#5b595c", - "selectionBackground": "#4A474B", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#2D2A2E", - "disabledForeground": "#5b595c", - "eapTagBackground": "#5b595c", - "hoverBackground": "#403E41", - "lightSelectionBackground": "#4A474B", - "paidTagBackground": "#5b595c", - "selectionBackground": "#6E6C6F", - "tagForeground": "#ffd866", - "tagBackground": "#5b595c", - "trialTagBackground": "#5b595c", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#403E41", - "installBorderColor": "#403E41", - "installForeground": "#fcfcfa", - "installFocusedBackground": "#5b595c", - "installFillForeground": "#5b595c", - "installFillBackground": "#403E41", - "updateBackground": "#ffd866", - "updateBorderColor": "#403E41", - "updateForeground": "#fcfcfa" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#221F22", - "borderColor": "#2d2a2e" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#403E41", - "foreground": "#fcfcfa" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#4A474B", - "selectedForeground": "#ffd866", - "selectedBackground": "#4A474B" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#2D2A2E", - "borderColor": "#2D2A2E", - "foreground": "#ffd866" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#221F22", - "inactiveBorderColor": "#2D2A2E", - "innerBorderColor": "#403E41", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#2D2A2E", - "inactiveBackground": "#221F22" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#fcfcfa", - "separatorColor": "#403E41", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#221F22", - "background": "#221F22", - "borderColor": "#221F22" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#2D2A2E", + "background": "bg", "border": "2,0,2,0", - "foreground": "#fcfcfa", - "translucentBackground": "#2D2A2E" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#2D2A2E", - "foreground": "#ffd866", - "indeterminateEndColor": "#ffd866", - "indeterminateStartColor": "#ffd866", - "progressColor": "#ffd866", - "selectionBackground": "#5b595c", - "trackColor": "#5b595c" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#ffd866" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#2D2A2E", - "disabledText": "#5b595c", - "foreground": "#fcfcfa" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#939293", - "acceleratorSelectionForeground": "#939293", - "background": "#2D2A2E", - "disabledBackground": "#2D2A2E", - "disabledForeground": "#5b595c", - "foreground": "#fcfcfa", - "selectionBackground": "#6E6C6F", - "selectionForeground": "#ffd866" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#2d2a2e", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#2D2A2E", - "hoverThumbBorderColor": "#ffd866", - "hoverThumbColor": "#ffd866", - "hoverTrackColor": "#2D2A2E30", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#ffd866", - "hoverThumbColor": "#ffd866", - "hoverTrackColor": "#2D2A2E30", - "thumbBorderColor": "#ffd86670", - "thumbColor": "#ffd86670", - "trackColor": "#2D2A2E30", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#ffd866", - "hoverThumbColor": "#ffd866", - "hoverTrackColor": "#2D2A2E30", - "thumbBorderColor": "#ffd86670", - "thumbColor": "#ffd86670", - "trackColor": "#2D2A2E30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#5b595c", - "thumbBorderColor": "#ffd86670", - "thumbColor": "#ffd86670", - "trackColor": "#2D2A2E30", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#ffd866", - "hoverThumbColor": "#ffd866", - "hoverTrackColor": "#2D2A2E30", - "thumbBorderColor": "#ffd86670", - "thumbColor": "#ffd86670", - "trackColor": "#2D2A2E30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#221F22", - "foreground": "#939293" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#2D2A2E" + "background": "bg" }, "List": { - "separatorForeground": "#939293", - "separatorColor": "#2d2a2e" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#2D2A2E", - "borderColor": "#221F22", - "infoForeground": "#939293" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#5b595c" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#ffd866", - "startBackground": "#ffd866", - "endColor": "#ffd866", - "startColor": "#ffd866" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#363437", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#4A474B" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#939293", - "Repeated.File.Foreground": "#fcfcfa" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#403E41", - "foreground": "#403E41", - "separatorColor": "#403E41" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#221F22" + "background": "hc" }, "Slider": { - "background": "#2D2A2E", - "buttonBorderColor": "#ffd866", - "buttonColor": "#ffd866", - "foreground": "#fcfcfa", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#403E41", - "trackColor": "#4A474B", - "trackWidth": 7, - "thumb": "#ffd866" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#5b595c", - "borderColor": "#2d2a2e", - "foreground": "#fcfcfa", - "errorForeground": "#fcfcfa" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#2D2A2E", + "background": "bg", "border": "3,3,3,3", - "foreground": "#fcfcfa", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#2D2A2E", - "highlight": "#221F22" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#403E41", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#2D2A2E", - "hoverBackground": "#5b595c", - "LightEditBackground": "#4A474B" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#2D2A2E", - "contentAreaColor": "#5b595c", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#2d2a2e", - "disabledForeground": "#5b595c", - "disabledUnderlineColor": "#5b595c", - "focus": "#4A474B", - "focusColor": "#4A474B", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#fcfcfa", - "highlight": "#2d2a2e", - "hoverColor": "#5b595c", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#ffd866" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#221F22", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#221F22", - "background": "#2D2A2E", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#5b595c", - "dropLineColor": "#ffd866", - "dropLineShortColor": "#ffd866", - "focusCellBackground": "#4A474B", - "focusCellForeground": "#FFFFFF", - "foreground": "#fcfcfa", - "gridColor": "#2D2A2E", - "highlightOuter": "#4A474B", - "hoverBackground": "#403E41", - "hoverInactiveBackground": "#4A474B", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#939293", - "lightSelectionInactiveBackground": "#403E41", - "selectionBackground": "#4A474B", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#4A474B", - "selectionInactiveForeground": "#ffd866", - "sortIconColor": "#fcfcfa", - "stripeColor": "#221F22" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#2D2A2E", - "borderColor": "#2D2A2E", - "bottomSeparatorColor": "#403E41", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#5b595c", - "foreground": "#fcfcfa", - "focusCellBackground": "#4A474B", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#403E41" + "separatorColor": "second" }, - "text": "#939293", - "textInactiveText": "#939293", - "textText": "#939293", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#221F22", - "caretForeground": "#ffd866", - "foreground": "#fcfcfa", - "inactiveForeground": "#5b595c", - "selectionBackground": "#4A474B", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#221F22", - "caretForeground": "#ffd866", - "foreground": "#fcfcfa", - "inactiveForeground": "#5b595c", - "selectionBackground": "#4A474B", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#221F22", - "caretForeground": "#ffd866", - "foreground": "#fcfcfa", - "inactiveForeground": "#5b595c", - "selectionBackground": "#4A474B", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#221F22", - "Button.hoverBackground": "#5b595c", - "inactiveBackground": "#2D2A2E", - "infoForeground": "#939293", - "inactiveInfoForeground": "#939293" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#fcfcfa", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#403E41", - "buttonColor": "#fcfcfa", - "disabledText": "#5b595c", - "foreground": "#fcfcfa", - "offForeground": "#2D2A2E", - "offBackground": "#2D2A2E", - "onBackground": "#ffd866", - "onForeground": "#ffd866" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#221F22", - "borderHandleColor": "#939293", - "floatingForeground": "#939293", - "foreground": "#fcfcfa" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#2D2A2E", - "Actions.infoForeground": "#939293", - "background": "#363437", - "borderColor": "#2d2a2e", - "foreground": "#fcfcfa", - "infoForeground": "#939293", - "separatorColor": "#2d2a2e", - "shortcutForeground": "#939293" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#4A474B", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#221F22" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#2D2A2E", - "borderColor": "#403E41", - "inactiveBackground": "#2D2A2E" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#2D2A2E" + "background": "bg" }, "HeaderTab": { - "borderColor": "#5b595c", - "hoverBackground": "#5b595c", - "hoverInactiveBackground": "#5b595c", - "inactiveUnderlineColor": "#ffd866", - "selectedBackground": "#221F22", - "selectedInactiveBackground": "#221F22", - "underlineColor": "#ffd866", - "underlinedTabBackground": "#4A474B", - "underlinedTabInactiveBackground": "#403E41", - "underlinedTabForeground": "#ffd866", - "underlinedTabInactiveForeground": "#fcfcfa" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#221F22", - "foreground": "#939293", - "hash": "#2d2a2e", - "hoverBackground": "#403E41", - "hoverInactiveBackground": "#4A474B", - "modifiedItemForeground": "#ffd866", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#403E41", - "selectionForeground": "#ffd866", - "selectionInactiveForeground": "#ffd866", - "selectionInactiveBackground": "#403E41", - "textBackground": "#221F22" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#2d2a2e", - "Canvas.background": "#221F22", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#2D2A2E", - "foreground": "#fcfcfa" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#2d2a2e", - "background": "#2D2A2E", - "foreground": "#fcfcfa", - "hoverBorderColor": "#5b595c" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#2d2a2e", - "hoverBorderColor": "#5b595c" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#221F22", - "highStroke.foreground": "#fcfcfa", - "Label.foreground": "#939293", - "List.selectionBackground": "#403E41", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#2d2a2e", - "Component.foreground": "#fcfcfa", - "ConstraintSetText.foreground": "#939293", - "ConstraintSet.background": "#403E41", - "CSPanel.SelectedFocusBackground": "#6E6C6F", - "CSPanel.SelectedBackground": "#403E41", - "cs_FocusText.infoForeground": "#939293", - "CursorTextColor.foreground": "#fcfcfa", - "HoverColor.disabledBackground": "#5b595c", - "motionGraph.background": "#2D2A2E", - "Notification.background": "#363437", - "ourAvg.background": "#403E41", - "ourCS.background": "#403E41", - "ourCS_Border.borderColor": "#2d2a2e", - "ourCS_TextColor.foreground": "#939293", - "ourCS_SelectedFocusBackground.selectionForeground": "#ffd866", - "ourCS_SelectedBackground.selectionInactiveBackground": "#4A474B", - "ourCS_SelectedBorder.pressedBorderColor": "#5b595c", - "ourML_BarColor.separatorColor": "#2d2a2e", - "PrimaryPanel.background": "#221F22", - "SecondaryPanel.background": "#2D2A2E", - "SecondaryPanel.header.foreground": "#939293", - "SecondaryPanel.header.background": "#221F22", - "timeLine.disabledBorderColor": "#2d2a2e" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#2d2a2e", - "background": "#2D2A2E" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#fcfcfa", + "percent.foreground": "fg", "Placeholder": { - "background": "#2D2A2E", - "borderColor": "#2d2a2e", - "foreground": "#fcfcfa", - "selectedForeground": "#ffd866" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#2D2A2E", - "stroke.acceleratorForeground": "#939293" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#363437", - "errorBorderColor": "#363437", - "warningBackground": "#363437", - "warningBorderColor": "#363437" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#2D2A2E" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#5b595c" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#ffd866", - "otherIconColor": "#939293", - "remoteBranchIconColor": "#fcfcfa", - "tagIconColor": "#939293" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#ffd866", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#5b595c", - "localTagIconColor": "#939293", - "mqTagIconColor": "#939293", - "tagIconColor": "#939293", - "tipIconColor": "#939293" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#939293", - "Commit.currentBranchBackground": "#403E41", - "Commit.hoveredBackground": "#403E41" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#5b595c" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#221F22", - "foreground": "#fcfcfa" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#2D2A2E", - "background": "#2D2A2E", - "borderColor": "#2D2A2E", - "captionBackground": "#221F22", - "captionForeground": "#fcfcfa", - "Details.background": "#2D2A2E", - "footerBackground": "#221F22", - "footerForeground": "#fcfcfa", - "headerBackground": "#2D2A2E", - "headerForeground": "#fcfcfa", - "List.background": "#221F22", - "separatorColor": "#2d2a2e", - "SidePanel.background": "#403E41", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#221F22", - "actions.selectionBackground": "#5b595c", - "background": "#403E41", - "selectionBackground": "#6E6C6F", - "selectionInactiveBackground": "#403E41" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#221F22", - "windowBorder": "#2d2a2e", - "windowText": "#939293", - "Window.border": "#2d2a2e" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#221F22", - "#6B6B6B": "#939293", - "#A7A7A7": "#2D2A2E", - "#3D6185": "#ffd866", - "#466D94": "#ffd866", - "#3C3F41": "#2D2A2E", - "#545556": "#5b595c", - "#606060": "#5b595c", - "#9AA7B0": "#fcfcfa", - "#675133": "#ffd866", - "Actions.Blue": "#A9DC76", - "Actions.Green": "#FFD866", - "Actions.Grey": "#939293", - "Actions.GreyInline": "#727072", - "Actions.GreyInline.Dark": "#fcfcfa", - "Actions.Red": "#FF6188", - "Actions.Yellow": "#78DCE8", - "Checkbox.Background.Default": "#221F22", - "Checkbox.Background.Default.Dark": "#221F22", - "Checkbox.Background.Disabled": "#3a3a3c", - "Checkbox.Background.Disabled.Dark": "#3a3a3c", - "Checkbox.Border.Default": "#2d2a2e", - "Checkbox.Border.Default.Dark": "#2d2a2e", - "Checkbox.Border.Disabled": "#5b595c", - "Checkbox.Border.Disabled.Dark": "#5b595c", - "Checkbox.Focus.Thin.Default": "#ffd866", - "Checkbox.Focus.Thin.Default.Dark": "#ffd866", - "Checkbox.Focus.Wide": "#ffd866", - "Checkbox.Focus.Wide.Dark": "#ffd866", - "Checkbox.Foreground.Disabled": "#5b595c", - "Checkbox.Foreground.Disabled.Dark": "#5b595c", - "Checkbox.Background.Selected": "#ffd866", - "Checkbox.Background.Selected.Dark": "#2D2A2E", - "Checkbox.Border.Selected": "#ffd866", - "Checkbox.Border.Selected.Dark": "#ffd866", - "Checkbox.Foreground.Selected": "#ffd866", - "Checkbox.Foreground.Selected.Dark": "#ffd866", - "Checkbox.Focus.Thin.Selected": "#fcfcfa", - "Checkbox.Focus.Thin.Selected.Dark": "#fcfcfa", - "Objects.Grey": "#727072", - "Objects.Blue": "#A9DC76", - "Objects.RedStatus": "#FF6188", - "Objects.Red": "#FF6188", - "Objects.Pink": "#FF6188", - "Objects.Yellow": "#78DCE8", - "Objects.Green": "#FFD866", - "Objects.Purple": "#FF6188", - "Objects.BlackText": "#fcfcfa", - "Objects.YellowDark": "#AB9DF2", - "Objects.GreenAndroid": "#FFD866" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Monokai Pro.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Monokai Pro.theme.json index 3a9be3ec..6d816cda 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Monokai Pro.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Monokai Pro.theme.json @@ -2,1004 +2,1089 @@ "name": "Monokai Pro", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#2D2A2E", + "bg30": "#2D2A2E30", + "fg": "#fcfcfa", + "text": "#939293", + "selBg": "#6E6C6F", + "selFg": "#ffd866", + "activeFg": "#FFFFFF", + "border": "#2d2a2e", + "excl": "#3a3a3c", + "second": "#403E41", + "dis": "#5b595c", + "accent": "#ffd866", + "accent2": "#ffd8662", + "accent50": "#ffd86650", + "accent70": "#ffd86670", + "cs": "#221F22", + "button": "#403E41", + "table": "#4A474B", + "tree": "#403E41", + "hl": "#5b595c", + "notif": "#363437", + "hc": "#2D2A2E", + "white": "#FCFCFA", + "blue": "#A9DC76", + "red": "#FF6188", + "yellow": "#78DCE8", + "green": "#FFD866", + "gray": "#727072", + "purple": "#FF6188", + "orange": "#AB9DF2" + }, "editorScheme": "colors/Monokai Pro.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#939293", - "background": "#2D2A2E", - "borderColor": "#2d2a2e", - "disabledBackground": "#3a3a3c", - "disabledForeground": "#5b595c", - "disabledText": "#5b595c", - "focusColor": "#5b595c", - "focusedBorderColor": "#ffd866", - "foreground": "#fcfcfa", - "inactiveBackground": "#3a3a3c", - "inactiveForeground": "#939293", - "infoForeground": "#939293", - "selectionBackground": "#6E6C6F", - "selectionBackgroundInactive": "#403E41", - "selectionForeground": "#ffd866", - "selectionInactiveBackground": "#403E41", - "separatorColor": "#2d2a2e" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#2D2A2E", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#ffd86650", - "hoverBorderColor": "#ffd86650", - "hoverSeparatorColor": "#403E41", - "focusedBorderColor": "#ffd86650", - "pressedBackground": "#ffd86650", - "pressedBorderColor": "#ffd86650" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#6E6C6F" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#2D2A2E", - "Borders.color": "#2d2a2e", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#2D2A2E", + "background": "bg", "default": { - "endBackground": "#4A474B", - "endBorderColor": "#4A474B", - "foreground": "#FFFFFF", - "focusColor": "#ffd866", - "focusedBorderColor": "#ffd866", - "shadowColor": "#4A474B", - "startBackground": "#4A474B", - "startBorderColor": "#4A474B" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#403E41", - "disabledText": "#5b595c", - "endBackground": "#403E41", - "endBorderColor": "#403E41", - "focus": "#5b595c", - "focusedBorderColor": "#ffd866", - "foreground": "#939293", - "highlight": "#ffd866", - "mt.background": "#403E41", - "mt.foreground": "#939293", - "mt.selectedForeground": "#ffd866", - "mt.selection.color1": "#4A474B", - "mt.selection.color2": "#4A474B", - "startBackground": "#403E41", - "startBorderColor": "#403E41", - "shadowColor": "#403E41", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#2d2a2e", - "Tooltip.background": "#363437" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#221F22", - "selectionBackground": "#6E6C6F" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#2D2A2E", - "disabledText": "#5b595c", - "foreground": "#fcfcfa", - "select": "#ffd866" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#939293", - "acceleratorSelectionForeground": "#939293", - "background": "#2D2A2E", - "disabledBackground": "#2D2A2E", - "disabledForeground": "#5b595c", - "foreground": "#fcfcfa", - "selectionBackground": "#6E6C6F", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#fcfcfa", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#ffd866", - "dropdownBorder": "#403E41", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#2D2A2E", - "foreground": "#fcfcfa", - "swatchesDefaultRecentColor": "#fcfcfa" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#403E41", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#403E41", - "disabledIconColor": "#5b595c", - "iconColor": "#fcfcfa", - "nonEditableBackground": "#2D2A2E" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#2D2A2E", - "buttonBackground": "#403E41", - "darcula.hoveredArrowButtonForeground": "#ffd866", - "disabledForeground": "#5b595c", - "foreground": "#fcfcfa", - "modifiedItemForeground": "#ffd866", - "nonEditableBackground": "#403E41", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#4A474B", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#2d2a2e", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#403E41", - "foreground": "#fcfcfa", - "infoForeground": "#939293", - "matchForeground": "#ffd866", - "matchSelectionForeground": "#ffd866", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#ffd866", - "selectedGrayedForeground": "#ffd866", - "selectionGrayForeground": "#ffd866", - "selectionInactiveInfoForeground": "#939293", - "selectionInactiveBackground": "#5b595c", - "selectionBackground": "#6E6C6F", - "selectionForeground": "#ffd866", - "selectionInfoForeground": "#ffd866" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#5b595c", - "disabledBorderColor": "#403E41", - "focusColor": "#ffd866", - "focusedBorderColor": "#ffd866", - "hoverIconColor": "#ffd866", - "infoForeground": "#939293", - "iconColor": "#fcfcfa" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#2D2A2E", - "controlText": "#939293", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#ffd866", - "foreground": "#ffd866" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#939293", - "changedValueForeground": "#ffd866", - "errorMessageForeground": "#FF6188", - "evaluatingExpressionForeground": "#939293", - "exceptionForeground": "#78DCE8", - "modifyingValueForeground": "#ffd866", - "valueForeground": "#ffd866" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#5b595c", - "underlinedTabBackground": "#5b595c" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#5b595c" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#2D2A2E", - "borderColor": "#2D2A2E", - "hoverBackground": "#4A474B", - "hoverColor": "#2D2A2E", - "hoverMaskColor": "#5b595c", - "inactiveColoredTabBackground": "#2D2A2E", - "inactiveColoredFileBackground": "#403E41", - "inactiveUnderlineColor": "#ffd866", - "inactiveMaskColor": "#2D2A2E", - "underlineColor": "#ffd866", - "underlinedTabBackground": "#4A474B", - "underlinedTabForeground": "#ffd866" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#2D2A2E", - "DialogWrapper.southPanelBackground": "#2D2A2E", - "DialogWrapper.southPanelDivider": "#2D2A2E", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#2D2A2E", - "areaBorderColor": "#2D2A2E", - "areaForeground": "#fcfcfa" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#2D2A2E", - "foreground": "#fcfcfa", - "shortcutForeground": "#939293" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#2D2A2E", - "caretForeground": "#ffd866", - "foreground": "#fcfcfa", - "inactiveBackground": "#2D2A2E", - "inactiveForeground": "#5b595c", - "selectionBackground": "#6E6C6F", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#403E41", - "hoverBackground": "#5b595c", - "hoverColor": "#5b595c", - "hoverMaskColor": "#5b595c", - "inactiveMaskColor": "#2D2A2E", - "inactiveColoredFileBackground": "#2D2A2E", - "inactiveUnderlineColor": "#5b595c", - "selectedForeground": "#fcfcfa", - "selectedBackground": "#4A474B", - "underlineColor": "#ffd866", - "underlinedTabBackground": "#4A474B", - "underlinedTabForeground": "#ffd866" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#2D2A2E", - "borderColor": "#403E41", - "hoverBackground": "#5b595c", - "hoverColor": "#5b595c", - "inactiveUnderlineColor": "#ffd866", - "underlineColor": "#ffd866", - "underlinedTabBackground": "#4A474B", - "underlinedTabForeground": "#fcfcfa" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#3a3a3c", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#2d2a2e", + "Focus.color": "border", "FormattedTextField": { - "background": "#2D2A2E", - "caretForeground": "#ffd866", - "foreground": "#fcfcfa", - "inactiveBackground": "#403E41", - "inactiveForeground": "#5b595c", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#4A474B" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#363437", "Group": { - "disabledSeparatorColor": "#2d2a2e", - "separatorColor": "#2d2a2e" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#939293", - "lineSeparatorColor": "#2D2A2E" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#2D2A2E", - "inactive": "#221F22" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#2D2A2E", - "borderColor": "#2d2a2e", - "foreground": "#fcfcfa", - "infoForeground": "#939293", - "shortcutForeground": "#939293" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#ffd866", - "inactiveCaption": "#403E41", - "inactiveCaptionBorder": "#2D2A2E", - "inactiveCaptionText": "#939293", - "info": "#939293", - "infoText": "#939293", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#2d2a2e", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#2D2A2E" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#fcfcfa", - "background": "#2D2A2E", - "inactiveTitleForeground": "#939293" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#2D2A2E", - "disabledForeground": "#5b595c", - "disabledShadow": "#2D2A2E", - "disabledText": "#5b595c", - "foreground": "#fcfcfa", - "infoForeground": "#939293", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#fcfcfa" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#ffd866", - "hoverForeground": "#ffd866", - "pressedForeground": "#ffd866", - "secondaryForeground": "#939293", - "visitedForeground": "#ffd866" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#ffd866", + "link.foreground": "accent", "List": { - "background": "#403E41", - "foreground": "#fcfcfa", - "hoverBackground": "#403E41", - "hoverInactiveBackground": "#4A474B", - "selectionBackground": "#6E6C6F", - "selectionForeground": "#ffd866", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#403E41" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#2D2A2E", - "branchColor": "#fcfcfa", - "contrast": "#221F22", - "foreground": "#fcfcfa", - "mergeCommits": "#403E41", - "primaryColor": "#939293", - "selectionForeground": "#ffd866", - "tab.backgroundColor": "#2D2A2E", - "tab.borderColor": "#ffd866", - "tagColor": "#939293" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#403E41", - "usedColor": "#5b595c", - "usedBackground": "#5b595c" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#939293", - "acceleratorSelectionForeground": "#ffd866", - "background": "#2D2A2E", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#403E41", - "disabledBackground": "#403E41", - "disabledForeground": "#5b595c", - "foreground": "#fcfcfa", - "selectionBackground": "#6E6C6F", - "selectionForeground": "#ffd866", - "separatorColor": "#2d2a2e" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#2D2A2E", - "borderColor": "#2D2A2E", - "disabledBackground": "#2D2A2E", - "disabledForeground": "#5b595c", - "foreground": "#fcfcfa", - "highlight": "#2D2A2E", - "selectionBackground": "#6E6C6F", - "selectionForeground": "#ffd866", - "shadow": "#2D2A2E" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#939293", - "acceleratorSelectionForeground": "#ffd866", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#2D2A2E", - "disabledBackground": "#2D2A2E", - "disabledForeground": "#5b595c", - "foreground": "#fcfcfa", - "selectionBackground": "#6E6C6F", - "selectionForeground": "#ffd866" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#fcfcfa", - "borderColor": "#2D2A2E" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#2D2A2E" + "background": "bg" }, "SearchField": { - "background": "#2D2A2E" + "background": "hc" } }, - "NewPSD.warning": "#ffd866", + "NewPSD.warning": "accent", "Notification": { - "background": "#363437", - "borderColor": "#363437", - "errorBackground": "#363437", - "errorBorderColor": "#363437", - "foreground": "#fcfcfa", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#403E41", - "foreground": "#fcfcfa", - "innerBorderColor": "#403E41" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#363437", - "errorBorderColor": "#363437", - "informativeBackground": "#363437", - "informativeBorderColor": "#363437", - "warningBackground": "#363437", - "warningBorderColor": "#363437" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#2d2a2e", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#2D2A2E", - "foreground": "#fcfcfa", - "messageForeground": "#fcfcfa" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#403E41", - "focusedColor": "#ffd866", - "disabledColor": "#5b595c" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#2D2A2E", - "foreground": "#fcfcfa" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#403E41", - "borderColor": "#4A474B", - "currentOverloadBackground": "#5b595c", - "currentParameterForeground": "#ffd866", - "disabledForeground": "#5b595c", - "foreground": "#fcfcfa", - "infoForeground": "#939293", - "lineSeparatorColor": "#4A474B" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#2D2A2E", - "capsLockIconColor": "#ffd866", - "caretForeground": "#ffd866", - "foreground": "#fcfcfa", - "inactiveForeground": "#5b595c", - "selectionBackground": "#4A474B", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#2D2A2E", - "disabledForeground": "#5b595c", - "eapTagBackground": "#5b595c", - "hoverBackground": "#403E41", - "lightSelectionBackground": "#4A474B", - "paidTagBackground": "#5b595c", - "selectionBackground": "#6E6C6F", - "tagForeground": "#ffd866", - "tagBackground": "#5b595c", - "trialTagBackground": "#5b595c", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#403E41", - "installBorderColor": "#403E41", - "installForeground": "#fcfcfa", - "installFocusedBackground": "#5b595c", - "installFillForeground": "#5b595c", - "installFillBackground": "#403E41", - "updateBackground": "#ffd866", - "updateBorderColor": "#403E41", - "updateForeground": "#fcfcfa" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#2D2A2E", - "borderColor": "#2d2a2e" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#403E41", - "foreground": "#fcfcfa" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#4A474B", - "selectedForeground": "#ffd866", - "selectedBackground": "#4A474B" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#2D2A2E", - "borderColor": "#2D2A2E", - "foreground": "#ffd866" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#221F22", - "inactiveBorderColor": "#2D2A2E", - "innerBorderColor": "#403E41", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#2D2A2E", - "inactiveBackground": "#221F22" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#fcfcfa", - "separatorColor": "#403E41", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#221F22", - "background": "#221F22", - "borderColor": "#221F22" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#2D2A2E", + "background": "bg", "border": "2,0,2,0", - "foreground": "#fcfcfa", - "translucentBackground": "#2D2A2E" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#2D2A2E", - "foreground": "#ffd866", - "indeterminateEndColor": "#ffd866", - "indeterminateStartColor": "#ffd866", - "progressColor": "#ffd866", - "selectionBackground": "#5b595c", - "trackColor": "#5b595c" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#ffd866" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#2D2A2E", - "disabledText": "#5b595c", - "foreground": "#fcfcfa" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#939293", - "acceleratorSelectionForeground": "#939293", - "background": "#2D2A2E", - "disabledBackground": "#2D2A2E", - "disabledForeground": "#5b595c", - "foreground": "#fcfcfa", - "selectionBackground": "#6E6C6F", - "selectionForeground": "#ffd866" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#2d2a2e", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#2D2A2E", - "hoverThumbBorderColor": "#ffd866", - "hoverThumbColor": "#ffd866", - "hoverTrackColor": "#2D2A2E30", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#ffd866", - "hoverThumbColor": "#ffd866", - "hoverTrackColor": "#2D2A2E30", - "thumbBorderColor": "#ffd86670", - "thumbColor": "#ffd86670", - "trackColor": "#2D2A2E30", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#ffd866", - "hoverThumbColor": "#ffd866", - "hoverTrackColor": "#2D2A2E30", - "thumbBorderColor": "#ffd86670", - "thumbColor": "#ffd86670", - "trackColor": "#2D2A2E30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#5b595c", - "thumbBorderColor": "#ffd86670", - "thumbColor": "#ffd86670", - "trackColor": "#2D2A2E30", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#ffd866", - "hoverThumbColor": "#ffd866", - "hoverTrackColor": "#2D2A2E30", - "thumbBorderColor": "#ffd86670", - "thumbColor": "#ffd86670", - "trackColor": "#2D2A2E30" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#221F22", - "foreground": "#939293" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#2D2A2E" + "background": "bg" }, "List": { - "separatorForeground": "#939293", - "separatorColor": "#2d2a2e" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#2D2A2E", - "borderColor": "#221F22", - "infoForeground": "#939293" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#5b595c" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#ffd866", - "startBackground": "#ffd866", - "endColor": "#ffd866", - "startColor": "#ffd866" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#363437", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#4A474B" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#939293", - "Repeated.File.Foreground": "#fcfcfa" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#403E41", - "foreground": "#403E41", - "separatorColor": "#403E41" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#2D2A2E" + "background": "hc" }, "Slider": { - "background": "#2D2A2E", - "buttonBorderColor": "#ffd866", - "buttonColor": "#ffd866", - "foreground": "#fcfcfa", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#403E41", - "trackColor": "#4A474B", - "trackWidth": 7, - "thumb": "#ffd866" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#5b595c", - "borderColor": "#2d2a2e", - "foreground": "#fcfcfa", - "errorForeground": "#fcfcfa" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#2D2A2E", + "background": "bg", "border": "3,3,3,3", - "foreground": "#fcfcfa", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#2D2A2E", - "highlight": "#2D2A2E" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#403E41", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#2D2A2E", - "hoverBackground": "#5b595c", - "LightEditBackground": "#4A474B" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#2D2A2E", - "contentAreaColor": "#5b595c", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#2d2a2e", - "disabledForeground": "#5b595c", - "disabledUnderlineColor": "#5b595c", - "focus": "#4A474B", - "focusColor": "#4A474B", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#fcfcfa", - "highlight": "#2d2a2e", - "hoverColor": "#5b595c", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#ffd866" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#2D2A2E", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#221F22", - "background": "#2D2A2E", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#5b595c", - "dropLineColor": "#ffd866", - "dropLineShortColor": "#ffd866", - "focusCellBackground": "#4A474B", - "focusCellForeground": "#FFFFFF", - "foreground": "#fcfcfa", - "gridColor": "#2D2A2E", - "highlightOuter": "#4A474B", - "hoverBackground": "#403E41", - "hoverInactiveBackground": "#4A474B", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#939293", - "lightSelectionInactiveBackground": "#403E41", - "selectionBackground": "#4A474B", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#4A474B", - "selectionInactiveForeground": "#ffd866", - "sortIconColor": "#fcfcfa", - "stripeColor": "#221F22" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#2D2A2E", - "borderColor": "#2D2A2E", - "bottomSeparatorColor": "#403E41", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#5b595c", - "foreground": "#fcfcfa", - "focusCellBackground": "#4A474B", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#403E41" + "separatorColor": "second" }, - "text": "#939293", - "textInactiveText": "#939293", - "textText": "#939293", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#2D2A2E", - "caretForeground": "#ffd866", - "foreground": "#fcfcfa", - "inactiveForeground": "#5b595c", - "selectionBackground": "#4A474B", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#2D2A2E", - "caretForeground": "#ffd866", - "foreground": "#fcfcfa", - "inactiveForeground": "#5b595c", - "selectionBackground": "#4A474B", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#2D2A2E", - "caretForeground": "#ffd866", - "foreground": "#fcfcfa", - "inactiveForeground": "#5b595c", - "selectionBackground": "#4A474B", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#221F22", - "Button.hoverBackground": "#5b595c", - "inactiveBackground": "#2D2A2E", - "infoForeground": "#939293", - "inactiveInfoForeground": "#939293" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#fcfcfa", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#403E41", - "buttonColor": "#fcfcfa", - "disabledText": "#5b595c", - "foreground": "#fcfcfa", - "offForeground": "#2D2A2E", - "offBackground": "#2D2A2E", - "onBackground": "#ffd866", - "onForeground": "#ffd866" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#2D2A2E", - "borderHandleColor": "#939293", - "floatingForeground": "#939293", - "foreground": "#fcfcfa" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#2D2A2E", - "Actions.infoForeground": "#939293", - "background": "#363437", - "borderColor": "#2d2a2e", - "foreground": "#fcfcfa", - "infoForeground": "#939293", - "separatorColor": "#2d2a2e", - "shortcutForeground": "#939293" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#4A474B", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#221F22" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#2D2A2E", - "borderColor": "#403E41", - "inactiveBackground": "#2D2A2E" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#2D2A2E" + "background": "bg" }, "HeaderTab": { - "borderColor": "#5b595c", - "hoverBackground": "#5b595c", - "hoverInactiveBackground": "#5b595c", - "inactiveUnderlineColor": "#ffd866", - "selectedBackground": "#221F22", - "selectedInactiveBackground": "#221F22", - "underlineColor": "#ffd866", - "underlinedTabBackground": "#4A474B", - "underlinedTabInactiveBackground": "#403E41", - "underlinedTabForeground": "#ffd866", - "underlinedTabInactiveForeground": "#fcfcfa" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#2D2A2E", - "foreground": "#939293", - "hash": "#2d2a2e", - "hoverBackground": "#403E41", - "hoverInactiveBackground": "#4A474B", - "modifiedItemForeground": "#ffd866", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#403E41", - "selectionForeground": "#ffd866", - "selectionInactiveForeground": "#ffd866", - "selectionInactiveBackground": "#403E41", - "textBackground": "#2D2A2E" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#2d2a2e", - "Canvas.background": "#221F22", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#2D2A2E", - "foreground": "#fcfcfa" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#2d2a2e", - "background": "#2D2A2E", - "foreground": "#fcfcfa", - "hoverBorderColor": "#5b595c" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#2d2a2e", - "hoverBorderColor": "#5b595c" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#221F22", - "highStroke.foreground": "#fcfcfa", - "Label.foreground": "#939293", - "List.selectionBackground": "#403E41", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#2d2a2e", - "Component.foreground": "#fcfcfa", - "ConstraintSetText.foreground": "#939293", - "ConstraintSet.background": "#403E41", - "CSPanel.SelectedFocusBackground": "#6E6C6F", - "CSPanel.SelectedBackground": "#403E41", - "cs_FocusText.infoForeground": "#939293", - "CursorTextColor.foreground": "#fcfcfa", - "HoverColor.disabledBackground": "#5b595c", - "motionGraph.background": "#2D2A2E", - "Notification.background": "#363437", - "ourAvg.background": "#403E41", - "ourCS.background": "#403E41", - "ourCS_Border.borderColor": "#2d2a2e", - "ourCS_TextColor.foreground": "#939293", - "ourCS_SelectedFocusBackground.selectionForeground": "#ffd866", - "ourCS_SelectedBackground.selectionInactiveBackground": "#4A474B", - "ourCS_SelectedBorder.pressedBorderColor": "#5b595c", - "ourML_BarColor.separatorColor": "#2d2a2e", - "PrimaryPanel.background": "#221F22", - "SecondaryPanel.background": "#2D2A2E", - "SecondaryPanel.header.foreground": "#939293", - "SecondaryPanel.header.background": "#221F22", - "timeLine.disabledBorderColor": "#2d2a2e" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#2d2a2e", - "background": "#2D2A2E" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#fcfcfa", + "percent.foreground": "fg", "Placeholder": { - "background": "#2D2A2E", - "borderColor": "#2d2a2e", - "foreground": "#fcfcfa", - "selectedForeground": "#ffd866" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#2D2A2E", - "stroke.acceleratorForeground": "#939293" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#363437", - "errorBorderColor": "#363437", - "warningBackground": "#363437", - "warningBorderColor": "#363437" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#2D2A2E" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#5b595c" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#ffd866", - "otherIconColor": "#939293", - "remoteBranchIconColor": "#fcfcfa", - "tagIconColor": "#939293" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#ffd866", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#5b595c", - "localTagIconColor": "#939293", - "mqTagIconColor": "#939293", - "tagIconColor": "#939293", - "tipIconColor": "#939293" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#939293", - "Commit.currentBranchBackground": "#403E41", - "Commit.hoveredBackground": "#403E41" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#5b595c" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#2D2A2E", - "foreground": "#fcfcfa" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#2D2A2E", - "background": "#2D2A2E", - "borderColor": "#2D2A2E", - "captionBackground": "#221F22", - "captionForeground": "#fcfcfa", - "Details.background": "#2D2A2E", - "footerBackground": "#221F22", - "footerForeground": "#fcfcfa", - "headerBackground": "#2D2A2E", - "headerForeground": "#fcfcfa", - "List.background": "#221F22", - "separatorColor": "#2d2a2e", - "SidePanel.background": "#403E41", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#221F22", - "actions.selectionBackground": "#5b595c", - "background": "#403E41", - "selectionBackground": "#6E6C6F", - "selectionInactiveBackground": "#403E41" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#2D2A2E", - "windowBorder": "#2d2a2e", - "windowText": "#939293", - "Window.border": "#2d2a2e" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#221F22", - "#6B6B6B": "#939293", - "#A7A7A7": "#2D2A2E", - "#3D6185": "#ffd866", - "#466D94": "#ffd866", - "#3C3F41": "#2D2A2E", - "#545556": "#5b595c", - "#606060": "#5b595c", - "#9AA7B0": "#fcfcfa", - "#675133": "#ffd866", - "Actions.Blue": "#A9DC76", - "Actions.Green": "#FFD866", - "Actions.Grey": "#939293", - "Actions.GreyInline": "#727072", - "Actions.GreyInline.Dark": "#fcfcfa", - "Actions.Red": "#FF6188", - "Actions.Yellow": "#78DCE8", - "Checkbox.Background.Default": "#221F22", - "Checkbox.Background.Default.Dark": "#221F22", - "Checkbox.Background.Disabled": "#3a3a3c", - "Checkbox.Background.Disabled.Dark": "#3a3a3c", - "Checkbox.Border.Default": "#2d2a2e", - "Checkbox.Border.Default.Dark": "#2d2a2e", - "Checkbox.Border.Disabled": "#5b595c", - "Checkbox.Border.Disabled.Dark": "#5b595c", - "Checkbox.Focus.Thin.Default": "#ffd866", - "Checkbox.Focus.Thin.Default.Dark": "#ffd866", - "Checkbox.Focus.Wide": "#ffd866", - "Checkbox.Focus.Wide.Dark": "#ffd866", - "Checkbox.Foreground.Disabled": "#5b595c", - "Checkbox.Foreground.Disabled.Dark": "#5b595c", - "Checkbox.Background.Selected": "#ffd866", - "Checkbox.Background.Selected.Dark": "#2D2A2E", - "Checkbox.Border.Selected": "#ffd866", - "Checkbox.Border.Selected.Dark": "#ffd866", - "Checkbox.Foreground.Selected": "#ffd866", - "Checkbox.Foreground.Selected.Dark": "#ffd866", - "Checkbox.Focus.Thin.Selected": "#fcfcfa", - "Checkbox.Focus.Thin.Selected.Dark": "#fcfcfa", - "Objects.Grey": "#727072", - "Objects.Blue": "#A9DC76", - "Objects.RedStatus": "#FF6188", - "Objects.Red": "#FF6188", - "Objects.Pink": "#FF6188", - "Objects.Yellow": "#78DCE8", - "Objects.Green": "#FFD866", - "Objects.Purple": "#FF6188", - "Objects.BlackText": "#fcfcfa", - "Objects.YellowDark": "#AB9DF2", - "Objects.GreenAndroid": "#FFD866" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Moonlight Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Moonlight Contrast.theme.json index 8763ff1e..a33e3b76 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Moonlight Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Moonlight Contrast.theme.json @@ -2,1004 +2,1089 @@ "name": "Moonlight Contrast", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#222436", + "bg30": "#22243630", + "fg": "#c8d3f5", + "text": "#a9b8e8", + "selBg": "#444a73", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#222436", + "excl": "#2f334d", + "second": "#2f334d", + "dis": "#828bb8", + "accent": "#74a0f1", + "accent2": "#74a0f12", + "accent50": "#74a0f150", + "accent70": "#74a0f170", + "cs": "#191a2a", + "button": "#444a73", + "table": "#2f334d", + "tree": "#444a7370", + "hl": "#444a73", + "notif": "#191a2a", + "hc": "#191a2a", + "white": "#c8d3f5", + "blue": "#70b0ff", + "red": "#ff757f", + "yellow": "#ffbd76", + "green": "#7af8ca", + "gray": "#7e8eda", + "purple": "#baacff", + "orange": "#ff9668" + }, "editorScheme": "colors/Moonlight.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#a9b8e8", - "background": "#222436", - "borderColor": "#222436", - "disabledBackground": "#2f334d", - "disabledForeground": "#828bb8", - "disabledText": "#828bb8", - "focusColor": "#444a73", - "focusedBorderColor": "#74a0f1", - "foreground": "#c8d3f5", - "inactiveBackground": "#2f334d", - "inactiveForeground": "#a9b8e8", - "infoForeground": "#a9b8e8", - "selectionBackground": "#444a73", - "selectionBackgroundInactive": "#2f334d", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#2f334d", - "separatorColor": "#222436" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#222436", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#74a0f150", - "hoverBorderColor": "#74a0f150", - "hoverSeparatorColor": "#444a73", - "focusedBorderColor": "#74a0f150", - "pressedBackground": "#74a0f150", - "pressedBorderColor": "#74a0f150" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#444a73" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#222436", - "Borders.color": "#222436", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#222436", + "background": "bg", "default": { - "endBackground": "#2f334d", - "endBorderColor": "#2f334d", - "foreground": "#FFFFFF", - "focusColor": "#74a0f1", - "focusedBorderColor": "#74a0f1", - "shadowColor": "#2f334d", - "startBackground": "#2f334d", - "startBorderColor": "#2f334d" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#444a73", - "disabledText": "#828bb8", - "endBackground": "#444a73", - "endBorderColor": "#444a73", - "focus": "#444a73", - "focusedBorderColor": "#74a0f1", - "foreground": "#a9b8e8", - "highlight": "#FFFFFF", - "mt.background": "#444a73", - "mt.foreground": "#a9b8e8", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#2f334d", - "mt.selection.color2": "#2f334d", - "startBackground": "#444a73", - "startBorderColor": "#444a73", - "shadowColor": "#444a73", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#222436", - "Tooltip.background": "#191a2a" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#191a2a", - "selectionBackground": "#444a73" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#222436", - "disabledText": "#828bb8", - "foreground": "#c8d3f5", - "select": "#74a0f1" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#a9b8e8", - "acceleratorSelectionForeground": "#a9b8e8", - "background": "#222436", - "disabledBackground": "#222436", - "disabledForeground": "#828bb8", - "foreground": "#c8d3f5", - "selectionBackground": "#444a73", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#c8d3f5", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#74a0f1", - "dropdownBorder": "#2f334d", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#222436", - "foreground": "#c8d3f5", - "swatchesDefaultRecentColor": "#c8d3f5" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#444a73", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#444a73", - "disabledIconColor": "#828bb8", - "iconColor": "#c8d3f5", - "nonEditableBackground": "#222436" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#191a2a", - "buttonBackground": "#444a73", - "darcula.hoveredArrowButtonForeground": "#74a0f1", - "disabledForeground": "#828bb8", - "foreground": "#c8d3f5", - "modifiedItemForeground": "#74a0f1", - "nonEditableBackground": "#2f334d", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#2f334d", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#222436", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#2f334d", - "foreground": "#c8d3f5", - "infoForeground": "#a9b8e8", - "matchForeground": "#74a0f1", - "matchSelectionForeground": "#74a0f1", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#a9b8e8", - "selectionInactiveBackground": "#444a73", - "selectionBackground": "#444a73", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#444a73", - "disabledBorderColor": "#444a73", - "focusColor": "#74a0f1", - "focusedBorderColor": "#74a0f1", - "hoverIconColor": "#74a0f1", - "infoForeground": "#a9b8e8", - "iconColor": "#c8d3f5" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#222436", - "controlText": "#a9b8e8", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#74a0f1", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#a9b8e8", - "changedValueForeground": "#74a0f1", - "errorMessageForeground": "#ff757f", - "evaluatingExpressionForeground": "#a9b8e8", - "exceptionForeground": "#ffbd76", - "modifyingValueForeground": "#74a0f1", - "valueForeground": "#74a0f1" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#444a73", - "underlinedTabBackground": "#444a73" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#444a73" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#222436", - "borderColor": "#222436", - "hoverBackground": "#2f334d", - "hoverColor": "#191a2a", - "hoverMaskColor": "#444a73", - "inactiveColoredTabBackground": "#222436", - "inactiveColoredFileBackground": "#444a73", - "inactiveUnderlineColor": "#74a0f1", - "inactiveMaskColor": "#191a2a", - "underlineColor": "#74a0f1", - "underlinedTabBackground": "#2f334d", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#222436", - "DialogWrapper.southPanelBackground": "#222436", - "DialogWrapper.southPanelDivider": "#222436", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#222436", - "areaBorderColor": "#222436", - "areaForeground": "#c8d3f5" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#191a2a", - "foreground": "#c8d3f5", - "shortcutForeground": "#a9b8e8" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#191a2a", - "caretForeground": "#74a0f1", - "foreground": "#c8d3f5", - "inactiveBackground": "#222436", - "inactiveForeground": "#828bb8", - "selectionBackground": "#444a73", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#2f334d", - "hoverBackground": "#444a73", - "hoverColor": "#444a73", - "hoverMaskColor": "#444a73", - "inactiveMaskColor": "#222436", - "inactiveColoredFileBackground": "#222436", - "inactiveUnderlineColor": "#828bb8", - "selectedForeground": "#c8d3f5", - "selectedBackground": "#2f334d", - "underlineColor": "#74a0f1", - "underlinedTabBackground": "#2f334d", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#222436", - "borderColor": "#2f334d", - "hoverBackground": "#444a73", - "hoverColor": "#444a73", - "inactiveUnderlineColor": "#74a0f1", - "underlineColor": "#74a0f1", - "underlinedTabBackground": "#2f334d", - "underlinedTabForeground": "#c8d3f5" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#2f334d", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#222436", + "Focus.color": "border", "FormattedTextField": { - "background": "#191a2a", - "caretForeground": "#74a0f1", - "foreground": "#c8d3f5", - "inactiveBackground": "#444a73", - "inactiveForeground": "#828bb8", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#2f334d" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#191a2a", "Group": { - "disabledSeparatorColor": "#222436", - "separatorColor": "#222436" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#a9b8e8", - "lineSeparatorColor": "#222436" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#222436", - "inactive": "#191a2a" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#222436", - "borderColor": "#222436", - "foreground": "#c8d3f5", - "infoForeground": "#a9b8e8", - "shortcutForeground": "#a9b8e8" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#74a0f1", - "inactiveCaption": "#2f334d", - "inactiveCaptionBorder": "#222436", - "inactiveCaptionText": "#a9b8e8", - "info": "#a9b8e8", - "infoText": "#a9b8e8", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#222436", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#222436" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#c8d3f5", - "background": "#222436", - "inactiveTitleForeground": "#a9b8e8" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#222436", - "disabledForeground": "#828bb8", - "disabledShadow": "#222436", - "disabledText": "#828bb8", - "foreground": "#c8d3f5", - "infoForeground": "#a9b8e8", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#c8d3f5" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#74a0f1", - "hoverForeground": "#74a0f1", - "pressedForeground": "#74a0f1", - "secondaryForeground": "#a9b8e8", - "visitedForeground": "#74a0f1" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#74a0f1", + "link.foreground": "accent", "List": { - "background": "#2f334d", - "foreground": "#c8d3f5", - "hoverBackground": "#444a7370", - "hoverInactiveBackground": "#2f334d", - "selectionBackground": "#444a73", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#444a7370" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#222436", - "branchColor": "#c8d3f5", - "contrast": "#191a2a", - "foreground": "#c8d3f5", - "mergeCommits": "#444a73", - "primaryColor": "#a9b8e8", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#222436", - "tab.borderColor": "#74a0f1", - "tagColor": "#a9b8e8" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#2f334d", - "usedColor": "#444a73", - "usedBackground": "#444a73" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#a9b8e8", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#222436", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#2f334d", - "disabledBackground": "#2f334d", - "disabledForeground": "#828bb8", - "foreground": "#c8d3f5", - "selectionBackground": "#444a73", - "selectionForeground": "#FFFFFF", - "separatorColor": "#222436" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#191a2a", - "borderColor": "#222436", - "disabledBackground": "#222436", - "disabledForeground": "#828bb8", - "foreground": "#c8d3f5", - "highlight": "#222436", - "selectionBackground": "#444a73", - "selectionForeground": "#FFFFFF", - "shadow": "#191a2a" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#a9b8e8", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#222436", - "disabledBackground": "#222436", - "disabledForeground": "#828bb8", - "foreground": "#c8d3f5", - "selectionBackground": "#444a73", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#c8d3f5", - "borderColor": "#222436" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#222436" + "background": "bg" }, "SearchField": { - "background": "#191a2a" + "background": "hc" } }, - "NewPSD.warning": "#74a0f1", + "NewPSD.warning": "accent", "Notification": { - "background": "#191a2a", - "borderColor": "#191a2a", - "errorBackground": "#191a2a", - "errorBorderColor": "#191a2a", - "foreground": "#c8d3f5", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#444a73", - "foreground": "#c8d3f5", - "innerBorderColor": "#444a73" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#191a2a", - "errorBorderColor": "#191a2a", - "informativeBackground": "#191a2a", - "informativeBorderColor": "#191a2a", - "warningBackground": "#191a2a", - "warningBorderColor": "#191a2a" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#222436", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#222436", - "foreground": "#c8d3f5", - "messageForeground": "#c8d3f5" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#444a73", - "focusedColor": "#74a0f1", - "disabledColor": "#828bb8" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#222436", - "foreground": "#c8d3f5" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#2f334d", - "borderColor": "#2f334d", - "currentOverloadBackground": "#444a73", - "currentParameterForeground": "#74a0f1", - "disabledForeground": "#828bb8", - "foreground": "#c8d3f5", - "infoForeground": "#a9b8e8", - "lineSeparatorColor": "#2f334d" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#191a2a", - "capsLockIconColor": "#74a0f1", - "caretForeground": "#74a0f1", - "foreground": "#c8d3f5", - "inactiveForeground": "#828bb8", - "selectionBackground": "#2f334d", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#222436", - "disabledForeground": "#828bb8", - "eapTagBackground": "#444a73", - "hoverBackground": "#444a7370", - "lightSelectionBackground": "#2f334d", - "paidTagBackground": "#444a73", - "selectionBackground": "#444a73", - "tagForeground": "#74a0f1", - "tagBackground": "#444a73", - "trialTagBackground": "#444a73", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#444a73", - "installBorderColor": "#444a73", - "installForeground": "#c8d3f5", - "installFocusedBackground": "#444a73", - "installFillForeground": "#828bb8", - "installFillBackground": "#444a73", - "updateBackground": "#74a0f1", - "updateBorderColor": "#444a73", - "updateForeground": "#c8d3f5" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#191a2a", - "borderColor": "#222436" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#2f334d", - "foreground": "#c8d3f5" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#2f334d", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#2f334d" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#222436", - "borderColor": "#222436", - "foreground": "#74a0f1" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#191a2a", - "inactiveBorderColor": "#222436", - "innerBorderColor": "#2f334d", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#222436", - "inactiveBackground": "#191a2a" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#c8d3f5", - "separatorColor": "#2f334d", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#191a2a", - "background": "#191a2a", - "borderColor": "#191a2a" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#222436", + "background": "bg", "border": "2,0,2,0", - "foreground": "#c8d3f5", - "translucentBackground": "#222436" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#222436", - "foreground": "#74a0f1", - "indeterminateEndColor": "#74a0f1", - "indeterminateStartColor": "#74a0f1", - "progressColor": "#74a0f1", - "selectionBackground": "#444a73", - "trackColor": "#444a73" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#74a0f1" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#222436", - "disabledText": "#828bb8", - "foreground": "#c8d3f5" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#a9b8e8", - "acceleratorSelectionForeground": "#a9b8e8", - "background": "#222436", - "disabledBackground": "#222436", - "disabledForeground": "#828bb8", - "foreground": "#c8d3f5", - "selectionBackground": "#444a73", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#222436", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#222436", - "hoverThumbBorderColor": "#74a0f1", - "hoverThumbColor": "#74a0f1", - "hoverTrackColor": "#22243630", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#74a0f1", - "hoverThumbColor": "#74a0f1", - "hoverTrackColor": "#22243630", - "thumbBorderColor": "#74a0f170", - "thumbColor": "#74a0f170", - "trackColor": "#22243630", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#74a0f1", - "hoverThumbColor": "#74a0f1", - "hoverTrackColor": "#22243630", - "thumbBorderColor": "#74a0f170", - "thumbColor": "#74a0f170", - "trackColor": "#22243630" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#444a73", - "thumbBorderColor": "#74a0f170", - "thumbColor": "#74a0f170", - "trackColor": "#22243630", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#74a0f1", - "hoverThumbColor": "#74a0f1", - "hoverTrackColor": "#22243630", - "thumbBorderColor": "#74a0f170", - "thumbColor": "#74a0f170", - "trackColor": "#22243630" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#191a2a", - "foreground": "#a9b8e8" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#222436" + "background": "bg" }, "List": { - "separatorForeground": "#a9b8e8", - "separatorColor": "#222436" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#222436", - "borderColor": "#191a2a", - "infoForeground": "#a9b8e8" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#444a73" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#74a0f1", - "startBackground": "#74a0f1", - "endColor": "#74a0f1", - "startColor": "#74a0f1" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#191a2a", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#2f334d" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#a9b8e8", - "Repeated.File.Foreground": "#c8d3f5" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#2f334d", - "foreground": "#2f334d", - "separatorColor": "#2f334d" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#191a2a" + "background": "hc" }, "Slider": { - "background": "#222436", - "buttonBorderColor": "#74a0f1", - "buttonColor": "#74a0f1", - "foreground": "#c8d3f5", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#2f334d", - "trackColor": "#2f334d", - "trackWidth": 7, - "thumb": "#74a0f1" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#444a73", - "borderColor": "#222436", - "foreground": "#c8d3f5", - "errorForeground": "#c8d3f5" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#222436", + "background": "bg", "border": "3,3,3,3", - "foreground": "#c8d3f5", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#222436", - "highlight": "#191a2a" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#2f334d", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#222436", - "hoverBackground": "#444a73", - "LightEditBackground": "#2f334d" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#222436", - "contentAreaColor": "#444a73", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#222436", - "disabledForeground": "#828bb8", - "disabledUnderlineColor": "#828bb8", - "focus": "#2f334d", - "focusColor": "#2f334d", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#c8d3f5", - "highlight": "#222436", - "hoverColor": "#444a73", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#74a0f1" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#191a2a", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#191a2a", - "background": "#222436", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#828bb8", - "dropLineColor": "#74a0f1", - "dropLineShortColor": "#74a0f1", - "focusCellBackground": "#2f334d", - "focusCellForeground": "#FFFFFF", - "foreground": "#c8d3f5", - "gridColor": "#222436", - "highlightOuter": "#2f334d", - "hoverBackground": "#444a7370", - "hoverInactiveBackground": "#2f334d", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#a9b8e8", - "lightSelectionInactiveBackground": "#2f334d", - "selectionBackground": "#2f334d", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#2f334d", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#c8d3f5", - "stripeColor": "#191a2a" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#222436", - "borderColor": "#222436", - "bottomSeparatorColor": "#2f334d", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#828bb8", - "foreground": "#c8d3f5", - "focusCellBackground": "#2f334d", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#2f334d" + "separatorColor": "second" }, - "text": "#a9b8e8", - "textInactiveText": "#a9b8e8", - "textText": "#a9b8e8", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#191a2a", - "caretForeground": "#74a0f1", - "foreground": "#c8d3f5", - "inactiveForeground": "#828bb8", - "selectionBackground": "#2f334d", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#191a2a", - "caretForeground": "#74a0f1", - "foreground": "#c8d3f5", - "inactiveForeground": "#828bb8", - "selectionBackground": "#2f334d", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#191a2a", - "caretForeground": "#74a0f1", - "foreground": "#c8d3f5", - "inactiveForeground": "#828bb8", - "selectionBackground": "#2f334d", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#191a2a", - "Button.hoverBackground": "#444a73", - "inactiveBackground": "#222436", - "infoForeground": "#a9b8e8", - "inactiveInfoForeground": "#a9b8e8" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#c8d3f5", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#444a73", - "buttonColor": "#c8d3f5", - "disabledText": "#828bb8", - "foreground": "#c8d3f5", - "offForeground": "#222436", - "offBackground": "#222436", - "onBackground": "#74a0f1", - "onForeground": "#74a0f1" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#191a2a", - "borderHandleColor": "#a9b8e8", - "floatingForeground": "#a9b8e8", - "foreground": "#c8d3f5" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#222436", - "Actions.infoForeground": "#a9b8e8", - "background": "#191a2a", - "borderColor": "#222436", - "foreground": "#c8d3f5", - "infoForeground": "#a9b8e8", - "separatorColor": "#222436", - "shortcutForeground": "#a9b8e8" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#2f334d", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#191a2a" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#222436", - "borderColor": "#2f334d", - "inactiveBackground": "#222436" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#222436" + "background": "bg" }, "HeaderTab": { - "borderColor": "#444a73", - "hoverBackground": "#444a73", - "hoverInactiveBackground": "#444a73", - "inactiveUnderlineColor": "#74a0f1", - "selectedBackground": "#191a2a", - "selectedInactiveBackground": "#191a2a", - "underlineColor": "#74a0f1", - "underlinedTabBackground": "#2f334d", - "underlinedTabInactiveBackground": "#2f334d", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#c8d3f5" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#191a2a", - "foreground": "#a9b8e8", - "hash": "#222436", - "hoverBackground": "#444a7370", - "hoverInactiveBackground": "#2f334d", - "modifiedItemForeground": "#74a0f1", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#444a7370", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#444a7370", - "textBackground": "#191a2a" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#222436", - "Canvas.background": "#191a2a", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#222436", - "foreground": "#c8d3f5" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#222436", - "background": "#222436", - "foreground": "#c8d3f5", - "hoverBorderColor": "#444a73" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#222436", - "hoverBorderColor": "#444a73" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#191a2a", - "highStroke.foreground": "#c8d3f5", - "Label.foreground": "#a9b8e8", - "List.selectionBackground": "#444a7370", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#222436", - "Component.foreground": "#c8d3f5", - "ConstraintSetText.foreground": "#a9b8e8", - "ConstraintSet.background": "#2f334d", - "CSPanel.SelectedFocusBackground": "#444a73", - "CSPanel.SelectedBackground": "#444a7370", - "cs_FocusText.infoForeground": "#a9b8e8", - "CursorTextColor.foreground": "#c8d3f5", - "HoverColor.disabledBackground": "#828bb8", - "motionGraph.background": "#222436", - "Notification.background": "#191a2a", - "ourAvg.background": "#2f334d", - "ourCS.background": "#2f334d", - "ourCS_Border.borderColor": "#222436", - "ourCS_TextColor.foreground": "#a9b8e8", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#2f334d", - "ourCS_SelectedBorder.pressedBorderColor": "#444a73", - "ourML_BarColor.separatorColor": "#222436", - "PrimaryPanel.background": "#191a2a", - "SecondaryPanel.background": "#222436", - "SecondaryPanel.header.foreground": "#a9b8e8", - "SecondaryPanel.header.background": "#191a2a", - "timeLine.disabledBorderColor": "#222436" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#222436", - "background": "#222436" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#c8d3f5", + "percent.foreground": "fg", "Placeholder": { - "background": "#222436", - "borderColor": "#222436", - "foreground": "#c8d3f5", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#222436", - "stroke.acceleratorForeground": "#a9b8e8" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#191a2a", - "errorBorderColor": "#191a2a", - "warningBackground": "#191a2a", - "warningBorderColor": "#191a2a" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#222436" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#444a73" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#74a0f1", - "otherIconColor": "#a9b8e8", - "remoteBranchIconColor": "#c8d3f5", - "tagIconColor": "#a9b8e8" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#74a0f1", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#828bb8", - "localTagIconColor": "#a9b8e8", - "mqTagIconColor": "#a9b8e8", - "tagIconColor": "#a9b8e8", - "tipIconColor": "#a9b8e8" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#a9b8e8", - "Commit.currentBranchBackground": "#2f334d", - "Commit.hoveredBackground": "#444a7370" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#444a73" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#191a2a", - "foreground": "#c8d3f5" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#222436", - "background": "#222436", - "borderColor": "#222436", - "captionBackground": "#191a2a", - "captionForeground": "#c8d3f5", - "Details.background": "#222436", - "footerBackground": "#191a2a", - "footerForeground": "#c8d3f5", - "headerBackground": "#222436", - "headerForeground": "#c8d3f5", - "List.background": "#191a2a", - "separatorColor": "#222436", - "SidePanel.background": "#2f334d", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#191a2a", - "actions.selectionBackground": "#444a73", - "background": "#2f334d", - "selectionBackground": "#444a73", - "selectionInactiveBackground": "#2f334d" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#191a2a", - "windowBorder": "#222436", - "windowText": "#a9b8e8", - "Window.border": "#222436" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#191a2a", - "#6B6B6B": "#a9b8e8", - "#A7A7A7": "#222436", - "#3D6185": "#74a0f1", - "#466D94": "#74a0f1", - "#3C3F41": "#222436", - "#545556": "#828bb8", - "#606060": "#828bb8", - "#9AA7B0": "#c8d3f5", - "#675133": "#74a0f1", - "Actions.Blue": "#70b0ff", - "Actions.Green": "#7af8ca", - "Actions.Grey": "#a9b8e8", - "Actions.GreyInline": "#7e8eda", - "Actions.GreyInline.Dark": "#c8d3f5", - "Actions.Red": "#ff757f", - "Actions.Yellow": "#ffbd76", - "Checkbox.Background.Default": "#191a2a", - "Checkbox.Background.Default.Dark": "#191a2a", - "Checkbox.Background.Disabled": "#2f334d", - "Checkbox.Background.Disabled.Dark": "#2f334d", - "Checkbox.Border.Default": "#222436", - "Checkbox.Border.Default.Dark": "#222436", - "Checkbox.Border.Disabled": "#828bb8", - "Checkbox.Border.Disabled.Dark": "#828bb8", - "Checkbox.Focus.Thin.Default": "#74a0f1", - "Checkbox.Focus.Thin.Default.Dark": "#74a0f1", - "Checkbox.Focus.Wide": "#74a0f1", - "Checkbox.Focus.Wide.Dark": "#74a0f1", - "Checkbox.Foreground.Disabled": "#828bb8", - "Checkbox.Foreground.Disabled.Dark": "#828bb8", - "Checkbox.Background.Selected": "#74a0f1", - "Checkbox.Background.Selected.Dark": "#222436", - "Checkbox.Border.Selected": "#74a0f1", - "Checkbox.Border.Selected.Dark": "#74a0f1", - "Checkbox.Foreground.Selected": "#74a0f1", - "Checkbox.Foreground.Selected.Dark": "#74a0f1", - "Checkbox.Focus.Thin.Selected": "#c8d3f5", - "Checkbox.Focus.Thin.Selected.Dark": "#c8d3f5", - "Objects.Grey": "#7e8eda", - "Objects.Blue": "#70b0ff", - "Objects.RedStatus": "#ff757f", - "Objects.Red": "#ff757f", - "Objects.Pink": "#baacff", - "Objects.Yellow": "#ffbd76", - "Objects.Green": "#7af8ca", - "Objects.Purple": "#baacff", - "Objects.BlackText": "#c8d3f5", - "Objects.YellowDark": "#ff9668", - "Objects.GreenAndroid": "#7af8ca" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Moonlight.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Moonlight.theme.json index 24dce5ad..d5cca660 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Moonlight.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Moonlight.theme.json @@ -2,1004 +2,1089 @@ "name": "Moonlight", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#222436", + "bg30": "#22243630", + "fg": "#c8d3f5", + "text": "#a9b8e8", + "selBg": "#444a73", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#222436", + "excl": "#2f334d", + "second": "#2f334d", + "dis": "#828bb8", + "accent": "#74a0f1", + "accent2": "#74a0f12", + "accent50": "#74a0f150", + "accent70": "#74a0f170", + "cs": "#191a2a", + "button": "#444a73", + "table": "#2f334d", + "tree": "#444a7370", + "hl": "#444a73", + "notif": "#191a2a", + "hc": "#222436", + "white": "#c8d3f5", + "blue": "#70b0ff", + "red": "#ff757f", + "yellow": "#ffbd76", + "green": "#7af8ca", + "gray": "#7e8eda", + "purple": "#baacff", + "orange": "#ff9668" + }, "editorScheme": "colors/Moonlight.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#a9b8e8", - "background": "#222436", - "borderColor": "#222436", - "disabledBackground": "#2f334d", - "disabledForeground": "#828bb8", - "disabledText": "#828bb8", - "focusColor": "#444a73", - "focusedBorderColor": "#74a0f1", - "foreground": "#c8d3f5", - "inactiveBackground": "#2f334d", - "inactiveForeground": "#a9b8e8", - "infoForeground": "#a9b8e8", - "selectionBackground": "#444a73", - "selectionBackgroundInactive": "#2f334d", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#2f334d", - "separatorColor": "#222436" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#222436", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#74a0f150", - "hoverBorderColor": "#74a0f150", - "hoverSeparatorColor": "#444a73", - "focusedBorderColor": "#74a0f150", - "pressedBackground": "#74a0f150", - "pressedBorderColor": "#74a0f150" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#444a73" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#222436", - "Borders.color": "#222436", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#222436", + "background": "bg", "default": { - "endBackground": "#2f334d", - "endBorderColor": "#2f334d", - "foreground": "#FFFFFF", - "focusColor": "#74a0f1", - "focusedBorderColor": "#74a0f1", - "shadowColor": "#2f334d", - "startBackground": "#2f334d", - "startBorderColor": "#2f334d" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#444a73", - "disabledText": "#828bb8", - "endBackground": "#444a73", - "endBorderColor": "#444a73", - "focus": "#444a73", - "focusedBorderColor": "#74a0f1", - "foreground": "#a9b8e8", - "highlight": "#FFFFFF", - "mt.background": "#444a73", - "mt.foreground": "#a9b8e8", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#2f334d", - "mt.selection.color2": "#2f334d", - "startBackground": "#444a73", - "startBorderColor": "#444a73", - "shadowColor": "#444a73", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#222436", - "Tooltip.background": "#191a2a" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#191a2a", - "selectionBackground": "#444a73" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#222436", - "disabledText": "#828bb8", - "foreground": "#c8d3f5", - "select": "#74a0f1" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#a9b8e8", - "acceleratorSelectionForeground": "#a9b8e8", - "background": "#222436", - "disabledBackground": "#222436", - "disabledForeground": "#828bb8", - "foreground": "#c8d3f5", - "selectionBackground": "#444a73", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#c8d3f5", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#74a0f1", - "dropdownBorder": "#2f334d", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#222436", - "foreground": "#c8d3f5", - "swatchesDefaultRecentColor": "#c8d3f5" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#444a73", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#444a73", - "disabledIconColor": "#828bb8", - "iconColor": "#c8d3f5", - "nonEditableBackground": "#222436" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#222436", - "buttonBackground": "#444a73", - "darcula.hoveredArrowButtonForeground": "#74a0f1", - "disabledForeground": "#828bb8", - "foreground": "#c8d3f5", - "modifiedItemForeground": "#74a0f1", - "nonEditableBackground": "#2f334d", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#2f334d", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#222436", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#2f334d", - "foreground": "#c8d3f5", - "infoForeground": "#a9b8e8", - "matchForeground": "#74a0f1", - "matchSelectionForeground": "#74a0f1", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#a9b8e8", - "selectionInactiveBackground": "#444a73", - "selectionBackground": "#444a73", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#444a73", - "disabledBorderColor": "#444a73", - "focusColor": "#74a0f1", - "focusedBorderColor": "#74a0f1", - "hoverIconColor": "#74a0f1", - "infoForeground": "#a9b8e8", - "iconColor": "#c8d3f5" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#222436", - "controlText": "#a9b8e8", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#74a0f1", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#a9b8e8", - "changedValueForeground": "#74a0f1", - "errorMessageForeground": "#ff757f", - "evaluatingExpressionForeground": "#a9b8e8", - "exceptionForeground": "#ffbd76", - "modifyingValueForeground": "#74a0f1", - "valueForeground": "#74a0f1" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#444a73", - "underlinedTabBackground": "#444a73" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#444a73" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#222436", - "borderColor": "#222436", - "hoverBackground": "#2f334d", - "hoverColor": "#222436", - "hoverMaskColor": "#444a73", - "inactiveColoredTabBackground": "#222436", - "inactiveColoredFileBackground": "#444a73", - "inactiveUnderlineColor": "#74a0f1", - "inactiveMaskColor": "#222436", - "underlineColor": "#74a0f1", - "underlinedTabBackground": "#2f334d", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#222436", - "DialogWrapper.southPanelBackground": "#222436", - "DialogWrapper.southPanelDivider": "#222436", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#222436", - "areaBorderColor": "#222436", - "areaForeground": "#c8d3f5" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#222436", - "foreground": "#c8d3f5", - "shortcutForeground": "#a9b8e8" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#222436", - "caretForeground": "#74a0f1", - "foreground": "#c8d3f5", - "inactiveBackground": "#222436", - "inactiveForeground": "#828bb8", - "selectionBackground": "#444a73", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#2f334d", - "hoverBackground": "#444a73", - "hoverColor": "#444a73", - "hoverMaskColor": "#444a73", - "inactiveMaskColor": "#222436", - "inactiveColoredFileBackground": "#222436", - "inactiveUnderlineColor": "#828bb8", - "selectedForeground": "#c8d3f5", - "selectedBackground": "#2f334d", - "underlineColor": "#74a0f1", - "underlinedTabBackground": "#2f334d", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#222436", - "borderColor": "#2f334d", - "hoverBackground": "#444a73", - "hoverColor": "#444a73", - "inactiveUnderlineColor": "#74a0f1", - "underlineColor": "#74a0f1", - "underlinedTabBackground": "#2f334d", - "underlinedTabForeground": "#c8d3f5" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#2f334d", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#222436", + "Focus.color": "border", "FormattedTextField": { - "background": "#222436", - "caretForeground": "#74a0f1", - "foreground": "#c8d3f5", - "inactiveBackground": "#444a73", - "inactiveForeground": "#828bb8", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#2f334d" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#191a2a", "Group": { - "disabledSeparatorColor": "#222436", - "separatorColor": "#222436" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#a9b8e8", - "lineSeparatorColor": "#222436" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#222436", - "inactive": "#191a2a" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#222436", - "borderColor": "#222436", - "foreground": "#c8d3f5", - "infoForeground": "#a9b8e8", - "shortcutForeground": "#a9b8e8" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#74a0f1", - "inactiveCaption": "#2f334d", - "inactiveCaptionBorder": "#222436", - "inactiveCaptionText": "#a9b8e8", - "info": "#a9b8e8", - "infoText": "#a9b8e8", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#222436", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#222436" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#c8d3f5", - "background": "#222436", - "inactiveTitleForeground": "#a9b8e8" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#222436", - "disabledForeground": "#828bb8", - "disabledShadow": "#222436", - "disabledText": "#828bb8", - "foreground": "#c8d3f5", - "infoForeground": "#a9b8e8", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#c8d3f5" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#74a0f1", - "hoverForeground": "#74a0f1", - "pressedForeground": "#74a0f1", - "secondaryForeground": "#a9b8e8", - "visitedForeground": "#74a0f1" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#74a0f1", + "link.foreground": "accent", "List": { - "background": "#2f334d", - "foreground": "#c8d3f5", - "hoverBackground": "#444a7370", - "hoverInactiveBackground": "#2f334d", - "selectionBackground": "#444a73", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#444a7370" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#222436", - "branchColor": "#c8d3f5", - "contrast": "#191a2a", - "foreground": "#c8d3f5", - "mergeCommits": "#444a73", - "primaryColor": "#a9b8e8", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#222436", - "tab.borderColor": "#74a0f1", - "tagColor": "#a9b8e8" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#2f334d", - "usedColor": "#444a73", - "usedBackground": "#444a73" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#a9b8e8", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#222436", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#2f334d", - "disabledBackground": "#2f334d", - "disabledForeground": "#828bb8", - "foreground": "#c8d3f5", - "selectionBackground": "#444a73", - "selectionForeground": "#FFFFFF", - "separatorColor": "#222436" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#222436", - "borderColor": "#222436", - "disabledBackground": "#222436", - "disabledForeground": "#828bb8", - "foreground": "#c8d3f5", - "highlight": "#222436", - "selectionBackground": "#444a73", - "selectionForeground": "#FFFFFF", - "shadow": "#222436" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#a9b8e8", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#222436", - "disabledBackground": "#222436", - "disabledForeground": "#828bb8", - "foreground": "#c8d3f5", - "selectionBackground": "#444a73", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#c8d3f5", - "borderColor": "#222436" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#222436" + "background": "bg" }, "SearchField": { - "background": "#222436" + "background": "hc" } }, - "NewPSD.warning": "#74a0f1", + "NewPSD.warning": "accent", "Notification": { - "background": "#191a2a", - "borderColor": "#191a2a", - "errorBackground": "#191a2a", - "errorBorderColor": "#191a2a", - "foreground": "#c8d3f5", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#444a73", - "foreground": "#c8d3f5", - "innerBorderColor": "#444a73" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#191a2a", - "errorBorderColor": "#191a2a", - "informativeBackground": "#191a2a", - "informativeBorderColor": "#191a2a", - "warningBackground": "#191a2a", - "warningBorderColor": "#191a2a" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#222436", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#222436", - "foreground": "#c8d3f5", - "messageForeground": "#c8d3f5" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#444a73", - "focusedColor": "#74a0f1", - "disabledColor": "#828bb8" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#222436", - "foreground": "#c8d3f5" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#2f334d", - "borderColor": "#2f334d", - "currentOverloadBackground": "#444a73", - "currentParameterForeground": "#74a0f1", - "disabledForeground": "#828bb8", - "foreground": "#c8d3f5", - "infoForeground": "#a9b8e8", - "lineSeparatorColor": "#2f334d" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#222436", - "capsLockIconColor": "#74a0f1", - "caretForeground": "#74a0f1", - "foreground": "#c8d3f5", - "inactiveForeground": "#828bb8", - "selectionBackground": "#2f334d", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#222436", - "disabledForeground": "#828bb8", - "eapTagBackground": "#444a73", - "hoverBackground": "#444a7370", - "lightSelectionBackground": "#2f334d", - "paidTagBackground": "#444a73", - "selectionBackground": "#444a73", - "tagForeground": "#74a0f1", - "tagBackground": "#444a73", - "trialTagBackground": "#444a73", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#444a73", - "installBorderColor": "#444a73", - "installForeground": "#c8d3f5", - "installFocusedBackground": "#444a73", - "installFillForeground": "#828bb8", - "installFillBackground": "#444a73", - "updateBackground": "#74a0f1", - "updateBorderColor": "#444a73", - "updateForeground": "#c8d3f5" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#222436", - "borderColor": "#222436" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#2f334d", - "foreground": "#c8d3f5" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#2f334d", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#2f334d" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#222436", - "borderColor": "#222436", - "foreground": "#74a0f1" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#191a2a", - "inactiveBorderColor": "#222436", - "innerBorderColor": "#2f334d", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#222436", - "inactiveBackground": "#191a2a" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#c8d3f5", - "separatorColor": "#2f334d", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#191a2a", - "background": "#191a2a", - "borderColor": "#191a2a" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#222436", + "background": "bg", "border": "2,0,2,0", - "foreground": "#c8d3f5", - "translucentBackground": "#222436" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#222436", - "foreground": "#74a0f1", - "indeterminateEndColor": "#74a0f1", - "indeterminateStartColor": "#74a0f1", - "progressColor": "#74a0f1", - "selectionBackground": "#444a73", - "trackColor": "#444a73" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#74a0f1" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#222436", - "disabledText": "#828bb8", - "foreground": "#c8d3f5" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#a9b8e8", - "acceleratorSelectionForeground": "#a9b8e8", - "background": "#222436", - "disabledBackground": "#222436", - "disabledForeground": "#828bb8", - "foreground": "#c8d3f5", - "selectionBackground": "#444a73", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#222436", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#222436", - "hoverThumbBorderColor": "#74a0f1", - "hoverThumbColor": "#74a0f1", - "hoverTrackColor": "#22243630", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#74a0f1", - "hoverThumbColor": "#74a0f1", - "hoverTrackColor": "#22243630", - "thumbBorderColor": "#74a0f170", - "thumbColor": "#74a0f170", - "trackColor": "#22243630", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#74a0f1", - "hoverThumbColor": "#74a0f1", - "hoverTrackColor": "#22243630", - "thumbBorderColor": "#74a0f170", - "thumbColor": "#74a0f170", - "trackColor": "#22243630" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#444a73", - "thumbBorderColor": "#74a0f170", - "thumbColor": "#74a0f170", - "trackColor": "#22243630", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#74a0f1", - "hoverThumbColor": "#74a0f1", - "hoverTrackColor": "#22243630", - "thumbBorderColor": "#74a0f170", - "thumbColor": "#74a0f170", - "trackColor": "#22243630" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#191a2a", - "foreground": "#a9b8e8" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#222436" + "background": "bg" }, "List": { - "separatorForeground": "#a9b8e8", - "separatorColor": "#222436" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#222436", - "borderColor": "#191a2a", - "infoForeground": "#a9b8e8" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#444a73" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#74a0f1", - "startBackground": "#74a0f1", - "endColor": "#74a0f1", - "startColor": "#74a0f1" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#191a2a", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#2f334d" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#a9b8e8", - "Repeated.File.Foreground": "#c8d3f5" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#2f334d", - "foreground": "#2f334d", - "separatorColor": "#2f334d" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#222436" + "background": "hc" }, "Slider": { - "background": "#222436", - "buttonBorderColor": "#74a0f1", - "buttonColor": "#74a0f1", - "foreground": "#c8d3f5", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#2f334d", - "trackColor": "#2f334d", - "trackWidth": 7, - "thumb": "#74a0f1" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#444a73", - "borderColor": "#222436", - "foreground": "#c8d3f5", - "errorForeground": "#c8d3f5" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#222436", + "background": "bg", "border": "3,3,3,3", - "foreground": "#c8d3f5", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#222436", - "highlight": "#222436" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#2f334d", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#222436", - "hoverBackground": "#444a73", - "LightEditBackground": "#2f334d" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#222436", - "contentAreaColor": "#444a73", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#222436", - "disabledForeground": "#828bb8", - "disabledUnderlineColor": "#828bb8", - "focus": "#2f334d", - "focusColor": "#2f334d", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#c8d3f5", - "highlight": "#222436", - "hoverColor": "#444a73", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#74a0f1" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#222436", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#191a2a", - "background": "#222436", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#828bb8", - "dropLineColor": "#74a0f1", - "dropLineShortColor": "#74a0f1", - "focusCellBackground": "#2f334d", - "focusCellForeground": "#FFFFFF", - "foreground": "#c8d3f5", - "gridColor": "#222436", - "highlightOuter": "#2f334d", - "hoverBackground": "#444a7370", - "hoverInactiveBackground": "#2f334d", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#a9b8e8", - "lightSelectionInactiveBackground": "#2f334d", - "selectionBackground": "#2f334d", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#2f334d", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#c8d3f5", - "stripeColor": "#191a2a" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#222436", - "borderColor": "#222436", - "bottomSeparatorColor": "#2f334d", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#828bb8", - "foreground": "#c8d3f5", - "focusCellBackground": "#2f334d", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#2f334d" + "separatorColor": "second" }, - "text": "#a9b8e8", - "textInactiveText": "#a9b8e8", - "textText": "#a9b8e8", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#222436", - "caretForeground": "#74a0f1", - "foreground": "#c8d3f5", - "inactiveForeground": "#828bb8", - "selectionBackground": "#2f334d", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#222436", - "caretForeground": "#74a0f1", - "foreground": "#c8d3f5", - "inactiveForeground": "#828bb8", - "selectionBackground": "#2f334d", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#222436", - "caretForeground": "#74a0f1", - "foreground": "#c8d3f5", - "inactiveForeground": "#828bb8", - "selectionBackground": "#2f334d", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#191a2a", - "Button.hoverBackground": "#444a73", - "inactiveBackground": "#222436", - "infoForeground": "#a9b8e8", - "inactiveInfoForeground": "#a9b8e8" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#c8d3f5", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#444a73", - "buttonColor": "#c8d3f5", - "disabledText": "#828bb8", - "foreground": "#c8d3f5", - "offForeground": "#222436", - "offBackground": "#222436", - "onBackground": "#74a0f1", - "onForeground": "#74a0f1" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#222436", - "borderHandleColor": "#a9b8e8", - "floatingForeground": "#a9b8e8", - "foreground": "#c8d3f5" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#222436", - "Actions.infoForeground": "#a9b8e8", - "background": "#191a2a", - "borderColor": "#222436", - "foreground": "#c8d3f5", - "infoForeground": "#a9b8e8", - "separatorColor": "#222436", - "shortcutForeground": "#a9b8e8" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#2f334d", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#191a2a" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#222436", - "borderColor": "#2f334d", - "inactiveBackground": "#222436" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#222436" + "background": "bg" }, "HeaderTab": { - "borderColor": "#444a73", - "hoverBackground": "#444a73", - "hoverInactiveBackground": "#444a73", - "inactiveUnderlineColor": "#74a0f1", - "selectedBackground": "#191a2a", - "selectedInactiveBackground": "#191a2a", - "underlineColor": "#74a0f1", - "underlinedTabBackground": "#2f334d", - "underlinedTabInactiveBackground": "#2f334d", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#c8d3f5" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#222436", - "foreground": "#a9b8e8", - "hash": "#222436", - "hoverBackground": "#444a7370", - "hoverInactiveBackground": "#2f334d", - "modifiedItemForeground": "#74a0f1", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#444a7370", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#444a7370", - "textBackground": "#222436" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#222436", - "Canvas.background": "#191a2a", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#222436", - "foreground": "#c8d3f5" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#222436", - "background": "#222436", - "foreground": "#c8d3f5", - "hoverBorderColor": "#444a73" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#222436", - "hoverBorderColor": "#444a73" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#191a2a", - "highStroke.foreground": "#c8d3f5", - "Label.foreground": "#a9b8e8", - "List.selectionBackground": "#444a7370", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#222436", - "Component.foreground": "#c8d3f5", - "ConstraintSetText.foreground": "#a9b8e8", - "ConstraintSet.background": "#2f334d", - "CSPanel.SelectedFocusBackground": "#444a73", - "CSPanel.SelectedBackground": "#444a7370", - "cs_FocusText.infoForeground": "#a9b8e8", - "CursorTextColor.foreground": "#c8d3f5", - "HoverColor.disabledBackground": "#828bb8", - "motionGraph.background": "#222436", - "Notification.background": "#191a2a", - "ourAvg.background": "#2f334d", - "ourCS.background": "#2f334d", - "ourCS_Border.borderColor": "#222436", - "ourCS_TextColor.foreground": "#a9b8e8", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#2f334d", - "ourCS_SelectedBorder.pressedBorderColor": "#444a73", - "ourML_BarColor.separatorColor": "#222436", - "PrimaryPanel.background": "#191a2a", - "SecondaryPanel.background": "#222436", - "SecondaryPanel.header.foreground": "#a9b8e8", - "SecondaryPanel.header.background": "#191a2a", - "timeLine.disabledBorderColor": "#222436" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#222436", - "background": "#222436" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#c8d3f5", + "percent.foreground": "fg", "Placeholder": { - "background": "#222436", - "borderColor": "#222436", - "foreground": "#c8d3f5", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#222436", - "stroke.acceleratorForeground": "#a9b8e8" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#191a2a", - "errorBorderColor": "#191a2a", - "warningBackground": "#191a2a", - "warningBorderColor": "#191a2a" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#222436" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#444a73" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#74a0f1", - "otherIconColor": "#a9b8e8", - "remoteBranchIconColor": "#c8d3f5", - "tagIconColor": "#a9b8e8" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#74a0f1", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#828bb8", - "localTagIconColor": "#a9b8e8", - "mqTagIconColor": "#a9b8e8", - "tagIconColor": "#a9b8e8", - "tipIconColor": "#a9b8e8" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#a9b8e8", - "Commit.currentBranchBackground": "#2f334d", - "Commit.hoveredBackground": "#444a7370" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#444a73" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#222436", - "foreground": "#c8d3f5" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#222436", - "background": "#222436", - "borderColor": "#222436", - "captionBackground": "#191a2a", - "captionForeground": "#c8d3f5", - "Details.background": "#222436", - "footerBackground": "#191a2a", - "footerForeground": "#c8d3f5", - "headerBackground": "#222436", - "headerForeground": "#c8d3f5", - "List.background": "#191a2a", - "separatorColor": "#222436", - "SidePanel.background": "#2f334d", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#191a2a", - "actions.selectionBackground": "#444a73", - "background": "#2f334d", - "selectionBackground": "#444a73", - "selectionInactiveBackground": "#2f334d" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#222436", - "windowBorder": "#222436", - "windowText": "#a9b8e8", - "Window.border": "#222436" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#191a2a", - "#6B6B6B": "#a9b8e8", - "#A7A7A7": "#222436", - "#3D6185": "#74a0f1", - "#466D94": "#74a0f1", - "#3C3F41": "#222436", - "#545556": "#828bb8", - "#606060": "#828bb8", - "#9AA7B0": "#c8d3f5", - "#675133": "#74a0f1", - "Actions.Blue": "#70b0ff", - "Actions.Green": "#7af8ca", - "Actions.Grey": "#a9b8e8", - "Actions.GreyInline": "#7e8eda", - "Actions.GreyInline.Dark": "#c8d3f5", - "Actions.Red": "#ff757f", - "Actions.Yellow": "#ffbd76", - "Checkbox.Background.Default": "#191a2a", - "Checkbox.Background.Default.Dark": "#191a2a", - "Checkbox.Background.Disabled": "#2f334d", - "Checkbox.Background.Disabled.Dark": "#2f334d", - "Checkbox.Border.Default": "#222436", - "Checkbox.Border.Default.Dark": "#222436", - "Checkbox.Border.Disabled": "#828bb8", - "Checkbox.Border.Disabled.Dark": "#828bb8", - "Checkbox.Focus.Thin.Default": "#74a0f1", - "Checkbox.Focus.Thin.Default.Dark": "#74a0f1", - "Checkbox.Focus.Wide": "#74a0f1", - "Checkbox.Focus.Wide.Dark": "#74a0f1", - "Checkbox.Foreground.Disabled": "#828bb8", - "Checkbox.Foreground.Disabled.Dark": "#828bb8", - "Checkbox.Background.Selected": "#74a0f1", - "Checkbox.Background.Selected.Dark": "#222436", - "Checkbox.Border.Selected": "#74a0f1", - "Checkbox.Border.Selected.Dark": "#74a0f1", - "Checkbox.Foreground.Selected": "#74a0f1", - "Checkbox.Foreground.Selected.Dark": "#74a0f1", - "Checkbox.Focus.Thin.Selected": "#c8d3f5", - "Checkbox.Focus.Thin.Selected.Dark": "#c8d3f5", - "Objects.Grey": "#7e8eda", - "Objects.Blue": "#70b0ff", - "Objects.RedStatus": "#ff757f", - "Objects.Red": "#ff757f", - "Objects.Pink": "#baacff", - "Objects.Yellow": "#ffbd76", - "Objects.Green": "#7af8ca", - "Objects.Purple": "#baacff", - "Objects.BlackText": "#c8d3f5", - "Objects.YellowDark": "#ff9668", - "Objects.GreenAndroid": "#7af8ca" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Night Owl Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Night Owl Contrast.theme.json index ac8bc84e..73e70b58 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Night Owl Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Night Owl Contrast.theme.json @@ -2,1004 +2,1089 @@ "name": "Night Owl Contrast", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#011627", + "bg30": "#01162730", + "fg": "#d6deeb", + "text": "#5f7e97", + "selBg": "#084d81", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#122d42", + "excl": "#0e293f", + "second": "#0b2942", + "dis": "#697098", + "accent": "#7e57c2", + "accent2": "#7e57c22", + "accent50": "#7e57c250", + "accent70": "#7e57c270", + "cs": "#010e1a", + "button": "#0b253a", + "table": "#13344f", + "tree": "#13344f50", + "hl": "#084d81", + "notif": "#01111d", + "hc": "#010e1a", + "white": "#addb67", + "blue": "#82aaff", + "red": "#7fdbca", + "yellow": "#addb67", + "green": "#ecc48d", + "gray": "#637777", + "purple": "#c792ea", + "orange": "#f78c6c" + }, "editorScheme": "colors/Night Owl.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#5f7e97", - "background": "#011627", - "borderColor": "#122d42", - "disabledBackground": "#0e293f", - "disabledForeground": "#697098", - "disabledText": "#697098", - "focusColor": "#084d81", - "focusedBorderColor": "#7e57c2", - "foreground": "#d6deeb", - "inactiveBackground": "#0e293f", - "inactiveForeground": "#5f7e97", - "infoForeground": "#5f7e97", - "selectionBackground": "#5f7e9790", - "selectionBackgroundInactive": "#0b2942", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#0b2942", - "separatorColor": "#122d42" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#011627", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#7e57c250", - "hoverBorderColor": "#7e57c250", - "hoverSeparatorColor": "#0b253a", - "focusedBorderColor": "#7e57c250", - "pressedBackground": "#7e57c250", - "pressedBorderColor": "#7e57c250" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#5f7e9790" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#011627", - "Borders.color": "#122d42", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#011627", + "background": "bg", "default": { - "endBackground": "#13344f", - "endBorderColor": "#13344f", - "foreground": "#FFFFFF", - "focusColor": "#7e57c2", - "focusedBorderColor": "#7e57c2", - "shadowColor": "#13344f", - "startBackground": "#13344f", - "startBorderColor": "#13344f" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#0b253a", - "disabledText": "#697098", - "endBackground": "#0b253a", - "endBorderColor": "#0b253a", - "focus": "#084d81", - "focusedBorderColor": "#7e57c2", - "foreground": "#5f7e97", - "highlight": "#FFFFFF", - "mt.background": "#0b253a", - "mt.foreground": "#5f7e97", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#13344f", - "mt.selection.color2": "#13344f", - "startBackground": "#0b253a", - "startBorderColor": "#0b253a", - "shadowColor": "#0b253a", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#122d42", - "Tooltip.background": "#01111d" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#010e1a", - "selectionBackground": "#5f7e9790" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#011627", - "disabledText": "#697098", - "foreground": "#d6deeb", - "select": "#7e57c2" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#5f7e97", - "acceleratorSelectionForeground": "#5f7e97", - "background": "#011627", - "disabledBackground": "#011627", - "disabledForeground": "#697098", - "foreground": "#d6deeb", - "selectionBackground": "#5f7e9790", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#d6deeb", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#7e57c2", - "dropdownBorder": "#0b2942", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#011627", - "foreground": "#d6deeb", - "swatchesDefaultRecentColor": "#d6deeb" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#0b253a", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#0b253a", - "disabledIconColor": "#697098", - "iconColor": "#d6deeb", - "nonEditableBackground": "#011627" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#010e1a", - "buttonBackground": "#0b253a", - "darcula.hoveredArrowButtonForeground": "#7e57c2", - "disabledForeground": "#697098", - "foreground": "#d6deeb", - "modifiedItemForeground": "#7e57c2", - "nonEditableBackground": "#0b2942", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#13344f", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#122d42", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#0b2942", - "foreground": "#d6deeb", - "infoForeground": "#5f7e97", - "matchForeground": "#7e57c2", - "matchSelectionForeground": "#7e57c2", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#5f7e97", - "selectionInactiveBackground": "#084d81", - "selectionBackground": "#5f7e9790", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#084d81", - "disabledBorderColor": "#0b253a", - "focusColor": "#7e57c2", - "focusedBorderColor": "#7e57c2", - "hoverIconColor": "#7e57c2", - "infoForeground": "#5f7e97", - "iconColor": "#d6deeb" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#011627", - "controlText": "#5f7e97", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#7e57c2", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#5f7e97", - "changedValueForeground": "#7e57c2", - "errorMessageForeground": "#7fdbca", - "evaluatingExpressionForeground": "#5f7e97", - "exceptionForeground": "#addb67", - "modifyingValueForeground": "#7e57c2", - "valueForeground": "#7e57c2" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#084d81", - "underlinedTabBackground": "#084d81" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#084d81" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#011627", - "borderColor": "#011627", - "hoverBackground": "#13344f", - "hoverColor": "#010e1a", - "hoverMaskColor": "#084d81", - "inactiveColoredTabBackground": "#011627", - "inactiveColoredFileBackground": "#0b253a", - "inactiveUnderlineColor": "#7e57c2", - "inactiveMaskColor": "#010e1a", - "underlineColor": "#7e57c2", - "underlinedTabBackground": "#13344f", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#011627", - "DialogWrapper.southPanelBackground": "#011627", - "DialogWrapper.southPanelDivider": "#011627", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#011627", - "areaBorderColor": "#011627", - "areaForeground": "#d6deeb" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#010e1a", - "foreground": "#d6deeb", - "shortcutForeground": "#5f7e97" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#010e1a", - "caretForeground": "#7e57c2", - "foreground": "#d6deeb", - "inactiveBackground": "#011627", - "inactiveForeground": "#697098", - "selectionBackground": "#5f7e9790", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#0b2942", - "hoverBackground": "#084d81", - "hoverColor": "#084d81", - "hoverMaskColor": "#084d81", - "inactiveMaskColor": "#011627", - "inactiveColoredFileBackground": "#011627", - "inactiveUnderlineColor": "#697098", - "selectedForeground": "#d6deeb", - "selectedBackground": "#13344f", - "underlineColor": "#7e57c2", - "underlinedTabBackground": "#13344f", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#011627", - "borderColor": "#0b2942", - "hoverBackground": "#084d81", - "hoverColor": "#084d81", - "inactiveUnderlineColor": "#7e57c2", - "underlineColor": "#7e57c2", - "underlinedTabBackground": "#13344f", - "underlinedTabForeground": "#d6deeb" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#0e293f", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#122d42", + "Focus.color": "border", "FormattedTextField": { - "background": "#010e1a", - "caretForeground": "#7e57c2", - "foreground": "#d6deeb", - "inactiveBackground": "#0b253a", - "inactiveForeground": "#697098", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#13344f" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#01111d", "Group": { - "disabledSeparatorColor": "#122d42", - "separatorColor": "#122d42" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#5f7e97", - "lineSeparatorColor": "#011627" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#011627", - "inactive": "#010e1a" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#011627", - "borderColor": "#122d42", - "foreground": "#d6deeb", - "infoForeground": "#5f7e97", - "shortcutForeground": "#5f7e97" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#7e57c2", - "inactiveCaption": "#0b2942", - "inactiveCaptionBorder": "#011627", - "inactiveCaptionText": "#5f7e97", - "info": "#5f7e97", - "infoText": "#5f7e97", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#122d42", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#011627" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#d6deeb", - "background": "#011627", - "inactiveTitleForeground": "#5f7e97" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#011627", - "disabledForeground": "#697098", - "disabledShadow": "#011627", - "disabledText": "#697098", - "foreground": "#d6deeb", - "infoForeground": "#5f7e97", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#d6deeb" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#7e57c2", - "hoverForeground": "#7e57c2", - "pressedForeground": "#7e57c2", - "secondaryForeground": "#5f7e97", - "visitedForeground": "#7e57c2" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#7e57c2", + "link.foreground": "accent", "List": { - "background": "#0b2942", - "foreground": "#d6deeb", - "hoverBackground": "#13344f50", - "hoverInactiveBackground": "#13344f", - "selectionBackground": "#5f7e9790", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#13344f50" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#011627", - "branchColor": "#d6deeb", - "contrast": "#010e1a", - "foreground": "#d6deeb", - "mergeCommits": "#0b253a", - "primaryColor": "#5f7e97", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#011627", - "tab.borderColor": "#7e57c2", - "tagColor": "#5f7e97" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#0b2942", - "usedColor": "#084d81", - "usedBackground": "#084d81" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#5f7e97", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#011627", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#0b2942", - "disabledBackground": "#0b2942", - "disabledForeground": "#697098", - "foreground": "#d6deeb", - "selectionBackground": "#5f7e9790", - "selectionForeground": "#FFFFFF", - "separatorColor": "#122d42" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#010e1a", - "borderColor": "#011627", - "disabledBackground": "#011627", - "disabledForeground": "#697098", - "foreground": "#d6deeb", - "highlight": "#011627", - "selectionBackground": "#5f7e9790", - "selectionForeground": "#FFFFFF", - "shadow": "#010e1a" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#5f7e97", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#011627", - "disabledBackground": "#011627", - "disabledForeground": "#697098", - "foreground": "#d6deeb", - "selectionBackground": "#5f7e9790", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#d6deeb", - "borderColor": "#011627" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#011627" + "background": "bg" }, "SearchField": { - "background": "#010e1a" + "background": "hc" } }, - "NewPSD.warning": "#7e57c2", + "NewPSD.warning": "accent", "Notification": { - "background": "#01111d", - "borderColor": "#01111d", - "errorBackground": "#01111d", - "errorBorderColor": "#01111d", - "foreground": "#d6deeb", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#0b253a", - "foreground": "#d6deeb", - "innerBorderColor": "#0b253a" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#01111d", - "errorBorderColor": "#01111d", - "informativeBackground": "#01111d", - "informativeBorderColor": "#01111d", - "warningBackground": "#01111d", - "warningBorderColor": "#01111d" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#122d42", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#011627", - "foreground": "#d6deeb", - "messageForeground": "#d6deeb" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#0b253a", - "focusedColor": "#7e57c2", - "disabledColor": "#697098" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#011627", - "foreground": "#d6deeb" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#0b2942", - "borderColor": "#13344f", - "currentOverloadBackground": "#084d81", - "currentParameterForeground": "#7e57c2", - "disabledForeground": "#697098", - "foreground": "#d6deeb", - "infoForeground": "#5f7e97", - "lineSeparatorColor": "#13344f" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#010e1a", - "capsLockIconColor": "#7e57c2", - "caretForeground": "#7e57c2", - "foreground": "#d6deeb", - "inactiveForeground": "#697098", - "selectionBackground": "#13344f", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#011627", - "disabledForeground": "#697098", - "eapTagBackground": "#084d81", - "hoverBackground": "#13344f50", - "lightSelectionBackground": "#13344f", - "paidTagBackground": "#084d81", - "selectionBackground": "#5f7e9790", - "tagForeground": "#7e57c2", - "tagBackground": "#084d81", - "trialTagBackground": "#084d81", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#0b253a", - "installBorderColor": "#0b253a", - "installForeground": "#d6deeb", - "installFocusedBackground": "#084d81", - "installFillForeground": "#697098", - "installFillBackground": "#0b253a", - "updateBackground": "#7e57c2", - "updateBorderColor": "#0b253a", - "updateForeground": "#d6deeb" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#010e1a", - "borderColor": "#122d42" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#0b2942", - "foreground": "#d6deeb" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#13344f", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#13344f" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#011627", - "borderColor": "#011627", - "foreground": "#7e57c2" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#010e1a", - "inactiveBorderColor": "#011627", - "innerBorderColor": "#0b2942", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#011627", - "inactiveBackground": "#010e1a" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#d6deeb", - "separatorColor": "#0b2942", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#010e1a", - "background": "#010e1a", - "borderColor": "#010e1a" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#011627", + "background": "bg", "border": "2,0,2,0", - "foreground": "#d6deeb", - "translucentBackground": "#011627" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#011627", - "foreground": "#7e57c2", - "indeterminateEndColor": "#7e57c2", - "indeterminateStartColor": "#7e57c2", - "progressColor": "#7e57c2", - "selectionBackground": "#084d81", - "trackColor": "#084d81" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#7e57c2" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#011627", - "disabledText": "#697098", - "foreground": "#d6deeb" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#5f7e97", - "acceleratorSelectionForeground": "#5f7e97", - "background": "#011627", - "disabledBackground": "#011627", - "disabledForeground": "#697098", - "foreground": "#d6deeb", - "selectionBackground": "#5f7e9790", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#122d42", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#011627", - "hoverThumbBorderColor": "#7e57c2", - "hoverThumbColor": "#7e57c2", - "hoverTrackColor": "#01162730", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#7e57c2", - "hoverThumbColor": "#7e57c2", - "hoverTrackColor": "#01162730", - "thumbBorderColor": "#7e57c270", - "thumbColor": "#7e57c270", - "trackColor": "#01162730", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#7e57c2", - "hoverThumbColor": "#7e57c2", - "hoverTrackColor": "#01162730", - "thumbBorderColor": "#7e57c270", - "thumbColor": "#7e57c270", - "trackColor": "#01162730" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#084d81", - "thumbBorderColor": "#7e57c270", - "thumbColor": "#7e57c270", - "trackColor": "#01162730", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#7e57c2", - "hoverThumbColor": "#7e57c2", - "hoverTrackColor": "#01162730", - "thumbBorderColor": "#7e57c270", - "thumbColor": "#7e57c270", - "trackColor": "#01162730" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#010e1a", - "foreground": "#5f7e97" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#011627" + "background": "bg" }, "List": { - "separatorForeground": "#5f7e97", - "separatorColor": "#122d42" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#011627", - "borderColor": "#010e1a", - "infoForeground": "#5f7e97" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#084d81" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#7e57c2", - "startBackground": "#7e57c2", - "endColor": "#7e57c2", - "startColor": "#7e57c2" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#01111d", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#13344f" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#5f7e97", - "Repeated.File.Foreground": "#d6deeb" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#0b2942", - "foreground": "#0b2942", - "separatorColor": "#0b2942" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#010e1a" + "background": "hc" }, "Slider": { - "background": "#011627", - "buttonBorderColor": "#7e57c2", - "buttonColor": "#7e57c2", - "foreground": "#d6deeb", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#0b2942", - "trackColor": "#13344f", - "trackWidth": 7, - "thumb": "#7e57c2" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#084d81", - "borderColor": "#122d42", - "foreground": "#d6deeb", - "errorForeground": "#d6deeb" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#011627", + "background": "bg", "border": "3,3,3,3", - "foreground": "#d6deeb", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#011627", - "highlight": "#010e1a" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#0b2942", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#011627", - "hoverBackground": "#084d81", - "LightEditBackground": "#13344f" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#011627", - "contentAreaColor": "#084d81", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#122d42", - "disabledForeground": "#697098", - "disabledUnderlineColor": "#697098", - "focus": "#13344f", - "focusColor": "#13344f", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#d6deeb", - "highlight": "#122d42", - "hoverColor": "#084d81", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#7e57c2" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#010e1a", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#010e1a", - "background": "#011627", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#697098", - "dropLineColor": "#7e57c2", - "dropLineShortColor": "#7e57c2", - "focusCellBackground": "#13344f", - "focusCellForeground": "#FFFFFF", - "foreground": "#d6deeb", - "gridColor": "#011627", - "highlightOuter": "#13344f", - "hoverBackground": "#13344f50", - "hoverInactiveBackground": "#13344f", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#5f7e97", - "lightSelectionInactiveBackground": "#0b2942", - "selectionBackground": "#13344f", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#13344f", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#d6deeb", - "stripeColor": "#010e1a" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#011627", - "borderColor": "#011627", - "bottomSeparatorColor": "#0b2942", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#697098", - "foreground": "#d6deeb", - "focusCellBackground": "#13344f", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#0b2942" + "separatorColor": "second" }, - "text": "#5f7e97", - "textInactiveText": "#5f7e97", - "textText": "#5f7e97", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#010e1a", - "caretForeground": "#7e57c2", - "foreground": "#d6deeb", - "inactiveForeground": "#697098", - "selectionBackground": "#13344f", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#010e1a", - "caretForeground": "#7e57c2", - "foreground": "#d6deeb", - "inactiveForeground": "#697098", - "selectionBackground": "#13344f", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#010e1a", - "caretForeground": "#7e57c2", - "foreground": "#d6deeb", - "inactiveForeground": "#697098", - "selectionBackground": "#13344f", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#010e1a", - "Button.hoverBackground": "#084d81", - "inactiveBackground": "#011627", - "infoForeground": "#5f7e97", - "inactiveInfoForeground": "#5f7e97" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#d6deeb", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#0b253a", - "buttonColor": "#d6deeb", - "disabledText": "#697098", - "foreground": "#d6deeb", - "offForeground": "#011627", - "offBackground": "#011627", - "onBackground": "#7e57c2", - "onForeground": "#7e57c2" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#010e1a", - "borderHandleColor": "#5f7e97", - "floatingForeground": "#5f7e97", - "foreground": "#d6deeb" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#011627", - "Actions.infoForeground": "#5f7e97", - "background": "#01111d", - "borderColor": "#122d42", - "foreground": "#d6deeb", - "infoForeground": "#5f7e97", - "separatorColor": "#122d42", - "shortcutForeground": "#5f7e97" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#13344f", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#010e1a" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#011627", - "borderColor": "#0b2942", - "inactiveBackground": "#011627" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#011627" + "background": "bg" }, "HeaderTab": { - "borderColor": "#084d81", - "hoverBackground": "#084d81", - "hoverInactiveBackground": "#084d81", - "inactiveUnderlineColor": "#7e57c2", - "selectedBackground": "#010e1a", - "selectedInactiveBackground": "#010e1a", - "underlineColor": "#7e57c2", - "underlinedTabBackground": "#13344f", - "underlinedTabInactiveBackground": "#0b2942", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#d6deeb" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#010e1a", - "foreground": "#5f7e97", - "hash": "#122d42", - "hoverBackground": "#13344f50", - "hoverInactiveBackground": "#13344f", - "modifiedItemForeground": "#7e57c2", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#13344f50", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#13344f50", - "textBackground": "#010e1a" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#122d42", - "Canvas.background": "#010e1a", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#011627", - "foreground": "#d6deeb" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#122d42", - "background": "#011627", - "foreground": "#d6deeb", - "hoverBorderColor": "#084d81" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#122d42", - "hoverBorderColor": "#084d81" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#010e1a", - "highStroke.foreground": "#d6deeb", - "Label.foreground": "#5f7e97", - "List.selectionBackground": "#13344f50", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#122d42", - "Component.foreground": "#d6deeb", - "ConstraintSetText.foreground": "#5f7e97", - "ConstraintSet.background": "#0b2942", - "CSPanel.SelectedFocusBackground": "#5f7e9790", - "CSPanel.SelectedBackground": "#13344f50", - "cs_FocusText.infoForeground": "#5f7e97", - "CursorTextColor.foreground": "#d6deeb", - "HoverColor.disabledBackground": "#697098", - "motionGraph.background": "#011627", - "Notification.background": "#01111d", - "ourAvg.background": "#0b2942", - "ourCS.background": "#0b2942", - "ourCS_Border.borderColor": "#122d42", - "ourCS_TextColor.foreground": "#5f7e97", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#13344f", - "ourCS_SelectedBorder.pressedBorderColor": "#084d81", - "ourML_BarColor.separatorColor": "#122d42", - "PrimaryPanel.background": "#010e1a", - "SecondaryPanel.background": "#011627", - "SecondaryPanel.header.foreground": "#5f7e97", - "SecondaryPanel.header.background": "#010e1a", - "timeLine.disabledBorderColor": "#122d42" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#122d42", - "background": "#011627" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#d6deeb", + "percent.foreground": "fg", "Placeholder": { - "background": "#011627", - "borderColor": "#122d42", - "foreground": "#d6deeb", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#011627", - "stroke.acceleratorForeground": "#5f7e97" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#01111d", - "errorBorderColor": "#01111d", - "warningBackground": "#01111d", - "warningBorderColor": "#01111d" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#011627" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#084d81" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#7e57c2", - "otherIconColor": "#5f7e97", - "remoteBranchIconColor": "#d6deeb", - "tagIconColor": "#5f7e97" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#7e57c2", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#697098", - "localTagIconColor": "#5f7e97", - "mqTagIconColor": "#5f7e97", - "tagIconColor": "#5f7e97", - "tipIconColor": "#5f7e97" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#5f7e97", - "Commit.currentBranchBackground": "#0b2942", - "Commit.hoveredBackground": "#13344f50" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#084d81" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#010e1a", - "foreground": "#d6deeb" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#011627", - "background": "#011627", - "borderColor": "#011627", - "captionBackground": "#010e1a", - "captionForeground": "#d6deeb", - "Details.background": "#011627", - "footerBackground": "#010e1a", - "footerForeground": "#d6deeb", - "headerBackground": "#011627", - "headerForeground": "#d6deeb", - "List.background": "#010e1a", - "separatorColor": "#122d42", - "SidePanel.background": "#0b2942", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#010e1a", - "actions.selectionBackground": "#084d81", - "background": "#0b2942", - "selectionBackground": "#5f7e9790", - "selectionInactiveBackground": "#0b2942" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#010e1a", - "windowBorder": "#122d42", - "windowText": "#5f7e97", - "Window.border": "#122d42" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#010e1a", - "#6B6B6B": "#5f7e97", - "#A7A7A7": "#011627", - "#3D6185": "#7e57c2", - "#466D94": "#7e57c2", - "#3C3F41": "#011627", - "#545556": "#697098", - "#606060": "#697098", - "#9AA7B0": "#d6deeb", - "#675133": "#7e57c2", - "Actions.Blue": "#82aaff", - "Actions.Green": "#ecc48d", - "Actions.Grey": "#5f7e97", - "Actions.GreyInline": "#637777", - "Actions.GreyInline.Dark": "#d6deeb", - "Actions.Red": "#7fdbca", - "Actions.Yellow": "#addb67", - "Checkbox.Background.Default": "#010e1a", - "Checkbox.Background.Default.Dark": "#010e1a", - "Checkbox.Background.Disabled": "#0e293f", - "Checkbox.Background.Disabled.Dark": "#0e293f", - "Checkbox.Border.Default": "#122d42", - "Checkbox.Border.Default.Dark": "#122d42", - "Checkbox.Border.Disabled": "#697098", - "Checkbox.Border.Disabled.Dark": "#697098", - "Checkbox.Focus.Thin.Default": "#7e57c2", - "Checkbox.Focus.Thin.Default.Dark": "#7e57c2", - "Checkbox.Focus.Wide": "#7e57c2", - "Checkbox.Focus.Wide.Dark": "#7e57c2", - "Checkbox.Foreground.Disabled": "#697098", - "Checkbox.Foreground.Disabled.Dark": "#697098", - "Checkbox.Background.Selected": "#7e57c2", - "Checkbox.Background.Selected.Dark": "#011627", - "Checkbox.Border.Selected": "#7e57c2", - "Checkbox.Border.Selected.Dark": "#7e57c2", - "Checkbox.Foreground.Selected": "#7e57c2", - "Checkbox.Foreground.Selected.Dark": "#7e57c2", - "Checkbox.Focus.Thin.Selected": "#d6deeb", - "Checkbox.Focus.Thin.Selected.Dark": "#d6deeb", - "Objects.Grey": "#637777", - "Objects.Blue": "#82aaff", - "Objects.RedStatus": "#7fdbca", - "Objects.Red": "#7fdbca", - "Objects.Pink": "#c792ea", - "Objects.Yellow": "#addb67", - "Objects.Green": "#ecc48d", - "Objects.Purple": "#c792ea", - "Objects.BlackText": "#d6deeb", - "Objects.YellowDark": "#f78c6c", - "Objects.GreenAndroid": "#ecc48d" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Night Owl.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Night Owl.theme.json index 91729def..63b6d059 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Night Owl.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Night Owl.theme.json @@ -2,1004 +2,1089 @@ "name": "Night Owl", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#011627", + "bg30": "#01162730", + "fg": "#d6deeb", + "text": "#5f7e97", + "selBg": "#084d81", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#122d42", + "excl": "#0e293f", + "second": "#0b2942", + "dis": "#697098", + "accent": "#7e57c2", + "accent2": "#7e57c22", + "accent50": "#7e57c250", + "accent70": "#7e57c270", + "cs": "#010e1a", + "button": "#0b253a", + "table": "#13344f", + "tree": "#13344f50", + "hl": "#084d81", + "notif": "#01111d", + "hc": "#011627", + "white": "#addb67", + "blue": "#82aaff", + "red": "#7fdbca", + "yellow": "#addb67", + "green": "#ecc48d", + "gray": "#637777", + "purple": "#c792ea", + "orange": "#f78c6c" + }, "editorScheme": "colors/Night Owl.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#5f7e97", - "background": "#011627", - "borderColor": "#122d42", - "disabledBackground": "#0e293f", - "disabledForeground": "#697098", - "disabledText": "#697098", - "focusColor": "#084d81", - "focusedBorderColor": "#7e57c2", - "foreground": "#d6deeb", - "inactiveBackground": "#0e293f", - "inactiveForeground": "#5f7e97", - "infoForeground": "#5f7e97", - "selectionBackground": "#5f7e9790", - "selectionBackgroundInactive": "#0b2942", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#0b2942", - "separatorColor": "#122d42" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#011627", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#7e57c250", - "hoverBorderColor": "#7e57c250", - "hoverSeparatorColor": "#0b253a", - "focusedBorderColor": "#7e57c250", - "pressedBackground": "#7e57c250", - "pressedBorderColor": "#7e57c250" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#5f7e9790" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#011627", - "Borders.color": "#122d42", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#011627", + "background": "bg", "default": { - "endBackground": "#13344f", - "endBorderColor": "#13344f", - "foreground": "#FFFFFF", - "focusColor": "#7e57c2", - "focusedBorderColor": "#7e57c2", - "shadowColor": "#13344f", - "startBackground": "#13344f", - "startBorderColor": "#13344f" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#0b253a", - "disabledText": "#697098", - "endBackground": "#0b253a", - "endBorderColor": "#0b253a", - "focus": "#084d81", - "focusedBorderColor": "#7e57c2", - "foreground": "#5f7e97", - "highlight": "#FFFFFF", - "mt.background": "#0b253a", - "mt.foreground": "#5f7e97", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#13344f", - "mt.selection.color2": "#13344f", - "startBackground": "#0b253a", - "startBorderColor": "#0b253a", - "shadowColor": "#0b253a", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#122d42", - "Tooltip.background": "#01111d" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#010e1a", - "selectionBackground": "#5f7e9790" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#011627", - "disabledText": "#697098", - "foreground": "#d6deeb", - "select": "#7e57c2" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#5f7e97", - "acceleratorSelectionForeground": "#5f7e97", - "background": "#011627", - "disabledBackground": "#011627", - "disabledForeground": "#697098", - "foreground": "#d6deeb", - "selectionBackground": "#5f7e9790", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#d6deeb", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#7e57c2", - "dropdownBorder": "#0b2942", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#011627", - "foreground": "#d6deeb", - "swatchesDefaultRecentColor": "#d6deeb" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#0b253a", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#0b253a", - "disabledIconColor": "#697098", - "iconColor": "#d6deeb", - "nonEditableBackground": "#011627" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#011627", - "buttonBackground": "#0b253a", - "darcula.hoveredArrowButtonForeground": "#7e57c2", - "disabledForeground": "#697098", - "foreground": "#d6deeb", - "modifiedItemForeground": "#7e57c2", - "nonEditableBackground": "#0b2942", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#13344f", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#122d42", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#0b2942", - "foreground": "#d6deeb", - "infoForeground": "#5f7e97", - "matchForeground": "#7e57c2", - "matchSelectionForeground": "#7e57c2", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#5f7e97", - "selectionInactiveBackground": "#084d81", - "selectionBackground": "#5f7e9790", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#084d81", - "disabledBorderColor": "#0b253a", - "focusColor": "#7e57c2", - "focusedBorderColor": "#7e57c2", - "hoverIconColor": "#7e57c2", - "infoForeground": "#5f7e97", - "iconColor": "#d6deeb" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#011627", - "controlText": "#5f7e97", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#7e57c2", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#5f7e97", - "changedValueForeground": "#7e57c2", - "errorMessageForeground": "#7fdbca", - "evaluatingExpressionForeground": "#5f7e97", - "exceptionForeground": "#addb67", - "modifyingValueForeground": "#7e57c2", - "valueForeground": "#7e57c2" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#084d81", - "underlinedTabBackground": "#084d81" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#084d81" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#011627", - "borderColor": "#011627", - "hoverBackground": "#13344f", - "hoverColor": "#011627", - "hoverMaskColor": "#084d81", - "inactiveColoredTabBackground": "#011627", - "inactiveColoredFileBackground": "#0b253a", - "inactiveUnderlineColor": "#7e57c2", - "inactiveMaskColor": "#011627", - "underlineColor": "#7e57c2", - "underlinedTabBackground": "#13344f", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#011627", - "DialogWrapper.southPanelBackground": "#011627", - "DialogWrapper.southPanelDivider": "#011627", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#011627", - "areaBorderColor": "#011627", - "areaForeground": "#d6deeb" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#011627", - "foreground": "#d6deeb", - "shortcutForeground": "#5f7e97" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#011627", - "caretForeground": "#7e57c2", - "foreground": "#d6deeb", - "inactiveBackground": "#011627", - "inactiveForeground": "#697098", - "selectionBackground": "#5f7e9790", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#0b2942", - "hoverBackground": "#084d81", - "hoverColor": "#084d81", - "hoverMaskColor": "#084d81", - "inactiveMaskColor": "#011627", - "inactiveColoredFileBackground": "#011627", - "inactiveUnderlineColor": "#697098", - "selectedForeground": "#d6deeb", - "selectedBackground": "#13344f", - "underlineColor": "#7e57c2", - "underlinedTabBackground": "#13344f", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#011627", - "borderColor": "#0b2942", - "hoverBackground": "#084d81", - "hoverColor": "#084d81", - "inactiveUnderlineColor": "#7e57c2", - "underlineColor": "#7e57c2", - "underlinedTabBackground": "#13344f", - "underlinedTabForeground": "#d6deeb" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#0e293f", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#122d42", + "Focus.color": "border", "FormattedTextField": { - "background": "#011627", - "caretForeground": "#7e57c2", - "foreground": "#d6deeb", - "inactiveBackground": "#0b253a", - "inactiveForeground": "#697098", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#13344f" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#01111d", "Group": { - "disabledSeparatorColor": "#122d42", - "separatorColor": "#122d42" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#5f7e97", - "lineSeparatorColor": "#011627" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#011627", - "inactive": "#010e1a" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#011627", - "borderColor": "#122d42", - "foreground": "#d6deeb", - "infoForeground": "#5f7e97", - "shortcutForeground": "#5f7e97" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#7e57c2", - "inactiveCaption": "#0b2942", - "inactiveCaptionBorder": "#011627", - "inactiveCaptionText": "#5f7e97", - "info": "#5f7e97", - "infoText": "#5f7e97", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#122d42", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#011627" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#d6deeb", - "background": "#011627", - "inactiveTitleForeground": "#5f7e97" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#011627", - "disabledForeground": "#697098", - "disabledShadow": "#011627", - "disabledText": "#697098", - "foreground": "#d6deeb", - "infoForeground": "#5f7e97", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#d6deeb" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#7e57c2", - "hoverForeground": "#7e57c2", - "pressedForeground": "#7e57c2", - "secondaryForeground": "#5f7e97", - "visitedForeground": "#7e57c2" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#7e57c2", + "link.foreground": "accent", "List": { - "background": "#0b2942", - "foreground": "#d6deeb", - "hoverBackground": "#13344f50", - "hoverInactiveBackground": "#13344f", - "selectionBackground": "#5f7e9790", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#13344f50" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#011627", - "branchColor": "#d6deeb", - "contrast": "#010e1a", - "foreground": "#d6deeb", - "mergeCommits": "#0b253a", - "primaryColor": "#5f7e97", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#011627", - "tab.borderColor": "#7e57c2", - "tagColor": "#5f7e97" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#0b2942", - "usedColor": "#084d81", - "usedBackground": "#084d81" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#5f7e97", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#011627", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#0b2942", - "disabledBackground": "#0b2942", - "disabledForeground": "#697098", - "foreground": "#d6deeb", - "selectionBackground": "#5f7e9790", - "selectionForeground": "#FFFFFF", - "separatorColor": "#122d42" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#011627", - "borderColor": "#011627", - "disabledBackground": "#011627", - "disabledForeground": "#697098", - "foreground": "#d6deeb", - "highlight": "#011627", - "selectionBackground": "#5f7e9790", - "selectionForeground": "#FFFFFF", - "shadow": "#011627" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#5f7e97", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#011627", - "disabledBackground": "#011627", - "disabledForeground": "#697098", - "foreground": "#d6deeb", - "selectionBackground": "#5f7e9790", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#d6deeb", - "borderColor": "#011627" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#011627" + "background": "bg" }, "SearchField": { - "background": "#011627" + "background": "hc" } }, - "NewPSD.warning": "#7e57c2", + "NewPSD.warning": "accent", "Notification": { - "background": "#01111d", - "borderColor": "#01111d", - "errorBackground": "#01111d", - "errorBorderColor": "#01111d", - "foreground": "#d6deeb", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#0b253a", - "foreground": "#d6deeb", - "innerBorderColor": "#0b253a" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#01111d", - "errorBorderColor": "#01111d", - "informativeBackground": "#01111d", - "informativeBorderColor": "#01111d", - "warningBackground": "#01111d", - "warningBorderColor": "#01111d" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#122d42", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#011627", - "foreground": "#d6deeb", - "messageForeground": "#d6deeb" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#0b253a", - "focusedColor": "#7e57c2", - "disabledColor": "#697098" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#011627", - "foreground": "#d6deeb" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#0b2942", - "borderColor": "#13344f", - "currentOverloadBackground": "#084d81", - "currentParameterForeground": "#7e57c2", - "disabledForeground": "#697098", - "foreground": "#d6deeb", - "infoForeground": "#5f7e97", - "lineSeparatorColor": "#13344f" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#011627", - "capsLockIconColor": "#7e57c2", - "caretForeground": "#7e57c2", - "foreground": "#d6deeb", - "inactiveForeground": "#697098", - "selectionBackground": "#13344f", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#011627", - "disabledForeground": "#697098", - "eapTagBackground": "#084d81", - "hoverBackground": "#13344f50", - "lightSelectionBackground": "#13344f", - "paidTagBackground": "#084d81", - "selectionBackground": "#5f7e9790", - "tagForeground": "#7e57c2", - "tagBackground": "#084d81", - "trialTagBackground": "#084d81", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#0b253a", - "installBorderColor": "#0b253a", - "installForeground": "#d6deeb", - "installFocusedBackground": "#084d81", - "installFillForeground": "#697098", - "installFillBackground": "#0b253a", - "updateBackground": "#7e57c2", - "updateBorderColor": "#0b253a", - "updateForeground": "#d6deeb" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#011627", - "borderColor": "#122d42" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#0b2942", - "foreground": "#d6deeb" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#13344f", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#13344f" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#011627", - "borderColor": "#011627", - "foreground": "#7e57c2" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#010e1a", - "inactiveBorderColor": "#011627", - "innerBorderColor": "#0b2942", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#011627", - "inactiveBackground": "#010e1a" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#d6deeb", - "separatorColor": "#0b2942", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#010e1a", - "background": "#010e1a", - "borderColor": "#010e1a" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#011627", + "background": "bg", "border": "2,0,2,0", - "foreground": "#d6deeb", - "translucentBackground": "#011627" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#011627", - "foreground": "#7e57c2", - "indeterminateEndColor": "#7e57c2", - "indeterminateStartColor": "#7e57c2", - "progressColor": "#7e57c2", - "selectionBackground": "#084d81", - "trackColor": "#084d81" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#7e57c2" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#011627", - "disabledText": "#697098", - "foreground": "#d6deeb" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#5f7e97", - "acceleratorSelectionForeground": "#5f7e97", - "background": "#011627", - "disabledBackground": "#011627", - "disabledForeground": "#697098", - "foreground": "#d6deeb", - "selectionBackground": "#5f7e9790", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#122d42", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#011627", - "hoverThumbBorderColor": "#7e57c2", - "hoverThumbColor": "#7e57c2", - "hoverTrackColor": "#01162730", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#7e57c2", - "hoverThumbColor": "#7e57c2", - "hoverTrackColor": "#01162730", - "thumbBorderColor": "#7e57c270", - "thumbColor": "#7e57c270", - "trackColor": "#01162730", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#7e57c2", - "hoverThumbColor": "#7e57c2", - "hoverTrackColor": "#01162730", - "thumbBorderColor": "#7e57c270", - "thumbColor": "#7e57c270", - "trackColor": "#01162730" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#084d81", - "thumbBorderColor": "#7e57c270", - "thumbColor": "#7e57c270", - "trackColor": "#01162730", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#7e57c2", - "hoverThumbColor": "#7e57c2", - "hoverTrackColor": "#01162730", - "thumbBorderColor": "#7e57c270", - "thumbColor": "#7e57c270", - "trackColor": "#01162730" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#010e1a", - "foreground": "#5f7e97" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#011627" + "background": "bg" }, "List": { - "separatorForeground": "#5f7e97", - "separatorColor": "#122d42" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#011627", - "borderColor": "#010e1a", - "infoForeground": "#5f7e97" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#084d81" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#7e57c2", - "startBackground": "#7e57c2", - "endColor": "#7e57c2", - "startColor": "#7e57c2" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#01111d", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#13344f" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#5f7e97", - "Repeated.File.Foreground": "#d6deeb" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#0b2942", - "foreground": "#0b2942", - "separatorColor": "#0b2942" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#011627" + "background": "hc" }, "Slider": { - "background": "#011627", - "buttonBorderColor": "#7e57c2", - "buttonColor": "#7e57c2", - "foreground": "#d6deeb", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#0b2942", - "trackColor": "#13344f", - "trackWidth": 7, - "thumb": "#7e57c2" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#084d81", - "borderColor": "#122d42", - "foreground": "#d6deeb", - "errorForeground": "#d6deeb" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#011627", + "background": "bg", "border": "3,3,3,3", - "foreground": "#d6deeb", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#011627", - "highlight": "#011627" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#0b2942", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#011627", - "hoverBackground": "#084d81", - "LightEditBackground": "#13344f" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#011627", - "contentAreaColor": "#084d81", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#122d42", - "disabledForeground": "#697098", - "disabledUnderlineColor": "#697098", - "focus": "#13344f", - "focusColor": "#13344f", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#d6deeb", - "highlight": "#122d42", - "hoverColor": "#084d81", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#7e57c2" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#011627", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#010e1a", - "background": "#011627", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#697098", - "dropLineColor": "#7e57c2", - "dropLineShortColor": "#7e57c2", - "focusCellBackground": "#13344f", - "focusCellForeground": "#FFFFFF", - "foreground": "#d6deeb", - "gridColor": "#011627", - "highlightOuter": "#13344f", - "hoverBackground": "#13344f50", - "hoverInactiveBackground": "#13344f", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#5f7e97", - "lightSelectionInactiveBackground": "#0b2942", - "selectionBackground": "#13344f", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#13344f", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#d6deeb", - "stripeColor": "#010e1a" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#011627", - "borderColor": "#011627", - "bottomSeparatorColor": "#0b2942", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#697098", - "foreground": "#d6deeb", - "focusCellBackground": "#13344f", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#0b2942" + "separatorColor": "second" }, - "text": "#5f7e97", - "textInactiveText": "#5f7e97", - "textText": "#5f7e97", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#011627", - "caretForeground": "#7e57c2", - "foreground": "#d6deeb", - "inactiveForeground": "#697098", - "selectionBackground": "#13344f", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#011627", - "caretForeground": "#7e57c2", - "foreground": "#d6deeb", - "inactiveForeground": "#697098", - "selectionBackground": "#13344f", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#011627", - "caretForeground": "#7e57c2", - "foreground": "#d6deeb", - "inactiveForeground": "#697098", - "selectionBackground": "#13344f", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#010e1a", - "Button.hoverBackground": "#084d81", - "inactiveBackground": "#011627", - "infoForeground": "#5f7e97", - "inactiveInfoForeground": "#5f7e97" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#d6deeb", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#0b253a", - "buttonColor": "#d6deeb", - "disabledText": "#697098", - "foreground": "#d6deeb", - "offForeground": "#011627", - "offBackground": "#011627", - "onBackground": "#7e57c2", - "onForeground": "#7e57c2" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#011627", - "borderHandleColor": "#5f7e97", - "floatingForeground": "#5f7e97", - "foreground": "#d6deeb" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#011627", - "Actions.infoForeground": "#5f7e97", - "background": "#01111d", - "borderColor": "#122d42", - "foreground": "#d6deeb", - "infoForeground": "#5f7e97", - "separatorColor": "#122d42", - "shortcutForeground": "#5f7e97" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#13344f", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#010e1a" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#011627", - "borderColor": "#0b2942", - "inactiveBackground": "#011627" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#011627" + "background": "bg" }, "HeaderTab": { - "borderColor": "#084d81", - "hoverBackground": "#084d81", - "hoverInactiveBackground": "#084d81", - "inactiveUnderlineColor": "#7e57c2", - "selectedBackground": "#010e1a", - "selectedInactiveBackground": "#010e1a", - "underlineColor": "#7e57c2", - "underlinedTabBackground": "#13344f", - "underlinedTabInactiveBackground": "#0b2942", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#d6deeb" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#011627", - "foreground": "#5f7e97", - "hash": "#122d42", - "hoverBackground": "#13344f50", - "hoverInactiveBackground": "#13344f", - "modifiedItemForeground": "#7e57c2", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#13344f50", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#13344f50", - "textBackground": "#011627" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#122d42", - "Canvas.background": "#010e1a", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#011627", - "foreground": "#d6deeb" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#122d42", - "background": "#011627", - "foreground": "#d6deeb", - "hoverBorderColor": "#084d81" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#122d42", - "hoverBorderColor": "#084d81" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#010e1a", - "highStroke.foreground": "#d6deeb", - "Label.foreground": "#5f7e97", - "List.selectionBackground": "#13344f50", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#122d42", - "Component.foreground": "#d6deeb", - "ConstraintSetText.foreground": "#5f7e97", - "ConstraintSet.background": "#0b2942", - "CSPanel.SelectedFocusBackground": "#5f7e9790", - "CSPanel.SelectedBackground": "#13344f50", - "cs_FocusText.infoForeground": "#5f7e97", - "CursorTextColor.foreground": "#d6deeb", - "HoverColor.disabledBackground": "#697098", - "motionGraph.background": "#011627", - "Notification.background": "#01111d", - "ourAvg.background": "#0b2942", - "ourCS.background": "#0b2942", - "ourCS_Border.borderColor": "#122d42", - "ourCS_TextColor.foreground": "#5f7e97", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#13344f", - "ourCS_SelectedBorder.pressedBorderColor": "#084d81", - "ourML_BarColor.separatorColor": "#122d42", - "PrimaryPanel.background": "#010e1a", - "SecondaryPanel.background": "#011627", - "SecondaryPanel.header.foreground": "#5f7e97", - "SecondaryPanel.header.background": "#010e1a", - "timeLine.disabledBorderColor": "#122d42" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#122d42", - "background": "#011627" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#d6deeb", + "percent.foreground": "fg", "Placeholder": { - "background": "#011627", - "borderColor": "#122d42", - "foreground": "#d6deeb", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#011627", - "stroke.acceleratorForeground": "#5f7e97" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#01111d", - "errorBorderColor": "#01111d", - "warningBackground": "#01111d", - "warningBorderColor": "#01111d" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#011627" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#084d81" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#7e57c2", - "otherIconColor": "#5f7e97", - "remoteBranchIconColor": "#d6deeb", - "tagIconColor": "#5f7e97" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#7e57c2", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#697098", - "localTagIconColor": "#5f7e97", - "mqTagIconColor": "#5f7e97", - "tagIconColor": "#5f7e97", - "tipIconColor": "#5f7e97" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#5f7e97", - "Commit.currentBranchBackground": "#0b2942", - "Commit.hoveredBackground": "#13344f50" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#084d81" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#011627", - "foreground": "#d6deeb" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#011627", - "background": "#011627", - "borderColor": "#011627", - "captionBackground": "#010e1a", - "captionForeground": "#d6deeb", - "Details.background": "#011627", - "footerBackground": "#010e1a", - "footerForeground": "#d6deeb", - "headerBackground": "#011627", - "headerForeground": "#d6deeb", - "List.background": "#010e1a", - "separatorColor": "#122d42", - "SidePanel.background": "#0b2942", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#010e1a", - "actions.selectionBackground": "#084d81", - "background": "#0b2942", - "selectionBackground": "#5f7e9790", - "selectionInactiveBackground": "#0b2942" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#011627", - "windowBorder": "#122d42", - "windowText": "#5f7e97", - "Window.border": "#122d42" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#010e1a", - "#6B6B6B": "#5f7e97", - "#A7A7A7": "#011627", - "#3D6185": "#7e57c2", - "#466D94": "#7e57c2", - "#3C3F41": "#011627", - "#545556": "#697098", - "#606060": "#697098", - "#9AA7B0": "#d6deeb", - "#675133": "#7e57c2", - "Actions.Blue": "#82aaff", - "Actions.Green": "#ecc48d", - "Actions.Grey": "#5f7e97", - "Actions.GreyInline": "#637777", - "Actions.GreyInline.Dark": "#d6deeb", - "Actions.Red": "#7fdbca", - "Actions.Yellow": "#addb67", - "Checkbox.Background.Default": "#010e1a", - "Checkbox.Background.Default.Dark": "#010e1a", - "Checkbox.Background.Disabled": "#0e293f", - "Checkbox.Background.Disabled.Dark": "#0e293f", - "Checkbox.Border.Default": "#122d42", - "Checkbox.Border.Default.Dark": "#122d42", - "Checkbox.Border.Disabled": "#697098", - "Checkbox.Border.Disabled.Dark": "#697098", - "Checkbox.Focus.Thin.Default": "#7e57c2", - "Checkbox.Focus.Thin.Default.Dark": "#7e57c2", - "Checkbox.Focus.Wide": "#7e57c2", - "Checkbox.Focus.Wide.Dark": "#7e57c2", - "Checkbox.Foreground.Disabled": "#697098", - "Checkbox.Foreground.Disabled.Dark": "#697098", - "Checkbox.Background.Selected": "#7e57c2", - "Checkbox.Background.Selected.Dark": "#011627", - "Checkbox.Border.Selected": "#7e57c2", - "Checkbox.Border.Selected.Dark": "#7e57c2", - "Checkbox.Foreground.Selected": "#7e57c2", - "Checkbox.Foreground.Selected.Dark": "#7e57c2", - "Checkbox.Focus.Thin.Selected": "#d6deeb", - "Checkbox.Focus.Thin.Selected.Dark": "#d6deeb", - "Objects.Grey": "#637777", - "Objects.Blue": "#82aaff", - "Objects.RedStatus": "#7fdbca", - "Objects.Red": "#7fdbca", - "Objects.Pink": "#c792ea", - "Objects.Yellow": "#addb67", - "Objects.Green": "#ecc48d", - "Objects.Purple": "#c792ea", - "Objects.BlackText": "#d6deeb", - "Objects.YellowDark": "#f78c6c", - "Objects.GreenAndroid": "#ecc48d" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Solarized Dark Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Solarized Dark Contrast.theme.json index 05d45ff2..a9454602 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Solarized Dark Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Solarized Dark Contrast.theme.json @@ -2,1004 +2,1089 @@ "name": "Solarized Dark Contrast", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#002B36", + "bg30": "#002B3630", + "fg": "#839496", + "text": "#586e75", + "selBg": "#2E4C52", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#0D3640", + "excl": "#083F4D", + "second": "#003745", + "dis": "#2E5861", + "accent": "#d33682", + "accent2": "#d336822", + "accent50": "#d3368250", + "accent70": "#d3368270", + "cs": "#00252E", + "button": "#073642", + "table": "#003946", + "tree": "#2E4C5280", + "hl": "#005a6f", + "notif": "#2E4C52", + "hc": "#00252E", + "white": "#268BD2", + "blue": "#B58900", + "red": "#268BD2", + "yellow": "#B58900", + "green": "#2AA198", + "gray": "#657B83", + "purple": "#859900", + "orange": "#D33682" + }, "editorScheme": "colors/Solarized Dark.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#586e75", - "background": "#002B36", - "borderColor": "#0D3640", - "disabledBackground": "#083F4D", - "disabledForeground": "#2E5861", - "disabledText": "#2E5861", - "focusColor": "#005a6f", - "focusedBorderColor": "#d33682", - "foreground": "#839496", - "inactiveBackground": "#083F4D", - "inactiveForeground": "#586e75", - "infoForeground": "#586e75", - "selectionBackground": "#2E4C52", - "selectionBackgroundInactive": "#003745", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#003745", - "separatorColor": "#0D3640" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#002B36", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#d3368250", - "hoverBorderColor": "#d3368250", - "hoverSeparatorColor": "#073642", - "focusedBorderColor": "#d3368250", - "pressedBackground": "#d3368250", - "pressedBorderColor": "#d3368250" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#2E4C52" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#002B36", - "Borders.color": "#0D3640", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#002B36", + "background": "bg", "default": { - "endBackground": "#003946", - "endBorderColor": "#003946", - "foreground": "#FFFFFF", - "focusColor": "#d33682", - "focusedBorderColor": "#d33682", - "shadowColor": "#003946", - "startBackground": "#003946", - "startBorderColor": "#003946" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#073642", - "disabledText": "#2E5861", - "endBackground": "#073642", - "endBorderColor": "#073642", - "focus": "#005a6f", - "focusedBorderColor": "#d33682", - "foreground": "#586e75", - "highlight": "#FFFFFF", - "mt.background": "#073642", - "mt.foreground": "#586e75", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#003946", - "mt.selection.color2": "#003946", - "startBackground": "#073642", - "startBorderColor": "#073642", - "shadowColor": "#073642", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#0D3640", - "Tooltip.background": "#2E4C52" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#00252E", - "selectionBackground": "#2E4C52" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#002B36", - "disabledText": "#2E5861", - "foreground": "#839496", - "select": "#d33682" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#586e75", - "acceleratorSelectionForeground": "#586e75", - "background": "#002B36", - "disabledBackground": "#002B36", - "disabledForeground": "#2E5861", - "foreground": "#839496", - "selectionBackground": "#2E4C52", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#839496", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#d33682", - "dropdownBorder": "#003745", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#002B36", - "foreground": "#839496", - "swatchesDefaultRecentColor": "#839496" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#073642", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#073642", - "disabledIconColor": "#2E5861", - "iconColor": "#839496", - "nonEditableBackground": "#002B36" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#00252E", - "buttonBackground": "#073642", - "darcula.hoveredArrowButtonForeground": "#d33682", - "disabledForeground": "#2E5861", - "foreground": "#839496", - "modifiedItemForeground": "#d33682", - "nonEditableBackground": "#003745", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#003946", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#0D3640", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#003745", - "foreground": "#839496", - "infoForeground": "#586e75", - "matchForeground": "#d33682", - "matchSelectionForeground": "#d33682", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#586e75", - "selectionInactiveBackground": "#005a6f", - "selectionBackground": "#2E4C52", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#005a6f", - "disabledBorderColor": "#073642", - "focusColor": "#d33682", - "focusedBorderColor": "#d33682", - "hoverIconColor": "#d33682", - "infoForeground": "#586e75", - "iconColor": "#839496" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#002B36", - "controlText": "#586e75", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#d33682", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#586e75", - "changedValueForeground": "#d33682", - "errorMessageForeground": "#268BD2", - "evaluatingExpressionForeground": "#586e75", - "exceptionForeground": "#B58900", - "modifyingValueForeground": "#d33682", - "valueForeground": "#d33682" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#005a6f", - "underlinedTabBackground": "#005a6f" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#005a6f" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#002B36", - "borderColor": "#002B36", - "hoverBackground": "#003946", - "hoverColor": "#00252E", - "hoverMaskColor": "#005a6f", - "inactiveColoredTabBackground": "#002B36", - "inactiveColoredFileBackground": "#073642", - "inactiveUnderlineColor": "#d33682", - "inactiveMaskColor": "#00252E", - "underlineColor": "#d33682", - "underlinedTabBackground": "#003946", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#002B36", - "DialogWrapper.southPanelBackground": "#002B36", - "DialogWrapper.southPanelDivider": "#002B36", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#002B36", - "areaBorderColor": "#002B36", - "areaForeground": "#839496" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#00252E", - "foreground": "#839496", - "shortcutForeground": "#586e75" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#00252E", - "caretForeground": "#d33682", - "foreground": "#839496", - "inactiveBackground": "#002B36", - "inactiveForeground": "#2E5861", - "selectionBackground": "#2E4C52", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#003745", - "hoverBackground": "#005a6f", - "hoverColor": "#005a6f", - "hoverMaskColor": "#005a6f", - "inactiveMaskColor": "#002B36", - "inactiveColoredFileBackground": "#002B36", - "inactiveUnderlineColor": "#2E5861", - "selectedForeground": "#839496", - "selectedBackground": "#003946", - "underlineColor": "#d33682", - "underlinedTabBackground": "#003946", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#002B36", - "borderColor": "#003745", - "hoverBackground": "#005a6f", - "hoverColor": "#005a6f", - "inactiveUnderlineColor": "#d33682", - "underlineColor": "#d33682", - "underlinedTabBackground": "#003946", - "underlinedTabForeground": "#839496" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#083F4D", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#0D3640", + "Focus.color": "border", "FormattedTextField": { - "background": "#00252E", - "caretForeground": "#d33682", - "foreground": "#839496", - "inactiveBackground": "#073642", - "inactiveForeground": "#2E5861", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#003946" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#2E4C52", "Group": { - "disabledSeparatorColor": "#0D3640", - "separatorColor": "#0D3640" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#586e75", - "lineSeparatorColor": "#002B36" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#002B36", - "inactive": "#00252E" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#002B36", - "borderColor": "#0D3640", - "foreground": "#839496", - "infoForeground": "#586e75", - "shortcutForeground": "#586e75" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#d33682", - "inactiveCaption": "#003745", - "inactiveCaptionBorder": "#002B36", - "inactiveCaptionText": "#586e75", - "info": "#586e75", - "infoText": "#586e75", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#0D3640", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#002B36" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#839496", - "background": "#002B36", - "inactiveTitleForeground": "#586e75" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#002B36", - "disabledForeground": "#2E5861", - "disabledShadow": "#002B36", - "disabledText": "#2E5861", - "foreground": "#839496", - "infoForeground": "#586e75", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#839496" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#d33682", - "hoverForeground": "#d33682", - "pressedForeground": "#d33682", - "secondaryForeground": "#586e75", - "visitedForeground": "#d33682" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#d33682", + "link.foreground": "accent", "List": { - "background": "#003745", - "foreground": "#839496", - "hoverBackground": "#2E4C5280", - "hoverInactiveBackground": "#003946", - "selectionBackground": "#2E4C52", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#2E4C5280" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#002B36", - "branchColor": "#839496", - "contrast": "#00252E", - "foreground": "#839496", - "mergeCommits": "#073642", - "primaryColor": "#586e75", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#002B36", - "tab.borderColor": "#d33682", - "tagColor": "#586e75" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#003745", - "usedColor": "#005a6f", - "usedBackground": "#005a6f" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#586e75", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#002B36", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#003745", - "disabledBackground": "#003745", - "disabledForeground": "#2E5861", - "foreground": "#839496", - "selectionBackground": "#2E4C52", - "selectionForeground": "#FFFFFF", - "separatorColor": "#0D3640" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#00252E", - "borderColor": "#002B36", - "disabledBackground": "#002B36", - "disabledForeground": "#2E5861", - "foreground": "#839496", - "highlight": "#002B36", - "selectionBackground": "#2E4C52", - "selectionForeground": "#FFFFFF", - "shadow": "#00252E" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#586e75", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#002B36", - "disabledBackground": "#002B36", - "disabledForeground": "#2E5861", - "foreground": "#839496", - "selectionBackground": "#2E4C52", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#839496", - "borderColor": "#002B36" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#002B36" + "background": "bg" }, "SearchField": { - "background": "#00252E" + "background": "hc" } }, - "NewPSD.warning": "#d33682", + "NewPSD.warning": "accent", "Notification": { - "background": "#2E4C52", - "borderColor": "#2E4C52", - "errorBackground": "#2E4C52", - "errorBorderColor": "#2E4C52", - "foreground": "#839496", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#073642", - "foreground": "#839496", - "innerBorderColor": "#073642" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#2E4C52", - "errorBorderColor": "#2E4C52", - "informativeBackground": "#2E4C52", - "informativeBorderColor": "#2E4C52", - "warningBackground": "#2E4C52", - "warningBorderColor": "#2E4C52" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#0D3640", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#002B36", - "foreground": "#839496", - "messageForeground": "#839496" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#073642", - "focusedColor": "#d33682", - "disabledColor": "#2E5861" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#002B36", - "foreground": "#839496" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#003745", - "borderColor": "#003946", - "currentOverloadBackground": "#005a6f", - "currentParameterForeground": "#d33682", - "disabledForeground": "#2E5861", - "foreground": "#839496", - "infoForeground": "#586e75", - "lineSeparatorColor": "#003946" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#00252E", - "capsLockIconColor": "#d33682", - "caretForeground": "#d33682", - "foreground": "#839496", - "inactiveForeground": "#2E5861", - "selectionBackground": "#003946", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#002B36", - "disabledForeground": "#2E5861", - "eapTagBackground": "#005a6f", - "hoverBackground": "#2E4C5280", - "lightSelectionBackground": "#003946", - "paidTagBackground": "#005a6f", - "selectionBackground": "#2E4C52", - "tagForeground": "#d33682", - "tagBackground": "#005a6f", - "trialTagBackground": "#005a6f", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#073642", - "installBorderColor": "#073642", - "installForeground": "#839496", - "installFocusedBackground": "#005a6f", - "installFillForeground": "#2E5861", - "installFillBackground": "#073642", - "updateBackground": "#d33682", - "updateBorderColor": "#073642", - "updateForeground": "#839496" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#00252E", - "borderColor": "#0D3640" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#003745", - "foreground": "#839496" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#003946", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#003946" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#002B36", - "borderColor": "#002B36", - "foreground": "#d33682" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#00252E", - "inactiveBorderColor": "#002B36", - "innerBorderColor": "#003745", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#002B36", - "inactiveBackground": "#00252E" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#839496", - "separatorColor": "#003745", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#00252E", - "background": "#00252E", - "borderColor": "#00252E" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#002B36", + "background": "bg", "border": "2,0,2,0", - "foreground": "#839496", - "translucentBackground": "#002B36" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#002B36", - "foreground": "#d33682", - "indeterminateEndColor": "#d33682", - "indeterminateStartColor": "#d33682", - "progressColor": "#d33682", - "selectionBackground": "#005a6f", - "trackColor": "#005a6f" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#d33682" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#002B36", - "disabledText": "#2E5861", - "foreground": "#839496" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#586e75", - "acceleratorSelectionForeground": "#586e75", - "background": "#002B36", - "disabledBackground": "#002B36", - "disabledForeground": "#2E5861", - "foreground": "#839496", - "selectionBackground": "#2E4C52", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#0D3640", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#002B36", - "hoverThumbBorderColor": "#d33682", - "hoverThumbColor": "#d33682", - "hoverTrackColor": "#002B3630", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#d33682", - "hoverThumbColor": "#d33682", - "hoverTrackColor": "#002B3630", - "thumbBorderColor": "#d3368270", - "thumbColor": "#d3368270", - "trackColor": "#002B3630", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#d33682", - "hoverThumbColor": "#d33682", - "hoverTrackColor": "#002B3630", - "thumbBorderColor": "#d3368270", - "thumbColor": "#d3368270", - "trackColor": "#002B3630" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#005a6f", - "thumbBorderColor": "#d3368270", - "thumbColor": "#d3368270", - "trackColor": "#002B3630", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#d33682", - "hoverThumbColor": "#d33682", - "hoverTrackColor": "#002B3630", - "thumbBorderColor": "#d3368270", - "thumbColor": "#d3368270", - "trackColor": "#002B3630" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#00252E", - "foreground": "#586e75" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#002B36" + "background": "bg" }, "List": { - "separatorForeground": "#586e75", - "separatorColor": "#0D3640" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#002B36", - "borderColor": "#00252E", - "infoForeground": "#586e75" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#005a6f" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#d33682", - "startBackground": "#d33682", - "endColor": "#d33682", - "startColor": "#d33682" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#2E4C52", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#003946" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#586e75", - "Repeated.File.Foreground": "#839496" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#003745", - "foreground": "#003745", - "separatorColor": "#003745" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#00252E" + "background": "hc" }, "Slider": { - "background": "#002B36", - "buttonBorderColor": "#d33682", - "buttonColor": "#d33682", - "foreground": "#839496", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#003745", - "trackColor": "#003946", - "trackWidth": 7, - "thumb": "#d33682" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#005a6f", - "borderColor": "#0D3640", - "foreground": "#839496", - "errorForeground": "#839496" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#002B36", + "background": "bg", "border": "3,3,3,3", - "foreground": "#839496", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#002B36", - "highlight": "#00252E" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#003745", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#002B36", - "hoverBackground": "#005a6f", - "LightEditBackground": "#003946" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#002B36", - "contentAreaColor": "#005a6f", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#0D3640", - "disabledForeground": "#2E5861", - "disabledUnderlineColor": "#2E5861", - "focus": "#003946", - "focusColor": "#003946", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#839496", - "highlight": "#0D3640", - "hoverColor": "#005a6f", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#d33682" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#00252E", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#00252E", - "background": "#002B36", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#2E5861", - "dropLineColor": "#d33682", - "dropLineShortColor": "#d33682", - "focusCellBackground": "#003946", - "focusCellForeground": "#FFFFFF", - "foreground": "#839496", - "gridColor": "#002B36", - "highlightOuter": "#003946", - "hoverBackground": "#2E4C5280", - "hoverInactiveBackground": "#003946", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#586e75", - "lightSelectionInactiveBackground": "#003745", - "selectionBackground": "#003946", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#003946", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#839496", - "stripeColor": "#00252E" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#002B36", - "borderColor": "#002B36", - "bottomSeparatorColor": "#003745", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#2E5861", - "foreground": "#839496", - "focusCellBackground": "#003946", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#003745" + "separatorColor": "second" }, - "text": "#586e75", - "textInactiveText": "#586e75", - "textText": "#586e75", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#00252E", - "caretForeground": "#d33682", - "foreground": "#839496", - "inactiveForeground": "#2E5861", - "selectionBackground": "#003946", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#00252E", - "caretForeground": "#d33682", - "foreground": "#839496", - "inactiveForeground": "#2E5861", - "selectionBackground": "#003946", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#00252E", - "caretForeground": "#d33682", - "foreground": "#839496", - "inactiveForeground": "#2E5861", - "selectionBackground": "#003946", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#00252E", - "Button.hoverBackground": "#005a6f", - "inactiveBackground": "#002B36", - "infoForeground": "#586e75", - "inactiveInfoForeground": "#586e75" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#839496", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#073642", - "buttonColor": "#839496", - "disabledText": "#2E5861", - "foreground": "#839496", - "offForeground": "#002B36", - "offBackground": "#002B36", - "onBackground": "#d33682", - "onForeground": "#d33682" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#00252E", - "borderHandleColor": "#586e75", - "floatingForeground": "#586e75", - "foreground": "#839496" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#002B36", - "Actions.infoForeground": "#586e75", - "background": "#2E4C52", - "borderColor": "#0D3640", - "foreground": "#839496", - "infoForeground": "#586e75", - "separatorColor": "#0D3640", - "shortcutForeground": "#586e75" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#003946", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#00252E" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#002B36", - "borderColor": "#003745", - "inactiveBackground": "#002B36" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#002B36" + "background": "bg" }, "HeaderTab": { - "borderColor": "#005a6f", - "hoverBackground": "#005a6f", - "hoverInactiveBackground": "#005a6f", - "inactiveUnderlineColor": "#d33682", - "selectedBackground": "#00252E", - "selectedInactiveBackground": "#00252E", - "underlineColor": "#d33682", - "underlinedTabBackground": "#003946", - "underlinedTabInactiveBackground": "#003745", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#839496" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#00252E", - "foreground": "#586e75", - "hash": "#0D3640", - "hoverBackground": "#2E4C5280", - "hoverInactiveBackground": "#003946", - "modifiedItemForeground": "#d33682", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#2E4C5280", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#2E4C5280", - "textBackground": "#00252E" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#0D3640", - "Canvas.background": "#00252E", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#002B36", - "foreground": "#839496" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#0D3640", - "background": "#002B36", - "foreground": "#839496", - "hoverBorderColor": "#005a6f" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#0D3640", - "hoverBorderColor": "#005a6f" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#00252E", - "highStroke.foreground": "#839496", - "Label.foreground": "#586e75", - "List.selectionBackground": "#2E4C5280", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#0D3640", - "Component.foreground": "#839496", - "ConstraintSetText.foreground": "#586e75", - "ConstraintSet.background": "#003745", - "CSPanel.SelectedFocusBackground": "#2E4C52", - "CSPanel.SelectedBackground": "#2E4C5280", - "cs_FocusText.infoForeground": "#586e75", - "CursorTextColor.foreground": "#839496", - "HoverColor.disabledBackground": "#2E5861", - "motionGraph.background": "#002B36", - "Notification.background": "#2E4C52", - "ourAvg.background": "#003745", - "ourCS.background": "#003745", - "ourCS_Border.borderColor": "#0D3640", - "ourCS_TextColor.foreground": "#586e75", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#003946", - "ourCS_SelectedBorder.pressedBorderColor": "#005a6f", - "ourML_BarColor.separatorColor": "#0D3640", - "PrimaryPanel.background": "#00252E", - "SecondaryPanel.background": "#002B36", - "SecondaryPanel.header.foreground": "#586e75", - "SecondaryPanel.header.background": "#00252E", - "timeLine.disabledBorderColor": "#0D3640" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#0D3640", - "background": "#002B36" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#839496", + "percent.foreground": "fg", "Placeholder": { - "background": "#002B36", - "borderColor": "#0D3640", - "foreground": "#839496", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#002B36", - "stroke.acceleratorForeground": "#586e75" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#2E4C52", - "errorBorderColor": "#2E4C52", - "warningBackground": "#2E4C52", - "warningBorderColor": "#2E4C52" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#002B36" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#005a6f" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#d33682", - "otherIconColor": "#586e75", - "remoteBranchIconColor": "#839496", - "tagIconColor": "#586e75" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#d33682", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#2E5861", - "localTagIconColor": "#586e75", - "mqTagIconColor": "#586e75", - "tagIconColor": "#586e75", - "tipIconColor": "#586e75" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#586e75", - "Commit.currentBranchBackground": "#003745", - "Commit.hoveredBackground": "#2E4C5280" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#005a6f" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#00252E", - "foreground": "#839496" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#002B36", - "background": "#002B36", - "borderColor": "#002B36", - "captionBackground": "#00252E", - "captionForeground": "#839496", - "Details.background": "#002B36", - "footerBackground": "#00252E", - "footerForeground": "#839496", - "headerBackground": "#002B36", - "headerForeground": "#839496", - "List.background": "#00252E", - "separatorColor": "#0D3640", - "SidePanel.background": "#003745", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#00252E", - "actions.selectionBackground": "#005a6f", - "background": "#003745", - "selectionBackground": "#2E4C52", - "selectionInactiveBackground": "#003745" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#00252E", - "windowBorder": "#0D3640", - "windowText": "#586e75", - "Window.border": "#0D3640" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#00252E", - "#6B6B6B": "#586e75", - "#A7A7A7": "#002B36", - "#3D6185": "#d33682", - "#466D94": "#d33682", - "#3C3F41": "#002B36", - "#545556": "#2E5861", - "#606060": "#2E5861", - "#9AA7B0": "#839496", - "#675133": "#d33682", - "Actions.Blue": "#B58900", - "Actions.Green": "#2AA198", - "Actions.Grey": "#586e75", - "Actions.GreyInline": "#657B83", - "Actions.GreyInline.Dark": "#839496", - "Actions.Red": "#268BD2", - "Actions.Yellow": "#B58900", - "Checkbox.Background.Default": "#00252E", - "Checkbox.Background.Default.Dark": "#00252E", - "Checkbox.Background.Disabled": "#083F4D", - "Checkbox.Background.Disabled.Dark": "#083F4D", - "Checkbox.Border.Default": "#0D3640", - "Checkbox.Border.Default.Dark": "#0D3640", - "Checkbox.Border.Disabled": "#2E5861", - "Checkbox.Border.Disabled.Dark": "#2E5861", - "Checkbox.Focus.Thin.Default": "#d33682", - "Checkbox.Focus.Thin.Default.Dark": "#d33682", - "Checkbox.Focus.Wide": "#d33682", - "Checkbox.Focus.Wide.Dark": "#d33682", - "Checkbox.Foreground.Disabled": "#2E5861", - "Checkbox.Foreground.Disabled.Dark": "#2E5861", - "Checkbox.Background.Selected": "#d33682", - "Checkbox.Background.Selected.Dark": "#002B36", - "Checkbox.Border.Selected": "#d33682", - "Checkbox.Border.Selected.Dark": "#d33682", - "Checkbox.Foreground.Selected": "#d33682", - "Checkbox.Foreground.Selected.Dark": "#d33682", - "Checkbox.Focus.Thin.Selected": "#839496", - "Checkbox.Focus.Thin.Selected.Dark": "#839496", - "Objects.Grey": "#657B83", - "Objects.Blue": "#B58900", - "Objects.RedStatus": "#268BD2", - "Objects.Red": "#268BD2", - "Objects.Pink": "#859900", - "Objects.Yellow": "#B58900", - "Objects.Green": "#2AA198", - "Objects.Purple": "#859900", - "Objects.BlackText": "#839496", - "Objects.YellowDark": "#D33682", - "Objects.GreenAndroid": "#2AA198" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Solarized Dark.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Solarized Dark.theme.json index 2280930e..16505030 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Solarized Dark.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Solarized Dark.theme.json @@ -2,1004 +2,1089 @@ "name": "Solarized Dark", "dark": true, "author": "Mallowigi", + "colors": { + "bg": "#002B36", + "bg30": "#002B3630", + "fg": "#839496", + "text": "#586e75", + "selBg": "#2E4C52", + "selFg": "#FFFFFF", + "activeFg": "#FFFFFF", + "border": "#0D3640", + "excl": "#083F4D", + "second": "#003745", + "dis": "#2E5861", + "accent": "#d33682", + "accent2": "#d336822", + "accent50": "#d3368250", + "accent70": "#d3368270", + "cs": "#00252E", + "button": "#073642", + "table": "#003946", + "tree": "#2E4C5280", + "hl": "#005a6f", + "notif": "#2E4C52", + "hc": "#002B36", + "white": "#268BD2", + "blue": "#B58900", + "red": "#268BD2", + "yellow": "#B58900", + "green": "#2AA198", + "gray": "#657B83", + "purple": "#859900", + "orange": "#D33682" + }, "editorScheme": "colors/Solarized Dark.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#586e75", - "background": "#002B36", - "borderColor": "#0D3640", - "disabledBackground": "#083F4D", - "disabledForeground": "#2E5861", - "disabledText": "#2E5861", - "focusColor": "#005a6f", - "focusedBorderColor": "#d33682", - "foreground": "#839496", - "inactiveBackground": "#083F4D", - "inactiveForeground": "#586e75", - "infoForeground": "#586e75", - "selectionBackground": "#2E4C52", - "selectionBackgroundInactive": "#003745", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#003745", - "separatorColor": "#0D3640" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#002B36", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#d3368250", - "hoverBorderColor": "#d3368250", - "hoverSeparatorColor": "#073642", - "focusedBorderColor": "#d3368250", - "pressedBackground": "#d3368250", - "pressedBorderColor": "#d3368250" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#2E4C52" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#002B36", - "Borders.color": "#0D3640", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#002B36", + "background": "bg", "default": { - "endBackground": "#003946", - "endBorderColor": "#003946", - "foreground": "#FFFFFF", - "focusColor": "#d33682", - "focusedBorderColor": "#d33682", - "shadowColor": "#003946", - "startBackground": "#003946", - "startBorderColor": "#003946" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#073642", - "disabledText": "#2E5861", - "endBackground": "#073642", - "endBorderColor": "#073642", - "focus": "#005a6f", - "focusedBorderColor": "#d33682", - "foreground": "#586e75", - "highlight": "#FFFFFF", - "mt.background": "#073642", - "mt.foreground": "#586e75", - "mt.selectedForeground": "#FFFFFF", - "mt.selection.color1": "#003946", - "mt.selection.color2": "#003946", - "startBackground": "#073642", - "startBorderColor": "#073642", - "shadowColor": "#073642", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#0D3640", - "Tooltip.background": "#2E4C52" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#00252E", - "selectionBackground": "#2E4C52" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#002B36", - "disabledText": "#2E5861", - "foreground": "#839496", - "select": "#d33682" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#586e75", - "acceleratorSelectionForeground": "#586e75", - "background": "#002B36", - "disabledBackground": "#002B36", - "disabledForeground": "#2E5861", - "foreground": "#839496", - "selectionBackground": "#2E4C52", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#839496", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#d33682", - "dropdownBorder": "#003745", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#002B36", - "foreground": "#839496", - "swatchesDefaultRecentColor": "#839496" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#073642", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#073642", - "disabledIconColor": "#2E5861", - "iconColor": "#839496", - "nonEditableBackground": "#002B36" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#002B36", - "buttonBackground": "#073642", - "darcula.hoveredArrowButtonForeground": "#d33682", - "disabledForeground": "#2E5861", - "foreground": "#839496", - "modifiedItemForeground": "#d33682", - "nonEditableBackground": "#003745", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#003946", - "selectionForeground": "#FFFFFF" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#0D3640", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#003745", - "foreground": "#839496", - "infoForeground": "#586e75", - "matchForeground": "#d33682", - "matchSelectionForeground": "#d33682", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#FFFFFF", - "selectedGrayedForeground": "#FFFFFF", - "selectionGrayForeground": "#FFFFFF", - "selectionInactiveInfoForeground": "#586e75", - "selectionInactiveBackground": "#005a6f", - "selectionBackground": "#2E4C52", - "selectionForeground": "#FFFFFF", - "selectionInfoForeground": "#FFFFFF" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#005a6f", - "disabledBorderColor": "#073642", - "focusColor": "#d33682", - "focusedBorderColor": "#d33682", - "hoverIconColor": "#d33682", - "infoForeground": "#586e75", - "iconColor": "#839496" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#002B36", - "controlText": "#586e75", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#d33682", - "foreground": "#FFFFFF" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#586e75", - "changedValueForeground": "#d33682", - "errorMessageForeground": "#268BD2", - "evaluatingExpressionForeground": "#586e75", - "exceptionForeground": "#B58900", - "modifyingValueForeground": "#d33682", - "valueForeground": "#d33682" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#005a6f", - "underlinedTabBackground": "#005a6f" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#005a6f" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#002B36", - "borderColor": "#002B36", - "hoverBackground": "#003946", - "hoverColor": "#002B36", - "hoverMaskColor": "#005a6f", - "inactiveColoredTabBackground": "#002B36", - "inactiveColoredFileBackground": "#073642", - "inactiveUnderlineColor": "#d33682", - "inactiveMaskColor": "#002B36", - "underlineColor": "#d33682", - "underlinedTabBackground": "#003946", - "underlinedTabForeground": "#FFFFFF" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#002B36", - "DialogWrapper.southPanelBackground": "#002B36", - "DialogWrapper.southPanelDivider": "#002B36", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#002B36", - "areaBorderColor": "#002B36", - "areaForeground": "#839496" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#002B36", - "foreground": "#839496", - "shortcutForeground": "#586e75" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#002B36", - "caretForeground": "#d33682", - "foreground": "#839496", - "inactiveBackground": "#002B36", - "inactiveForeground": "#2E5861", - "selectionBackground": "#2E4C52", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#003745", - "hoverBackground": "#005a6f", - "hoverColor": "#005a6f", - "hoverMaskColor": "#005a6f", - "inactiveMaskColor": "#002B36", - "inactiveColoredFileBackground": "#002B36", - "inactiveUnderlineColor": "#2E5861", - "selectedForeground": "#839496", - "selectedBackground": "#003946", - "underlineColor": "#d33682", - "underlinedTabBackground": "#003946", - "underlinedTabForeground": "#FFFFFF" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#002B36", - "borderColor": "#003745", - "hoverBackground": "#005a6f", - "hoverColor": "#005a6f", - "inactiveUnderlineColor": "#d33682", - "underlineColor": "#d33682", - "underlinedTabBackground": "#003946", - "underlinedTabForeground": "#839496" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#083F4D", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#0D3640", + "Focus.color": "border", "FormattedTextField": { - "background": "#002B36", - "caretForeground": "#d33682", - "foreground": "#839496", - "inactiveBackground": "#073642", - "inactiveForeground": "#2E5861", - "selectionForeground": "#FFFFFF", - "selectionBackground": "#003946" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#2E4C52", "Group": { - "disabledSeparatorColor": "#0D3640", - "separatorColor": "#0D3640" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#586e75", - "lineSeparatorColor": "#002B36" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#002B36", - "inactive": "#00252E" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#002B36", - "borderColor": "#0D3640", - "foreground": "#839496", - "infoForeground": "#586e75", - "shortcutForeground": "#586e75" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#d33682", - "inactiveCaption": "#003745", - "inactiveCaptionBorder": "#002B36", - "inactiveCaptionText": "#586e75", - "info": "#586e75", - "infoText": "#586e75", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#0D3640", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#002B36" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#839496", - "background": "#002B36", - "inactiveTitleForeground": "#586e75" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#002B36", - "disabledForeground": "#2E5861", - "disabledShadow": "#002B36", - "disabledText": "#2E5861", - "foreground": "#839496", - "infoForeground": "#586e75", - "selectedForeground": "#FFFFFF", - "selectedDisabledForeground": "#839496" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#d33682", - "hoverForeground": "#d33682", - "pressedForeground": "#d33682", - "secondaryForeground": "#586e75", - "visitedForeground": "#d33682" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#d33682", + "link.foreground": "accent", "List": { - "background": "#003745", - "foreground": "#839496", - "hoverBackground": "#2E4C5280", - "hoverInactiveBackground": "#003946", - "selectionBackground": "#2E4C52", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#2E4C5280" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#002B36", - "branchColor": "#839496", - "contrast": "#00252E", - "foreground": "#839496", - "mergeCommits": "#073642", - "primaryColor": "#586e75", - "selectionForeground": "#FFFFFF", - "tab.backgroundColor": "#002B36", - "tab.borderColor": "#d33682", - "tagColor": "#586e75" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#003745", - "usedColor": "#005a6f", - "usedBackground": "#005a6f" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#586e75", - "acceleratorSelectionForeground": "#FFFFFF", - "background": "#002B36", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#003745", - "disabledBackground": "#003745", - "disabledForeground": "#2E5861", - "foreground": "#839496", - "selectionBackground": "#2E4C52", - "selectionForeground": "#FFFFFF", - "separatorColor": "#0D3640" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#002B36", - "borderColor": "#002B36", - "disabledBackground": "#002B36", - "disabledForeground": "#2E5861", - "foreground": "#839496", - "highlight": "#002B36", - "selectionBackground": "#2E4C52", - "selectionForeground": "#FFFFFF", - "shadow": "#002B36" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#586e75", - "acceleratorSelectionForeground": "#FFFFFF", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#002B36", - "disabledBackground": "#002B36", - "disabledForeground": "#2E5861", - "foreground": "#839496", - "selectionBackground": "#2E4C52", - "selectionForeground": "#FFFFFF" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#839496", - "borderColor": "#002B36" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#002B36" + "background": "bg" }, "SearchField": { - "background": "#002B36" + "background": "hc" } }, - "NewPSD.warning": "#d33682", + "NewPSD.warning": "accent", "Notification": { - "background": "#2E4C52", - "borderColor": "#2E4C52", - "errorBackground": "#2E4C52", - "errorBorderColor": "#2E4C52", - "foreground": "#839496", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#073642", - "foreground": "#839496", - "innerBorderColor": "#073642" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#2E4C52", - "errorBorderColor": "#2E4C52", - "informativeBackground": "#2E4C52", - "informativeBorderColor": "#2E4C52", - "warningBackground": "#2E4C52", - "warningBorderColor": "#2E4C52" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#0D3640", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#002B36", - "foreground": "#839496", - "messageForeground": "#839496" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#073642", - "focusedColor": "#d33682", - "disabledColor": "#2E5861" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#002B36", - "foreground": "#839496" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#003745", - "borderColor": "#003946", - "currentOverloadBackground": "#005a6f", - "currentParameterForeground": "#d33682", - "disabledForeground": "#2E5861", - "foreground": "#839496", - "infoForeground": "#586e75", - "lineSeparatorColor": "#003946" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#002B36", - "capsLockIconColor": "#d33682", - "caretForeground": "#d33682", - "foreground": "#839496", - "inactiveForeground": "#2E5861", - "selectionBackground": "#003946", - "selectionForeground": "#FFFFFF" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#002B36", - "disabledForeground": "#2E5861", - "eapTagBackground": "#005a6f", - "hoverBackground": "#2E4C5280", - "lightSelectionBackground": "#003946", - "paidTagBackground": "#005a6f", - "selectionBackground": "#2E4C52", - "tagForeground": "#d33682", - "tagBackground": "#005a6f", - "trialTagBackground": "#005a6f", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#073642", - "installBorderColor": "#073642", - "installForeground": "#839496", - "installFocusedBackground": "#005a6f", - "installFillForeground": "#2E5861", - "installFillBackground": "#073642", - "updateBackground": "#d33682", - "updateBorderColor": "#073642", - "updateForeground": "#839496" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#002B36", - "borderColor": "#0D3640" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#003745", - "foreground": "#839496" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#003946", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#003946" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#002B36", - "borderColor": "#002B36", - "foreground": "#d33682" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#00252E", - "inactiveBorderColor": "#002B36", - "innerBorderColor": "#003745", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#002B36", - "inactiveBackground": "#00252E" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#839496", - "separatorColor": "#003745", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#00252E", - "background": "#00252E", - "borderColor": "#00252E" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#002B36", + "background": "bg", "border": "2,0,2,0", - "foreground": "#839496", - "translucentBackground": "#002B36" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#002B36", - "foreground": "#d33682", - "indeterminateEndColor": "#d33682", - "indeterminateStartColor": "#d33682", - "progressColor": "#d33682", - "selectionBackground": "#005a6f", - "trackColor": "#005a6f" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#d33682" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#002B36", - "disabledText": "#2E5861", - "foreground": "#839496" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#586e75", - "acceleratorSelectionForeground": "#586e75", - "background": "#002B36", - "disabledBackground": "#002B36", - "disabledForeground": "#2E5861", - "foreground": "#839496", - "selectionBackground": "#2E4C52", - "selectionForeground": "#FFFFFF" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#0D3640", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#002B36", - "hoverThumbBorderColor": "#d33682", - "hoverThumbColor": "#d33682", - "hoverTrackColor": "#002B3630", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#d33682", - "hoverThumbColor": "#d33682", - "hoverTrackColor": "#002B3630", - "thumbBorderColor": "#d3368270", - "thumbColor": "#d3368270", - "trackColor": "#002B3630", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#d33682", - "hoverThumbColor": "#d33682", - "hoverTrackColor": "#002B3630", - "thumbBorderColor": "#d3368270", - "thumbColor": "#d3368270", - "trackColor": "#002B3630" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#005a6f", - "thumbBorderColor": "#d3368270", - "thumbColor": "#d3368270", - "trackColor": "#002B3630", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#d33682", - "hoverThumbColor": "#d33682", - "hoverTrackColor": "#002B3630", - "thumbBorderColor": "#d3368270", - "thumbColor": "#d3368270", - "trackColor": "#002B3630" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#00252E", - "foreground": "#586e75" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#002B36" + "background": "bg" }, "List": { - "separatorForeground": "#586e75", - "separatorColor": "#0D3640" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#002B36", - "borderColor": "#00252E", - "infoForeground": "#586e75" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#FFFFFF", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#005a6f" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#d33682", - "startBackground": "#d33682", - "endColor": "#d33682", - "startColor": "#d33682" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#2E4C52", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#003946" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#586e75", - "Repeated.File.Foreground": "#839496" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#003745", - "foreground": "#003745", - "separatorColor": "#003745" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#002B36" + "background": "hc" }, "Slider": { - "background": "#002B36", - "buttonBorderColor": "#d33682", - "buttonColor": "#d33682", - "foreground": "#839496", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#003745", - "trackColor": "#003946", - "trackWidth": 7, - "thumb": "#d33682" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#005a6f", - "borderColor": "#0D3640", - "foreground": "#839496", - "errorForeground": "#839496" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#002B36", + "background": "bg", "border": "3,3,3,3", - "foreground": "#839496", - "selectionForeground": "#FFFFFF" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#002B36", - "highlight": "#002B36" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#003745", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#002B36", - "hoverBackground": "#005a6f", - "LightEditBackground": "#003946" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#002B36", - "contentAreaColor": "#005a6f", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#0D3640", - "disabledForeground": "#2E5861", - "disabledUnderlineColor": "#2E5861", - "focus": "#003946", - "focusColor": "#003946", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#839496", - "highlight": "#0D3640", - "hoverColor": "#005a6f", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#FFFFFF", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#d33682" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#002B36", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#00252E", - "background": "#002B36", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#2E5861", - "dropLineColor": "#d33682", - "dropLineShortColor": "#d33682", - "focusCellBackground": "#003946", - "focusCellForeground": "#FFFFFF", - "foreground": "#839496", - "gridColor": "#002B36", - "highlightOuter": "#003946", - "hoverBackground": "#2E4C5280", - "hoverInactiveBackground": "#003946", - "lightSelectionForeground": "#FFFFFF", - "lightSelectionInactiveForeground": "#586e75", - "lightSelectionInactiveBackground": "#003745", - "selectionBackground": "#003946", - "selectionForeground": "#FFFFFF", - "selectionInactiveBackground": "#003946", - "selectionInactiveForeground": "#FFFFFF", - "sortIconColor": "#839496", - "stripeColor": "#00252E" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#002B36", - "borderColor": "#002B36", - "bottomSeparatorColor": "#003745", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#2E5861", - "foreground": "#839496", - "focusCellBackground": "#003946", - "focusCellForeground": "#FFFFFF", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#003745" + "separatorColor": "second" }, - "text": "#586e75", - "textInactiveText": "#586e75", - "textText": "#586e75", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#002B36", - "caretForeground": "#d33682", - "foreground": "#839496", - "inactiveForeground": "#2E5861", - "selectionBackground": "#003946", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#002B36", - "caretForeground": "#d33682", - "foreground": "#839496", - "inactiveForeground": "#2E5861", - "selectionBackground": "#003946", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#002B36", - "caretForeground": "#d33682", - "foreground": "#839496", - "inactiveForeground": "#2E5861", - "selectionBackground": "#003946", - "selectionForeground": "#FFFFFF" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#00252E", - "Button.hoverBackground": "#005a6f", - "inactiveBackground": "#002B36", - "infoForeground": "#586e75", - "inactiveInfoForeground": "#586e75" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#839496", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#073642", - "buttonColor": "#839496", - "disabledText": "#2E5861", - "foreground": "#839496", - "offForeground": "#002B36", - "offBackground": "#002B36", - "onBackground": "#d33682", - "onForeground": "#d33682" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#002B36", - "borderHandleColor": "#586e75", - "floatingForeground": "#586e75", - "foreground": "#839496" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#002B36", - "Actions.infoForeground": "#586e75", - "background": "#2E4C52", - "borderColor": "#0D3640", - "foreground": "#839496", - "infoForeground": "#586e75", - "separatorColor": "#0D3640", - "shortcutForeground": "#586e75" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#003946", - "selectedForeground": "#FFFFFF", - "selectedBackground": "#00252E" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#002B36", - "borderColor": "#003745", - "inactiveBackground": "#002B36" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#002B36" + "background": "bg" }, "HeaderTab": { - "borderColor": "#005a6f", - "hoverBackground": "#005a6f", - "hoverInactiveBackground": "#005a6f", - "inactiveUnderlineColor": "#d33682", - "selectedBackground": "#00252E", - "selectedInactiveBackground": "#00252E", - "underlineColor": "#d33682", - "underlinedTabBackground": "#003946", - "underlinedTabInactiveBackground": "#003745", - "underlinedTabForeground": "#FFFFFF", - "underlinedTabInactiveForeground": "#839496" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#002B36", - "foreground": "#586e75", - "hash": "#0D3640", - "hoverBackground": "#2E4C5280", - "hoverInactiveBackground": "#003946", - "modifiedItemForeground": "#d33682", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#2E4C5280", - "selectionForeground": "#FFFFFF", - "selectionInactiveForeground": "#FFFFFF", - "selectionInactiveBackground": "#2E4C5280", - "textBackground": "#002B36" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#0D3640", - "Canvas.background": "#00252E", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#002B36", - "foreground": "#839496" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#0D3640", - "background": "#002B36", - "foreground": "#839496", - "hoverBorderColor": "#005a6f" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#0D3640", - "hoverBorderColor": "#005a6f" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#00252E", - "highStroke.foreground": "#839496", - "Label.foreground": "#586e75", - "List.selectionBackground": "#2E4C5280", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#0D3640", - "Component.foreground": "#839496", - "ConstraintSetText.foreground": "#586e75", - "ConstraintSet.background": "#003745", - "CSPanel.SelectedFocusBackground": "#2E4C52", - "CSPanel.SelectedBackground": "#2E4C5280", - "cs_FocusText.infoForeground": "#586e75", - "CursorTextColor.foreground": "#839496", - "HoverColor.disabledBackground": "#2E5861", - "motionGraph.background": "#002B36", - "Notification.background": "#2E4C52", - "ourAvg.background": "#003745", - "ourCS.background": "#003745", - "ourCS_Border.borderColor": "#0D3640", - "ourCS_TextColor.foreground": "#586e75", - "ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF", - "ourCS_SelectedBackground.selectionInactiveBackground": "#003946", - "ourCS_SelectedBorder.pressedBorderColor": "#005a6f", - "ourML_BarColor.separatorColor": "#0D3640", - "PrimaryPanel.background": "#00252E", - "SecondaryPanel.background": "#002B36", - "SecondaryPanel.header.foreground": "#586e75", - "SecondaryPanel.header.background": "#00252E", - "timeLine.disabledBorderColor": "#0D3640" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#0D3640", - "background": "#002B36" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#839496", + "percent.foreground": "fg", "Placeholder": { - "background": "#002B36", - "borderColor": "#0D3640", - "foreground": "#839496", - "selectedForeground": "#FFFFFF" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#002B36", - "stroke.acceleratorForeground": "#586e75" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#2E4C52", - "errorBorderColor": "#2E4C52", - "warningBackground": "#2E4C52", - "warningBorderColor": "#2E4C52" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#002B36" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#005a6f" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#d33682", - "otherIconColor": "#586e75", - "remoteBranchIconColor": "#839496", - "tagIconColor": "#586e75" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#d33682", - "bookmarkIconColor": "#FFFFFF", - "closedBranchIconColor": "#2E5861", - "localTagIconColor": "#586e75", - "mqTagIconColor": "#586e75", - "tagIconColor": "#586e75", - "tipIconColor": "#586e75" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#586e75", - "Commit.currentBranchBackground": "#003745", - "Commit.hoveredBackground": "#2E4C5280" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#FFFFFF", - "backgroundBase": "#005a6f" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#002B36", - "foreground": "#839496" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#002B36", - "background": "#002B36", - "borderColor": "#002B36", - "captionBackground": "#00252E", - "captionForeground": "#839496", - "Details.background": "#002B36", - "footerBackground": "#00252E", - "footerForeground": "#839496", - "headerBackground": "#002B36", - "headerForeground": "#839496", - "List.background": "#00252E", - "separatorColor": "#0D3640", - "SidePanel.background": "#003745", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#00252E", - "actions.selectionBackground": "#005a6f", - "background": "#003745", - "selectionBackground": "#2E4C52", - "selectionInactiveBackground": "#003745" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#002B36", - "windowBorder": "#0D3640", - "windowText": "#586e75", - "Window.border": "#0D3640" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#00252E", - "#6B6B6B": "#586e75", - "#A7A7A7": "#002B36", - "#3D6185": "#d33682", - "#466D94": "#d33682", - "#3C3F41": "#002B36", - "#545556": "#2E5861", - "#606060": "#2E5861", - "#9AA7B0": "#839496", - "#675133": "#d33682", - "Actions.Blue": "#B58900", - "Actions.Green": "#2AA198", - "Actions.Grey": "#586e75", - "Actions.GreyInline": "#657B83", - "Actions.GreyInline.Dark": "#839496", - "Actions.Red": "#268BD2", - "Actions.Yellow": "#B58900", - "Checkbox.Background.Default": "#00252E", - "Checkbox.Background.Default.Dark": "#00252E", - "Checkbox.Background.Disabled": "#083F4D", - "Checkbox.Background.Disabled.Dark": "#083F4D", - "Checkbox.Border.Default": "#0D3640", - "Checkbox.Border.Default.Dark": "#0D3640", - "Checkbox.Border.Disabled": "#2E5861", - "Checkbox.Border.Disabled.Dark": "#2E5861", - "Checkbox.Focus.Thin.Default": "#d33682", - "Checkbox.Focus.Thin.Default.Dark": "#d33682", - "Checkbox.Focus.Wide": "#d33682", - "Checkbox.Focus.Wide.Dark": "#d33682", - "Checkbox.Foreground.Disabled": "#2E5861", - "Checkbox.Foreground.Disabled.Dark": "#2E5861", - "Checkbox.Background.Selected": "#d33682", - "Checkbox.Background.Selected.Dark": "#002B36", - "Checkbox.Border.Selected": "#d33682", - "Checkbox.Border.Selected.Dark": "#d33682", - "Checkbox.Foreground.Selected": "#d33682", - "Checkbox.Foreground.Selected.Dark": "#d33682", - "Checkbox.Focus.Thin.Selected": "#839496", - "Checkbox.Focus.Thin.Selected.Dark": "#839496", - "Objects.Grey": "#657B83", - "Objects.Blue": "#B58900", - "Objects.RedStatus": "#268BD2", - "Objects.Red": "#268BD2", - "Objects.Pink": "#859900", - "Objects.Yellow": "#B58900", - "Objects.Green": "#2AA198", - "Objects.Purple": "#859900", - "Objects.BlackText": "#839496", - "Objects.YellowDark": "#D33682", - "Objects.GreenAndroid": "#2AA198" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Solarized Light Contrast.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Solarized Light Contrast.theme.json index 275a2584..13819565 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Solarized Light Contrast.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Solarized Light Contrast.theme.json @@ -2,1004 +2,1089 @@ "name": "Solarized Light Contrast", "dark": false, "author": "Mallowigi", + "colors": { + "bg": "#fdf6e3", + "bg30": "#fdf6e330", + "fg": "#586e75", + "text": "#93a1a1", + "selBg": "#e8dcb6", + "selFg": "#002b36", + "activeFg": "#002b36", + "border": "#edead9", + "excl": "#E3DCC9", + "second": "#F6F0DE", + "dis": "#C9CCC3", + "accent": "#d33682", + "accent2": "#d336822", + "accent50": "#d3368250", + "accent70": "#d3368270", + "cs": "#eee8d5", + "button": "#d8d4c4", + "table": "#d1cbb8", + "tree": "#e8dcb6b0", + "hl": "#d1cbb8", + "notif": "#EDE8D4", + "hc": "#eee8d5", + "white": "#268BD2", + "blue": "#B58900", + "red": "#268BD2", + "yellow": "#657B83", + "green": "#2AA198", + "gray": "#93A1A1", + "purple": "#859900", + "orange": "#D33682" + }, "editorScheme": "colors/Solarized Light.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#93a1a1", - "background": "#fdf6e3", - "borderColor": "#edead9", - "disabledBackground": "#E3DCC9", - "disabledForeground": "#C9CCC3", - "disabledText": "#C9CCC3", - "focusColor": "#d1cbb8", - "focusedBorderColor": "#d33682", - "foreground": "#586e75", - "inactiveBackground": "#E3DCC9", - "inactiveForeground": "#93a1a1", - "infoForeground": "#93a1a1", - "selectionBackground": "#e8dcb6", - "selectionBackgroundInactive": "#F6F0DE", - "selectionForeground": "#002b36", - "selectionInactiveBackground": "#F6F0DE", - "separatorColor": "#edead9" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#fdf6e3", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#d3368250", - "hoverBorderColor": "#d3368250", - "hoverSeparatorColor": "#d8d4c4", - "focusedBorderColor": "#d3368250", - "pressedBackground": "#d3368250", - "pressedBorderColor": "#d3368250" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#e8dcb6" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#fdf6e3", - "Borders.color": "#edead9", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#fdf6e3", + "background": "bg", "default": { - "endBackground": "#d1cbb8", - "endBorderColor": "#d1cbb8", - "foreground": "#002b36", - "focusColor": "#d33682", - "focusedBorderColor": "#d33682", - "shadowColor": "#d1cbb8", - "startBackground": "#d1cbb8", - "startBorderColor": "#d1cbb8" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#d8d4c4", - "disabledText": "#C9CCC3", - "endBackground": "#d8d4c4", - "endBorderColor": "#d8d4c4", - "focus": "#d1cbb8", - "focusedBorderColor": "#d33682", - "foreground": "#93a1a1", - "highlight": "#002b36", - "mt.background": "#d8d4c4", - "mt.foreground": "#93a1a1", - "mt.selectedForeground": "#002b36", - "mt.selection.color1": "#d1cbb8", - "mt.selection.color2": "#d1cbb8", - "startBackground": "#d8d4c4", - "startBorderColor": "#d8d4c4", - "shadowColor": "#d8d4c4", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#edead9", - "Tooltip.background": "#EDE8D4" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#eee8d5", - "selectionBackground": "#e8dcb6" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#fdf6e3", - "disabledText": "#C9CCC3", - "foreground": "#586e75", - "select": "#d33682" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#93a1a1", - "acceleratorSelectionForeground": "#93a1a1", - "background": "#fdf6e3", - "disabledBackground": "#fdf6e3", - "disabledForeground": "#C9CCC3", - "foreground": "#586e75", - "selectionBackground": "#e8dcb6", - "selectionForeground": "#002b36" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#586e75", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#d33682", - "dropdownBorder": "#F6F0DE", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#fdf6e3", - "foreground": "#586e75", - "swatchesDefaultRecentColor": "#586e75" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#d8d4c4", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#d8d4c4", - "disabledIconColor": "#C9CCC3", - "iconColor": "#586e75", - "nonEditableBackground": "#fdf6e3" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#eee8d5", - "buttonBackground": "#d8d4c4", - "darcula.hoveredArrowButtonForeground": "#d33682", - "disabledForeground": "#C9CCC3", - "foreground": "#586e75", - "modifiedItemForeground": "#d33682", - "nonEditableBackground": "#F6F0DE", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#d1cbb8", - "selectionForeground": "#002b36" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#edead9", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#F6F0DE", - "foreground": "#586e75", - "infoForeground": "#93a1a1", - "matchForeground": "#d33682", - "matchSelectionForeground": "#d33682", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#002b36", - "selectedGrayedForeground": "#002b36", - "selectionGrayForeground": "#002b36", - "selectionInactiveInfoForeground": "#93a1a1", - "selectionInactiveBackground": "#d1cbb8", - "selectionBackground": "#e8dcb6", - "selectionForeground": "#002b36", - "selectionInfoForeground": "#002b36" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#d1cbb8", - "disabledBorderColor": "#d8d4c4", - "focusColor": "#d33682", - "focusedBorderColor": "#d33682", - "hoverIconColor": "#d33682", - "infoForeground": "#93a1a1", - "iconColor": "#586e75" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#fdf6e3", - "controlText": "#93a1a1", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#d33682", - "foreground": "#002b36" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#93a1a1", - "changedValueForeground": "#d33682", - "errorMessageForeground": "#268BD2", - "evaluatingExpressionForeground": "#93a1a1", - "exceptionForeground": "#657B83", - "modifyingValueForeground": "#d33682", - "valueForeground": "#d33682" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#d1cbb8", - "underlinedTabBackground": "#d1cbb8" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#d1cbb8" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#fdf6e3", - "borderColor": "#fdf6e3", - "hoverBackground": "#d1cbb8", - "hoverColor": "#eee8d5", - "hoverMaskColor": "#d1cbb8", - "inactiveColoredTabBackground": "#fdf6e3", - "inactiveColoredFileBackground": "#d8d4c4", - "inactiveUnderlineColor": "#d33682", - "inactiveMaskColor": "#eee8d5", - "underlineColor": "#d33682", - "underlinedTabBackground": "#d1cbb8", - "underlinedTabForeground": "#002b36" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#fdf6e3", - "DialogWrapper.southPanelBackground": "#fdf6e3", - "DialogWrapper.southPanelDivider": "#fdf6e3", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#fdf6e3", - "areaBorderColor": "#fdf6e3", - "areaForeground": "#586e75" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#eee8d5", - "foreground": "#586e75", - "shortcutForeground": "#93a1a1" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#eee8d5", - "caretForeground": "#d33682", - "foreground": "#586e75", - "inactiveBackground": "#fdf6e3", - "inactiveForeground": "#C9CCC3", - "selectionBackground": "#e8dcb6", - "selectionForeground": "#002b36" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#F6F0DE", - "hoverBackground": "#d1cbb8", - "hoverColor": "#d1cbb8", - "hoverMaskColor": "#d1cbb8", - "inactiveMaskColor": "#fdf6e3", - "inactiveColoredFileBackground": "#fdf6e3", - "inactiveUnderlineColor": "#C9CCC3", - "selectedForeground": "#586e75", - "selectedBackground": "#d1cbb8", - "underlineColor": "#d33682", - "underlinedTabBackground": "#d1cbb8", - "underlinedTabForeground": "#002b36" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#fdf6e3", - "borderColor": "#F6F0DE", - "hoverBackground": "#d1cbb8", - "hoverColor": "#d1cbb8", - "inactiveUnderlineColor": "#d33682", - "underlineColor": "#d33682", - "underlinedTabBackground": "#d1cbb8", - "underlinedTabForeground": "#586e75" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#E3DCC9", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#edead9", + "Focus.color": "border", "FormattedTextField": { - "background": "#eee8d5", - "caretForeground": "#d33682", - "foreground": "#586e75", - "inactiveBackground": "#d8d4c4", - "inactiveForeground": "#C9CCC3", - "selectionForeground": "#002b36", - "selectionBackground": "#d1cbb8" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#EDE8D4", "Group": { - "disabledSeparatorColor": "#edead9", - "separatorColor": "#edead9" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#93a1a1", - "lineSeparatorColor": "#fdf6e3" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#fdf6e3", - "inactive": "#eee8d5" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#fdf6e3", - "borderColor": "#edead9", - "foreground": "#586e75", - "infoForeground": "#93a1a1", - "shortcutForeground": "#93a1a1" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#d33682", - "inactiveCaption": "#F6F0DE", - "inactiveCaptionBorder": "#fdf6e3", - "inactiveCaptionText": "#93a1a1", - "info": "#93a1a1", - "infoText": "#93a1a1", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#edead9", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#fdf6e3" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#586e75", - "background": "#fdf6e3", - "inactiveTitleForeground": "#93a1a1" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#fdf6e3", - "disabledForeground": "#C9CCC3", - "disabledShadow": "#fdf6e3", - "disabledText": "#C9CCC3", - "foreground": "#586e75", - "infoForeground": "#93a1a1", - "selectedForeground": "#002b36", - "selectedDisabledForeground": "#586e75" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#d33682", - "hoverForeground": "#d33682", - "pressedForeground": "#d33682", - "secondaryForeground": "#93a1a1", - "visitedForeground": "#d33682" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#d33682", + "link.foreground": "accent", "List": { - "background": "#F6F0DE", - "foreground": "#586e75", - "hoverBackground": "#e8dcb6b0", - "hoverInactiveBackground": "#d1cbb8", - "selectionBackground": "#e8dcb6", - "selectionForeground": "#002b36", - "selectionInactiveForeground": "#002b36", - "selectionInactiveBackground": "#e8dcb6b0" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#fdf6e3", - "branchColor": "#586e75", - "contrast": "#eee8d5", - "foreground": "#586e75", - "mergeCommits": "#d8d4c4", - "primaryColor": "#93a1a1", - "selectionForeground": "#002b36", - "tab.backgroundColor": "#fdf6e3", - "tab.borderColor": "#d33682", - "tagColor": "#93a1a1" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#F6F0DE", - "usedColor": "#d1cbb8", - "usedBackground": "#d1cbb8" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#93a1a1", - "acceleratorSelectionForeground": "#002b36", - "background": "#fdf6e3", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#F6F0DE", - "disabledBackground": "#F6F0DE", - "disabledForeground": "#C9CCC3", - "foreground": "#586e75", - "selectionBackground": "#e8dcb6", - "selectionForeground": "#002b36", - "separatorColor": "#edead9" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#eee8d5", - "borderColor": "#fdf6e3", - "disabledBackground": "#fdf6e3", - "disabledForeground": "#C9CCC3", - "foreground": "#586e75", - "highlight": "#fdf6e3", - "selectionBackground": "#e8dcb6", - "selectionForeground": "#002b36", - "shadow": "#eee8d5" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#93a1a1", - "acceleratorSelectionForeground": "#002b36", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#fdf6e3", - "disabledBackground": "#fdf6e3", - "disabledForeground": "#C9CCC3", - "foreground": "#586e75", - "selectionBackground": "#e8dcb6", - "selectionForeground": "#002b36" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#586e75", - "borderColor": "#fdf6e3" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#fdf6e3" + "background": "bg" }, "SearchField": { - "background": "#eee8d5" + "background": "hc" } }, - "NewPSD.warning": "#d33682", + "NewPSD.warning": "accent", "Notification": { - "background": "#EDE8D4", - "borderColor": "#EDE8D4", - "errorBackground": "#EDE8D4", - "errorBorderColor": "#EDE8D4", - "foreground": "#586e75", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#d8d4c4", - "foreground": "#586e75", - "innerBorderColor": "#d8d4c4" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#EDE8D4", - "errorBorderColor": "#EDE8D4", - "informativeBackground": "#EDE8D4", - "informativeBorderColor": "#EDE8D4", - "warningBackground": "#EDE8D4", - "warningBorderColor": "#EDE8D4" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#edead9", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#fdf6e3", - "foreground": "#586e75", - "messageForeground": "#586e75" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#d8d4c4", - "focusedColor": "#d33682", - "disabledColor": "#C9CCC3" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#fdf6e3", - "foreground": "#586e75" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#F6F0DE", - "borderColor": "#d1cbb8", - "currentOverloadBackground": "#d1cbb8", - "currentParameterForeground": "#d33682", - "disabledForeground": "#C9CCC3", - "foreground": "#586e75", - "infoForeground": "#93a1a1", - "lineSeparatorColor": "#d1cbb8" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#eee8d5", - "capsLockIconColor": "#d33682", - "caretForeground": "#d33682", - "foreground": "#586e75", - "inactiveForeground": "#C9CCC3", - "selectionBackground": "#d1cbb8", - "selectionForeground": "#002b36" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#fdf6e3", - "disabledForeground": "#C9CCC3", - "eapTagBackground": "#d1cbb8", - "hoverBackground": "#e8dcb6b0", - "lightSelectionBackground": "#d1cbb8", - "paidTagBackground": "#d1cbb8", - "selectionBackground": "#e8dcb6", - "tagForeground": "#d33682", - "tagBackground": "#d1cbb8", - "trialTagBackground": "#d1cbb8", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#d8d4c4", - "installBorderColor": "#d8d4c4", - "installForeground": "#586e75", - "installFocusedBackground": "#d1cbb8", - "installFillForeground": "#C9CCC3", - "installFillBackground": "#d8d4c4", - "updateBackground": "#d33682", - "updateBorderColor": "#d8d4c4", - "updateForeground": "#586e75" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#eee8d5", - "borderColor": "#edead9" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#F6F0DE", - "foreground": "#586e75" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#d1cbb8", - "selectedForeground": "#002b36", - "selectedBackground": "#d1cbb8" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#fdf6e3", - "borderColor": "#fdf6e3", - "foreground": "#d33682" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#eee8d5", - "inactiveBorderColor": "#fdf6e3", - "innerBorderColor": "#F6F0DE", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#fdf6e3", - "inactiveBackground": "#eee8d5" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#586e75", - "separatorColor": "#F6F0DE", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#eee8d5", - "background": "#eee8d5", - "borderColor": "#eee8d5" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#fdf6e3", + "background": "bg", "border": "2,0,2,0", - "foreground": "#586e75", - "translucentBackground": "#fdf6e3" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#fdf6e3", - "foreground": "#d33682", - "indeterminateEndColor": "#d33682", - "indeterminateStartColor": "#d33682", - "progressColor": "#d33682", - "selectionBackground": "#d1cbb8", - "trackColor": "#d1cbb8" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#d33682" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#fdf6e3", - "disabledText": "#C9CCC3", - "foreground": "#586e75" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#93a1a1", - "acceleratorSelectionForeground": "#93a1a1", - "background": "#fdf6e3", - "disabledBackground": "#fdf6e3", - "disabledForeground": "#C9CCC3", - "foreground": "#586e75", - "selectionBackground": "#e8dcb6", - "selectionForeground": "#002b36" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#edead9", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#fdf6e3", - "hoverThumbBorderColor": "#d33682", - "hoverThumbColor": "#d33682", - "hoverTrackColor": "#fdf6e330", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#d33682", - "hoverThumbColor": "#d33682", - "hoverTrackColor": "#fdf6e330", - "thumbBorderColor": "#d3368270", - "thumbColor": "#d3368270", - "trackColor": "#fdf6e330", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#d33682", - "hoverThumbColor": "#d33682", - "hoverTrackColor": "#fdf6e330", - "thumbBorderColor": "#d3368270", - "thumbColor": "#d3368270", - "trackColor": "#fdf6e330" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#d1cbb8", - "thumbBorderColor": "#d3368270", - "thumbColor": "#d3368270", - "trackColor": "#fdf6e330", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#d33682", - "hoverThumbColor": "#d33682", - "hoverTrackColor": "#fdf6e330", - "thumbBorderColor": "#d3368270", - "thumbColor": "#d3368270", - "trackColor": "#fdf6e330" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#eee8d5", - "foreground": "#93a1a1" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#fdf6e3" + "background": "bg" }, "List": { - "separatorForeground": "#93a1a1", - "separatorColor": "#edead9" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#fdf6e3", - "borderColor": "#eee8d5", - "infoForeground": "#93a1a1" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#002b36", - "selectedForeground": "#002b36", - "selectedBackground": "#d1cbb8" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#d33682", - "startBackground": "#d33682", - "endColor": "#d33682", - "startColor": "#d33682" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#EDE8D4", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#d1cbb8" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#93a1a1", - "Repeated.File.Foreground": "#586e75" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#F6F0DE", - "foreground": "#F6F0DE", - "separatorColor": "#F6F0DE" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#eee8d5" + "background": "hc" }, "Slider": { - "background": "#fdf6e3", - "buttonBorderColor": "#d33682", - "buttonColor": "#d33682", - "foreground": "#586e75", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#F6F0DE", - "trackColor": "#d1cbb8", - "trackWidth": 7, - "thumb": "#d33682" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#d1cbb8", - "borderColor": "#edead9", - "foreground": "#586e75", - "errorForeground": "#586e75" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#fdf6e3", + "background": "bg", "border": "3,3,3,3", - "foreground": "#586e75", - "selectionForeground": "#002b36" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#fdf6e3", - "highlight": "#eee8d5" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#F6F0DE", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#fdf6e3", - "hoverBackground": "#d1cbb8", - "LightEditBackground": "#d1cbb8" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#fdf6e3", - "contentAreaColor": "#d1cbb8", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#edead9", - "disabledForeground": "#C9CCC3", - "disabledUnderlineColor": "#C9CCC3", - "focus": "#d1cbb8", - "focusColor": "#d1cbb8", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#586e75", - "highlight": "#edead9", - "hoverColor": "#d1cbb8", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#002b36", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#d33682" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#eee8d5", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#eee8d5", - "background": "#fdf6e3", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#C9CCC3", - "dropLineColor": "#d33682", - "dropLineShortColor": "#d33682", - "focusCellBackground": "#d1cbb8", - "focusCellForeground": "#002b36", - "foreground": "#586e75", - "gridColor": "#fdf6e3", - "highlightOuter": "#d1cbb8", - "hoverBackground": "#e8dcb6b0", - "hoverInactiveBackground": "#d1cbb8", - "lightSelectionForeground": "#002b36", - "lightSelectionInactiveForeground": "#93a1a1", - "lightSelectionInactiveBackground": "#F6F0DE", - "selectionBackground": "#d1cbb8", - "selectionForeground": "#002b36", - "selectionInactiveBackground": "#d1cbb8", - "selectionInactiveForeground": "#002b36", - "sortIconColor": "#586e75", - "stripeColor": "#eee8d5" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#fdf6e3", - "borderColor": "#fdf6e3", - "bottomSeparatorColor": "#F6F0DE", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#C9CCC3", - "foreground": "#586e75", - "focusCellBackground": "#d1cbb8", - "focusCellForeground": "#002b36", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#F6F0DE" + "separatorColor": "second" }, - "text": "#93a1a1", - "textInactiveText": "#93a1a1", - "textText": "#93a1a1", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#eee8d5", - "caretForeground": "#d33682", - "foreground": "#586e75", - "inactiveForeground": "#C9CCC3", - "selectionBackground": "#d1cbb8", - "selectionForeground": "#002b36" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#eee8d5", - "caretForeground": "#d33682", - "foreground": "#586e75", - "inactiveForeground": "#C9CCC3", - "selectionBackground": "#d1cbb8", - "selectionForeground": "#002b36" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#eee8d5", - "caretForeground": "#d33682", - "foreground": "#586e75", - "inactiveForeground": "#C9CCC3", - "selectionBackground": "#d1cbb8", - "selectionForeground": "#002b36" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#eee8d5", - "Button.hoverBackground": "#d1cbb8", - "inactiveBackground": "#fdf6e3", - "infoForeground": "#93a1a1", - "inactiveInfoForeground": "#93a1a1" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#586e75", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#d8d4c4", - "buttonColor": "#586e75", - "disabledText": "#C9CCC3", - "foreground": "#586e75", - "offForeground": "#fdf6e3", - "offBackground": "#fdf6e3", - "onBackground": "#d33682", - "onForeground": "#d33682" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#eee8d5", - "borderHandleColor": "#93a1a1", - "floatingForeground": "#93a1a1", - "foreground": "#586e75" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#fdf6e3", - "Actions.infoForeground": "#93a1a1", - "background": "#EDE8D4", - "borderColor": "#edead9", - "foreground": "#586e75", - "infoForeground": "#93a1a1", - "separatorColor": "#edead9", - "shortcutForeground": "#93a1a1" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#d1cbb8", - "selectedForeground": "#002b36", - "selectedBackground": "#eee8d5" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#fdf6e3", - "borderColor": "#F6F0DE", - "inactiveBackground": "#fdf6e3" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#fdf6e3" + "background": "bg" }, "HeaderTab": { - "borderColor": "#d1cbb8", - "hoverBackground": "#d1cbb8", - "hoverInactiveBackground": "#d1cbb8", - "inactiveUnderlineColor": "#d33682", - "selectedBackground": "#eee8d5", - "selectedInactiveBackground": "#eee8d5", - "underlineColor": "#d33682", - "underlinedTabBackground": "#d1cbb8", - "underlinedTabInactiveBackground": "#F6F0DE", - "underlinedTabForeground": "#002b36", - "underlinedTabInactiveForeground": "#586e75" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#eee8d5", - "foreground": "#93a1a1", - "hash": "#edead9", - "hoverBackground": "#e8dcb6b0", - "hoverInactiveBackground": "#d1cbb8", - "modifiedItemForeground": "#d33682", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#e8dcb6b0", - "selectionForeground": "#002b36", - "selectionInactiveForeground": "#002b36", - "selectionInactiveBackground": "#e8dcb6b0", - "textBackground": "#eee8d5" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#edead9", - "Canvas.background": "#eee8d5", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#fdf6e3", - "foreground": "#586e75" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#edead9", - "background": "#fdf6e3", - "foreground": "#586e75", - "hoverBorderColor": "#d1cbb8" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#edead9", - "hoverBorderColor": "#d1cbb8" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#eee8d5", - "highStroke.foreground": "#586e75", - "Label.foreground": "#93a1a1", - "List.selectionBackground": "#e8dcb6b0", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#edead9", - "Component.foreground": "#586e75", - "ConstraintSetText.foreground": "#93a1a1", - "ConstraintSet.background": "#F6F0DE", - "CSPanel.SelectedFocusBackground": "#e8dcb6", - "CSPanel.SelectedBackground": "#e8dcb6b0", - "cs_FocusText.infoForeground": "#93a1a1", - "CursorTextColor.foreground": "#586e75", - "HoverColor.disabledBackground": "#C9CCC3", - "motionGraph.background": "#fdf6e3", - "Notification.background": "#EDE8D4", - "ourAvg.background": "#F6F0DE", - "ourCS.background": "#F6F0DE", - "ourCS_Border.borderColor": "#edead9", - "ourCS_TextColor.foreground": "#93a1a1", - "ourCS_SelectedFocusBackground.selectionForeground": "#002b36", - "ourCS_SelectedBackground.selectionInactiveBackground": "#d1cbb8", - "ourCS_SelectedBorder.pressedBorderColor": "#d1cbb8", - "ourML_BarColor.separatorColor": "#edead9", - "PrimaryPanel.background": "#eee8d5", - "SecondaryPanel.background": "#fdf6e3", - "SecondaryPanel.header.foreground": "#93a1a1", - "SecondaryPanel.header.background": "#eee8d5", - "timeLine.disabledBorderColor": "#edead9" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#edead9", - "background": "#fdf6e3" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#586e75", + "percent.foreground": "fg", "Placeholder": { - "background": "#fdf6e3", - "borderColor": "#edead9", - "foreground": "#586e75", - "selectedForeground": "#002b36" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#fdf6e3", - "stroke.acceleratorForeground": "#93a1a1" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#EDE8D4", - "errorBorderColor": "#EDE8D4", - "warningBackground": "#EDE8D4", - "warningBorderColor": "#EDE8D4" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#fdf6e3" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#d1cbb8" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#d33682", - "otherIconColor": "#93a1a1", - "remoteBranchIconColor": "#586e75", - "tagIconColor": "#93a1a1" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#d33682", - "bookmarkIconColor": "#002b36", - "closedBranchIconColor": "#C9CCC3", - "localTagIconColor": "#93a1a1", - "mqTagIconColor": "#93a1a1", - "tagIconColor": "#93a1a1", - "tipIconColor": "#93a1a1" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#93a1a1", - "Commit.currentBranchBackground": "#F6F0DE", - "Commit.hoveredBackground": "#e8dcb6b0" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#002b36", - "backgroundBase": "#d1cbb8" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#eee8d5", - "foreground": "#586e75" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#fdf6e3", - "background": "#fdf6e3", - "borderColor": "#fdf6e3", - "captionBackground": "#eee8d5", - "captionForeground": "#586e75", - "Details.background": "#fdf6e3", - "footerBackground": "#eee8d5", - "footerForeground": "#586e75", - "headerBackground": "#fdf6e3", - "headerForeground": "#586e75", - "List.background": "#eee8d5", - "separatorColor": "#edead9", - "SidePanel.background": "#F6F0DE", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#eee8d5", - "actions.selectionBackground": "#d1cbb8", - "background": "#F6F0DE", - "selectionBackground": "#e8dcb6", - "selectionInactiveBackground": "#F6F0DE" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#eee8d5", - "windowBorder": "#edead9", - "windowText": "#93a1a1", - "Window.border": "#edead9" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#eee8d5", - "#6B6B6B": "#93a1a1", - "#A7A7A7": "#fdf6e3", - "#3D6185": "#d33682", - "#466D94": "#d33682", - "#3C3F41": "#fdf6e3", - "#545556": "#C9CCC3", - "#606060": "#C9CCC3", - "#9AA7B0": "#586e75", - "#675133": "#d33682", - "Actions.Blue": "#B58900", - "Actions.Green": "#2AA198", - "Actions.Grey": "#93a1a1", - "Actions.GreyInline": "#93A1A1", - "Actions.GreyInline.Dark": "#586e75", - "Actions.Red": "#268BD2", - "Actions.Yellow": "#657B83", - "Checkbox.Background.Default": "#eee8d5", - "Checkbox.Background.Default.Dark": "#eee8d5", - "Checkbox.Background.Disabled": "#E3DCC9", - "Checkbox.Background.Disabled.Dark": "#E3DCC9", - "Checkbox.Border.Default": "#edead9", - "Checkbox.Border.Default.Dark": "#edead9", - "Checkbox.Border.Disabled": "#C9CCC3", - "Checkbox.Border.Disabled.Dark": "#C9CCC3", - "Checkbox.Focus.Thin.Default": "#d33682", - "Checkbox.Focus.Thin.Default.Dark": "#d33682", - "Checkbox.Focus.Wide": "#d33682", - "Checkbox.Focus.Wide.Dark": "#d33682", - "Checkbox.Foreground.Disabled": "#C9CCC3", - "Checkbox.Foreground.Disabled.Dark": "#C9CCC3", - "Checkbox.Background.Selected": "#d33682", - "Checkbox.Background.Selected.Dark": "#fdf6e3", - "Checkbox.Border.Selected": "#d33682", - "Checkbox.Border.Selected.Dark": "#d33682", - "Checkbox.Foreground.Selected": "#d33682", - "Checkbox.Foreground.Selected.Dark": "#d33682", - "Checkbox.Focus.Thin.Selected": "#586e75", - "Checkbox.Focus.Thin.Selected.Dark": "#586e75", - "Objects.Grey": "#93A1A1", - "Objects.Blue": "#B58900", - "Objects.RedStatus": "#268BD2", - "Objects.Red": "#268BD2", - "Objects.Pink": "#859900", - "Objects.Yellow": "#657B83", - "Objects.Green": "#2AA198", - "Objects.Purple": "#859900", - "Objects.BlackText": "#586e75", - "Objects.YellowDark": "#D33682", - "Objects.GreenAndroid": "#2AA198" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Solarized Light.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Solarized Light.theme.json index 1f6a50d8..011e660d 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Solarized Light.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/Solarized Light.theme.json @@ -2,1004 +2,1089 @@ "name": "Solarized Light", "dark": false, "author": "Mallowigi", + "colors": { + "bg": "#fdf6e3", + "bg30": "#fdf6e330", + "fg": "#586e75", + "text": "#93a1a1", + "selBg": "#e8dcb6", + "selFg": "#002b36", + "activeFg": "#002b36", + "border": "#edead9", + "excl": "#E3DCC9", + "second": "#F6F0DE", + "dis": "#C9CCC3", + "accent": "#d33682", + "accent2": "#d336822", + "accent50": "#d3368250", + "accent70": "#d3368270", + "cs": "#eee8d5", + "button": "#d8d4c4", + "table": "#d1cbb8", + "tree": "#e8dcb6b0", + "hl": "#d1cbb8", + "notif": "#EDE8D4", + "hc": "#fdf6e3", + "white": "#268BD2", + "blue": "#B58900", + "red": "#268BD2", + "yellow": "#657B83", + "green": "#2AA198", + "gray": "#93A1A1", + "purple": "#859900", + "orange": "#D33682" + }, "editorScheme": "colors/Solarized Light.xml", "ui": { "*": { - "acceleratorSelectionForeground": "#93a1a1", - "background": "#fdf6e3", - "borderColor": "#edead9", - "disabledBackground": "#E3DCC9", - "disabledForeground": "#C9CCC3", - "disabledText": "#C9CCC3", - "focusColor": "#d1cbb8", - "focusedBorderColor": "#d33682", - "foreground": "#586e75", - "inactiveBackground": "#E3DCC9", - "inactiveForeground": "#93a1a1", - "infoForeground": "#93a1a1", - "selectionBackground": "#e8dcb6", - "selectionBackgroundInactive": "#F6F0DE", - "selectionForeground": "#002b36", - "selectionInactiveBackground": "#F6F0DE", - "separatorColor": "#edead9" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "borderColor": "border", + "disabledBackground": "excl", + "disabledBorderColor": "button", + "disabledForeground": "dis", + "disabledText": "dis", + "focusColor": "hl", + "focusedBorderColor": "accent", + "foreground": "fg", + "inactiveBackground": "excl", + "inactiveForeground": "text", + "infoForeground": "text", + "selectionBackground": "selBg", + "selectionBackgroundInactive": "second", + "selectionForeground": "selFg", + "selectionInactiveBackground": "second", + "separatorColor": "border", + "lineSeparatorColor": "hl" }, - "activeCaption": "#fdf6e3", + "activeCaption": "bg", "ActionButton": { - "hoverBackground": "#d3368250", - "hoverBorderColor": "#d3368250", - "hoverSeparatorColor": "#d8d4c4", - "focusedBorderColor": "#d3368250", - "pressedBackground": "#d3368250", - "pressedBorderColor": "#d3368250" + "focusedBorderColor": "accent50", + "hoverBackground": "accent50", + "hoverBorderColor": "accent50", + "hoverSeparatorColor": "button", + "pressedBackground": "accent50", + "pressedBorderColor": "accent50" + }, + "AssignedMnemonic": { + "background": "hl", + "borderColor": "selBg", + "foreground": "fg" }, "Autocomplete": { - "selectionBackground": "#e8dcb6" + "selectionBackground": "selBg" }, - "Borders.ContrastBorderColor": "#fdf6e3", - "Borders.color": "#edead9", + "AvailableMnemonic": { + "background": "button", + "borderColor": "button", + "foreground": "fg" + }, + "BigSpinner.background": "bg", + "BookmarkIcon.background": "accent", + "Borders.ContrastBorderColor": "bg", + "Borders.color": "border", "Button": { "arc": 0, - "background": "#fdf6e3", + "background": "bg", "default": { - "endBackground": "#d1cbb8", - "endBorderColor": "#d1cbb8", - "foreground": "#002b36", - "focusColor": "#d33682", - "focusedBorderColor": "#d33682", - "shadowColor": "#d1cbb8", - "startBackground": "#d1cbb8", - "startBorderColor": "#d1cbb8" + "endBackground": "table", + "endBorderColor": "table", + "focusColor": "accent", + "focusedBorderColor": "accent", + "foreground": "activeFg", + "shadowColor": "table", + "startBackground": "table", + "startBorderColor": "table" }, - "disabledBorderColor": "#d8d4c4", - "disabledText": "#C9CCC3", - "endBackground": "#d8d4c4", - "endBorderColor": "#d8d4c4", - "focus": "#d1cbb8", - "focusedBorderColor": "#d33682", - "foreground": "#93a1a1", - "highlight": "#002b36", - "mt.background": "#d8d4c4", - "mt.foreground": "#93a1a1", - "mt.selectedForeground": "#002b36", - "mt.selection.color1": "#d1cbb8", - "mt.selection.color2": "#d1cbb8", - "startBackground": "#d8d4c4", - "startBorderColor": "#d8d4c4", - "shadowColor": "#d8d4c4", - "shadowWidth": 0 + "disabledBorderColor": "button", + "disabledText": "dis", + "endBackground": "button", + "endBorderColor": "button", + "focus": "hl", + "focusedBorderColor": "accent", + "foreground": "text", + "highlight": "selFg", + "mt.background": "button", + "mt.foreground": "text", + "mt.selectedForeground": "selFg", + "mt.selection.color1": "table", + "mt.selection.color2": "table", + "shadowColor": "button", + "shadowWidth": 0, + "startBackground": "button", + "startBorderColor": "button" }, "Canvas": { - "Tooltip.borderColor": "#edead9", - "Tooltip.background": "#EDE8D4" + "Tooltip.background": "notif", + "Tooltip.borderColor": "border" }, "Content": { - "background": "#eee8d5", - "selectionBackground": "#e8dcb6" + "background": "cs", + "selectionBackground": "selBg", + "selectionInactiveBackground": "excl" }, "CheckBox": { - "background": "#fdf6e3", - "disabledText": "#C9CCC3", - "foreground": "#586e75", - "select": "#d33682" + "background": "bg", + "disabledText": "dis", + "foreground": "fg", + "select": "accent" }, "CheckBoxMenuItem": { - "acceleratorForeground": "#93a1a1", - "acceleratorSelectionForeground": "#93a1a1", - "background": "#fdf6e3", - "disabledBackground": "#fdf6e3", - "disabledForeground": "#C9CCC3", - "foreground": "#586e75", - "selectionBackground": "#e8dcb6", - "selectionForeground": "#002b36" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "CodeWithMe": { - "Avatar.foreground": "#586e75", + "Avatar.foreground": "fg", "AccessEnabled": { - "accessDot": "#d33682", - "dropdownBorder": "#F6F0DE", + "accessDot": "accent", + "dropdownBorder": "second", "pillBackground": "$second" } }, "ColorChooser": { - "background": "#fdf6e3", - "foreground": "#586e75", - "swatchesDefaultRecentColor": "#586e75" + "background": "bg", + "foreground": "fg", + "swatchesDefaultRecentColor": "fg" }, - "ComboBoxButton.background": "#d8d4c4", + "ComboBoxButton.background": "button", "ComboBox": { "ArrowButton": { - "background": "#d8d4c4", - "disabledIconColor": "#C9CCC3", - "iconColor": "#586e75", - "nonEditableBackground": "#fdf6e3" + "background": "button", + "disabledIconColor": "dis", + "iconColor": "fg", + "nonEditableBackground": "bg" }, - "background": "#fdf6e3", - "buttonBackground": "#d8d4c4", - "darcula.hoveredArrowButtonForeground": "#d33682", - "disabledForeground": "#C9CCC3", - "foreground": "#586e75", - "modifiedItemForeground": "#d33682", - "nonEditableBackground": "#F6F0DE", + "background": "hc", + "buttonBackground": "button", + "darcula.hoveredArrowButtonForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "modifiedItemForeground": "accent", + "nonEditableBackground": "second", "padding": "5,5,5,5", - "selectionBackground": "#d1cbb8", - "selectionForeground": "#002b36" + "selectionBackground": "table", + "selectionForeground": "activeFg" }, - "ComboPopup.border": "#edead9", + "ComboPopup.border": "border", "CompletionPopup": { - "background": "#F6F0DE", - "foreground": "#586e75", - "infoForeground": "#93a1a1", - "matchForeground": "#d33682", - "matchSelectionForeground": "#d33682", + "background": "second", + "foreground": "fg", + "infoForeground": "text", + "matchForeground": "accent", + "matchSelectionForeground": "accent", "nonFocusedState": "false", - "selectedForeground": "#002b36", - "selectedGrayedForeground": "#002b36", - "selectionGrayForeground": "#002b36", - "selectionInactiveInfoForeground": "#93a1a1", - "selectionInactiveBackground": "#d1cbb8", - "selectionBackground": "#e8dcb6", - "selectionForeground": "#002b36", - "selectionInfoForeground": "#002b36" + "selectedForeground": "selFg", + "selectedGrayedForeground": "selFg", + "selectionBackground": "cs", + "selectionForeground": "selFg", + "selectionGrayForeground": "selFg", + "selectionInactiveBackground": "hl", + "selectionInactiveInfoForeground": "text", + "selectionInfoForeground": "selFg" }, "Component": { "arc": 4, - "borderColor": "#d1cbb8", - "disabledBorderColor": "#d8d4c4", - "focusColor": "#d33682", - "focusedBorderColor": "#d33682", - "hoverIconColor": "#d33682", - "infoForeground": "#93a1a1", - "iconColor": "#586e75" + "borderColor": "hl", + "disabledBorderColor": "button", + "focusColor": "accent", + "focusedBorderColor": "accent", + "hoverIconColor": "accent", + "iconColor": "fg", + "infoForeground": "text" }, - "control": "#fdf6e3", - "controlText": "#93a1a1", + "control": "bg", + "controlText": "text", "Counter": { - "background": "#d33682", - "foreground": "#002b36" + "background": "accent", + "foreground": "selFg" + }, + "CurrentMnemonic": { + "background": "accent", + "borderColor": "accent", + "foreground": "fg" }, "Debugger": { "Variables": { - "collectingDataForeground": "#93a1a1", - "changedValueForeground": "#d33682", - "errorMessageForeground": "#268BD2", - "evaluatingExpressionForeground": "#93a1a1", - "exceptionForeground": "#657B83", - "modifyingValueForeground": "#d33682", - "valueForeground": "#d33682" + "changedValueForeground": "accent", + "collectingDataForeground": "text", + "errorMessageForeground": "red", + "evaluatingExpressionForeground": "text", + "exceptionForeground": "yellow", + "modifyingValueForeground": "accent", + "valueForeground": "accent" } }, "DebuggerTabs": { - "selectedBackground": "#d1cbb8", - "underlinedTabBackground": "#d1cbb8" + "selectedBackground": "hl", + "underlinedTabBackground": "hl" }, "DebuggerPopup": { - "borderColor": "#d1cbb8" + "borderColor": "hl" }, "DefaultTabs": { - "background": "#fdf6e3", - "borderColor": "#fdf6e3", - "hoverBackground": "#d1cbb8", - "hoverColor": "#fdf6e3", - "hoverMaskColor": "#d1cbb8", - "inactiveColoredTabBackground": "#fdf6e3", - "inactiveColoredFileBackground": "#d8d4c4", - "inactiveUnderlineColor": "#d33682", - "inactiveMaskColor": "#fdf6e3", - "underlineColor": "#d33682", - "underlinedTabBackground": "#d1cbb8", - "underlinedTabForeground": "#002b36" + "background": "bg", + "borderColor": "bg", + "hoverBackground": "table", + "hoverColor": "hc", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "button", + "inactiveColoredTabBackground": "bg", + "inactiveMaskColor": "hc", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, - "Desktop.background": "#fdf6e3", - "DialogWrapper.southPanelBackground": "#fdf6e3", - "DialogWrapper.southPanelDivider": "#fdf6e3", + "Desktop.background": "bg", + "DialogWrapper.southPanelBackground": "bg", + "DialogWrapper.southPanelDivider": "bg", "DragAndDrop": { - "areaBackground": "#fdf6e3", - "areaBorderColor": "#fdf6e3", - "areaForeground": "#586e75" + "areaBackground": "bg", + "areaBorderColor": "bg", + "areaForeground": "fg" }, "Editor": { - "background": "#fdf6e3", - "foreground": "#586e75", - "shortcutForeground": "#93a1a1" + "background": "hc", + "foreground": "fg", + "shortcutForeground": "text" }, "EditorPane": { - "background": "#fdf6e3", - "caretForeground": "#d33682", - "foreground": "#586e75", - "inactiveBackground": "#fdf6e3", - "inactiveForeground": "#C9CCC3", - "selectionBackground": "#e8dcb6", - "selectionForeground": "#002b36" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "bg", + "inactiveForeground": "dis", + "selectionBackground": "selBg", + "selectionForeground": "activeFg" }, "EditorTabs": { - "borderColor": "#F6F0DE", - "hoverBackground": "#d1cbb8", - "hoverColor": "#d1cbb8", - "hoverMaskColor": "#d1cbb8", - "inactiveMaskColor": "#fdf6e3", - "inactiveColoredFileBackground": "#fdf6e3", - "inactiveUnderlineColor": "#C9CCC3", - "selectedForeground": "#586e75", - "selectedBackground": "#d1cbb8", - "underlineColor": "#d33682", - "underlinedTabBackground": "#d1cbb8", - "underlinedTabForeground": "#002b36" + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "hoverMaskColor": "hl", + "inactiveColoredFileBackground": "bg", + "inactiveMaskColor": "bg", + "inactiveUnderlineColor": "dis", + "selectedBackground": "table", + "selectedForeground": "fg", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg" }, "EditorGroupsTabs": { - "background": "#fdf6e3", - "borderColor": "#F6F0DE", - "hoverBackground": "#d1cbb8", - "hoverColor": "#d1cbb8", - "inactiveUnderlineColor": "#d33682", - "underlineColor": "#d33682", - "underlinedTabBackground": "#d1cbb8", - "underlinedTabForeground": "#586e75" + "background": "bg", + "borderColor": "second", + "hoverBackground": "hl", + "hoverColor": "hl", + "inactiveUnderlineColor": "accent", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "fg" }, "FileColor": { - "Green": "#387002", "Blue": "#004BA0", - "Yellow": "#E3DCC9", + "Green": "#387002", "Orange": "#B53D00", + "Rose": "#A00037", "Violet": "#4D2C91", - "Rose": "#A00037" + "Yellow": "excl" }, "FlameGraph": { "JVMBackground": "#89DDF7", "JVMFocusBackground": "#82AAFF", - "JVMSearchNotMatchedBackground": "#FF5370", "JVMFocusSearchNotMatchedBackground": "#AB7967", + "JVMSearchNotMatchedBackground": "#FF5370", "nativeBackground": "#FFCB6B", "nativeFocusBackground": "#F78C6C", - "nativeSearchNotMatchedBackground": "#C792EA", - "nativeFocusSearchNotMatchedBackground": "#BB80B3" + "nativeFocusSearchNotMatchedBackground": "#BB80B3", + "nativeSearchNotMatchedBackground": "#C792EA" }, - "Focus.color": "#edead9", + "Focus.color": "border", "FormattedTextField": { - "background": "#fdf6e3", - "caretForeground": "#d33682", - "foreground": "#586e75", - "inactiveBackground": "#d8d4c4", - "inactiveForeground": "#C9CCC3", - "selectionForeground": "#002b36", - "selectionBackground": "#d1cbb8" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveBackground": "button", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" + }, + "GotItTooltip": { + "background": "bg", + "borderColor": "notif", + "endBackground": "button", + "endBorderColor": "button", + "foreground": "fg", + "linkForeground": "accent", + "shortcutForeground": "text", + "startBackground": "button", + "startBorderColor": "button" }, - "GotItTooltip.borderColor": "#EDE8D4", "Group": { - "disabledSeparatorColor": "#edead9", - "separatorColor": "#edead9" + "disabledSeparatorColor": "border", + "separatorColor": "border" }, "GutterTooltip": { - "infoForeground": "#93a1a1", - "lineSeparatorColor": "#fdf6e3" + "infoForeground": "text", + "lineSeparatorColor": "bg" }, "HeaderColor": { - "active": "#fdf6e3", - "inactive": "#eee8d5" + "active": "bg", + "inactive": "cs" }, "HelpTooltip": { - "background": "#fdf6e3", - "borderColor": "#edead9", - "foreground": "#586e75", - "infoForeground": "#93a1a1", - "shortcutForeground": "#93a1a1" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "shortcutForeground": "text" }, - "Hyperlink.linkColor": "#d33682", - "inactiveCaption": "#F6F0DE", - "inactiveCaptionBorder": "#fdf6e3", - "inactiveCaptionText": "#93a1a1", - "info": "#93a1a1", - "infoText": "#93a1a1", + "Hyperlink.linkColor": "accent", "IdeStatusBar.border": "4,4,4,4", - "InformationHint.borderColor": "#edead9", + "InformationHint.borderColor": "border", + "inactiveCaption": "second", + "inactiveCaptionBorder": "bg", + "inactiveCaptionText": "text", + "info": "text", + "infoPanelForeground": "text", + "infoText": "text", "InplaceRefactoringPopup": { - "borderColor": "#fdf6e3" + "background": "bg", + "borderColor": "bg" }, "InternalFrame": { - "activeTitleForeground": "#586e75", - "background": "#fdf6e3", - "inactiveTitleForeground": "#93a1a1" + "activeTitleForeground": "fg", + "background": "bg", + "inactiveTitleForeground": "text" }, "Label": { - "background": "#fdf6e3", - "disabledForeground": "#C9CCC3", - "disabledShadow": "#fdf6e3", - "disabledText": "#C9CCC3", - "foreground": "#586e75", - "infoForeground": "#93a1a1", - "selectedForeground": "#002b36", - "selectedDisabledForeground": "#586e75" + "background": "bg", + "disabledForeground": "dis", + "disabledShadow": "bg", + "disabledText": "dis", + "foreground": "fg", + "infoForeground": "text", + "selectedDisabledForeground": "fg", + "selectedForeground": "activeFg" }, + "link": "accent", "Link": { - "activeForeground": "#d33682", - "hoverForeground": "#d33682", - "pressedForeground": "#d33682", - "secondaryForeground": "#93a1a1", - "visitedForeground": "#d33682" + "activeForeground": "accent", + "hoverForeground": "accent", + "pressedForeground": "accent", + "secondaryForeground": "text", + "visitedForeground": "accent" }, - "link.foreground": "#d33682", + "link.foreground": "accent", "List": { - "background": "#F6F0DE", - "foreground": "#586e75", - "hoverBackground": "#e8dcb6b0", - "hoverInactiveBackground": "#d1cbb8", - "selectionBackground": "#e8dcb6", - "selectionForeground": "#002b36", - "selectionInactiveForeground": "#002b36", - "selectionInactiveBackground": "#e8dcb6b0" + "background": "second", + "foreground": "fg", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "activeFg" }, "material": { - "background": "#fdf6e3", - "branchColor": "#586e75", - "contrast": "#eee8d5", - "foreground": "#586e75", - "mergeCommits": "#d8d4c4", - "primaryColor": "#93a1a1", - "selectionForeground": "#002b36", - "tab.backgroundColor": "#fdf6e3", - "tab.borderColor": "#d33682", - "tagColor": "#93a1a1" + "background": "bg", + "branchColor": "fg", + "contrast": "cs", + "foreground": "fg", + "mergeCommits": "button", + "primaryColor": "text", + "selectionForeground": "selFg", + "tab.backgroundColor": "bg", + "tab.borderColor": "accent", + "tagColor": "text" }, "MemoryIndicator": { - "allocatedBackground": "#F6F0DE", - "usedColor": "#d1cbb8", - "usedBackground": "#d1cbb8" + "allocatedBackground": "second", + "usedBackground": "hl", + "usedColor": "hl" }, "Menu": { - "acceleratorForeground": "#93a1a1", - "acceleratorSelectionForeground": "#002b36", - "background": "#fdf6e3", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "borderColor": "#F6F0DE", - "disabledBackground": "#F6F0DE", - "disabledForeground": "#C9CCC3", - "foreground": "#586e75", - "selectionBackground": "#e8dcb6", - "selectionForeground": "#002b36", - "separatorColor": "#edead9" + "borderColor": "second", + "disabledBackground": "second", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "separatorColor": "border" }, "MenuBar": { - "background": "#fdf6e3", - "borderColor": "#fdf6e3", - "disabledBackground": "#fdf6e3", - "disabledForeground": "#C9CCC3", - "foreground": "#586e75", - "highlight": "#fdf6e3", - "selectionBackground": "#e8dcb6", - "selectionForeground": "#002b36", - "shadow": "#fdf6e3" + "background": "hc", + "borderColor": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "highlight": "bg", + "selectionBackground": "selBg", + "selectionForeground": "selFg", + "shadow": "hc" }, "MenuItem": { - "acceleratorForeground": "#93a1a1", - "acceleratorSelectionForeground": "#002b36", + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "selFg", + "background": "bg", "border": "4,2,4,2", - "background": "#fdf6e3", - "disabledBackground": "#fdf6e3", - "disabledForeground": "#C9CCC3", - "foreground": "#586e75", - "selectionBackground": "#e8dcb6", - "selectionForeground": "#002b36" + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" + }, + "MlModelBinding.Viewer.CodeEditor.background": "bg", + "MnemonicIcon": { + "background": "hl", + "borderColor": "hl", + "foreground": "fg" }, "NavBar": { - "arrowColor": "#586e75", - "borderColor": "#fdf6e3" + "arrowColor": "fg", + "borderColor": "bg" }, "NewClass": { "Panel": { - "background": "#fdf6e3" + "background": "bg" }, "SearchField": { - "background": "#fdf6e3" + "background": "hc" } }, - "NewPSD.warning": "#d33682", + "NewPSD.warning": "accent", "Notification": { - "background": "#EDE8D4", - "borderColor": "#EDE8D4", - "errorBackground": "#EDE8D4", - "errorBorderColor": "#EDE8D4", - "foreground": "#586e75", + "background": "notif", + "borderColor": "notif", + "errorBackground": "notif", + "errorBorderColor": "notif", + "foreground": "fg", "MoreButton": { - "background": "#d8d4c4", - "foreground": "#586e75", - "innerBorderColor": "#d8d4c4" + "background": "button", + "foreground": "fg", + "innerBorderColor": "button" }, "ToolWindow": { - "errorBackground": "#EDE8D4", - "errorBorderColor": "#EDE8D4", - "informativeBackground": "#EDE8D4", - "informativeBorderColor": "#EDE8D4", - "warningBackground": "#EDE8D4", - "warningBorderColor": "#EDE8D4" + "errorBackground": "notif", + "errorBorderColor": "notif", + "informativeBackground": "notif", + "informativeBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" } }, - "OnePixelDivider.background": "#edead9", + "OnePixelDivider.background": "border", "OptionPane": { - "background": "#fdf6e3", - "foreground": "#586e75", - "messageForeground": "#586e75" + "background": "bg", + "foreground": "fg", + "messageForeground": "fg" + }, + "OptionButton": { + "default.separatorColor": "border", + "separatorColor": "border" }, "Outline": { - "color": "#d8d4c4", - "focusedColor": "#d33682", - "disabledColor": "#C9CCC3" + "color": "button", + "disabledColor": "dis", + "focusedColor": "accent" }, "Panel": { - "background": "#fdf6e3", - "foreground": "#586e75" + "background": "bg", + "foreground": "fg", + "mouseShortcutBackground": "bg" }, "ParameterInfo": { - "background": "#F6F0DE", - "borderColor": "#d1cbb8", - "currentOverloadBackground": "#d1cbb8", - "currentParameterForeground": "#d33682", - "disabledForeground": "#C9CCC3", - "foreground": "#586e75", - "infoForeground": "#93a1a1", - "lineSeparatorColor": "#d1cbb8" + "background": "second", + "borderColor": "table", + "currentOverloadBackground": "hl", + "currentParameterForeground": "accent", + "disabledForeground": "dis", + "foreground": "fg", + "infoForeground": "text", + "lineSeparatorColor": "table" }, "PasswordField": { - "background": "#fdf6e3", - "capsLockIconColor": "#d33682", - "caretForeground": "#d33682", - "foreground": "#586e75", - "inactiveForeground": "#C9CCC3", - "selectionBackground": "#d1cbb8", - "selectionForeground": "#002b36" + "background": "hc", + "capsLockIconColor": "accent", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "Plugins": { - "background": "#fdf6e3", - "disabledForeground": "#C9CCC3", - "eapTagBackground": "#d1cbb8", - "hoverBackground": "#e8dcb6b0", - "lightSelectionBackground": "#d1cbb8", - "paidTagBackground": "#d1cbb8", - "selectionBackground": "#e8dcb6", - "tagForeground": "#d33682", - "tagBackground": "#d1cbb8", - "trialTagBackground": "#d1cbb8", + "background": "bg", + "disabledForeground": "dis", + "eapTagBackground": "hl", + "hoverBackground": "tree", + "lightSelectionBackground": "table", + "paidTagBackground": "hl", + "selectionBackground": "selBg", + "tagBackground": "hl", + "tagForeground": "accent", + "trialTagBackground": "hl", "Button": { - "installBackground": "#d8d4c4", - "installBorderColor": "#d8d4c4", - "installForeground": "#586e75", - "installFocusedBackground": "#d1cbb8", - "installFillForeground": "#C9CCC3", - "installFillBackground": "#d8d4c4", - "updateBackground": "#d33682", - "updateBorderColor": "#d8d4c4", - "updateForeground": "#586e75" + "installBackground": "button", + "installBorderColor": "button", + "installFillBackground": "button", + "installFillForeground": "dis", + "installFocusedBackground": "hl", + "installForeground": "fg", + "updateBackground": "accent", + "updateBorderColor": "button", + "updateForeground": "fg" }, "SearchField": { - "background": "#fdf6e3", - "borderColor": "#edead9" + "background": "hc", + "borderColor": "border" }, "SectionHeader": { - "background": "#F6F0DE", - "foreground": "#586e75" + "background": "second", + "foreground": "fg" }, "Tab": { - "hoverBackground": "#d1cbb8", - "selectedForeground": "#002b36", - "selectedBackground": "#d1cbb8" + "hoverBackground": "table", + "selectedBackground": "table", + "selectedForeground": "selFg" } }, "Popup": { "Advertiser": { - "background": "#fdf6e3", - "borderColor": "#fdf6e3", - "foreground": "#d33682" + "background": "bg", + "borderColor": "bg", + "foreground": "accent" }, - "borderColor": "#eee8d5", - "inactiveBorderColor": "#fdf6e3", - "innerBorderColor": "#F6F0DE", + "borderColor": "cs", + "inactiveBorderColor": "bg", + "innerBorderColor": "second", "Header": { - "activeBackground": "#fdf6e3", - "inactiveBackground": "#eee8d5" + "activeBackground": "bg", + "inactiveBackground": "cs" }, "paintBorder": true, - "separatorForeground": "#586e75", - "separatorColor": "#F6F0DE", + "separatorColor": "second", + "separatorForeground": "fg", "Toolbar": { - "Floating.background": "#eee8d5", - "background": "#eee8d5", - "borderColor": "#eee8d5" + "Floating.background": "cs", + "background": "cs", + "borderColor": "cs" } }, "PopupMenu": { - "background": "#fdf6e3", + "background": "bg", "border": "2,0,2,0", - "foreground": "#586e75", - "translucentBackground": "#fdf6e3" + "foreground": "fg", + "translucentBackground": "bg" }, "PopupMenuSeparator.height": 10, "PopupMenuSeparator.stripeIndent": 5, "ProgressBar": { - "background": "#fdf6e3", - "foreground": "#d33682", - "indeterminateEndColor": "#d33682", - "indeterminateStartColor": "#d33682", - "progressColor": "#d33682", - "selectionBackground": "#d1cbb8", - "trackColor": "#d1cbb8" + "background": "bg", + "foreground": "accent", + "indeterminateEndColor": "accent", + "indeterminateStartColor": "accent", + "progressColor": "accent", + "selectionBackground": "hl", + "trackColor": "hl" }, "PsiViewer": { - "referenceHighlightColor": "#d33682" + "referenceHighlightColor": "accent" }, "RadioButton": { - "background": "#fdf6e3", - "disabledText": "#C9CCC3", - "foreground": "#586e75" + "background": "bg", + "disabledText": "dis", + "foreground": "fg" }, "RadioButtonMenuItem": { - "acceleratorForeground": "#93a1a1", - "acceleratorSelectionForeground": "#93a1a1", - "background": "#fdf6e3", - "disabledBackground": "#fdf6e3", - "disabledForeground": "#C9CCC3", - "foreground": "#586e75", - "selectionBackground": "#e8dcb6", - "selectionForeground": "#002b36" + "acceleratorForeground": "text", + "acceleratorSelectionForeground": "text", + "background": "bg", + "disabledBackground": "bg", + "disabledForeground": "dis", + "foreground": "fg", + "selectionBackground": "selBg", + "selectionForeground": "selFg" }, - "ScreenView.borderColor": "#edead9", + "ScreenView.borderColor": "border", "ScrollBar": { - "background": "#fdf6e3", - "hoverThumbBorderColor": "#d33682", - "hoverThumbColor": "#d33682", - "hoverTrackColor": "#fdf6e330", + "background": "bg", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", "Mac": { - "hoverThumbBorderColor": "#d33682", - "hoverThumbColor": "#d33682", - "hoverTrackColor": "#fdf6e330", - "thumbBorderColor": "#d3368270", - "thumbColor": "#d3368270", - "trackColor": "#fdf6e330", + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#d33682", - "hoverThumbColor": "#d33682", - "hoverTrackColor": "#fdf6e330", - "thumbBorderColor": "#d3368270", - "thumbColor": "#d3368270", - "trackColor": "#fdf6e330" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, - "thumb": "#d1cbb8", - "thumbBorderColor": "#d3368270", - "thumbColor": "#d3368270", - "trackColor": "#fdf6e330", + "thumb": "hl", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30", "Transparent": { - "hoverThumbBorderColor": "#d33682", - "hoverThumbColor": "#d33682", - "hoverTrackColor": "#fdf6e330", - "thumbBorderColor": "#d3368270", - "thumbColor": "#d3368270", - "trackColor": "#fdf6e330" + "hoverThumbBorderColor": "accent", + "hoverThumbColor": "accent", + "hoverTrackColor": "bg30", + "thumbBorderColor": "accent70", + "thumbColor": "accent70", + "trackColor": "bg30" } }, "SearchEverywhere": { "Advertiser": { - "background": "#eee8d5", - "foreground": "#93a1a1" + "background": "cs", + "foreground": "text" }, "Header": { - "background": "#fdf6e3" + "background": "bg" }, "List": { - "separatorForeground": "#93a1a1", - "separatorColor": "#edead9" + "separatorForeground": "text", + "separatorColor": "border" }, "SearchField": { - "background": "#fdf6e3", - "borderColor": "#eee8d5", - "infoForeground": "#93a1a1" + "background": "bg", + "borderColor": "cs", + "infoForeground": "text" }, "Tab": { - "active.foreground": "#002b36", - "selectedForeground": "#002b36", - "selectedBackground": "#d1cbb8" + "active.foreground": "activeFg", + "selectedBackground": "hl", + "selectedForeground": "activeFg" } }, "SearchMatch": { - "endBackground": "#d33682", - "startBackground": "#d33682", - "endColor": "#d33682", - "startColor": "#d33682" + "endBackground": "accent", + "endColor": "accent", + "startBackground": "accent", + "startColor": "accent" }, - "SearchField.errorBackground": "#EDE8D4", + "SearchField.errorBackground": "notif", "SearchOption": { - "selectedBackground": "#d1cbb8" + "selectedBackground": "table" }, "SearchResults": { - "Ordinal.File.Foreground": "#93a1a1", - "Repeated.File.Foreground": "#586e75" + "Ordinal.File.Foreground": "text", + "Repeated.File.Foreground": "fg" }, "Separator": { - "background": "#F6F0DE", - "foreground": "#F6F0DE", - "separatorColor": "#F6F0DE" + "background": "second", + "foreground": "second", + "separatorColor": "second" }, + "Settings.Spotlight.borderColor": "accent", "SidePanel": { - "background": "#fdf6e3" + "background": "hc" }, "Slider": { - "background": "#fdf6e3", - "buttonBorderColor": "#d33682", - "buttonColor": "#d33682", - "foreground": "#586e75", + "background": "bg", + "buttonBorderColor": "accent", + "buttonColor": "accent", + "foreground": "fg", "majorTickLength": 6, - "tickColor": "#F6F0DE", - "trackColor": "#d1cbb8", - "trackWidth": 7, - "thumb": "#d33682" + "thumb": "accent", + "tickColor": "second", + "trackColor": "table", + "trackWidth": 7 }, "SpeedSearch": { - "background": "#d1cbb8", - "borderColor": "#edead9", - "foreground": "#586e75", - "errorForeground": "#586e75" + "background": "hl", + "borderColor": "border", + "errorForeground": "fg", + "foreground": "fg" }, + "Space.Review.diffAnchorBackground": "second", "Spinner": { - "background": "#fdf6e3", + "background": "bg", "border": "3,3,3,3", - "foreground": "#586e75", - "selectionForeground": "#002b36" + "foreground": "fg", + "selectionForeground": "activeFg" }, "SplitPane": { - "background": "#fdf6e3", - "highlight": "#fdf6e3" + "background": "bg", + "highlight": "hc" }, - "SplitPaneDivider.draggingColor": "#F6F0DE", + "SplitPaneDivider.draggingColor": "second", + "StateWidget.activeBackground": "button", "StatusBar": { - "borderColor": "#fdf6e3", - "hoverBackground": "#d1cbb8", - "LightEditBackground": "#d1cbb8" + "LightEditBackground": "table", + "borderColor": "bg", + "hoverBackground": "hl" }, "TabbedPane": { - "background": "#fdf6e3", - "contentAreaColor": "#d1cbb8", + "background": "bg", + "contentAreaColor": "hl", "contentBorderInsets": "3,1,1,1", - "darkShadow": "#edead9", - "disabledForeground": "#C9CCC3", - "disabledUnderlineColor": "#C9CCC3", - "focus": "#d1cbb8", - "focusColor": "#d1cbb8", + "darkShadow": "border", + "disabledForeground": "dis", + "disabledUnderlineColor": "dis", + "focus": "table", + "focusColor": "table", "fontSizeOffset": 0, - "foreground": "#586e75", - "highlight": "#edead9", - "hoverColor": "#d1cbb8", + "foreground": "fg", + "highlight": "border", + "hoverColor": "hl", "labelShift": 0, - "selectedForeground": "#002b36", + "selectedForeground": "activeFg", "selectedLabelShift": 0, "selectedTabPadInsets": "0,0,0,0", - "tabsOverlapBorder": true, "tabHeight": 32, "tabInsets": "5,10,5,10", "tabSelectionHeight": 2, - "underlineColor": "#d33682" + "tabsOverlapBorder": true, + "underlineColor": "accent" }, - "TabbedPane.mt.tab.background": "#fdf6e3", + "TabbedPane.mt.tab.background": "hc", "Table": { - "alternativeRowBackground": "#eee8d5", - "background": "#fdf6e3", + "alternativeRowBackground": "cs", + "background": "bg", "cellNoFocusBorder": "10,5,10,5", + "disabledForeground": "dis", + "dropLineColor": "accent", + "dropLineShortColor": "accent", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", "focusCellHighlightBorder": "10,5,10,5", - "disabledForeground": "#C9CCC3", - "dropLineColor": "#d33682", - "dropLineShortColor": "#d33682", - "focusCellBackground": "#d1cbb8", - "focusCellForeground": "#002b36", - "foreground": "#586e75", - "gridColor": "#fdf6e3", - "highlightOuter": "#d1cbb8", - "hoverBackground": "#e8dcb6b0", - "hoverInactiveBackground": "#d1cbb8", - "lightSelectionForeground": "#002b36", - "lightSelectionInactiveForeground": "#93a1a1", - "lightSelectionInactiveBackground": "#F6F0DE", - "selectionBackground": "#d1cbb8", - "selectionForeground": "#002b36", - "selectionInactiveBackground": "#d1cbb8", - "selectionInactiveForeground": "#002b36", - "sortIconColor": "#586e75", - "stripeColor": "#eee8d5" + "foreground": "fg", + "gridColor": "bg", + "highlightOuter": "table", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "lightSelectionForeground": "activeFg", + "lightSelectionInactiveBackground": "second", + "lightSelectionInactiveForeground": "text", + "selectionBackground": "table", + "selectionForeground": "activeFg", + "selectionInactiveBackground": "table", + "selectionInactiveForeground": "selFg", + "sortIconColor": "fg", + "stripeColor": "cs" }, "TableHeader": { - "background": "#fdf6e3", - "borderColor": "#fdf6e3", - "bottomSeparatorColor": "#F6F0DE", + "background": "bg", + "borderColor": "bg", + "bottomSeparatorColor": "second", "cellBorder": "4,0,4,0", - "disabledForeground": "#C9CCC3", - "foreground": "#586e75", - "focusCellBackground": "#d1cbb8", - "focusCellForeground": "#002b36", + "disabledForeground": "dis", + "focusCellBackground": "table", + "focusCellForeground": "activeFg", + "foreground": "fg", "height": 25, - "separatorColor": "#F6F0DE" + "separatorColor": "second" }, - "text": "#93a1a1", - "textInactiveText": "#93a1a1", - "textText": "#93a1a1", + "text": "text", + "textInactiveText": "text", + "textText": "text", "TextArea": { - "background": "#fdf6e3", - "caretForeground": "#d33682", - "foreground": "#586e75", - "inactiveForeground": "#C9CCC3", - "selectionBackground": "#d1cbb8", - "selectionForeground": "#002b36" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextField": { - "background": "#fdf6e3", - "caretForeground": "#d33682", - "foreground": "#586e75", - "inactiveForeground": "#C9CCC3", - "selectionBackground": "#d1cbb8", - "selectionForeground": "#002b36" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TextPane": { - "background": "#fdf6e3", - "caretForeground": "#d33682", - "foreground": "#586e75", - "inactiveForeground": "#C9CCC3", - "selectionBackground": "#d1cbb8", - "selectionForeground": "#002b36" + "background": "hc", + "caretForeground": "accent", + "foreground": "fg", + "inactiveForeground": "dis", + "selectionBackground": "table", + "selectionForeground": "activeFg" }, "TitlePane": { - "background": "#eee8d5", - "Button.hoverBackground": "#d1cbb8", - "inactiveBackground": "#fdf6e3", - "infoForeground": "#93a1a1", - "inactiveInfoForeground": "#93a1a1" + "Button.hoverBackground": "hl", + "background": "cs", + "inactiveBackground": "bg", + "inactiveInfoForeground": "text", + "infoForeground": "text" }, - "TitledBorder.titleColor": "#586e75", + "TitledBorder.titleColor": "fg", "ToggleButton": { - "borderColor": "#d8d4c4", - "buttonColor": "#586e75", - "disabledText": "#C9CCC3", - "foreground": "#586e75", - "offForeground": "#fdf6e3", - "offBackground": "#fdf6e3", - "onBackground": "#d33682", - "onForeground": "#d33682" + "borderColor": "button", + "buttonColor": "fg", + "disabledText": "dis", + "foreground": "fg", + "offBackground": "bg", + "offForeground": "bg", + "onBackground": "accent", + "onForeground": "accent" }, "ToolBar": { - "background": "#fdf6e3", - "borderHandleColor": "#93a1a1", - "floatingForeground": "#93a1a1", - "foreground": "#586e75" + "background": "hc", + "borderHandleColor": "text", + "floatingForeground": "text", + "foreground": "fg" }, "ToolTip": { - "Actions.background": "#fdf6e3", - "Actions.infoForeground": "#93a1a1", - "background": "#EDE8D4", - "borderColor": "#edead9", - "foreground": "#586e75", - "infoForeground": "#93a1a1", - "separatorColor": "#edead9", - "shortcutForeground": "#93a1a1" + "Actions.background": "bg", + "Actions.infoForeground": "text", + "background": "notif", + "borderColor": "border", + "foreground": "fg", + "infoForeground": "text", + "separatorColor": "border", + "shortcutForeground": "text" }, "ToolWindow": { "Button": { - "hoverBackground": "#d1cbb8", - "selectedForeground": "#002b36", - "selectedBackground": "#eee8d5" + "hoverBackground": "table", + "selectedBackground": "cs", + "selectedForeground": "activeFg" }, "Header": { - "background": "#fdf6e3", - "borderColor": "#F6F0DE", - "inactiveBackground": "#fdf6e3" + "background": "bg", + "borderColor": "second", + "inactiveBackground": "bg" }, "HeaderCloseButton": { - "background": "#fdf6e3" + "background": "bg" }, "HeaderTab": { - "borderColor": "#d1cbb8", - "hoverBackground": "#d1cbb8", - "hoverInactiveBackground": "#d1cbb8", - "inactiveUnderlineColor": "#d33682", - "selectedBackground": "#eee8d5", - "selectedInactiveBackground": "#eee8d5", - "underlineColor": "#d33682", - "underlinedTabBackground": "#d1cbb8", - "underlinedTabInactiveBackground": "#F6F0DE", - "underlinedTabForeground": "#002b36", - "underlinedTabInactiveForeground": "#586e75" + "borderColor": "hl", + "hoverBackground": "hl", + "hoverInactiveBackground": "hl", + "inactiveUnderlineColor": "accent", + "selectedBackground": "cs", + "selectedInactiveBackground": "cs", + "underlineColor": "accent", + "underlinedTabBackground": "table", + "underlinedTabForeground": "selFg", + "underlinedTabInactiveBackground": "second", + "underlinedTabInactiveForeground": "fg" } }, "Tree": { - "background": "#fdf6e3", - "foreground": "#93a1a1", - "hash": "#edead9", - "hoverBackground": "#e8dcb6b0", - "hoverInactiveBackground": "#d1cbb8", - "modifiedItemForeground": "#d33682", + "background": "hc", + "foreground": "text", + "hash": "border", + "hoverBackground": "tree", + "hoverInactiveBackground": "table", + "modifiedItemForeground": "accent", "rowHeight": 28, - "selectionBackground": "#e8dcb6b0", - "selectionForeground": "#002b36", - "selectionInactiveForeground": "#002b36", - "selectionInactiveBackground": "#e8dcb6b0", - "textBackground": "#fdf6e3" + "selectionBackground": "tree", + "selectionForeground": "selFg", + "selectionInactiveBackground": "tree", + "selectionInactiveForeground": "selFg", + "textBackground": "hc" }, "Tree.leftChildIndent": 10, "Tree.rightChildIndent": 5, "UIDesigner": { - "Activity.borderColor": "#edead9", - "Canvas.background": "#eee8d5", + "Activity.borderColor": "border", + "Canvas.background": "cs", "ColorPicker": { - "background": "#fdf6e3", - "foreground": "#586e75" + "background": "second", + "foreground": "fg" }, "Component": { - "borderColor": "#edead9", - "background": "#fdf6e3", - "foreground": "#586e75", - "hoverBorderColor": "#d1cbb8" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "hoverBorderColor": "hl" }, "Connector": { - "borderColor": "#edead9", - "hoverBorderColor": "#d1cbb8" + "borderColor": "border", + "hoverBorderColor": "hl" }, - "Canvas.background": "#eee8d5", - "highStroke.foreground": "#586e75", - "Label.foreground": "#93a1a1", - "List.selectionBackground": "#e8dcb6b0", + "Label.foreground": "text", + "List.selectionBackground": "tree", + "highStroke.foreground": "fg", "motion": { - "borderColor": "#edead9", - "Component.foreground": "#586e75", - "ConstraintSetText.foreground": "#93a1a1", - "ConstraintSet.background": "#F6F0DE", - "CSPanel.SelectedFocusBackground": "#e8dcb6", - "CSPanel.SelectedBackground": "#e8dcb6b0", - "cs_FocusText.infoForeground": "#93a1a1", - "CursorTextColor.foreground": "#586e75", - "HoverColor.disabledBackground": "#C9CCC3", - "motionGraph.background": "#fdf6e3", - "Notification.background": "#EDE8D4", - "ourAvg.background": "#F6F0DE", - "ourCS.background": "#F6F0DE", - "ourCS_Border.borderColor": "#edead9", - "ourCS_TextColor.foreground": "#93a1a1", - "ourCS_SelectedFocusBackground.selectionForeground": "#002b36", - "ourCS_SelectedBackground.selectionInactiveBackground": "#d1cbb8", - "ourCS_SelectedBorder.pressedBorderColor": "#d1cbb8", - "ourML_BarColor.separatorColor": "#edead9", - "PrimaryPanel.background": "#eee8d5", - "SecondaryPanel.background": "#fdf6e3", - "SecondaryPanel.header.foreground": "#93a1a1", - "SecondaryPanel.header.background": "#eee8d5", - "timeLine.disabledBorderColor": "#edead9" + "CSPanel.SelectedBackground": "tree", + "CSPanel.SelectedFocusBackground": "selBg", + "Component.foreground": "fg", + "ConstraintSet.background": "second", + "ConstraintSetText.foreground": "text", + "CursorTextColor.foreground": "fg", + "HoverColor.disabledBackground": "dis", + "Notification.background": "notif", + "PrimaryPanel.background": "cs", + "SecondaryPanel.background": "bg", + "SecondaryPanel.header.background": "cs", + "SecondaryPanel.header.foreground": "text", + "borderColor": "border", + "cs_FocusText.infoForeground": "text", + "motionGraph.background": "bg", + "ourAvg.background": "second", + "ourCS.background": "second", + "ourCS_Border.borderColor": "border", + "ourCS_SelectedBackground.selectionInactiveBackground": "table", + "ourCS_SelectedBorder.pressedBorderColor": "hl", + "ourCS_SelectedFocusBackground.selectionForeground": "selFg", + "ourCS_TextColor.foreground": "text", + "ourML_BarColor.separatorColor": "border", + "timeLine.disabledBorderColor": "border" }, "Panel": { - "borderColor": "#edead9", - "background": "#fdf6e3" + "background": "bg", + "borderColor": "border", + "graphLabel": "text", + "graphLines": "hl", + "lines3d": "accent", + "secondaryGraphLines": "border" }, - "percent.foreground": "#586e75", + "percent.foreground": "fg", "Placeholder": { - "background": "#fdf6e3", - "borderColor": "#edead9", - "foreground": "#586e75", - "selectedForeground": "#002b36" + "background": "bg", + "borderColor": "border", + "foreground": "fg", + "selectedForeground": "selFg" }, - "Preview.background": "#fdf6e3", - "stroke.acceleratorForeground": "#93a1a1" + "Preview.background": "bg", + "stroke.acceleratorForeground": "text" }, "ValidationTooltip": { - "errorBackground": "#EDE8D4", - "errorBorderColor": "#EDE8D4", - "warningBackground": "#EDE8D4", - "warningBorderColor": "#EDE8D4" + "errorBackground": "notif", + "errorBorderColor": "notif", + "warningBackground": "notif", + "warningBorderColor": "notif" }, "VersionControl": { "FileHistory.Commit": { - "selectedBranchBackground": "#fdf6e3" + "selectedBranchBackground": "bg" }, "GitCommits": { - "graphColor": "#d1cbb8" + "graphColor": "hl" }, "GitLog": { - "localBranchIconColor": "#d33682", - "otherIconColor": "#93a1a1", - "remoteBranchIconColor": "#586e75", - "tagIconColor": "#93a1a1" + "localBranchIconColor": "accent", + "otherIconColor": "text", + "remoteBranchIconColor": "fg", + "tagIconColor": "text" }, "HgLog": { - "branchIconColor": "#d33682", - "bookmarkIconColor": "#002b36", - "closedBranchIconColor": "#C9CCC3", - "localTagIconColor": "#93a1a1", - "mqTagIconColor": "#93a1a1", - "tagIconColor": "#93a1a1", - "tipIconColor": "#93a1a1" + "bookmarkIconColor": "activeFg", + "branchIconColor": "accent", + "closedBranchIconColor": "dis", + "localTagIconColor": "text", + "mqTagIconColor": "text", + "tagIconColor": "text", + "tipIconColor": "text" }, "Log": { - "Commit.unmatchedForeground": "#93a1a1", - "Commit.currentBranchBackground": "#F6F0DE", - "Commit.hoveredBackground": "#e8dcb6b0" + "Commit.currentBranchBackground": "second", + "Commit.hoveredBackground": "tree", + "Commit.unmatchedForeground": "text" }, "RefLabel": { - "foreground": "#002b36", - "backgroundBase": "#d1cbb8" + "backgroundBase": "hl", + "foreground": "activeFg" } }, "Viewport": { - "background": "#fdf6e3", - "foreground": "#586e75" + "background": "hc", + "foreground": "fg" }, "WelcomeScreen": { - "AssociatedComponent.background": "#fdf6e3", - "background": "#fdf6e3", - "borderColor": "#fdf6e3", - "captionBackground": "#eee8d5", - "captionForeground": "#586e75", - "Details.background": "#fdf6e3", - "footerBackground": "#eee8d5", - "footerForeground": "#586e75", - "headerBackground": "#fdf6e3", - "headerForeground": "#586e75", - "List.background": "#eee8d5", - "separatorColor": "#edead9", - "SidePanel.background": "#F6F0DE", + "AssociatedComponent.background": "bg", + "Details.background": "bg", + "List.background": "cs", + "SidePanel.background": "second", + "background": "bg", + "borderColor": "bg", + "captionBackground": "cs", + "captionForeground": "fg", + "footerBackground": "cs", + "footerForeground": "fg", + "headerBackground": "bg", + "headerForeground": "fg", + "separatorColor": "border", "Projects": { - "actions.background": "#eee8d5", - "actions.selectionBackground": "#d1cbb8", - "background": "#F6F0DE", - "selectionBackground": "#e8dcb6", - "selectionInactiveBackground": "#F6F0DE" + "actions.background": "cs", + "actions.selectionBackground": "hl", + "background": "second", + "selectionBackground": "selBg", + "selectionInactiveBackground": "second" } }, - "window": "#fdf6e3", - "windowBorder": "#edead9", - "windowText": "#93a1a1", - "Window.border": "#edead9" + "Window.border": "border", + "window": "hc", + "windowBorder": "border", + "windowText": "text" }, "icons": { "ColorPalette": { - "#43494A": "#eee8d5", - "#6B6B6B": "#93a1a1", - "#A7A7A7": "#fdf6e3", - "#3D6185": "#d33682", - "#466D94": "#d33682", - "#3C3F41": "#fdf6e3", - "#545556": "#C9CCC3", - "#606060": "#C9CCC3", - "#9AA7B0": "#586e75", - "#675133": "#d33682", - "Actions.Blue": "#B58900", - "Actions.Green": "#2AA198", - "Actions.Grey": "#93a1a1", - "Actions.GreyInline": "#93A1A1", - "Actions.GreyInline.Dark": "#586e75", - "Actions.Red": "#268BD2", - "Actions.Yellow": "#657B83", - "Checkbox.Background.Default": "#eee8d5", - "Checkbox.Background.Default.Dark": "#eee8d5", - "Checkbox.Background.Disabled": "#E3DCC9", - "Checkbox.Background.Disabled.Dark": "#E3DCC9", - "Checkbox.Border.Default": "#edead9", - "Checkbox.Border.Default.Dark": "#edead9", - "Checkbox.Border.Disabled": "#C9CCC3", - "Checkbox.Border.Disabled.Dark": "#C9CCC3", - "Checkbox.Focus.Thin.Default": "#d33682", - "Checkbox.Focus.Thin.Default.Dark": "#d33682", - "Checkbox.Focus.Wide": "#d33682", - "Checkbox.Focus.Wide.Dark": "#d33682", - "Checkbox.Foreground.Disabled": "#C9CCC3", - "Checkbox.Foreground.Disabled.Dark": "#C9CCC3", - "Checkbox.Background.Selected": "#d33682", - "Checkbox.Background.Selected.Dark": "#fdf6e3", - "Checkbox.Border.Selected": "#d33682", - "Checkbox.Border.Selected.Dark": "#d33682", - "Checkbox.Foreground.Selected": "#d33682", - "Checkbox.Foreground.Selected.Dark": "#d33682", - "Checkbox.Focus.Thin.Selected": "#586e75", - "Checkbox.Focus.Thin.Selected.Dark": "#586e75", - "Objects.Grey": "#93A1A1", - "Objects.Blue": "#B58900", - "Objects.RedStatus": "#268BD2", - "Objects.Red": "#268BD2", - "Objects.Pink": "#859900", - "Objects.Yellow": "#657B83", - "Objects.Green": "#2AA198", - "Objects.Purple": "#859900", - "Objects.BlackText": "#586e75", - "Objects.YellowDark": "#D33682", - "Objects.GreenAndroid": "#2AA198" + "#43494A": "cs", + "#6B6B6B": "text", + "#A7A7A7": "bg", + "#3D6185": "accent", + "#466D94": "accent", + "#3C3F41": "bg", + "#545556": "dis", + "#606060": "dis", + "#9AA7B0": "fg", + "#675133": "accent", + "Actions.Blue": "blue", + "Actions.Green": "green", + "Actions.Grey": "text", + "Actions.GreyInline": "gray", + "Actions.GreyInline.Dark": "fg", + "Actions.Red": "red", + "Actions.Yellow": "yellow", + "Checkbox.Background.Default": "cs", + "Checkbox.Background.Default.Dark": "cs", + "Checkbox.Background.Disabled": "excl", + "Checkbox.Background.Disabled.Dark": "excl", + "Checkbox.Background.Selected": "accent", + "Checkbox.Background.Selected.Dark": "hc", + "Checkbox.Border.Default": "hl", + "Checkbox.Border.Default.Dark": "hl", + "Checkbox.Border.Disabled": "dis", + "Checkbox.Border.Disabled.Dark": "dis", + "Checkbox.Border.Selected": "accent", + "Checkbox.Border.Selected.Dark": "hl", + "Checkbox.Focus.Thin.Default": "accent", + "Checkbox.Focus.Thin.Default.Dark": "accent", + "Checkbox.Focus.Thin.Selected": "fg", + "Checkbox.Focus.Thin.Selected.Dark": "fg", + "Checkbox.Focus.Wide": "accent", + "Checkbox.Focus.Wide.Dark": "accent", + "Checkbox.Foreground.Disabled": "dis", + "Checkbox.Foreground.Disabled.Dark": "dis", + "Checkbox.Foreground.Selected": "hc", + "Checkbox.Foreground.Selected.Dark": "accent", + "Objects.BlackText": "fg", + "Objects.Blue": "blue", + "Objects.Green": "green", + "Objects.GreenAndroid": "green", + "Objects.Grey": "gray", + "Objects.Pink": "purple", + "Objects.Purple": "purple", + "Objects.Red": "red", + "Objects.RedStatus": "red", + "Objects.Yellow": "yellow", + "Objects.YellowDark": "orange", + "Tree.iconColor": "text", + "Tree.iconColor.Dark": "text" } } } diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/nord.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/nord.theme.json index 11daeb62..04f3efa2 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/nord.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/nord.theme.json @@ -107,6 +107,13 @@ "selectedBackground": "#3b4252", "underlinedTabBackground": "#3b4252" }, + "DefaultTabs": { + "background": "#2e3440", + "borderColor": "#3b4252", + "hoverBackground": "#3b4252", + "inactiveUnderlineColor": "#616e88", + "underlineColor": "#88c0d0" + }, "DragAndDrop": { "areaBackground": "#2e3440", "areaBorderColor": "#4c566a", @@ -120,13 +127,8 @@ }, "EditorTabs": { "borderColor": "#2e3440", - "hoverMaskColor": "#4c566a", + "hoverBackground": "#4c566a", "inactiveColoredFileBackground": "#2e3440", - "inactiveMaskColor": "#3b4252", - "inactiveUnderlineColor": "#616e88", - "selectedBackground": "#4c566a", - "selectedForeground": "#d8dee9", - "underlineColor": "#88c0d0", "underlinedTabBackground": "#4c566a" }, "FileColor": { @@ -364,16 +366,14 @@ "selectedForeground": "#eceff4" }, "Header": { - "background": "#4c566a" + "background": "#4c566a", + "inactiveBackground": "#434c5e" }, "HeaderCloseButton": { "background": "#4c566a" }, "HeaderTab": { - "hoverBackground": "#81a1c1", - "hoverInactiveBackground": "#4c566a", - "selectedBackground": "#81a1c1", - "selectedInactiveBackground": "#4c566a" + "hoverBackground": "#616e88" } }, "Tree": { diff --git a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/one_dark.theme.json b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/one_dark.theme.json index 06f8a51e..d490747c 100644 --- a/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/one_dark.theme.json +++ b/flatlaf-intellij-themes/src/main/resources/com/formdev/flatlaf/intellijthemes/themes/one_dark.theme.json @@ -7,7 +7,8 @@ "accentColor": "#568AF2", "backgroundColor": "#21252b", "borderColor": "#333841", - "infoForeground": "#7e8491" + "infoForeground": "#7e8491", + "foregroundColor": "#abb2bf" }, "ui": { "*": { @@ -44,6 +45,32 @@ "pressedBorderColor": "#333841" }, + "BookmarkIcon.background": "#d9a343", + + "BookmarkMnemonicAssigned": { + "foreground": "#ffffff", + "background": "#4d78cc", + "borderColor": "#4d78cc" + }, + + "BookmarkMnemonicAvailable": { + "borderColor": "borderColor", + "foreground": "#a0a7b4", + "background": "#3d424b" + }, + + "BookmarkMnemonicCurrent": { + "borderColor": "accentColor", + "foreground": "#a0a7b4", + "background": "#323844" + }, + + "BookmarkMnemonicIcon": { + "foreground": "#a0a7b4", + "background": "#3d424b", + "borderColor": "accentColor" + }, + "Button": { "foreground": "#a0a7b4", "startBackground": "#3d424b", @@ -83,6 +110,8 @@ "ComboPopup.border": "1,1,1,1,2d3137", "CompletionPopup": { + "background": "#3d424b", + "selectionBackground": "#2c313a", "matchForeground": "accentColor" }, @@ -131,8 +160,23 @@ "Rose": "#3d1e2b" }, + "GotItTooltip" : { + "foreground" : "#abb2bf", + "background" : "#3d424b", + "borderColor" : "#53565f", + "linkForeground" : "#6494ed", + "shortcutForeground" : "infoForeground" + }, + "Label": { - "infoForeground": "infoForeground" + "infoForeground": "infoForeground", + "successForeground": "#89ca78" + }, + + "Lesson": { + "Tooltip.background" : "#3d424b", + "Tooltip.spanBackground" : "accentColor", + "Tooltip.foreground" : "#ffffff" }, "Link": { @@ -142,6 +186,11 @@ "visitedForeground": "#6494ed" }, + "List": { + "selectionBackground": "#4d78cc", + "selectionForeground": "#ffffff" + }, + "Notification": { "background": "#3d424b", "borderColor": "#53565f", @@ -180,6 +229,7 @@ }, "Plugins": { + "background": "backgroundColor", "disabledForeground": "#5c6370", "hoverBackground": "#323844", "lightSelectionBackground": "#323844", @@ -212,6 +262,7 @@ "Popup": { "paintBorder": false, + "borderColor": "#21252b", "Toolbar.borderColor": "#3d424b", "Header.activeBackground": "#414855", "Header.inactiveBackground": "#2c313a", @@ -252,6 +303,8 @@ "endBackground": "accentColor" }, + "SidePanel.background": "backgroundColor", + "SpeedSearch": { "foreground": "#abb2bf", "borderColor": "#3d424b", @@ -283,6 +336,8 @@ "lightSelectionInactiveBackground": "#323844" }, + "Tag.background": "#3d424b", + "TextArea": { "background": "#282c34", "selectionBackground": "#414855" @@ -334,6 +389,7 @@ "Tree": { "selectionBackground": "#4d78cc", "modifiedItemForeground": "accentColor", + "selectionInactiveForeground": "foregroundColor", "rowHeight": 20 }, @@ -365,7 +421,8 @@ "selectionInactiveBackground": "#2c313a" }, "separatorColor": "#2c313a", - "SidePanel.background": "#282c34" + "SidePanel.background": "#282c34", + "Details.background": "backgroundColor" } }, diff --git a/flatlaf-jide-oss/build.gradle.kts b/flatlaf-jide-oss/build.gradle.kts index a78027f3..397d8c7a 100644 --- a/flatlaf-jide-oss/build.gradle.kts +++ b/flatlaf-jide-oss/build.gradle.kts @@ -23,7 +23,7 @@ dependencies { implementation( project( ":flatlaf-core" ) ) // use compileOnly() because there are various JIDE libraries available on Maven Central - compileOnly( "com.formdev:jide-oss:3.7.11.1" ) + compileOnly( "com.formdev:jide-oss:3.7.12" ) } java { diff --git a/flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatJidePopupMenuUI.java b/flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatJidePopupMenuUI.java index 989e0e8f..71c6c4f5 100644 --- a/flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatJidePopupMenuUI.java +++ b/flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatJidePopupMenuUI.java @@ -20,7 +20,6 @@ import javax.swing.*; import javax.swing.plaf.ComponentUI; import com.formdev.flatlaf.ui.FlatPopupMenuUI; import com.jidesoft.plaf.LookAndFeelFactory; -import com.jidesoft.plaf.basic.BasicJidePopupMenuUI; /** * Provides the Flat LaF UI delegate for {@link com.jidesoft.swing.JidePopupMenu}. @@ -38,7 +37,9 @@ public class FlatJidePopupMenuUI @Override public Popup getPopup( JPopupMenu popupMenu, int x, int y ) { - Popup popup = BasicJidePopupMenuUI.addScrollPaneIfNecessary( popupMenu, x, y ); - return popup == null ? super.getPopup( popupMenu, x, y ) : popup; + // not using BasicJidePopupMenuUI.addScrollPaneIfNecessary() anymore because + // FlatLaf supports menu scrolling that works better than JIDE menu scrolling + // (support mouse wheel scrolling, scales arrows) + return super.getPopup( popupMenu, x, y ); } } diff --git a/flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatRangeSliderUI.java b/flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatRangeSliderUI.java index a9ea6bf0..855f5cac 100644 --- a/flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatRangeSliderUI.java +++ b/flatlaf-jide-oss/src/main/java/com/formdev/flatlaf/jideoss/ui/FlatRangeSliderUI.java @@ -48,6 +48,7 @@ public class FlatRangeSliderUI protected int trackWidth; protected Dimension thumbSize; protected int focusWidth; + /** @since 2 */ protected float thumbBorderWidth; protected Color trackValueColor; protected Color trackColor; @@ -120,6 +121,7 @@ public class FlatRangeSliderUI trackWidth = UIManager.getInt( "Slider.trackWidth" ); thumbSize = UIManager.getDimension( "Slider.thumbSize" ); focusWidth = FlatUIUtils.getUIInt( "Slider.focusWidth", 4 ); + thumbBorderWidth = FlatUIUtils.getUIFloat( "Slider.thumbBorderWidth", 1 ); trackValueColor = FlatUIUtils.getUIColor( "Slider.trackValueColor", "Slider.thumbColor" ); trackColor = UIManager.getColor( "Slider.trackColor" ); @@ -324,7 +326,7 @@ debug*/ Color focusedColor = FlatUIUtils.deriveColor( this.focusedColor, (foreground != defaultForeground) ? foreground : focusBaseColor ); - FlatSliderUI.paintThumb( g, slider, thumbRect, isRoundThumb(), color, borderColor, focusedColor, focusWidth ); + FlatSliderUI.paintThumb( g, slider, thumbRect, isRoundThumb(), color, borderColor, focusedColor, thumbBorderWidth, focusWidth ); } protected Color getTrackValueColor() { diff --git a/flatlaf-natives/flatlaf-natives-jna/build.gradle.kts b/flatlaf-natives/flatlaf-natives-jna/build.gradle.kts index 92ebbe86..4cade0e8 100644 --- a/flatlaf-natives/flatlaf-natives-jna/build.gradle.kts +++ b/flatlaf-natives/flatlaf-natives-jna/build.gradle.kts @@ -20,6 +20,6 @@ plugins { dependencies { implementation( project( ":flatlaf-core" ) ) - implementation( "net.java.dev.jna:jna:5.7.0" ) - implementation( "net.java.dev.jna:jna-platform:5.7.0" ) + implementation( "net.java.dev.jna:jna:5.10.0" ) + implementation( "net.java.dev.jna:jna-platform:5.10.0" ) } diff --git a/flatlaf-natives/flatlaf-natives-jna/src/main/java/com/formdev/flatlaf/natives/jna/windows/FlatWindowsNativeWindowBorder.java b/flatlaf-natives/flatlaf-natives-jna/src/main/java/com/formdev/flatlaf/natives/jna/windows/FlatWindowsNativeWindowBorder.java index 148c204e..ba23a195 100644 --- a/flatlaf-natives/flatlaf-natives-jna/src/main/java/com/formdev/flatlaf/natives/jna/windows/FlatWindowsNativeWindowBorder.java +++ b/flatlaf-natives/flatlaf-natives-jna/src/main/java/com/formdev/flatlaf/natives/jna/windows/FlatWindowsNativeWindowBorder.java @@ -28,6 +28,8 @@ import java.awt.Point; import java.awt.Rectangle; import java.awt.Window; import java.awt.geom.AffineTransform; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.Collections; import java.util.IdentityHashMap; import java.util.List; @@ -45,8 +47,9 @@ import com.sun.jna.Pointer; import com.sun.jna.Structure; import com.sun.jna.Structure.FieldOrder; import com.sun.jna.platform.win32.Advapi32Util; -import com.sun.jna.platform.win32.BaseTSD; +import com.sun.jna.platform.win32.BaseTSD.LONG_PTR; import com.sun.jna.platform.win32.BaseTSD.ULONG_PTR; +import com.sun.jna.platform.win32.GDI32; import com.sun.jna.platform.win32.Shell32; import com.sun.jna.platform.win32.User32; import com.sun.jna.platform.win32.WTypes.LPWSTR; @@ -74,6 +77,10 @@ import com.sun.jna.win32.W32APIOptions; // https://github.com/oberth/custom-chrome // https://github.com/rossy/borderless-window // +// Windows 11 +// https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/apply-snap-layout-menu +// https://github.com/dotnet/wpf/issues/4825#issuecomment-930442736 +// /** * Native window border support for Windows 10 when using custom decorations. @@ -157,30 +164,24 @@ public class FlatWindowsNativeWindowBorder } @Override - public void setTitleBarHeight( Window window, int titleBarHeight ) { + public void updateTitleBarInfo( Window window, int titleBarHeight, List hitTestSpots, + Rectangle appIconBounds, Rectangle minimizeButtonBounds, Rectangle maximizeButtonBounds, + Rectangle closeButtonBounds ) + { WndProc wndProc = windowsMap.get( window ); if( wndProc == null ) return; wndProc.titleBarHeight = titleBarHeight; - } - - @Override - public void setTitleBarHitTestSpots( Window window, List hitTestSpots ) { - WndProc wndProc = windowsMap.get( window ); - if( wndProc == null ) - return; - wndProc.hitTestSpots = hitTestSpots.toArray( new Rectangle[hitTestSpots.size()] ); + wndProc.appIconBounds = cloneRectange( appIconBounds ); + wndProc.minimizeButtonBounds = cloneRectange( minimizeButtonBounds ); + wndProc.maximizeButtonBounds = cloneRectange( maximizeButtonBounds ); + wndProc.closeButtonBounds = cloneRectange( closeButtonBounds ); } - @Override - public void setTitleBarAppIconBounds( Window window, Rectangle appIconBounds ) { - WndProc wndProc = windowsMap.get( window ); - if( wndProc == null ) - return; - - wndProc.appIconBounds = (appIconBounds != null) ? new Rectangle( appIconBounds ) : null; + private static Rectangle cloneRectange( Rectangle rect ) { + return (rect != null) ? new Rectangle( rect ) : null; } @Override @@ -282,14 +283,29 @@ public class FlatWindowsNativeWindowBorder //---- class WndProc ------------------------------------------------------ private class WndProc - implements WindowProc + implements WindowProc, PropertyChangeListener { private static final int GWLP_WNDPROC = -4; private static final int + WM_MOVE = 0x0003, + WM_ERASEBKGND = 0x0014, WM_NCCALCSIZE = 0x0083, WM_NCHITTEST = 0x0084, + + WM_NCMOUSEMOVE = 0x00A0, + WM_NCLBUTTONDOWN = 0x00A1, + WM_NCLBUTTONUP = 0x00A2, WM_NCRBUTTONUP = 0x00A5, + + WM_MOUSEMOVE= 0x0200, + WM_LBUTTONDOWN = 0x0201, + WM_LBUTTONUP = 0x0202, + + WM_MOVING = 0x0216, + WM_ENTERSIZEMOVE = 0x0231, + WM_EXITSIZEMOVE = 0x0232, + WM_DWMCOLORIZATIONCOLORCHANGED = 0x0320; // WM_SIZE wParam @@ -302,7 +318,10 @@ public class FlatWindowsNativeWindowBorder HTCLIENT = 1, HTCAPTION = 2, HTSYSMENU = 3, - HTTOP = 12; + HTMINBUTTON = 8, + HTMAXBUTTON = 9, + HTTOP = 12, + HTCLOSE = 20; private static final int ABS_AUTOHIDE = 0x0000001; private static final int ABM_GETAUTOHIDEBAREX = 0x0000000b; @@ -324,12 +343,19 @@ public class FlatWindowsNativeWindowBorder private Window window; private final HWND hwnd; - private final BaseTSD.LONG_PTR defaultWndProc; + private final LONG_PTR defaultWndProc; private int wmSizeWParam = -1; + private HBRUSH background; + private boolean isMovingOrSizing; + private boolean isMoving; + // Swing coordinates/values may be scaled on a HiDPI screen private int titleBarHeight; private Rectangle[] hitTestSpots; private Rectangle appIconBounds; + private Rectangle minimizeButtonBounds; + private Rectangle maximizeButtonBounds; + private Rectangle closeButtonBounds; WndProc( Window window ) { this.window = window; @@ -345,9 +371,15 @@ public class FlatWindowsNativeWindowBorder // remove the OS window title bar updateFrame( (window instanceof JFrame) ? ((JFrame)window).getExtendedState() : 0 ); + + // set window background (used when resizing window) + updateWindowBackground(); + window.addPropertyChangeListener( "background", this ); } void uninstall() { + window.removePropertyChangeListener( "background", this ); + // restore original window procedure if( SystemInfo.isX86_64 ) User32Ex.INSTANCE.SetWindowLongPtr( hwnd, GWLP_WNDPROC, defaultWndProc ); @@ -358,6 +390,8 @@ public class FlatWindowsNativeWindowBorder updateFrame( 0 ); // cleanup + if( background != null ) + GDI32.INSTANCE.DeleteObject( background ); window = null; } @@ -382,11 +416,32 @@ public class FlatWindowsNativeWindowBorder wmSizeWParam = -1; } + @Override + public void propertyChange( PropertyChangeEvent evt ) { + updateWindowBackground(); + } + + private void updateWindowBackground() { + Color bg = window.getBackground(); + if( bg != null ) + setWindowBackground( bg.getRed(), bg.getGreen(), bg.getBlue() ); + } + + private void setWindowBackground( int r, int g, int b ) { + // delete old background brush + if( background != null ) + GDI32.INSTANCE.DeleteObject( background ); + + // create new background brush + background = GDI32Ex.INSTANCE.CreateSolidBrush( RGB( r, g, b ) ); + } + /** * NOTE: This method is invoked on the AWT-Windows thread (not the AWT-EventQueue thread). */ @Override public LRESULT callback( HWND hwnd, int uMsg, WPARAM wParam, LPARAM lParam ) { + long wparam = wParam.longValue(); switch( uMsg ) { case WM_NCCALCSIZE: return WmNcCalcSize( hwnd, uMsg, wParam, lParam ); @@ -394,8 +449,29 @@ public class FlatWindowsNativeWindowBorder case WM_NCHITTEST: return WmNcHitTest( hwnd, uMsg, wParam, lParam ); + case WM_NCMOUSEMOVE: + // if mouse is moved over some non-client areas, + // send it also to the client area to allow Swing to process it + // (required for Windows 11 maximize button) + if( wparam == HTMINBUTTON || wparam == HTMAXBUTTON || wparam == HTCLOSE || + wparam == HTCAPTION || wparam == HTSYSMENU ) + sendMessageToClientArea( hwnd, WM_MOUSEMOVE, lParam ); + break; + + case WM_NCLBUTTONDOWN: + case WM_NCLBUTTONUP: + // if left mouse was pressed/released over minimize/maximize/close button, + // send it also to the client area to allow Swing to process it + // (required for Windows 11 maximize button) + if( wparam == HTMINBUTTON || wparam == HTMAXBUTTON || wparam == HTCLOSE ) { + int uClientMsg = (uMsg == WM_NCLBUTTONDOWN) ? WM_LBUTTONDOWN : WM_LBUTTONUP; + sendMessageToClientArea( hwnd, uClientMsg, lParam ); + return new LRESULT( 0 ); + } + break; + case WM_NCRBUTTONUP: - if( wParam.longValue() == HTCAPTION || wParam.longValue() == HTSYSMENU ) + if( wparam == HTCAPTION || wparam == HTSYSMENU ) openSystemMenu( hwnd, GET_X_LPARAM( lParam ), GET_Y_LPARAM( lParam ) ); break; @@ -408,6 +484,29 @@ public class FlatWindowsNativeWindowBorder wParam = new WPARAM( wmSizeWParam ); break; + case WM_ENTERSIZEMOVE: + isMovingOrSizing = true; + break; + + case WM_EXITSIZEMOVE: + isMovingOrSizing = isMoving = false; + break; + + case WM_MOVE: + case WM_MOVING: + if( isMovingOrSizing ) + isMoving = true; + break; + + case WM_ERASEBKGND: + // do not erase background while the user is moving the window, + // otherwise there may be rendering artifacts on HiDPI screens with Java 9+ + // when dragging the window partly offscreen and back into the screen bounds + if( isMoving ) + return new LRESULT( 0 ); + + return WmEraseBkgnd( hwnd, uMsg, wParam, lParam ); + case WM_DESTROY: return WmDestroy( hwnd, uMsg, wParam, lParam ); } @@ -432,11 +531,30 @@ public class FlatWindowsNativeWindowBorder // cleanup windowsMap.remove( window ); + if( background != null ) + GDI32.INSTANCE.DeleteObject( background ); window = null; return lResult; } + /** + * Handle WM_ERASEBKGND + * + * https://docs.microsoft.com/en-us/windows/win32/winmsg/wm-erasebkgnd + */ + LRESULT WmEraseBkgnd( HWND hwnd, int uMsg, WPARAM wParam, LPARAM lParam ) { + if( background == null ) + return new LRESULT( 0 ); + + // fill background + HDC hdc = new HDC( wParam.toPointer() ); + RECT rect = new RECT(); + User32.INSTANCE.GetClientRect( hwnd, rect ); + User32Ex.INSTANCE.FillRect( hdc, rect, background ); + return new LRESULT( 1 ); + } + /** * Handle WM_NCCALCSIZE * @@ -467,7 +585,7 @@ public class FlatWindowsNativeWindowBorder boolean isMaximized = User32Ex.INSTANCE.IsZoomed( hwnd ); if( isMaximized && !isFullscreen() ) { - // When a window is maximized, its size is actually a little bit more + // When a window is maximized, its size is actually a little bit larger // than the monitor's work area. The window is positioned and sized in // such a way that the resize handles are outside of the monitor and // then the window is clipped to the monitor so that the resize handle @@ -519,15 +637,12 @@ public class FlatWindowsNativeWindowBorder if( lResult.longValue() != HTCLIENT ) return lResult; - // get window rectangle needed to convert mouse x/y from screen to window coordinates - RECT rcWindow = new RECT(); - User32.INSTANCE.GetWindowRect( hwnd, rcWindow ); - // get mouse x/y in window coordinates - int x = GET_X_LPARAM( lParam ) - rcWindow.left; - int y = GET_Y_LPARAM( lParam ) - rcWindow.top; + LRESULT xy = screen2windowCoordinates( hwnd, lParam ); + int x = GET_X_LPARAM( xy ); + int y = GET_Y_LPARAM( xy ); - // scale-down mouse x/y + // scale-down mouse x/y because Swing coordinates/values may be scaled on a HiDPI screen Point pt = scaleDown( x, y ); int sx = pt.x; int sy = pt.y; @@ -535,9 +650,26 @@ public class FlatWindowsNativeWindowBorder // return HTSYSMENU if mouse is over application icon // - left-click on HTSYSMENU area shows system menu // - double-left-click sends WM_CLOSE - if( appIconBounds != null && appIconBounds.contains( sx, sy ) ) + if( contains( appIconBounds, sx, sy ) ) return new LRESULT( HTSYSMENU ); + // return HTMINBUTTON if mouse is over minimize button + // - hovering mouse over HTMINBUTTON area shows tooltip on Windows 10/11 + if( contains( minimizeButtonBounds, sx, sy ) ) + return new LRESULT( HTMINBUTTON ); + + // return HTMAXBUTTON if mouse is over maximize/restore button + // - hovering mouse over HTMAXBUTTON area shows tooltip on Windows 10 + // - hovering mouse over HTMAXBUTTON area shows snap layouts menu on Windows 11 + // https://docs.microsoft.com/en-us/windows/apps/desktop/modernize/apply-snap-layout-menu + if( contains( maximizeButtonBounds, sx, sy ) ) + return new LRESULT( HTMAXBUTTON ); + + // return HTCLOSE if mouse is over close button + // - hovering mouse over HTCLOSE area shows tooltip on Windows 10/11 + if( contains( closeButtonBounds, sx, sy ) ) + return new LRESULT( HTCLOSE ); + int resizeBorderHeight = getResizeHandleHeight(); boolean isOnResizeBorder = (y < resizeBorderHeight) && (User32.INSTANCE.GetWindowLong( hwnd, GWL_STYLE ) & WS_THICKFRAME) != 0; @@ -557,6 +689,25 @@ public class FlatWindowsNativeWindowBorder return new LRESULT( isOnResizeBorder ? HTTOP : HTCLIENT ); } + private boolean contains( Rectangle rect, int x, int y ) { + return (rect != null && rect.contains( x, y ) ); + } + + /** + * Converts screen coordinates to window coordinates. + */ + private LRESULT screen2windowCoordinates( HWND hwnd, LPARAM lParam ) { + // get window rectangle needed to convert mouse x/y from screen to window coordinates + RECT rcWindow = new RECT(); + User32.INSTANCE.GetWindowRect( hwnd, rcWindow ); + + // get mouse x/y in window coordinates + int x = GET_X_LPARAM( lParam ) - rcWindow.left; + int y = GET_Y_LPARAM( lParam ) - rcWindow.top; + + return new LRESULT( MAKELONG( x, y ) ); + } + /** * Returns the height of the little space at the top of the window used to * resize the window. @@ -623,7 +774,7 @@ public class FlatWindowsNativeWindowBorder * * https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-nchittest#remarks */ - private int GET_X_LPARAM( LPARAM lParam ) { + private int GET_X_LPARAM( LONG_PTR lParam ) { return (short) (lParam.longValue() & 0xffff); } @@ -633,10 +784,32 @@ public class FlatWindowsNativeWindowBorder * * https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-nchittest#remarks */ - private int GET_Y_LPARAM( LPARAM lParam ) { + private int GET_Y_LPARAM( LONG_PTR lParam ) { return (short) ((lParam.longValue() >> 16) & 0xffff); } + /** + * Same implementation as MAKELONG(wLow, wHigh) macro in windef.h. + */ + private long MAKELONG( int low, int high ) { + return (low & 0xffff) | ((high & 0xffff) << 16); + } + + /** + * Same implementation as RGB(r,g,b) macro in wingdi.h. + */ + private DWORD RGB( int r, int g, int b ) { + return new DWORD( (r & 0xff) | ((g & 0xff) << 8) | ((b & 0xff) << 16) ); + } + + private void sendMessageToClientArea( HWND hwnd, int uMsg, LPARAM lParam ) { + // get mouse x/y in window coordinates + LRESULT xy = screen2windowCoordinates( hwnd, lParam ); + + // send message + User32.INSTANCE.SendMessage( hwnd, uMsg, new WPARAM(), new LPARAM( xy.longValue() ) ); + } + /** * Opens the window's system menu. * The system menu is the menu that opens when the user presses Alt+Space or @@ -690,6 +863,8 @@ public class FlatWindowsNativeWindowBorder LONG_PTR SetWindowLong( HWND hWnd, int nIndex, LONG_PTR wndProc ); LRESULT CallWindowProc( LONG_PTR lpPrevWndFunc, HWND hWnd, int uMsg, WPARAM wParam, LPARAM lParam ); + int FillRect( HDC hDC, RECT lprc, HBRUSH hbr ); + int GetDpiForWindow( HWND hwnd ); int GetSystemMetricsForDpi( int nIndex, int dpi ); @@ -702,6 +877,16 @@ public class FlatWindowsNativeWindowBorder BOOL TrackPopupMenu( HMENU hMenu, int uFlags, int x, int y, int nReserved, HWND hWnd, RECT prcRect ); } + //---- interface GDI32Ex -------------------------------------------------- + + private interface GDI32Ex + extends GDI32 + { + GDI32Ex INSTANCE = Native.load( "gdi32", GDI32Ex.class, W32APIOptions.DEFAULT_OPTIONS ); + + HBRUSH CreateSolidBrush( DWORD color ); + } + //---- class NCCALCSIZE_PARAMS -------------------------------------------- @FieldOrder( { "rgrc" } ) diff --git a/flatlaf-natives/flatlaf-natives-windows/build.gradle.kts b/flatlaf-natives/flatlaf-natives-windows/build.gradle.kts index 0dfa7b08..442f5c7c 100644 --- a/flatlaf-natives/flatlaf-natives-windows/build.gradle.kts +++ b/flatlaf-natives/flatlaf-natives-windows/build.gradle.kts @@ -54,8 +54,8 @@ library { compilerArgs.addAll( toolChain.map { when( it ) { - is Gcc, is Clang -> listOf( "-O2" ) - is VisualCpp -> listOf( "/O2", "/Zl", "/GS-" ) + is Gcc, is Clang -> listOf( "-O2", "-DUNICODE" ) + is VisualCpp -> listOf( "/O2", "/Zl", "/GS-", "/DUNICODE" ) else -> emptyList() } } ) @@ -73,8 +73,8 @@ library { linkerArgs.addAll( toolChain.map { when( it ) { - is Gcc, is Clang -> listOf( "-l${jawt}", "-lUser32", "-lshell32", "-lAdvAPI32", "-lKernel32" ) - is VisualCpp -> listOf( "${jawt}.lib", "User32.lib", "shell32.lib", "AdvAPI32.lib", "Kernel32.lib", "/NODEFAULTLIB" ) + is Gcc, is Clang -> listOf( "-l${jawt}", "-lUser32", "-lGdi32", "-lshell32", "-lAdvAPI32", "-lKernel32" ) + is VisualCpp -> listOf( "${jawt}.lib", "User32.lib", "Gdi32.lib", "shell32.lib", "AdvAPI32.lib", "Kernel32.lib", "/NODEFAULTLIB" ) else -> emptyList() } } ) diff --git a/flatlaf-natives/flatlaf-natives-windows/src/main/cpp/FlatWndProc.cpp b/flatlaf-natives/flatlaf-natives-windows/src/main/cpp/FlatWndProc.cpp index 5708b1a0..b2f72ce1 100644 --- a/flatlaf-natives/flatlaf-natives-windows/src/main/cpp/FlatWndProc.cpp +++ b/flatlaf-natives/flatlaf-natives-windows/src/main/cpp/FlatWndProc.cpp @@ -52,6 +52,13 @@ JNIEXPORT void JNICALL Java_com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder FlatWndProc::updateFrame( reinterpret_cast( hwnd ), state ); } +extern "C" +JNIEXPORT void JNICALL Java_com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_00024WndProc_setWindowBackground + ( JNIEnv* env, jobject obj, jlong hwnd, jint r, jint g, jint b ) +{ + FlatWndProc::setWindowBackground( reinterpret_cast( hwnd ), r, g, b ); +} + extern "C" JNIEXPORT void JNICALL Java_com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_00024WndProc_showWindow ( JNIEnv* env, jobject obj, jlong hwnd, jint cmd ) @@ -80,6 +87,9 @@ FlatWndProc::FlatWndProc() { hwnd = NULL; defaultWndProc = NULL; wmSizeWParam = -1; + background = NULL; + isMovingOrSizing = false; + isMoving = false; } HWND FlatWndProc::install( JNIEnv *env, jobject obj, jobject window ) { @@ -128,6 +138,8 @@ void FlatWndProc::uninstall( JNIEnv *env, jobject obj, HWND hwnd ) { // cleanup env->DeleteGlobalRef( fwp->obj ); + if( fwp->background != NULL ) + ::DeleteObject( fwp->background ); delete fwp; } @@ -174,8 +186,23 @@ void FlatWndProc::updateFrame( HWND hwnd, int state ) { fwp->wmSizeWParam = -1; } +void FlatWndProc::setWindowBackground( HWND hwnd, int r, int g, int b ) { + FlatWndProc* fwp = (FlatWndProc*) hwndMap->get( hwnd ); + if( fwp == NULL ) + return; + + // delete old background brush + if( fwp->background != NULL ) + ::DeleteObject( fwp->background ); + + // create new background brush + fwp->background = ::CreateSolidBrush( RGB( r, g, b ) ); +} + LRESULT CALLBACK FlatWndProc::StaticWindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { FlatWndProc* fwp = (FlatWndProc*) hwndMap->get( hwnd ); + if( fwp == NULL ) + return 0; return fwp->WindowProc( hwnd, uMsg, wParam, lParam ); } @@ -190,6 +217,27 @@ LRESULT CALLBACK FlatWndProc::WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, L case WM_NCHITTEST: return WmNcHitTest( hwnd, uMsg, wParam, lParam ); + case WM_NCMOUSEMOVE: + // if mouse is moved over some non-client areas, + // send it also to the client area to allow Swing to process it + // (required for Windows 11 maximize button) + if( wParam == HTMINBUTTON || wParam == HTMAXBUTTON || wParam == HTCLOSE || + wParam == HTCAPTION || wParam == HTSYSMENU ) + sendMessageToClientArea( hwnd, WM_MOUSEMOVE, lParam ); + break; + + case WM_NCLBUTTONDOWN: + case WM_NCLBUTTONUP: + // if left mouse was pressed/released over minimize/maximize/close button, + // send it also to the client area to allow Swing to process it + // (required for Windows 11 maximize button) + if( wParam == HTMINBUTTON || wParam == HTMAXBUTTON || wParam == HTCLOSE ) { + int uClientMsg = (uMsg == WM_NCLBUTTONDOWN) ? WM_LBUTTONDOWN : WM_LBUTTONUP; + sendMessageToClientArea( hwnd, uClientMsg, lParam ); + return 0; + } + break; + case WM_NCRBUTTONUP: if( wParam == HTCAPTION || wParam == HTSYSMENU ) openSystemMenu( hwnd, GET_X_LPARAM( lParam ), GET_Y_LPARAM( lParam ) ); @@ -204,12 +252,36 @@ LRESULT CALLBACK FlatWndProc::WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, L wParam = wmSizeWParam; break; + case WM_ENTERSIZEMOVE: + isMovingOrSizing = true; + break; + + case WM_EXITSIZEMOVE: + isMovingOrSizing = isMoving = false; + break; + + case WM_MOVE: + case WM_MOVING: + if( isMovingOrSizing ) + isMoving = true; + break; + + case WM_ERASEBKGND: + // do not erase background while the user is moving the window, + // otherwise there may be rendering artifacts on HiDPI screens with Java 9+ + // when dragging the window partly offscreen and back into the screen bounds + if( isMoving ) + return FALSE; + + return WmEraseBkgnd( hwnd, uMsg, wParam, lParam ); + case WM_DESTROY: return WmDestroy( hwnd, uMsg, wParam, lParam ); } return ::CallWindowProc( defaultWndProc, hwnd, uMsg, wParam, lParam ); } + /** * Handle WM_DESTROY * @@ -223,6 +295,8 @@ LRESULT FlatWndProc::WmDestroy( HWND hwnd, int uMsg, WPARAM wParam, LPARAM lPara // cleanup getEnv()->DeleteGlobalRef( obj ); + if( background != NULL ) + ::DeleteObject( background ); hwndMap->remove( hwnd ); delete this; @@ -230,6 +304,23 @@ LRESULT FlatWndProc::WmDestroy( HWND hwnd, int uMsg, WPARAM wParam, LPARAM lPara return ::CallWindowProc( defaultWndProc2, hwnd, uMsg, wParam, lParam ); } +/** + * Handle WM_ERASEBKGND + * + * https://docs.microsoft.com/en-us/windows/win32/winmsg/wm-erasebkgnd + */ +LRESULT FlatWndProc::WmEraseBkgnd( HWND hwnd, int uMsg, WPARAM wParam, LPARAM lParam ) { + if( background == NULL ) + return FALSE; + + // fill background + HDC hdc = (HDC) wParam; + RECT rect; + ::GetClientRect( hwnd, &rect ); + ::FillRect( hdc, &rect, background ); + return TRUE; +} + /** * Handle WM_NCCALCSIZE * @@ -257,7 +348,7 @@ LRESULT FlatWndProc::WmNcCalcSize( HWND hwnd, int uMsg, WPARAM wParam, LPARAM lP bool isMaximized = ::IsZoomed( hwnd ); if( isMaximized && !isFullscreen() ) { - // When a window is maximized, its size is actually a little bit more + // When a window is maximized, its size is actually a little bit larger // than the monitor's work area. The window is positioned and sized in // such a way that the resize handles are outside of the monitor and // then the window is clipped to the monitor so that the resize handle @@ -306,6 +397,22 @@ LRESULT FlatWndProc::WmNcHitTest( HWND hwnd, int uMsg, WPARAM wParam, LPARAM lPa if( lResult != HTCLIENT ) return lResult; + // get mouse x/y in window coordinates + LRESULT xy = screen2windowCoordinates( hwnd, lParam ); + int x = GET_X_LPARAM( xy ); + int y = GET_Y_LPARAM( xy ); + + int resizeBorderHeight = getResizeHandleHeight(); + bool isOnResizeBorder = (y < resizeBorderHeight) && + (::GetWindowLong( hwnd, GWL_STYLE ) & WS_THICKFRAME) != 0; + + return onNcHitTest( x, y, isOnResizeBorder ); +} + +/** + * Converts screen coordinates to window coordinates. + */ +LRESULT FlatWndProc::screen2windowCoordinates( HWND hwnd, LPARAM lParam ) { // get window rectangle needed to convert mouse x/y from screen to window coordinates RECT rcWindow; ::GetWindowRect( hwnd, &rcWindow ); @@ -314,11 +421,7 @@ LRESULT FlatWndProc::WmNcHitTest( HWND hwnd, int uMsg, WPARAM wParam, LPARAM lPa int x = GET_X_LPARAM( lParam ) - rcWindow.left; int y = GET_Y_LPARAM( lParam ) - rcWindow.top; - int resizeBorderHeight = getResizeHandleHeight(); - bool isOnResizeBorder = (y < resizeBorderHeight) && - (::GetWindowLong( hwnd, GWL_STYLE ) & WS_THICKFRAME) != 0; - - return onNcHitTest( x, y, isOnResizeBorder ); + return MAKELONG( x, y ); } /** @@ -381,6 +484,14 @@ JNIEnv* FlatWndProc::getEnv() { return env; } +void FlatWndProc::sendMessageToClientArea( HWND hwnd, int uMsg, LPARAM lParam ) { + // get mouse x/y in window coordinates + LRESULT xy = screen2windowCoordinates( hwnd, lParam ); + + // send message + ::SendMessage( hwnd, uMsg, 0, xy ); +} + /** * Opens the window's system menu. * The system menu is the menu that opens when the user presses Alt+Space or diff --git a/flatlaf-natives/flatlaf-natives-windows/src/main/cpp/FlatWndProc.h b/flatlaf-natives/flatlaf-natives-windows/src/main/cpp/FlatWndProc.h index 52d68789..768b7779 100644 --- a/flatlaf-natives/flatlaf-natives-windows/src/main/cpp/FlatWndProc.h +++ b/flatlaf-natives/flatlaf-natives-windows/src/main/cpp/FlatWndProc.h @@ -26,6 +26,7 @@ public: static HWND install( JNIEnv *env, jobject obj, jobject window ); static void uninstall( JNIEnv *env, jobject obj, HWND hwnd ); static void updateFrame( HWND hwnd, int state ); + static void setWindowBackground( HWND hwnd, int r, int g, int b ); private: static int initialized; @@ -41,6 +42,9 @@ private: HWND hwnd; WNDPROC defaultWndProc; int wmSizeWParam; + HBRUSH background; + bool isMovingOrSizing; + bool isMoving; FlatWndProc(); static void initIDs( JNIEnv *env, jobject obj ); @@ -48,9 +52,11 @@ private: static LRESULT CALLBACK StaticWindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); LRESULT WmDestroy( HWND hwnd, int uMsg, WPARAM wParam, LPARAM lParam ); + LRESULT WmEraseBkgnd( HWND hwnd, int uMsg, WPARAM wParam, LPARAM lParam ); LRESULT WmNcCalcSize( HWND hwnd, int uMsg, WPARAM wParam, LPARAM lParam ); LRESULT WmNcHitTest( HWND hwnd, int uMsg, WPARAM wParam, LPARAM lParam ); + LRESULT screen2windowCoordinates( HWND hwnd, LPARAM lParam ); int getResizeHandleHeight(); bool hasAutohideTaskbar( UINT edge, RECT rcMonitor ); BOOL isFullscreen(); @@ -58,6 +64,7 @@ private: void fireStateChangedLaterOnce(); JNIEnv* getEnv(); + void sendMessageToClientArea( HWND hwnd, int uMsg, LPARAM lParam ); void openSystemMenu( HWND hwnd, int x, int y ); void setMenuItemState( HMENU systemMenu, int item, bool enabled ); diff --git a/flatlaf-natives/flatlaf-natives-windows/src/main/headers/com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc.h b/flatlaf-natives/flatlaf-natives-windows/src/main/headers/com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc.h index 7e586697..baf58f83 100644 --- a/flatlaf-natives/flatlaf-natives-windows/src/main/headers/com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc.h +++ b/flatlaf-natives/flatlaf-natives-windows/src/main/headers/com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc.h @@ -13,8 +13,14 @@ extern "C" { #define com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc_HTCAPTION 2L #undef com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc_HTSYSMENU #define com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc_HTSYSMENU 3L +#undef com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc_HTMINBUTTON +#define com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc_HTMINBUTTON 8L +#undef com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc_HTMAXBUTTON +#define com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc_HTMAXBUTTON 9L #undef com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc_HTTOP #define com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc_HTTOP 12L +#undef com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc_HTCLOSE +#define com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc_HTCLOSE 20L /* * Class: com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc * Method: installImpl @@ -39,6 +45,14 @@ JNIEXPORT void JNICALL Java_com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder JNIEXPORT void JNICALL Java_com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_00024WndProc_updateFrame (JNIEnv *, jobject, jlong, jint); +/* + * Class: com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc + * Method: setWindowBackground + * Signature: (JIII)V + */ +JNIEXPORT void JNICALL Java_com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_00024WndProc_setWindowBackground + (JNIEnv *, jobject, jlong, jint, jint, jint); + /* * Class: com_formdev_flatlaf_ui_FlatWindowsNativeWindowBorder_WndProc * Method: showWindow diff --git a/flatlaf-swingx/README.md b/flatlaf-swingx/README.md index 0f896fa1..b1b02e77 100644 --- a/flatlaf-swingx/README.md +++ b/flatlaf-swingx/README.md @@ -4,7 +4,7 @@ FlatLaf addon for SwingX This addon for FlatLaf adds support for **some** widely used SwingX components. Many SwingX components that do not use UI delegates (e.g. `JXButton`, `JXLabel`, -`JXList`, etc) work with FlatLaf without adaptation. +`JXList`, `JXStatusBar`, etc) work with FlatLaf without adaptation. Following SwingX components, which use UI delegates, are currently supported by this addon: diff --git a/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/icons/FlatColumnControlIcon.java b/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/icons/FlatColumnControlIcon.java new file mode 100644 index 00000000..7b3e2f3e --- /dev/null +++ b/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/icons/FlatColumnControlIcon.java @@ -0,0 +1,68 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.swingx.icons; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Graphics2D; +import java.awt.geom.Area; +import java.awt.geom.Path2D; +import java.awt.geom.Rectangle2D; +import javax.swing.UIManager; +import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.icon.ColumnControlIcon; +import com.formdev.flatlaf.icons.FlatAbstractIcon; +import com.formdev.flatlaf.ui.FlatUIUtils; + +/** + * Column control icon for {@link JXTable}. + * Replaces {@link ColumnControlIcon}. + * + * @author Karl Tauber + */ +public class FlatColumnControlIcon + extends FlatAbstractIcon +{ + protected Color iconColor = UIManager.getColor( "ColumnControlButton.iconColor" ); + + public FlatColumnControlIcon() { + super( 10, 10, null ); + } + + @Override + protected void paintIcon( Component c, Graphics2D g ) { + g.setColor( iconColor ); + + // table + Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD ); + path.append( new Rectangle2D.Float( 1, 0, 8, 8 ), false ); // table outline + path.append( new Rectangle2D.Float( 2, 1, 2, 1 ), false ); // subtract top left + path.append( new Rectangle2D.Float( 5, 1, 3, 1 ), false ); // subtract top right + path.append( new Rectangle2D.Float( 2, 3, 2, 4 ), false ); // subtract bottom left + path.append( new Rectangle2D.Float( 5, 3, 3, 4 ), false ); // subtract bottom right + + // subtract area for arrow from table + Area area = new Area( path ); + area.subtract( new Area( new Rectangle2D.Float( 3, 5, 7, 5 ) ) ); + + // paint table + g.fill( area ); + + // paint triangle arrow + g.fill( FlatUIUtils.createPath( 3,6, 6.5,10, 10,6 ) ); + } +} diff --git a/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/ui/FlatTaskPaneUI.java b/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/ui/FlatTaskPaneUI.java index f336a370..6fc0f7c0 100644 --- a/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/ui/FlatTaskPaneUI.java +++ b/flatlaf-swingx/src/main/java/com/formdev/flatlaf/swingx/ui/FlatTaskPaneUI.java @@ -217,8 +217,8 @@ public class FlatTaskPaneUI Graphics2D g2 = (Graphics2D) g; // scale chevron size - float cw = scale( 6f ); - float ch = scale( 3f ); + float cw = scale( 7f ); + float ch = scale( 3.5f ); // create arrow shape int direction = group.isCollapsed() ? SwingConstants.SOUTH : SwingConstants.NORTH; @@ -237,9 +237,9 @@ public class FlatTaskPaneUI // paint g2.translate( cx, cy ); - g2.draw( arrowShape ); + FlatUIUtils.drawShapePure( g2, arrowShape ); g2.translate( 0, offset ); - g2.draw( arrowShape ); + FlatUIUtils.drawShapePure( g2, arrowShape ); g2.translate( -cx, -(cy + offset) ); } diff --git a/flatlaf-swingx/src/main/module-info/module-info.java b/flatlaf-swingx/src/main/module-info/module-info.java index 36afe50d..6e3ffc4f 100644 --- a/flatlaf-swingx/src/main/module-info/module-info.java +++ b/flatlaf-swingx/src/main/module-info/module-info.java @@ -23,6 +23,7 @@ module com.formdev.flatlaf.swingx { requires com.formdev.flatlaf; exports com.formdev.flatlaf.swingx; + exports com.formdev.flatlaf.swingx.icons; exports com.formdev.flatlaf.swingx.ui; // this allows com.formdev.flatlaf.FlatDefaultsAddon to read .properties files diff --git a/flatlaf-swingx/src/main/resources/com/formdev/flatlaf/swingx/FlatDarkLaf.properties b/flatlaf-swingx/src/main/resources/com/formdev/flatlaf/swingx/FlatDarkLaf.properties index 7ce6a467..c4243b72 100644 --- a/flatlaf-swingx/src/main/resources/com/formdev/flatlaf/swingx/FlatDarkLaf.properties +++ b/flatlaf-swingx/src/main/resources/com/formdev/flatlaf/swingx/FlatDarkLaf.properties @@ -20,6 +20,11 @@ JXBusyLabel.baseColor = #777 JXBusyLabel.highlightColor = #e0e0e0 +#---- ColumnControlButton ---- + +ColumnControlButton.iconColor = shade(@foreground,10%) + + #---- Header ---- JXHeader.background = @background @@ -28,19 +33,19 @@ JXHeader.startBackground = #4c5052 #---- HighlighterFactory ---- -UIColorHighlighter.stripingBackground = lighten(@textComponentBackground,5%) +UIColorHighlighter.stripingBackground = lighten(@componentBackground,5%) #---- Hyperlink ---- -Hyperlink.linkColor = #589df6 +Hyperlink.linkColor = $Component.linkColor Hyperlink.visitedColor = $Hyperlink.linkColor -Hyperlink.disabledText = @disabledText +Hyperlink.disabledText = @disabledForeground #---- MonthView ---- -JXMonthView.background = @textComponentBackground +JXMonthView.background = @componentBackground JXMonthView.monthStringBackground = #4c5052 JXMonthView.monthStringForeground = @foreground JXMonthView.daysOfTheWeekForeground = #aaa @@ -48,10 +53,10 @@ JXMonthView.weekOfTheYearForeground = #888 JXMonthView.unselectableDayForeground = #E05555 JXMonthView.selectedBackground = @selectionBackground JXMonthView.flaggedDayForeground = #E05555 -JXMonthView.leadingDayForeground = @disabledText -JXMonthView.trailingDayForeground = @disabledText +JXMonthView.leadingDayForeground = @disabledForeground +JXMonthView.trailingDayForeground = @disabledForeground JXMonthView.arrowColor = @foreground -JXMonthView.disabledArrowColor = @disabledText +JXMonthView.disabledArrowColor = @disabledForeground #---- TaskPaneContainer ---- diff --git a/flatlaf-swingx/src/main/resources/com/formdev/flatlaf/swingx/FlatLaf.properties b/flatlaf-swingx/src/main/resources/com/formdev/flatlaf/swingx/FlatLaf.properties index b15408db..db7e7186 100644 --- a/flatlaf-swingx/src/main/resources/com/formdev/flatlaf/swingx/FlatLaf.properties +++ b/flatlaf-swingx/src/main/resources/com/formdev/flatlaf/swingx/FlatLaf.properties @@ -25,6 +25,11 @@ swingx/TaskPaneUI = com.formdev.flatlaf.swingx.ui.FlatTaskPaneUI TitledPanelUI = com.formdev.flatlaf.swingx.ui.FlatTitledPanelUI +#---- ColumnControlButton ---- + +ColumnControlButton.actionIcon = com.formdev.flatlaf.swingx.icons.FlatColumnControlIcon + + #---- DatePicker ---- JXDatePicker.border = com.formdev.flatlaf.swingx.ui.FlatDatePickerBorder @@ -42,3 +47,18 @@ JXTitledPanel.borderColor = $Button.borderColor JXTitledPanel.titleBackground = $TaskPane.titleBackgroundGradientStart JXTitledPanel.titleForeground = $TaskPane.titleForeground JXTitledPanel.captionInsets = 4,10,4,10 + + +#---- SearchField ---- + +SearchField.icon = com.formdev.flatlaf.icons.FlatSearchIcon +SearchField.rolloverIcon = lazy(SearchField.icon) +SearchField.pressedIcon = lazy(SearchField.icon) + +SearchField.popupIcon = com.formdev.flatlaf.icons.FlatSearchWithHistoryIcon +SearchField.popupRolloverIcon = lazy(SearchField.popupIcon) +SearchField.popupPressedIcon = lazy(SearchField.popupIcon) + +SearchField.clearIcon = com.formdev.flatlaf.icons.FlatClearIcon +SearchField.clearRolloverIcon = lazy(SearchField.clearIcon) +SearchField.clearPressedIcon = lazy(SearchField.clearIcon) diff --git a/flatlaf-swingx/src/main/resources/com/formdev/flatlaf/swingx/FlatLightLaf.properties b/flatlaf-swingx/src/main/resources/com/formdev/flatlaf/swingx/FlatLightLaf.properties index fd81dfc8..b10ab028 100644 --- a/flatlaf-swingx/src/main/resources/com/formdev/flatlaf/swingx/FlatLightLaf.properties +++ b/flatlaf-swingx/src/main/resources/com/formdev/flatlaf/swingx/FlatLightLaf.properties @@ -20,6 +20,11 @@ JXBusyLabel.baseColor = #c4c4c4 JXBusyLabel.highlightColor = #808080 +#---- ColumnControlButton ---- + +ColumnControlButton.iconColor = tint(@foreground,45%) + + #---- Header ---- JXHeader.background = @background @@ -28,30 +33,30 @@ JXHeader.startBackground = #fff #---- HighlighterFactory ---- -UIColorHighlighter.stripingBackground = darken(@textComponentBackground,5%) +UIColorHighlighter.stripingBackground = darken(@componentBackground,5%) #---- Hyperlink ---- Hyperlink.linkColor = $Component.linkColor Hyperlink.visitedColor = $Hyperlink.linkColor -Hyperlink.disabledText = @disabledText +Hyperlink.disabledText = @disabledForeground #---- MonthView ---- -JXMonthView.background = @textComponentBackground +JXMonthView.background = @componentBackground JXMonthView.monthStringBackground = #dfdfdf JXMonthView.monthStringForeground = @foreground JXMonthView.daysOfTheWeekForeground = #444 JXMonthView.weekOfTheYearForeground = #666 JXMonthView.unselectableDayForeground = #E02222 -JXMonthView.selectedBackground = #B9CEF8 +JXMonthView.selectedBackground = changeLightness(@selectionBackground,85%) JXMonthView.flaggedDayForeground = #E02222 -JXMonthView.leadingDayForeground = @disabledText -JXMonthView.trailingDayForeground = @disabledText +JXMonthView.leadingDayForeground = @disabledForeground +JXMonthView.trailingDayForeground = @disabledForeground JXMonthView.arrowColor = @foreground -JXMonthView.disabledArrowColor = @disabledText +JXMonthView.disabledArrowColor = @disabledForeground #---- TaskPaneContainer ---- diff --git a/flatlaf-testing/Windows 11 decorations.png b/flatlaf-testing/Windows 11 decorations.png new file mode 100644 index 00000000..dbc6f878 Binary files /dev/null and b/flatlaf-testing/Windows 11 decorations.png differ diff --git a/flatlaf-testing/build.gradle.kts b/flatlaf-testing/build.gradle.kts index 953491c8..53b51367 100644 --- a/flatlaf-testing/build.gradle.kts +++ b/flatlaf-testing/build.gradle.kts @@ -33,7 +33,7 @@ dependencies { implementation( "com.jgoodies:jgoodies-forms:1.9.0" ) implementation( "org.swinglabs.swingx:swingx-all:1.6.5-1" ) implementation( "org.swinglabs.swingx:swingx-beaninfo:1.6.5-1" ) - implementation( "com.formdev:jide-oss:3.7.11.1" ) + implementation( "com.formdev:jide-oss:3.7.12" ) implementation( "com.glazedlists:glazedlists:1.11.0" ) implementation( "org.netbeans.api:org-openide-awt:RELEASE112" ) } diff --git a/flatlaf-testing/dumps/uidefaults/FlatDarculaLaf_1.8.0_202.txt b/flatlaf-testing/dumps/uidefaults/FlatDarculaLaf_1.8.0.txt similarity index 85% rename from flatlaf-testing/dumps/uidefaults/FlatDarculaLaf_1.8.0_202.txt rename to flatlaf-testing/dumps/uidefaults/FlatDarculaLaf_1.8.0.txt index 3f8b2da4..8291260a 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatDarculaLaf_1.8.0_202.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatDarculaLaf_1.8.0.txt @@ -18,7 +18,8 @@ #---- CheckBox ---- -- CheckBox.icon.focusedBackground #466d944d 30% javax.swing.plaf.ColorUIResource [UI] +- CheckBox.icon.focusWidth 1 +- CheckBox.icon.focusedBackground #446e9e4d 30% HSLA 212 40 44 30 javax.swing.plaf.ColorUIResource [UI] #---- ComboBox ---- @@ -38,7 +39,7 @@ - Component.innerFocusWidth 0.5 + Component.innerFocusWidth 0 -- Component.innerOutlineWidth 1.0 +- Component.innerOutlineWidth 1 + Component.innerOutlineWidth 0 @@ -71,11 +72,11 @@ #---- ProgressBar ---- -- ProgressBar.foreground #4a88c7 javax.swing.plaf.ColorUIResource [UI] -+ ProgressBar.foreground #a0a0a0 javax.swing.plaf.ColorUIResource [UI] +- ProgressBar.foreground #4c87c8 HSL 211 53 54 javax.swing.plaf.ColorUIResource [UI] ++ ProgressBar.foreground #a2a2a2 HSL 0 0 64 javax.swing.plaf.ColorUIResource [UI] -- ProgressBar.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -+ ProgressBar.selectionForeground #3c3f41 javax.swing.plaf.ColorUIResource [UI] +- ProgressBar.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] ++ ProgressBar.selectionForeground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] #---- RadioButton ---- diff --git a/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0_202-linux.txt b/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0-linux.txt similarity index 100% rename from flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0_202-linux.txt rename to flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0-linux.txt diff --git a/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0-mac.txt b/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0-mac.txt new file mode 100644 index 00000000..224fa680 --- /dev/null +++ b/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0-mac.txt @@ -0,0 +1,145 @@ +- Java 1.8.0_202 ++ Java 1.8.0_292 + +- OS Windows 10 ++ OS Mac OS X + +#---- ComboBox ---- + ++ ComboBox.showPopupOnNavigation true + + +#---- FileChooser ---- + +- FileChooser.useSystemExtensionHiding true ++ FileChooser.useSystemExtensionHiding false + + +#---- Menu ---- + +- Menu.shortcutKeys length=1 [I + [0] 8 ++ Menu.shortcutKeys length=1 [I + [0] 10 + + +#---- MenuItem ---- + +- MenuItem.acceleratorDelimiter - ++ MenuItem.acceleratorDelimiter + + +#---- OptionPane ---- + ++ OptionPane.isYesLast true + + +#---- ProgressBar ---- + +- ProgressBar.font [active] Segoe UI plain 10 javax.swing.plaf.FontUIResource [UI] ++ ProgressBar.font [active] Helvetica Neue plain 11 javax.swing.plaf.FontUIResource [UI] + + +#---- ScrollBar ---- + +- ScrollBar.hoverThumbWithTrack false ++ ScrollBar.hoverThumbWithTrack true + +- ScrollBar.minimumThumbSize 10,10 javax.swing.plaf.DimensionUIResource [UI] ++ ScrollBar.minimumThumbSize 18,18 javax.swing.plaf.DimensionUIResource [UI] + +- ScrollBar.thumbArc 0 ++ ScrollBar.thumbArc 999 + +- ScrollBar.thumbInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] ++ ScrollBar.thumbInsets 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] +- defaultFont Segoe UI plain 12 javax.swing.plaf.FontUIResource [UI] ++ defaultFont Helvetica Neue plain 13 javax.swing.plaf.FontUIResource [UI] + + + +#---- h0 ---- + +- h0.font [active] Segoe UI plain 30 javax.swing.plaf.FontUIResource [UI] ++ h0.font [active] Helvetica Neue plain 31 javax.swing.plaf.FontUIResource [UI] + + +#---- h00 ---- + +- h00.font [active] Segoe UI plain 36 javax.swing.plaf.FontUIResource [UI] ++ h00.font [active] Helvetica Neue plain 37 javax.swing.plaf.FontUIResource [UI] + + +#---- h1 ---- + +- h1.font [active] Segoe UI Semibold plain 24 javax.swing.plaf.FontUIResource [UI] ++ h1.font [active] HelveticaNeue-Medium plain 25 javax.swing.plaf.FontUIResource [UI] + +- h1.regular.font [active] Segoe UI plain 24 javax.swing.plaf.FontUIResource [UI] ++ h1.regular.font [active] Helvetica Neue plain 25 javax.swing.plaf.FontUIResource [UI] + + +#---- h2 ---- + +- h2.font [active] Segoe UI Semibold plain 18 javax.swing.plaf.FontUIResource [UI] ++ h2.font [active] HelveticaNeue-Medium plain 19 javax.swing.plaf.FontUIResource [UI] + +- h2.regular.font [active] Segoe UI plain 18 javax.swing.plaf.FontUIResource [UI] ++ h2.regular.font [active] Helvetica Neue plain 19 javax.swing.plaf.FontUIResource [UI] + + +#---- h3 ---- + +- h3.font [active] Segoe UI Semibold plain 15 javax.swing.plaf.FontUIResource [UI] ++ h3.font [active] HelveticaNeue-Medium plain 16 javax.swing.plaf.FontUIResource [UI] + +- h3.regular.font [active] Segoe UI plain 15 javax.swing.plaf.FontUIResource [UI] ++ h3.regular.font [active] Helvetica Neue plain 16 javax.swing.plaf.FontUIResource [UI] + + +#---- h4 ---- + +- h4.font [active] Segoe UI bold 12 javax.swing.plaf.FontUIResource [UI] ++ h4.font [active] Helvetica Neue bold 13 javax.swing.plaf.FontUIResource [UI] + + +#---- large ---- + +- large.font [active] Segoe UI plain 14 javax.swing.plaf.FontUIResource [UI] ++ large.font [active] Helvetica Neue plain 15 javax.swing.plaf.FontUIResource [UI] + + +#---- light ---- + +- light.font [active] Segoe UI Light plain 12 javax.swing.plaf.FontUIResource [UI] ++ light.font [active] HelveticaNeue-Thin plain 13 javax.swing.plaf.FontUIResource [UI] + + +#---- medium ---- + +- medium.font [active] Segoe UI plain 11 javax.swing.plaf.FontUIResource [UI] ++ medium.font [active] Helvetica Neue plain 12 javax.swing.plaf.FontUIResource [UI] + + +#---- mini ---- + +- mini.font [active] Segoe UI plain 9 javax.swing.plaf.FontUIResource [UI] ++ mini.font [active] Helvetica Neue plain 10 javax.swing.plaf.FontUIResource [UI] + + +#---- monospaced ---- + +- monospaced.font [active] Consolas plain 12 javax.swing.plaf.FontUIResource [UI] ++ monospaced.font [active] Menlo plain 13 javax.swing.plaf.FontUIResource [UI] + + +#---- semibold ---- + +- semibold.font [active] Segoe UI Semibold plain 12 javax.swing.plaf.FontUIResource [UI] ++ semibold.font [active] HelveticaNeue-Medium plain 13 javax.swing.plaf.FontUIResource [UI] + + +#---- small ---- + +- small.font [active] Segoe UI plain 10 javax.swing.plaf.FontUIResource [UI] ++ small.font [active] Helvetica Neue plain 11 javax.swing.plaf.FontUIResource [UI] diff --git a/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt new file mode 100644 index 00000000..557dc459 --- /dev/null +++ b/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0.txt @@ -0,0 +1,1579 @@ +Class com.formdev.flatlaf.FlatDarkLaf +ID FlatLaf - FlatLaf Dark +Name FlatLaf Dark +Java 1.8.0_202 +OS Windows 10 + + +#---- ---- + +AATextInfoPropertyKey [unknown type] sun.swing.SwingUtilities2$AATextInfo + + +#---- Actions ---- + +Actions.Blue #3592c4 HSL 201 57 49 javax.swing.plaf.ColorUIResource [UI] +Actions.Green #499c54 HSL 128 36 45 javax.swing.plaf.ColorUIResource [UI] +Actions.Grey #afb1b3 HSL 210 3 69 javax.swing.plaf.ColorUIResource [UI] +Actions.GreyInline #7f8b91 HSL 200 8 53 javax.swing.plaf.ColorUIResource [UI] +Actions.Red #c75450 HSL 2 52 55 javax.swing.plaf.ColorUIResource [UI] +Actions.Yellow #f0a732 HSL 37 86 57 javax.swing.plaf.ColorUIResource [UI] + + +#---- AuditoryCues ---- + +AuditoryCues.allAuditoryCues length=13 [Ljava.lang.Object; + [0] CheckBoxMenuItem.commandSound + [1] InternalFrame.closeSound + [2] InternalFrame.maximizeSound + [3] InternalFrame.minimizeSound + [4] InternalFrame.restoreDownSound + [5] InternalFrame.restoreUpSound + [6] MenuItem.commandSound + [7] OptionPane.errorSound + [8] OptionPane.informationSound + [9] OptionPane.questionSound + [10] OptionPane.warningSound + [11] PopupMenu.popupSound + [12] RadioButtonMenuItem.commandSound +AuditoryCues.cueList length=13 [Ljava.lang.Object; + [0] CheckBoxMenuItem.commandSound + [1] InternalFrame.closeSound + [2] InternalFrame.maximizeSound + [3] InternalFrame.minimizeSound + [4] InternalFrame.restoreDownSound + [5] InternalFrame.restoreUpSound + [6] MenuItem.commandSound + [7] OptionPane.errorSound + [8] OptionPane.informationSound + [9] OptionPane.questionSound + [10] OptionPane.warningSound + [11] PopupMenu.popupSound + [12] RadioButtonMenuItem.commandSound +AuditoryCues.noAuditoryCues length=1 [Ljava.lang.Object; + [0] mute + + +#---- BusyLabel ---- + +BusyLabelUI com.formdev.flatlaf.swingx.ui.FlatBusyLabelUI + + +#---- Button ---- + +Button.arc 6 +Button.background #4e5052 HSL 210 2 31 javax.swing.plaf.ColorUIResource [UI] +Button.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatButtonBorder [UI] +Button.borderColor #606263 HSL 200 2 38 javax.swing.plaf.ColorUIResource [UI] +Button.borderWidth 1 +Button.darkShadow #7a7d7f HSL 204 2 49 javax.swing.plaf.ColorUIResource [UI] +Button.default.background #375a81 HSL 212 40 36 javax.swing.plaf.ColorUIResource [UI] +Button.default.boldText true +Button.default.borderColor #557394 HSL 211 27 46 javax.swing.plaf.ColorUIResource [UI] +Button.default.borderWidth 1 +Button.default.focusColor #416997 HSL 212 40 42 javax.swing.plaf.ColorUIResource [UI] +Button.default.focusedBorderColor #5b7898 HSL 211 25 48 javax.swing.plaf.ColorUIResource [UI] +Button.default.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Button.default.hoverBackground #3c618c HSL 212 40 39 com.formdev.flatlaf.util.DerivedColor [UI] lighten(3% autoInverse) +Button.default.hoverBorderColor #5b7898 HSL 211 25 48 javax.swing.plaf.ColorUIResource [UI] +Button.default.pressedBackground #406996 HSL 211 40 42 com.formdev.flatlaf.util.DerivedColor [UI] lighten(6% autoInverse) +Button.defaultButtonFollowsFocus false +Button.disabledBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +Button.disabledBorderColor #606263 HSL 200 2 38 javax.swing.plaf.ColorUIResource [UI] +Button.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +Button.disabledSelectedBackground #55585a HSL 204 3 34 com.formdev.flatlaf.util.DerivedColor [UI] lighten(3% autoInverse) +Button.disabledText #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +Button.focusedBorderColor #446e9e HSL 212 40 44 javax.swing.plaf.ColorUIResource [UI] +Button.font [active] $defaultFont [UI] +Button.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Button.highlight #232324 HSL 240 1 14 javax.swing.plaf.ColorUIResource [UI] +Button.hoverBackground #55585a HSL 204 3 34 com.formdev.flatlaf.util.DerivedColor [UI] lighten(3% autoInverse) +Button.hoverBorderColor #446e9e HSL 212 40 44 javax.swing.plaf.ColorUIResource [UI] +Button.iconTextGap 4 +Button.innerFocusWidth 1 +Button.light #2f3031 HSL 210 2 19 javax.swing.plaf.ColorUIResource [UI] +Button.margin 2,14,2,14 javax.swing.plaf.InsetsUIResource [UI] +Button.minimumWidth 72 +Button.pressedBackground #5d5f62 HSL 216 3 37 com.formdev.flatlaf.util.DerivedColor [UI] lighten(6% autoInverse) +Button.rollover true +Button.selectedBackground #676a6c HSL 204 2 41 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) +Button.selectedForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Button.shadow #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +Button.textIconGap 4 +Button.textShiftOffset 0 +Button.toolbar.hoverBackground #505355 HSL 204 3 32 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1% autoInverse) +Button.toolbar.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] +Button.toolbar.pressedBackground #585a5c HSL 210 2 35 com.formdev.flatlaf.util.DerivedColor [UI] lighten(4% autoInverse) +Button.toolbar.selectedBackground #5f6264 HSL 204 3 38 com.formdev.flatlaf.util.DerivedColor [UI] lighten(7% autoInverse) +Button.toolbar.spacingInsets 1,2,1,2 javax.swing.plaf.InsetsUIResource [UI] +ButtonUI com.formdev.flatlaf.ui.FlatButtonUI + + +#---- Caret ---- + +Caret.width [active] 1 + + +#---- CheckBox ---- + +CheckBox.arc 4 +CheckBox.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +CheckBox.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +CheckBox.disabledText #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +CheckBox.font [active] $defaultFont [UI] +CheckBox.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.background #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.borderColor #696b6d HSL 210 2 42 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.checkmarkColor #a8a8a8 HSL 0 0 66 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.disabledBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.disabledBorderColor #545657 HSL 200 2 34 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.disabledCheckmarkColor #686868 HSL 0 0 41 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.focusWidth 1 +CheckBox.icon.focusedBackground #446e9e4d 30% HSLA 212 40 44 30 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.focusedBorderColor #446e9e HSL 212 40 44 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.hoverBackground #4d5153 HSL 200 4 31 com.formdev.flatlaf.util.DerivedColor [UI] lighten(3% autoInverse) +CheckBox.icon.hoverBorderColor #446e9e HSL 212 40 44 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.pressedBackground #55585b HSL 210 3 35 com.formdev.flatlaf.util.DerivedColor [UI] lighten(6% autoInverse) +CheckBox.icon.pressedBorderColor #446e9e HSL 212 40 44 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.selectedBackground #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.selectedBorderColor #87898a HSL 200 1 54 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxIcon [UI] +CheckBox.iconTextGap 4 +CheckBox.icon[filled].checkmarkColor #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon[filled].hoverSelectedBackground #a0a0a0 HSL 0 0 63 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) +CheckBox.icon[filled].pressedSelectedBackground #999999 HSL 0 0 60 com.formdev.flatlaf.util.DerivedColor [UI] darken(6% autoInverse) +CheckBox.icon[filled].selectedBackground #a8a8a8 HSL 0 0 66 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon[filled].selectedBorderColor #a8a8a8 HSL 0 0 66 javax.swing.plaf.ColorUIResource [UI] +CheckBox.margin 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] +CheckBox.rollover true +CheckBox.textIconGap 4 +CheckBox.textShiftOffset 0 + + +#---- CheckBoxMenuItem ---- + +CheckBoxMenuItem.acceleratorFont [active] $defaultFont [UI] +CheckBoxMenuItem.acceleratorForeground #959595 HSL 0 0 58 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.acceleratorSelectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] +CheckBoxMenuItem.background #303234 HSL 210 4 20 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] +CheckBoxMenuItem.borderPainted true +CheckBoxMenuItem.checkIcon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxMenuItemIcon [UI] +CheckBoxMenuItem.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.font [active] $defaultFont [UI] +CheckBoxMenuItem.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.icon.checkmarkColor #9b9b9b HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.icon.disabledCheckmarkColor #5b5b5b HSL 0 0 36 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] +CheckBoxMenuItem.opaque false +CheckBoxMenuItem.selectionBackground #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItemUI com.formdev.flatlaf.ui.FlatCheckBoxMenuItemUI + + +#---- CheckBox ---- + +CheckBoxUI com.formdev.flatlaf.ui.FlatCheckBoxUI + + +#---- ColorChooser ---- + +ColorChooser.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +ColorChooser.font [active] $defaultFont [UI] +ColorChooser.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +ColorChooser.swatchesDefaultRecentColor #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +ColorChooser.swatchesRecentSwatchSize [active] 16,16 javax.swing.plaf.DimensionUIResource [UI] +ColorChooser.swatchesSwatchSize [active] 16,16 javax.swing.plaf.DimensionUIResource [UI] +ColorChooserUI com.formdev.flatlaf.ui.FlatColorChooserUI + + +#---- ColumnControlButton ---- + +ColumnControlButton.actionIcon [lazy] 10,10 com.formdev.flatlaf.swingx.icons.FlatColumnControlIcon [UI] +ColumnControlButton.iconColor #a8a8a8 HSL 0 0 66 javax.swing.plaf.ColorUIResource [UI] + + +#---- ComboBox ---- + +ComboBox.background #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +ComboBox.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRoundBorder [UI] +ComboBox.buttonArrowColor #9b9b9b HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonBackground #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonDarkShadow #7a7d7f HSL 204 2 49 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonDisabledArrowColor #5b5b5b HSL 0 0 36 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonDisabledSeparatorColor #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonEditableBackground #414446 HSL 204 4 26 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonHighlight #232324 HSL 240 1 14 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonHoverArrowColor #b5b5b5 HSL 0 0 71 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10%) +ComboBox.buttonPressedArrowColor #cecece HSL 0 0 81 com.formdev.flatlaf.util.DerivedColor [UI] lighten(20%) +ComboBox.buttonSeparatorColor #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonShadow #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonStyle auto +ComboBox.disabledBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +ComboBox.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +ComboBox.editorColumns 0 +ComboBox.font [active] $defaultFont [UI] +ComboBox.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +ComboBox.isEnterSelectablePopup false +ComboBox.maximumRowCount 15 +ComboBox.minimumWidth 72 +ComboBox.noActionOnKeyNavigation false +ComboBox.padding 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +ComboBox.selectionBackground #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +ComboBox.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +ComboBox.timeFactor 1000 +ComboBoxUI com.formdev.flatlaf.ui.FlatComboBoxUI + + +#---- Component ---- + +Component.accentColor #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +Component.arc 5 +Component.arrowType chevron +Component.borderColor #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +Component.borderWidth 1 +Component.custom.borderColor #bf4040 HSL 0 50 50 com.formdev.flatlaf.util.DerivedColor [UI] desaturate(50% relative) +Component.disabledBorderColor #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +Component.error.borderColor #725555 HSL 0 15 39 javax.swing.plaf.ColorUIResource [UI] +Component.error.focusedBorderColor #8b3c3c HSL 0 40 39 javax.swing.plaf.ColorUIResource [UI] +Component.focusColor #3c628c HSL 212 40 39 javax.swing.plaf.ColorUIResource [UI] +Component.focusWidth 0 +Component.focusedBorderColor #446e9e HSL 212 40 44 javax.swing.plaf.ColorUIResource [UI] +Component.grayFilter [lazy] [unknown type] com.formdev.flatlaf.util.GrayFilter +Component.hideMnemonics true +Component.innerFocusWidth 0.5 +Component.innerOutlineWidth 1 +Component.linkColor #579bf6 HSL 214 90 65 javax.swing.plaf.ColorUIResource [UI] +Component.minimumWidth 64 +Component.warning.borderColor #725627 HSL 38 49 30 javax.swing.plaf.ColorUIResource [UI] +Component.warning.focusedBorderColor #ac7920 HSL 38 69 40 javax.swing.plaf.ColorUIResource [UI] + + +#---- DatePicker ---- + +DatePickerUI com.formdev.flatlaf.swingx.ui.FlatDatePickerUI + + +#---- Desktop ---- + +Desktop.background #3e434c HSL 219 10 27 javax.swing.plaf.ColorUIResource [UI] +Desktop.minOnScreenInsets 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] + + +#---- DesktopIcon ---- + +DesktopIcon.background #555c68 HSL 218 10 37 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) +DesktopIcon.border [lazy] 4,4,4,4 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +DesktopIcon.closeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameCloseIcon [UI] +DesktopIcon.closeSize 20,20 javax.swing.plaf.DimensionUIResource [UI] +DesktopIcon.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +DesktopIcon.iconSize 64,64 javax.swing.plaf.DimensionUIResource [UI] +DesktopIconUI com.formdev.flatlaf.ui.FlatDesktopIconUI + + +#---- DesktopPane ---- + +DesktopPaneUI com.formdev.flatlaf.ui.FlatDesktopPaneUI + + +#---- EditorPane ---- + +EditorPane.background #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +EditorPane.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +EditorPane.caretBlinkRate 500 +EditorPane.caretForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +EditorPane.disabledBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +EditorPane.font [active] $defaultFont [UI] +EditorPane.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +EditorPane.inactiveBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +EditorPane.inactiveForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +EditorPane.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +EditorPane.selectionBackground #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +EditorPane.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +EditorPaneUI com.formdev.flatlaf.ui.FlatEditorPaneUI + + +#---- FileChooser ---- + +FileChooser.detailsViewIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserDetailsViewIcon [UI] +FileChooser.homeFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserHomeFolderIcon [UI] +FileChooser.listViewIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserListViewIcon [UI] +FileChooser.newFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserNewFolderIcon [UI] +FileChooser.readOnly false +FileChooser.upFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserUpFolderIcon [UI] +FileChooser.useSystemExtensionHiding true +FileChooser.usesSingleFilePane true +FileChooserUI com.formdev.flatlaf.ui.FlatFileChooserUI + + +#---- FileView ---- + +FileView.computerIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewComputerIcon [UI] +FileView.directoryIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewDirectoryIcon [UI] +FileView.fileIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewFileIcon [UI] +FileView.floppyDriveIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewFloppyDriveIcon [UI] +FileView.fullRowSelection true +FileView.hardDriveIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewHardDriveIcon [UI] + + +#---- FormattedTextField ---- + +FormattedTextField.background #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] +FormattedTextField.caretBlinkRate 500 +FormattedTextField.caretForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.disabledBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.font [active] $defaultFont [UI] +FormattedTextField.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.iconTextGap 4 +FormattedTextField.inactiveBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.inactiveForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +FormattedTextField.placeholderForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.selectionBackground #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +FormattedTextFieldUI com.formdev.flatlaf.ui.FlatFormattedTextFieldUI + + +#---- Header ---- + +HeaderUI com.formdev.flatlaf.swingx.ui.FlatHeaderUI + + +#---- HelpButton ---- + +HelpButton.background #4e5052 HSL 210 2 31 javax.swing.plaf.ColorUIResource [UI] +HelpButton.borderColor #606263 HSL 200 2 38 javax.swing.plaf.ColorUIResource [UI] +HelpButton.borderWidth 1 +HelpButton.disabledBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +HelpButton.disabledBorderColor #606263 HSL 200 2 38 javax.swing.plaf.ColorUIResource [UI] +HelpButton.disabledQuestionMarkColor #77797a HSL 200 1 47 javax.swing.plaf.ColorUIResource [UI] +HelpButton.focusedBorderColor #446e9e HSL 212 40 44 javax.swing.plaf.ColorUIResource [UI] +HelpButton.hoverBackground #55585a HSL 204 3 34 com.formdev.flatlaf.util.DerivedColor [UI] lighten(3% autoInverse) +HelpButton.hoverBorderColor #446e9e HSL 212 40 44 javax.swing.plaf.ColorUIResource [UI] +HelpButton.icon [lazy] 22,22 com.formdev.flatlaf.icons.FlatHelpButtonIcon [UI] +HelpButton.innerFocusWidth 1 +HelpButton.pressedBackground #5d5f62 HSL 216 3 37 com.formdev.flatlaf.util.DerivedColor [UI] lighten(6% autoInverse) +HelpButton.questionMarkColor #a8a8a8 HSL 0 0 66 javax.swing.plaf.ColorUIResource [UI] + + +#---- Hyperlink ---- + +Hyperlink.disabledText #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +Hyperlink.linkColor #579bf6 HSL 214 90 65 javax.swing.plaf.ColorUIResource [UI] +Hyperlink.visitedColor #579bf6 HSL 214 90 65 javax.swing.plaf.ColorUIResource [UI] +HyperlinkUI com.formdev.flatlaf.swingx.ui.FlatHyperlinkUI + + +#---- InternalFrame ---- + +InternalFrame.activeBorderColor #2b2d2e HSL 200 3 17 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.activeDropShadowInsets 5,5,6,6 javax.swing.plaf.InsetsUIResource [UI] +InternalFrame.activeDropShadowOpacity 0.5 +InternalFrame.activeTitleBackground #242526 HSL 210 3 15 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.activeTitleForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.border [lazy] 6,6,6,6 false com.formdev.flatlaf.ui.FlatInternalFrameUI$FlatInternalFrameBorder [UI] +InternalFrame.borderColor #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.borderDarkShadow #7a7d7f HSL 204 2 49 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.borderHighlight #232324 HSL 240 1 14 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.borderLight #2f3031 HSL 210 2 19 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.borderLineWidth 1 +InternalFrame.borderMargins 6,6,6,6 javax.swing.plaf.InsetsUIResource [UI] +InternalFrame.borderShadow #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.buttonHoverBackground #3d3f40 HSL 200 2 25 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) +InternalFrame.buttonPressedBackground #56585a HSL 210 2 35 com.formdev.flatlaf.util.DerivedColor [UI] lighten(20% autoInverse) +InternalFrame.buttonSize 24,24 javax.swing.plaf.DimensionUIResource [UI] +InternalFrame.closeHoverBackground [lazy] #c75450 HSL 2 52 55 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.closeHoverForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.closeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameCloseIcon [UI] +InternalFrame.closePressedBackground [lazy] #ad3b37 HSL 2 52 45 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.closePressedForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.dropShadowPainted true +InternalFrame.icon [lazy] 16,16 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) +InternalFrame.iconifyIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameIconifyIcon [UI] +InternalFrame.inactiveBorderColor #353739 HSL 210 4 22 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.inactiveDropShadowInsets 3,3,4,4 javax.swing.plaf.InsetsUIResource [UI] +InternalFrame.inactiveDropShadowOpacity 0.75 +InternalFrame.inactiveTitleBackground #303233 HSL 200 3 19 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.inactiveTitleForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.maximizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameMaximizeIcon [UI] +InternalFrame.minimizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameRestoreIcon [UI] +InternalFrame.titleFont [active] $defaultFont [UI] + + +#---- InternalFrameTitlePane ---- + +InternalFrameTitlePane.border [lazy] 0,8,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +InternalFrameTitlePane.closeButtonOpacity true +InternalFrameTitlePane.iconifyButtonOpacity true +InternalFrameTitlePane.maximizeButtonOpacity true + + +#---- InternalFrame ---- + +InternalFrameUI com.formdev.flatlaf.ui.FlatInternalFrameUI + + +#---- JXBusyLabel ---- + +JXBusyLabel.baseColor #777777 HSL 0 0 47 javax.swing.plaf.ColorUIResource [UI] +JXBusyLabel.highlightColor #e0e0e0 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] + + +#---- JXDatePicker ---- + +JXDatePicker.border [lazy] 1,1,1,1 false com.formdev.flatlaf.swingx.ui.FlatDatePickerBorder [UI] + + +#---- JXHeader ---- + +JXHeader.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +JXHeader.startBackground #4c5052 HSL 200 4 31 javax.swing.plaf.ColorUIResource [UI] + + +#---- JXMonthView ---- + +JXMonthView.arrowColor #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.background #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.daysOfTheWeekForeground #aaaaaa HSL 0 0 67 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.disabledArrowColor #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.flaggedDayForeground #e05555 HSL 0 69 61 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.leadingDayForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.monthDownFileName [lazy] 20,20 com.formdev.flatlaf.swingx.ui.FlatMonthDownIcon [UI] +JXMonthView.monthStringBackground #4c5052 HSL 200 4 31 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.monthStringForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.monthUpFileName [lazy] 20,20 com.formdev.flatlaf.swingx.ui.FlatMonthUpIcon [UI] +JXMonthView.selectedBackground #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.trailingDayForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.unselectableDayForeground #e05555 HSL 0 69 61 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.weekOfTheYearForeground #888888 HSL 0 0 53 javax.swing.plaf.ColorUIResource [UI] + + +#---- JXTitledPanel ---- + +JXTitledPanel.borderColor #606263 HSL 200 2 38 javax.swing.plaf.ColorUIResource [UI] +JXTitledPanel.captionInsets 4,10,4,10 javax.swing.plaf.InsetsUIResource [UI] +JXTitledPanel.titleBackground #4c5052 HSL 200 4 31 javax.swing.plaf.ColorUIResource [UI] +JXTitledPanel.titleForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] + + +#---- JideButton ---- + +JideButton.background #4e5052 HSL 210 2 31 javax.swing.plaf.ColorUIResource [UI] +JideButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +JideButton.borderColor #606263 HSL 200 2 38 javax.swing.plaf.ColorUIResource [UI] +JideButton.darkShadow #606263 HSL 200 2 38 javax.swing.plaf.ColorUIResource [UI] +JideButton.focusedBackground #505355 HSL 204 3 32 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1% autoInverse) +JideButton.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +JideButton.highlight #676a6c HSL 204 2 41 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) +JideButton.light #606263 HSL 200 2 38 javax.swing.plaf.ColorUIResource [UI] +JideButton.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] +JideButton.selectedAndFocusedBackground #585a5c HSL 210 2 35 com.formdev.flatlaf.util.DerivedColor [UI] lighten(4% autoInverse) +JideButton.selectedBackground #5f6264 HSL 204 3 38 com.formdev.flatlaf.util.DerivedColor [UI] lighten(7% autoInverse) +JideButton.shadow #606263 HSL 200 2 38 javax.swing.plaf.ColorUIResource [UI] +JideButton.textIconGap [active] 4 +JideButtonUI com.formdev.flatlaf.jideoss.ui.FlatJideButtonUI + + +#---- JideLabel ---- + +JideLabel.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +JideLabel.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +JideLabel.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +JideLabelUI com.formdev.flatlaf.jideoss.ui.FlatJideLabelUI + + +#---- JidePopupMenu ---- + +JidePopupMenuUI com.formdev.flatlaf.jideoss.ui.FlatJidePopupMenuUI + + +#---- JideSplitButton ---- + +JideSplitButton.background #4e5052 HSL 210 2 31 javax.swing.plaf.ColorUIResource [UI] +JideSplitButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +JideSplitButton.buttonArrowColor #9b9b9b HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +JideSplitButton.buttonDisabledArrowColor #5b5b5b HSL 0 0 36 javax.swing.plaf.ColorUIResource [UI] +JideSplitButton.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +JideSplitButton.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] +JideSplitButton.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +JideSplitButton.textIconGap [active] 4 +JideSplitButtonUI com.formdev.flatlaf.jideoss.ui.FlatJideSplitButtonUI + + +#---- JideTabbedPane ---- + +JideTabbedPane.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +JideTabbedPane.closeButtonLeftMargin 0 +JideTabbedPane.closeButtonRightMargin 0 +JideTabbedPane.contentBorderInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +JideTabbedPane.fitStyleBoundSize 0 +JideTabbedPane.fitStyleFirstTabMargin 0 +JideTabbedPane.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +JideTabbedPane.shadow #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +JideTabbedPane.tabAreaBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +JideTabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +JideTabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] +JideTabbedPane.tabRunOverlay 0 +JideTabbedPaneUI com.formdev.flatlaf.jideoss.ui.FlatJideTabbedPaneUI + + +#---- Label ---- + +Label.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +Label.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +Label.disabledShadow #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +Label.font [active] $defaultFont [UI] +Label.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +LabelUI com.formdev.flatlaf.ui.FlatLabelUI + + +#---- List ---- + +List.background #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +List.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +List.cellFocusColor #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +List.cellMargins 1,6,1,6 javax.swing.plaf.InsetsUIResource [UI] +List.cellNoFocusBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatListCellBorder$Default [UI] lineColor=#000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +List.cellRenderer [active] javax.swing.DefaultListCellRenderer$UIResource [UI] +List.dropCellBackground [lazy] #3c588b HSL 219 40 39 javax.swing.plaf.ColorUIResource [UI] +List.dropCellForeground [lazy] #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +List.dropLineColor [lazy] #6d8ac0 HSL 219 40 59 javax.swing.plaf.ColorUIResource [UI] +List.focusCellHighlightBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatListCellBorder$Focused [UI] lineColor=#000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +List.focusSelectedCellHighlightBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatListCellBorder$Selected [UI] lineColor=#000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +List.font [active] $defaultFont [UI] +List.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +List.noFocusBorder 1,1,1,1 false javax.swing.plaf.BorderUIResource$EmptyBorderUIResource [UI] +List.selectionBackground #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +List.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +List.selectionInactiveBackground #0f2a3d HSL 205 61 15 javax.swing.plaf.ColorUIResource [UI] +List.selectionInactiveForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +List.showCellFocusIndicator false +List.timeFactor 1000 +ListUI com.formdev.flatlaf.ui.FlatListUI + + +#---- Menu ---- + +Menu.acceleratorFont [active] $defaultFont [UI] +Menu.acceleratorForeground #959595 HSL 0 0 58 javax.swing.plaf.ColorUIResource [UI] +Menu.acceleratorSelectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Menu.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuArrowIcon [UI] +Menu.background #303234 HSL 210 4 20 javax.swing.plaf.ColorUIResource [UI] +Menu.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] +Menu.borderPainted true +Menu.cancelMode hideLastSubmenu +Menu.crossMenuMnemonic true +Menu.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +Menu.font [active] $defaultFont [UI] +Menu.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Menu.icon.arrowColor #9b9b9b HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +Menu.icon.disabledArrowColor #5b5b5b HSL 0 0 36 javax.swing.plaf.ColorUIResource [UI] +Menu.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] +Menu.menuPopupOffsetX 0 +Menu.menuPopupOffsetY 0 +Menu.opaque false +Menu.preserveTopLevelSelection false +Menu.selectionBackground #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +Menu.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Menu.shortcutKeys length=1 [I + [0] 8 +Menu.submenuPopupOffsetX [active] -4 +Menu.submenuPopupOffsetY [active] -4 + + +#---- MenuBar ---- + +MenuBar.background #303234 HSL 210 4 20 javax.swing.plaf.ColorUIResource [UI] +MenuBar.border [lazy] 0,0,1,0 false com.formdev.flatlaf.ui.FlatMenuBarBorder [UI] +MenuBar.borderColor #505254 HSL 210 2 32 javax.swing.plaf.ColorUIResource [UI] +MenuBar.font [active] $defaultFont [UI] +MenuBar.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +MenuBar.highlight #232324 HSL 240 1 14 javax.swing.plaf.ColorUIResource [UI] +MenuBar.hoverBackground #484c4f HSL 206 5 30 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) +MenuBar.itemMargins 3,8,3,8 javax.swing.plaf.InsetsUIResource [UI] +MenuBar.shadow #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +MenuBar.windowBindings length=2 [Ljava.lang.Object; + [0] F10 + [1] takeFocus +MenuBarUI com.formdev.flatlaf.ui.FlatMenuBarUI + + +#---- MenuItem ---- + +MenuItem.acceleratorArrowGap 2 +MenuItem.acceleratorDelimiter + +MenuItem.acceleratorFont [active] $defaultFont [UI] +MenuItem.acceleratorForeground #959595 HSL 0 0 58 javax.swing.plaf.ColorUIResource [UI] +MenuItem.acceleratorSelectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +MenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] +MenuItem.background #303234 HSL 210 4 20 javax.swing.plaf.ColorUIResource [UI] +MenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] +MenuItem.borderPainted true +MenuItem.checkBackground #3c588b HSL 219 40 39 com.formdev.flatlaf.util.DerivedColor [UI] darken(10%) +MenuItem.checkMargins 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] +MenuItem.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +MenuItem.font [active] $defaultFont [UI] +MenuItem.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +MenuItem.iconTextGap 6 +MenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] +MenuItem.minimumIconSize 16,16 javax.swing.plaf.DimensionUIResource [UI] +MenuItem.minimumWidth 72 +MenuItem.opaque false +MenuItem.selectionBackground #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +MenuItem.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +MenuItem.textAcceleratorGap 24 +MenuItem.textNoAcceleratorGap 6 +MenuItem.underlineSelectionBackground #484c4f HSL 206 5 30 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) +MenuItem.underlineSelectionCheckBackground #3c588b HSL 219 40 39 com.formdev.flatlaf.util.DerivedColor [UI] darken(10%) +MenuItem.underlineSelectionColor #4c87c8 HSL 211 53 54 javax.swing.plaf.ColorUIResource [UI] +MenuItem.underlineSelectionHeight 3 +MenuItem.verticallyAlignText true +MenuItemUI com.formdev.flatlaf.ui.FlatMenuItemUI + + +#---- Menu ---- + +MenuUI com.formdev.flatlaf.ui.FlatMenuUI + + +#---- MonthView ---- + +MonthViewUI com.formdev.flatlaf.swingx.ui.FlatMonthViewUI + + +#---- Objects ---- + +Objects.BlackText #231f20 HSL 345 6 13 javax.swing.plaf.ColorUIResource [UI] +Objects.Blue #40b6e0 HSL 196 72 56 javax.swing.plaf.ColorUIResource [UI] +Objects.Green #62b543 HSL 104 46 49 javax.swing.plaf.ColorUIResource [UI] +Objects.GreenAndroid #a4c639 HSL 74 55 50 javax.swing.plaf.ColorUIResource [UI] +Objects.Grey #9aa7b0 HSL 205 12 65 javax.swing.plaf.ColorUIResource [UI] +Objects.Pink #f98b9e HSL 350 90 76 javax.swing.plaf.ColorUIResource [UI] +Objects.Purple #b99bf8 HSL 259 87 79 javax.swing.plaf.ColorUIResource [UI] +Objects.Red #f26522 HSL 19 89 54 javax.swing.plaf.ColorUIResource [UI] +Objects.RedStatus #e05555 HSL 0 69 61 javax.swing.plaf.ColorUIResource [UI] +Objects.Yellow #f4af3d HSL 37 89 60 javax.swing.plaf.ColorUIResource [UI] +Objects.YellowDark #d9a343 HSL 38 66 56 javax.swing.plaf.ColorUIResource [UI] + + +#---- OptionPane ---- + +OptionPane.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +OptionPane.border [lazy] 12,12,12,12 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +OptionPane.buttonAreaBorder [lazy] 12,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +OptionPane.buttonClickThreshhold 500 +OptionPane.buttonMinimumWidth [active] 72 +OptionPane.buttonOrientation 4 +OptionPane.buttonPadding 8 +OptionPane.errorIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneErrorIcon [UI] +OptionPane.font [active] $defaultFont [UI] +OptionPane.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +OptionPane.iconMessageGap 16 +OptionPane.informationIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneInformationIcon [UI] +OptionPane.maxCharactersPerLine 80 +OptionPane.messageAreaBorder [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +OptionPane.messagePadding 3 +OptionPane.minimumSize 262,90 javax.swing.plaf.DimensionUIResource [UI] +OptionPane.questionIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneQuestionIcon [UI] +OptionPane.sameSizeButtons true +OptionPane.setButtonMargin false +OptionPane.showIcon false +OptionPane.warningIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneWarningIcon [UI] +OptionPane.windowBindings length=2 [Ljava.lang.Object; + [0] ESCAPE + [1] close +OptionPaneUI com.formdev.flatlaf.ui.FlatOptionPaneUI + + +#---- Panel ---- + +Panel.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +Panel.font [active] $defaultFont [UI] +Panel.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +PanelUI com.formdev.flatlaf.ui.FlatPanelUI + + +#---- PasswordField ---- + +PasswordField.background #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +PasswordField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] +PasswordField.capsLockIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatCapsLockIcon [UI] +PasswordField.capsLockIconColor #ffffff64 39% HSLA 0 0 100 39 javax.swing.plaf.ColorUIResource [UI] +PasswordField.caretBlinkRate 500 +PasswordField.caretForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +PasswordField.disabledBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +PasswordField.echoChar '\u2022' +PasswordField.font [active] $defaultFont [UI] +PasswordField.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +PasswordField.iconTextGap 4 +PasswordField.inactiveBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +PasswordField.inactiveForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +PasswordField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +PasswordField.placeholderForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +PasswordField.revealIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatRevealIcon [UI] +PasswordField.revealIconColor #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +PasswordField.selectionBackground #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +PasswordField.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +PasswordField.showCapsLock true +PasswordField.showRevealButton false +PasswordFieldUI com.formdev.flatlaf.ui.FlatPasswordFieldUI + + +#---- Popup ---- + +Popup.dropShadowColor #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Popup.dropShadowInsets -4,-4,4,4 javax.swing.plaf.InsetsUIResource [UI] +Popup.dropShadowOpacity 0.25 +Popup.dropShadowPainted true + + +#---- PopupMenu ---- + +PopupMenu.background #303234 HSL 210 4 20 javax.swing.plaf.ColorUIResource [UI] +PopupMenu.border [lazy] 4,1,4,1 false com.formdev.flatlaf.ui.FlatPopupMenuBorder [UI] lineColor=#5d6061 HSL 195 2 37 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +PopupMenu.borderColor #5d6061 HSL 195 2 37 javax.swing.plaf.ColorUIResource [UI] +PopupMenu.borderInsets 4,1,4,1 javax.swing.plaf.InsetsUIResource [UI] +PopupMenu.consumeEventOnClose false +PopupMenu.font [active] $defaultFont [UI] +PopupMenu.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +PopupMenu.hoverScrollArrowBackground #484c4e HSL 200 4 29 javax.swing.plaf.ColorUIResource [UI] +PopupMenu.scrollArrowColor #9b9b9b HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] + + +#---- PopupMenuSeparator ---- + +PopupMenuSeparator.height 9 +PopupMenuSeparator.stripeIndent 4 +PopupMenuSeparator.stripeWidth 1 +PopupMenuSeparatorUI com.formdev.flatlaf.ui.FlatPopupMenuSeparatorUI + + +#---- PopupMenu ---- + +PopupMenuUI com.formdev.flatlaf.ui.FlatPopupMenuUI + + +#---- ProgressBar ---- + +ProgressBar.arc 4 +ProgressBar.background #505456 HSL 200 4 33 javax.swing.plaf.ColorUIResource [UI] +ProgressBar.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +ProgressBar.cellLength 1 +ProgressBar.cellSpacing 0 +ProgressBar.cycleTime 4000 +ProgressBar.font [active] Segoe UI plain 10 javax.swing.plaf.FontUIResource [UI] +ProgressBar.foreground #4c87c8 HSL 211 53 54 javax.swing.plaf.ColorUIResource [UI] +ProgressBar.horizontalSize 146,4 javax.swing.plaf.DimensionUIResource [UI] +ProgressBar.repaintInterval 15 +ProgressBar.selectionBackground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +ProgressBar.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +ProgressBar.verticalSize 4,146 javax.swing.plaf.DimensionUIResource [UI] +ProgressBarUI com.formdev.flatlaf.ui.FlatProgressBarUI + + +#---- RadioButton ---- + +RadioButton.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +RadioButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +RadioButton.darkShadow #7a7d7f HSL 204 2 49 javax.swing.plaf.ColorUIResource [UI] +RadioButton.disabledText #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +RadioButton.font [active] $defaultFont [UI] +RadioButton.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +RadioButton.highlight #232324 HSL 240 1 14 javax.swing.plaf.ColorUIResource [UI] +RadioButton.icon.centerDiameter 8 +RadioButton.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatRadioButtonIcon [UI] +RadioButton.iconTextGap 4 +RadioButton.icon[filled].centerDiameter 5 +RadioButton.light #2f3031 HSL 210 2 19 javax.swing.plaf.ColorUIResource [UI] +RadioButton.margin 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] +RadioButton.rollover true +RadioButton.shadow #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +RadioButton.textIconGap 4 +RadioButton.textShiftOffset 0 + + +#---- RadioButtonMenuItem ---- + +RadioButtonMenuItem.acceleratorFont [active] $defaultFont [UI] +RadioButtonMenuItem.acceleratorForeground #959595 HSL 0 0 58 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.acceleratorSelectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] +RadioButtonMenuItem.background #303234 HSL 210 4 20 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] +RadioButtonMenuItem.borderPainted true +RadioButtonMenuItem.checkIcon [lazy] 15,15 com.formdev.flatlaf.icons.FlatRadioButtonMenuItemIcon [UI] +RadioButtonMenuItem.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.font [active] $defaultFont [UI] +RadioButtonMenuItem.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] +RadioButtonMenuItem.opaque false +RadioButtonMenuItem.selectionBackground #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItemUI com.formdev.flatlaf.ui.FlatRadioButtonMenuItemUI + + +#---- RadioButton ---- + +RadioButtonUI com.formdev.flatlaf.ui.FlatRadioButtonUI + + +#---- RangeSlider ---- + +RangeSliderUI com.formdev.flatlaf.jideoss.ui.FlatRangeSliderUI + + +#---- Resizable ---- + +Resizable.resizeBorder [lazy] 4,4,4,4 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#5d6061 HSL 195 2 37 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 + + +#---- RootPane ---- + +RootPane.activeBorderColor #4d5154 HSL 206 4 32 com.formdev.flatlaf.util.DerivedColor [UI] lighten(7% autoInverse) +RootPane.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +RootPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRootPaneUI$FlatWindowBorder [UI] +RootPane.borderDragThickness 5 +RootPane.cornerDragWidth 16 +RootPane.defaultButtonWindowKeyBindings length=8 [Ljava.lang.Object; + [0] ENTER + [1] press + [2] released ENTER + [3] release + [4] ctrl ENTER + [5] press + [6] ctrl released ENTER + [7] release +RootPane.font [active] $defaultFont [UI] +RootPane.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +RootPane.honorDialogMinimumSizeOnResize true +RootPane.honorFrameMinimumSizeOnResize false +RootPane.inactiveBorderColor #484c4e HSL 200 4 29 com.formdev.flatlaf.util.DerivedColor [UI] lighten(5% autoInverse) +RootPaneUI com.formdev.flatlaf.ui.FlatRootPaneUI + + +#---- ScrollBar ---- + +ScrollBar.allowsAbsolutePositioning true +ScrollBar.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.buttonArrowColor #9b9b9b HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.buttonDisabledArrowColor #5b5b5b HSL 0 0 36 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.hoverButtonBackground #484c4e HSL 200 4 29 com.formdev.flatlaf.util.DerivedColor [UI] lighten(5%) +ScrollBar.hoverThumbColor #6e767a HSL 200 5 45 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10%) +ScrollBar.hoverThumbWithTrack false +ScrollBar.hoverTrackColor #484c4f HSL 206 5 30 com.formdev.flatlaf.util.DerivedColor [UI] lighten(4%) +ScrollBar.maximumThumbSize 100000,100000 javax.swing.plaf.DimensionUIResource [UI] +ScrollBar.minimumButtonSize 12,12 javax.swing.plaf.DimensionUIResource [UI] +ScrollBar.minimumThumbSize 10,10 javax.swing.plaf.DimensionUIResource [UI] +ScrollBar.pressedButtonBackground #54595c HSL 203 5 35 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10%) +ScrollBar.pressedThumbColor #7a8387 HSL 198 5 50 com.formdev.flatlaf.util.DerivedColor [UI] lighten(15%) +ScrollBar.pressedThumbWithTrack false +ScrollBar.showButtons false +ScrollBar.squareButtons false +ScrollBar.thumb #565c5f HSL 200 5 35 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10%) +ScrollBar.thumbArc 0 +ScrollBar.thumbDarkShadow #7a7d7f HSL 204 2 49 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.thumbHighlight #232324 HSL 240 1 14 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.thumbInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +ScrollBar.thumbShadow #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.track #3e4244 HSL 200 5 25 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%) +ScrollBar.trackArc 0 +ScrollBar.trackHighlight #7a7d7f HSL 204 2 49 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.trackInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +ScrollBar.width 10 +ScrollBarUI com.formdev.flatlaf.ui.FlatScrollBarUI + + +#---- ScrollPane ---- + +ScrollPane.background #3e4244 HSL 200 5 25 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%) +ScrollPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatBorder [UI] +ScrollPane.fillUpperCorner true +ScrollPane.font [active] $defaultFont [UI] +ScrollPane.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +ScrollPane.smoothScrolling true +ScrollPaneUI com.formdev.flatlaf.ui.FlatScrollPaneUI + + +#---- SearchField ---- + +SearchField.clearIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatClearIcon [UI] +SearchField.clearIconColor [lazy] #7f8b9180 50% HSLA 200 8 53 50 javax.swing.plaf.ColorUIResource [UI] +SearchField.clearIconHoverColor [lazy] #7f8b9180 50% HSLA 200 8 53 50 javax.swing.plaf.ColorUIResource [UI] +SearchField.clearIconPressedColor [lazy] #7f8b91cc 80% HSLA 200 8 53 80 javax.swing.plaf.ColorUIResource [UI] +SearchField.clearPressedIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatClearIcon [UI] +SearchField.clearRolloverIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatClearIcon [UI] +SearchField.icon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchIcon [UI] +SearchField.popupIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchWithHistoryIcon [UI] +SearchField.popupPressedIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchWithHistoryIcon [UI] +SearchField.popupRolloverIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchWithHistoryIcon [UI] +SearchField.pressedIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchIcon [UI] +SearchField.rolloverIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchIcon [UI] +SearchField.searchIconColor [lazy] #7f8b91e6 90% HSLA 200 8 53 90 javax.swing.plaf.ColorUIResource [UI] +SearchField.searchIconHoverColor [lazy] #7f8b91b3 70% HSLA 200 8 53 70 javax.swing.plaf.ColorUIResource [UI] +SearchField.searchIconPressedColor [lazy] #7f8b9180 50% HSLA 200 8 53 50 javax.swing.plaf.ColorUIResource [UI] + + +#---- Separator ---- + +Separator.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +Separator.foreground #505254 HSL 210 2 32 javax.swing.plaf.ColorUIResource [UI] +Separator.height 3 +Separator.highlight #232324 HSL 240 1 14 javax.swing.plaf.ColorUIResource [UI] +Separator.shadow #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +Separator.stripeIndent 1 +Separator.stripeWidth 1 +SeparatorUI com.formdev.flatlaf.ui.FlatSeparatorUI + + +#---- Slider ---- + +Slider.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +Slider.disabledThumbColor #54595c HSL 203 5 35 javax.swing.plaf.ColorUIResource [UI] +Slider.disabledTrackColor #54595c HSL 203 5 35 javax.swing.plaf.ColorUIResource [UI] +Slider.focus #7a7d7f HSL 204 2 49 javax.swing.plaf.ColorUIResource [UI] +Slider.focusInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +Slider.focusWidth 4 +Slider.focusedColor #7097c24d 30% HSLA 211 40 60 30 com.formdev.flatlaf.util.DerivedColor [UI] changeLightness(60%) fade(30%) +Slider.font [active] $defaultFont [UI] +Slider.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Slider.highlight #232324 HSL 240 1 14 javax.swing.plaf.ColorUIResource [UI] +Slider.horizontalSize 200,21 java.awt.Dimension +Slider.hoverThumbColor #6094ce HSL 212 53 59 com.formdev.flatlaf.util.DerivedColor [UI] lighten(5% autoInverse) +Slider.minimumHorizontalSize 36,21 java.awt.Dimension +Slider.minimumVerticalSize 21,36 java.awt.Dimension +Slider.onlyLeftMouseButtonDrag true +Slider.pressedThumbColor #6b9cd2 HSL 211 53 62 com.formdev.flatlaf.util.DerivedColor [UI] lighten(8% autoInverse) +Slider.shadow #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +Slider.thumbColor #4c87c8 HSL 211 53 54 javax.swing.plaf.ColorUIResource [UI] +Slider.thumbSize 12,12 javax.swing.plaf.DimensionUIResource [UI] +Slider.tickColor #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +Slider.trackColor #616669 HSL 203 4 40 javax.swing.plaf.ColorUIResource [UI] +Slider.trackValueColor #4c87c8 HSL 211 53 54 javax.swing.plaf.ColorUIResource [UI] +Slider.trackWidth 2 +Slider.verticalSize 21,200 java.awt.Dimension +SliderUI com.formdev.flatlaf.ui.FlatSliderUI + + +#---- Spinner ---- + +Spinner.arrowButtonSize 16,5 java.awt.Dimension +Spinner.background #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +Spinner.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRoundBorder [UI] +Spinner.buttonArrowColor #9b9b9b HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonBackground #414446 HSL 204 4 26 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonDisabledArrowColor #5b5b5b HSL 0 0 36 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonDisabledSeparatorColor #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonHoverArrowColor #b5b5b5 HSL 0 0 71 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10%) +Spinner.buttonPressedArrowColor #cecece HSL 0 0 81 com.formdev.flatlaf.util.DerivedColor [UI] lighten(20%) +Spinner.buttonSeparatorColor #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonStyle button +Spinner.disabledBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +Spinner.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +Spinner.editorAlignment 11 +Spinner.editorBorderPainted false +Spinner.font [active] $defaultFont [UI] +Spinner.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Spinner.padding 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +SpinnerUI com.formdev.flatlaf.ui.FlatSpinnerUI + + +#---- SplitPane ---- + +SplitPane.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +SplitPane.centerOneTouchButtons true +SplitPane.continuousLayout true +SplitPane.darkShadow #7a7d7f HSL 204 2 49 javax.swing.plaf.ColorUIResource [UI] +SplitPane.dividerSize 5 +SplitPane.highlight #232324 HSL 240 1 14 javax.swing.plaf.ColorUIResource [UI] +SplitPane.oneTouchButtonOffset [active] 2 +SplitPane.oneTouchButtonSize [active] 6 +SplitPane.shadow #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] + + +#---- SplitPaneDivider ---- + +SplitPaneDivider.draggingColor #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +SplitPaneDivider.gripColor #aeaeae HSL 0 0 68 javax.swing.plaf.ColorUIResource [UI] +SplitPaneDivider.gripDotCount 3 +SplitPaneDivider.gripDotSize 3 +SplitPaneDivider.gripGap 2 +SplitPaneDivider.oneTouchArrowColor #9b9b9b HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +SplitPaneDivider.oneTouchHoverArrowColor #b5b5b5 HSL 0 0 71 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10%) +SplitPaneDivider.oneTouchPressedArrowColor #cecece HSL 0 0 81 com.formdev.flatlaf.util.DerivedColor [UI] lighten(20%) +SplitPaneDivider.style grip + + +#---- SplitPane ---- + +SplitPaneUI com.formdev.flatlaf.ui.FlatSplitPaneUI + + +#---- TabbedPane ---- + +TabbedPane.arrowType chevron +TabbedPane.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.buttonArc 6 +TabbedPane.buttonHoverBackground #303234 HSL 210 4 20 com.formdev.flatlaf.util.DerivedColor [UI] darken(5%) +TabbedPane.buttonInsets 2,1,2,1 javax.swing.plaf.InsetsUIResource [UI] +TabbedPane.buttonPressedBackground #282a2c HSL 210 5 16 com.formdev.flatlaf.util.DerivedColor [UI] darken(8%) +TabbedPane.cardTabSelectionHeight 2 +TabbedPane.closeArc 4 +TabbedPane.closeCrossFilledSize 7.5 +TabbedPane.closeCrossLineWidth 1 +TabbedPane.closeCrossPlainSize 7.5 +TabbedPane.closeForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.closeHoverBackground #484c4e HSL 200 4 29 com.formdev.flatlaf.util.DerivedColor [UI] lighten(5% autoInverse) +TabbedPane.closeHoverForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.closeIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTabbedPaneCloseIcon [UI] +TabbedPane.closePressedBackground #54595c HSL 203 5 35 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) +TabbedPane.closePressedForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.closeSize 16,16 javax.swing.plaf.DimensionUIResource [UI] +TabbedPane.contentAreaColor #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.contentOpaque true +TabbedPane.contentSeparatorHeight 1 +TabbedPane.darkShadow #7a7d7f HSL 204 2 49 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.disabledUnderlineColor #747a7e HSL 204 4 47 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.focus #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.focusColor #404b5d HSL 217 18 31 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.font [active] $defaultFont [UI] +TabbedPane.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.hasFullBorder false +TabbedPane.hiddenTabsNavigation moreTabsButton +TabbedPane.highlight #232324 HSL 240 1 14 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.hoverColor #303234 HSL 210 4 20 com.formdev.flatlaf.util.DerivedColor [UI] darken(5%) +TabbedPane.labelShift 1 +TabbedPane.light #2f3031 HSL 210 2 19 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.scrollButtonsPlacement both +TabbedPane.scrollButtonsPolicy asNeededSingle +TabbedPane.selectedLabelShift -1 +TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +TabbedPane.selectionFollowsFocus true +TabbedPane.shadow #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.showTabSeparators false +TabbedPane.tabAlignment center +TabbedPane.tabAreaAlignment leading +TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +TabbedPane.tabHeight 32 +TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] +TabbedPane.tabRunOverlay 0 +TabbedPane.tabSelectionHeight 3 +TabbedPane.tabSeparatorsFullHeight false +TabbedPane.tabType underlined +TabbedPane.tabWidthMode preferred +TabbedPane.tabsOpaque true +TabbedPane.tabsOverlapBorder false +TabbedPane.tabsPopupPolicy asNeeded +TabbedPane.textIconGap 4 +TabbedPane.underlineColor #4c87c8 HSL 211 53 54 javax.swing.plaf.ColorUIResource [UI] +TabbedPaneUI com.formdev.flatlaf.ui.FlatTabbedPaneUI + + +#---- Table ---- + +Table.ascendingSortIcon [lazy] 10,5 com.formdev.flatlaf.icons.FlatAscendingSortIcon [UI] +Table.background #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +Table.cellFocusColor #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Table.cellMargins 2,3,2,3 javax.swing.plaf.InsetsUIResource [UI] +Table.cellNoFocusBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Default [UI] lineColor=#000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +Table.consistentHomeEndKeyBehavior true +Table.descendingSortIcon [lazy] 10,5 com.formdev.flatlaf.icons.FlatDescendingSortIcon [UI] +Table.dropCellBackground [lazy] #3c588b HSL 219 40 39 javax.swing.plaf.ColorUIResource [UI] +Table.dropCellForeground [lazy] #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Table.dropLineColor [lazy] #6d8ac0 HSL 219 40 59 javax.swing.plaf.ColorUIResource [UI] +Table.dropLineShortColor [lazy] #b4c3df HSL 219 40 79 javax.swing.plaf.ColorUIResource [UI] +Table.focusCellBackground #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +Table.focusCellForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Table.focusCellHighlightBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Focused [UI] lineColor=#000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +Table.focusSelectedCellHighlightBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Selected [UI] lineColor=#000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +Table.font [active] $defaultFont [UI] +Table.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Table.gridColor #525658 HSL 200 4 33 javax.swing.plaf.ColorUIResource [UI] +Table.intercellSpacing 0,0 javax.swing.plaf.DimensionUIResource [UI] +Table.rowHeight 20 +Table.scrollPaneBorder [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatBorder [UI] +Table.selectionBackground #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +Table.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Table.selectionInactiveBackground #0f2a3d HSL 205 61 15 javax.swing.plaf.ColorUIResource [UI] +Table.selectionInactiveForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Table.showHorizontalLines false +Table.showTrailingVerticalLine false +Table.showVerticalLines false +Table.sortIconColor #aeaeae HSL 0 0 68 javax.swing.plaf.ColorUIResource [UI] + + +#---- TableHeader ---- + +TableHeader.background #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +TableHeader.bottomSeparatorColor #5f6365 HSL 200 3 38 javax.swing.plaf.ColorUIResource [UI] +TableHeader.cellBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableHeaderBorder [UI] +TableHeader.cellMargins 2,3,2,3 javax.swing.plaf.InsetsUIResource [UI] +TableHeader.focusCellBackground #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +TableHeader.font [active] $defaultFont [UI] +TableHeader.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +TableHeader.height 25 +TableHeader.separatorColor #5f6365 HSL 200 3 38 javax.swing.plaf.ColorUIResource [UI] +TableHeader.showTrailingVerticalLine false +TableHeaderUI com.formdev.flatlaf.ui.FlatTableHeaderUI + + +#---- Table ---- + +TableUI com.formdev.flatlaf.ui.FlatTableUI + + +#---- TaskPane ---- + +TaskPane.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +TaskPane.borderColor #606263 HSL 200 2 38 javax.swing.plaf.ColorUIResource [UI] +TaskPane.contentInsets 10,10,10,10 javax.swing.plaf.InsetsUIResource [UI] +TaskPane.specialTitleBackground #afafaf HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +TaskPane.specialTitleForeground #222222 HSL 0 0 13 javax.swing.plaf.ColorUIResource [UI] +TaskPane.specialTitleOver #666666 HSL 0 0 40 javax.swing.plaf.ColorUIResource [UI] +TaskPane.titleBackgroundGradientStart #4c5052 HSL 200 4 31 javax.swing.plaf.ColorUIResource [UI] +TaskPane.titleForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +TaskPane.titleOver #888888 HSL 0 0 53 javax.swing.plaf.ColorUIResource [UI] + + +#---- TaskPaneContainer ---- + +TaskPaneContainer.background #3e434c HSL 219 10 27 javax.swing.plaf.ColorUIResource [UI] +TaskPaneContainer.border [lazy] 10,10,10,10 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] + + +#---- TextArea ---- + +TextArea.background #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +TextArea.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +TextArea.caretBlinkRate 500 +TextArea.caretForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +TextArea.disabledBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +TextArea.font [active] $defaultFont [UI] +TextArea.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +TextArea.inactiveBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +TextArea.inactiveForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +TextArea.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +TextArea.selectionBackground #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +TextArea.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +TextAreaUI com.formdev.flatlaf.ui.FlatTextAreaUI + + +#---- TextComponent ---- + +TextComponent.arc 0 +TextComponent.selectAllOnFocusPolicy once +TextComponent.selectAllOnMouseClick false + + +#---- TextField ---- + +TextField.background #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +TextField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] +TextField.caretBlinkRate 500 +TextField.caretForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +TextField.darkShadow #7a7d7f HSL 204 2 49 javax.swing.plaf.ColorUIResource [UI] +TextField.disabledBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +TextField.font [active] $defaultFont [UI] +TextField.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +TextField.highlight #232324 HSL 240 1 14 javax.swing.plaf.ColorUIResource [UI] +TextField.iconTextGap 4 +TextField.inactiveBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +TextField.inactiveForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +TextField.light #2f3031 HSL 210 2 19 javax.swing.plaf.ColorUIResource [UI] +TextField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +TextField.placeholderForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +TextField.selectionBackground #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +TextField.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +TextField.shadow #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +TextFieldUI com.formdev.flatlaf.ui.FlatTextFieldUI + + +#---- TextPane ---- + +TextPane.background #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +TextPane.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +TextPane.caretBlinkRate 500 +TextPane.caretForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +TextPane.disabledBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +TextPane.font [active] $defaultFont [UI] +TextPane.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +TextPane.inactiveBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +TextPane.inactiveForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +TextPane.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +TextPane.selectionBackground #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +TextPane.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +TextPaneUI com.formdev.flatlaf.ui.FlatTextPaneUI + + +#---- TitlePane ---- + +TitlePane.background #303234 HSL 210 4 20 javax.swing.plaf.ColorUIResource [UI] +TitlePane.buttonHoverBackground #55585c HSL 214 4 35 com.formdev.flatlaf.util.DerivedColor [UI] lighten(15% autoInverse) +TitlePane.buttonMaximizedHeight 22 +TitlePane.buttonPressedBackground #484c4f HSL 206 5 30 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) +TitlePane.buttonSize 44,30 javax.swing.plaf.DimensionUIResource [UI] +TitlePane.centerTitle false +TitlePane.centerTitleIfMenuBarEmbedded true +TitlePane.closeHoverBackground #c42b1c HSL 5 75 44 javax.swing.plaf.ColorUIResource [UI] +TitlePane.closeHoverForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TitlePane.closeIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowCloseIcon [UI] +TitlePane.closePressedBackground #c42b1ce6 90% HSLA 5 75 44 90 javax.swing.plaf.ColorUIResource [UI] +TitlePane.closePressedForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TitlePane.embeddedForeground #959595 HSL 0 0 58 javax.swing.plaf.ColorUIResource [UI] +TitlePane.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +TitlePane.icon [lazy] 16,16 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) +TitlePane.iconMargins 3,8,3,8 javax.swing.plaf.InsetsUIResource [UI] +TitlePane.iconSize 16,16 javax.swing.plaf.DimensionUIResource [UI] +TitlePane.iconifyIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowIconifyIcon [UI] +TitlePane.inactiveBackground #303234 HSL 210 4 20 javax.swing.plaf.ColorUIResource [UI] +TitlePane.inactiveForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +TitlePane.maximizeIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowMaximizeIcon [UI] +TitlePane.menuBarEmbedded true +TitlePane.menuBarTitleGap 20 +TitlePane.noIconLeftGap 8 +TitlePane.restoreIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowRestoreIcon [UI] +TitlePane.showIcon true +TitlePane.titleMargins 3,0,3,0 javax.swing.plaf.InsetsUIResource [UI] +TitlePane.unifiedBackground true +TitlePane.useWindowDecorations true + + +#---- TitledBorder ---- + +TitledBorder.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#505254 HSL 210 2 32 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +TitledBorder.font [active] $defaultFont [UI] +TitledBorder.titleColor #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] + + +#---- TitledPanel ---- + +TitledPanelUI com.formdev.flatlaf.swingx.ui.FlatTitledPanelUI + + +#---- ToggleButton ---- + +ToggleButton.background #4e5052 HSL 210 2 31 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatButtonBorder [UI] +ToggleButton.darkShadow #7a7d7f HSL 204 2 49 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.disabledBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.disabledSelectedBackground #55585a HSL 204 3 34 com.formdev.flatlaf.util.DerivedColor [UI] lighten(3% autoInverse) +ToggleButton.disabledText #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.font [active] $defaultFont [UI] +ToggleButton.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.highlight #232324 HSL 240 1 14 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.iconTextGap 4 +ToggleButton.light #2f3031 HSL 210 2 19 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.margin 2,14,2,14 javax.swing.plaf.InsetsUIResource [UI] +ToggleButton.pressedBackground #5d5f62 HSL 216 3 37 com.formdev.flatlaf.util.DerivedColor [UI] lighten(6% autoInverse) +ToggleButton.rollover true +ToggleButton.selectedBackground #676a6c HSL 204 2 41 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) +ToggleButton.selectedForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.shadow #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.tab.disabledUnderlineColor #747a7e HSL 204 4 47 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.tab.focusBackground #404b5d HSL 217 18 31 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.tab.hoverBackground #303234 HSL 210 4 20 com.formdev.flatlaf.util.DerivedColor [UI] darken(5%) +ToggleButton.tab.underlineColor #4c87c8 HSL 211 53 54 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.tab.underlineHeight 2 +ToggleButton.textIconGap 4 +ToggleButton.textShiftOffset 0 +ToggleButton.toolbar.hoverBackground #505355 HSL 204 3 32 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1% autoInverse) +ToggleButton.toolbar.pressedBackground #585a5c HSL 210 2 35 com.formdev.flatlaf.util.DerivedColor [UI] lighten(4% autoInverse) +ToggleButton.toolbar.selectedBackground #5f6264 HSL 204 3 38 com.formdev.flatlaf.util.DerivedColor [UI] lighten(7% autoInverse) +ToggleButtonUI com.formdev.flatlaf.ui.FlatToggleButtonUI + + +#---- ToolBar ---- + +ToolBar.arrowKeysOnlyNavigation true +ToolBar.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +ToolBar.border [lazy] 2,2,2,2 false com.formdev.flatlaf.ui.FlatToolBarBorder [UI] +ToolBar.borderMargins 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] +ToolBar.darkShadow #7a7d7f HSL 204 2 49 javax.swing.plaf.ColorUIResource [UI] +ToolBar.dockingBackground #303234 HSL 210 4 20 javax.swing.plaf.ColorUIResource [UI] +ToolBar.dockingForeground #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +ToolBar.floatable false +ToolBar.floatingBackground #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +ToolBar.floatingForeground #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +ToolBar.focusableButtons false +ToolBar.font [active] $defaultFont [UI] +ToolBar.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +ToolBar.gripColor #aeaeae HSL 0 0 68 javax.swing.plaf.ColorUIResource [UI] +ToolBar.highlight #232324 HSL 240 1 14 javax.swing.plaf.ColorUIResource [UI] +ToolBar.isRollover true +ToolBar.light #2f3031 HSL 210 2 19 javax.swing.plaf.ColorUIResource [UI] +ToolBar.separatorColor #505254 HSL 210 2 32 javax.swing.plaf.ColorUIResource [UI] +ToolBar.separatorWidth 7 +ToolBar.shadow #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +ToolBar.spacingBorder [lazy] 1,2,1,2 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] + + +#---- ToolBarSeparator ---- + +ToolBarSeparatorUI com.formdev.flatlaf.ui.FlatToolBarSeparatorUI + + +#---- ToolBar ---- + +ToolBarUI com.formdev.flatlaf.ui.FlatToolBarUI + + +#---- ToolTip ---- + +ToolTip.background #1e2021 HSL 200 5 12 javax.swing.plaf.ColorUIResource [UI] +ToolTip.border [lazy] 4,6,4,6 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +ToolTip.font [active] $defaultFont [UI] +ToolTip.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] + + +#---- ToolTipManager ---- + +ToolTipManager.enableToolTipMode activeApplication + + +#---- ToolTip ---- + +ToolTipUI com.formdev.flatlaf.ui.FlatToolTipUI + + +#---- Tree ---- + +Tree.background #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +Tree.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +Tree.changeSelectionWithFocus true +Tree.closedIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeClosedIcon [UI] +Tree.collapsedIcon [lazy] 11,11 com.formdev.flatlaf.icons.FlatTreeCollapsedIcon [UI] +Tree.drawsFocusBorderAroundIcon false +Tree.dropCellBackground [lazy] #3c588b HSL 219 40 39 javax.swing.plaf.ColorUIResource [UI] +Tree.dropCellForeground [lazy] #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Tree.dropLineColor [lazy] #6d8ac0 HSL 219 40 59 javax.swing.plaf.ColorUIResource [UI] +Tree.editorBorder [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +Tree.expandedIcon [lazy] 11,11 com.formdev.flatlaf.icons.FlatTreeExpandedIcon [UI] +Tree.font [active] $defaultFont [UI] +Tree.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Tree.hash #525658 HSL 200 4 33 javax.swing.plaf.ColorUIResource [UI] +Tree.icon.closedColor #aeaeae HSL 0 0 68 javax.swing.plaf.ColorUIResource [UI] +Tree.icon.collapsedColor #aeaeae HSL 0 0 68 javax.swing.plaf.ColorUIResource [UI] +Tree.icon.expandedColor #aeaeae HSL 0 0 68 javax.swing.plaf.ColorUIResource [UI] +Tree.icon.leafColor #aeaeae HSL 0 0 68 javax.swing.plaf.ColorUIResource [UI] +Tree.icon.openColor #aeaeae HSL 0 0 68 javax.swing.plaf.ColorUIResource [UI] +Tree.leafIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeLeafIcon [UI] +Tree.leftChildIndent 7 +Tree.lineTypeDashed false +Tree.openIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeOpenIcon [UI] +Tree.paintLines false +Tree.rendererFillBackground false +Tree.rendererMargins 1,2,1,2 javax.swing.plaf.InsetsUIResource [UI] +Tree.repaintWholeRow true +Tree.rightChildIndent 11 +Tree.rowHeight 0 +Tree.scrollsOnExpand true +Tree.selectionBackground #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +Tree.selectionBorderColor #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Tree.selectionForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Tree.selectionInactiveBackground #0f2a3d HSL 205 61 15 javax.swing.plaf.ColorUIResource [UI] +Tree.selectionInactiveForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Tree.showCellFocusIndicator false +Tree.textBackground #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +Tree.textForeground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Tree.timeFactor 1000 +Tree.wideSelection true +TreeUI com.formdev.flatlaf.ui.FlatTreeUI + + +#---- TristateCheckBox ---- + +TristateCheckBox.clearMixed.clientProperty length=2 [Ljava.lang.Object; + [0] JButton.selectedState + [1] null +TristateCheckBox.setMixed.clientProperty length=2 [Ljava.lang.Object; + [0] JButton.selectedState + [1] indeterminate + + +#---- UIColorHighlighter ---- + +UIColorHighlighter.stripingBackground #525658 HSL 200 4 33 javax.swing.plaf.ColorUIResource [UI] + + +#---- Viewport ---- + +Viewport.background #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +Viewport.font [active] $defaultFont [UI] +Viewport.foreground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +ViewportUI com.formdev.flatlaf.ui.FlatViewportUI + + +#---- [style] ---- + +[style].h00 font: $h00.font +[style].h0 font: $h0.font +[style].h1.regular font: $h1.regular.font +[style].h1 font: $h1.font +[style].h2.regular font: $h2.regular.font +[style].h2 font: $h2.font +[style].h3.regular font: $h3.regular.font +[style].h3 font: $h3.font +[style].h4 font: $h4.font +[style].large font: $large.font +[style].light font: $light.font +[style].medium font: $medium.font +[style].mini font: $mini.font +[style].monospaced font: $monospaced.font +[style].semibold font: $semibold.font +[style].small font: $small.font + + +#---- [style]Button ---- + +[style]Button.clearButton icon: com.formdev.flatlaf.icons.FlatClearIcon; focusable: false; toolbar.margin: 1,1,1,1; toolbar.spacingInsets: 1,1,1,1; toolbar.hoverBackground: null; toolbar.pressedBackground: null +[style]Button.inTextField focusable: false; toolbar.margin: 1,1,1,1; toolbar.spacingInsets: 1,1,1,1; toolbar.hoverBackground: lighten($TextField.background,5%); toolbar.pressedBackground: lighten($TextField.background,10%); toolbar.selectedBackground: lighten($TextField.background,15%) + + +#---- [style]ToggleButton ---- + +[style]ToggleButton.inTextField focusable: false; toolbar.margin: 1,1,1,1; toolbar.spacingInsets: 1,1,1,1; toolbar.hoverBackground: lighten($TextField.background,5%); toolbar.pressedBackground: lighten($TextField.background,10%); toolbar.selectedBackground: lighten($TextField.background,15%) + + +#---- [style]ToolBar ---- + +[style]ToolBar.inTextField floatable: false; opaque: false; borderMargins: 0,0,0,0 + + +#---- [style]ToolBarSeparator ---- + +[style]ToolBarSeparator.inTextField separatorWidth: 3 + + +#---- ---- + +activeCaption #434e60 HSL 217 18 32 javax.swing.plaf.ColorUIResource [UI] +activeCaptionBorder #434e60 HSL 217 18 32 javax.swing.plaf.ColorUIResource [UI] +activeCaptionText #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +control #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +controlDkShadow #7a7d7f HSL 204 2 49 javax.swing.plaf.ColorUIResource [UI] +controlHighlight #2f3031 HSL 210 2 19 javax.swing.plaf.ColorUIResource [UI] +controlLtHighlight #232324 HSL 240 1 14 javax.swing.plaf.ColorUIResource [UI] +controlShadow #616365 HSL 210 2 39 javax.swing.plaf.ColorUIResource [UI] +controlText #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +defaultFont Segoe UI plain 12 javax.swing.plaf.FontUIResource [UI] +desktop #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] + + +#---- h0 ---- + +h0.font [active] Segoe UI plain 30 javax.swing.plaf.FontUIResource [UI] + + +#---- h00 ---- + +h00.font [active] Segoe UI plain 36 javax.swing.plaf.FontUIResource [UI] + + +#---- h1 ---- + +h1.font [active] Segoe UI Semibold plain 24 javax.swing.plaf.FontUIResource [UI] +h1.regular.font [active] Segoe UI plain 24 javax.swing.plaf.FontUIResource [UI] + + +#---- h2 ---- + +h2.font [active] Segoe UI Semibold plain 18 javax.swing.plaf.FontUIResource [UI] +h2.regular.font [active] Segoe UI plain 18 javax.swing.plaf.FontUIResource [UI] + + +#---- h3 ---- + +h3.font [active] Segoe UI Semibold plain 15 javax.swing.plaf.FontUIResource [UI] +h3.regular.font [active] Segoe UI plain 15 javax.swing.plaf.FontUIResource [UI] + + +#---- h4 ---- + +h4.font [active] Segoe UI bold 12 javax.swing.plaf.FontUIResource [UI] + + +#---- html ---- + +html.missingImage [lazy] 38,38 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) +html.pendingImage [lazy] 38,38 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) + + +#---- ---- + +inactiveCaption #393c3d HSL 195 3 23 javax.swing.plaf.ColorUIResource [UI] +inactiveCaptionBorder #393c3d HSL 195 3 23 javax.swing.plaf.ColorUIResource [UI] +inactiveCaptionText #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +info #1e2021 HSL 200 5 12 javax.swing.plaf.ColorUIResource [UI] +infoText #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] + + +#---- laf ---- + +laf.dark true +laf.scaleFactor [active] 1.0 + + +#---- large ---- + +large.font [active] Segoe UI plain 14 javax.swing.plaf.FontUIResource [UI] + + +#---- light ---- + +light.font [active] Segoe UI Light plain 12 javax.swing.plaf.FontUIResource [UI] + + +#---- medium ---- + +medium.font [active] Segoe UI plain 11 javax.swing.plaf.FontUIResource [UI] + + +#---- ---- + +menu #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +menuText #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] + + +#---- mini ---- + +mini.font [active] Segoe UI plain 9 javax.swing.plaf.FontUIResource [UI] + + +#---- monospaced ---- + +monospaced.font [active] Consolas plain 12 javax.swing.plaf.FontUIResource [UI] + + +#---- ---- + +scrollbar #3e4244 HSL 200 5 25 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%) + + +#---- semibold ---- + +semibold.font [active] Segoe UI Semibold plain 12 javax.swing.plaf.FontUIResource [UI] + + +#---- small ---- + +small.font [active] Segoe UI plain 10 javax.swing.plaf.FontUIResource [UI] + + +#---- swingx/TaskPane ---- + +swingx/TaskPaneUI com.formdev.flatlaf.swingx.ui.FlatTaskPaneUI + + +#---- ---- + +text #46494b HSL 204 3 28 javax.swing.plaf.ColorUIResource [UI] +textHighlight #4b6eaf HSL 219 40 49 javax.swing.plaf.ColorUIResource [UI] +textHighlightText #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +textInactiveText #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +textText #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +window #3c3f41 HSL 204 4 25 javax.swing.plaf.ColorUIResource [UI] +windowBorder #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +windowText #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] diff --git a/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0_202-mac.txt b/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0_202-mac.txt deleted file mode 100644 index ca6fa9ba..00000000 --- a/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0_202-mac.txt +++ /dev/null @@ -1,33 +0,0 @@ -- OS Windows 10 -+ OS Mac OS X - -+ ComboBox.showPopupOnNavigation true - -- Menu.shortcutKeys length=1 [I - [0] 8 -+ Menu.shortcutKeys length=1 [I - [0] 10 - -- MenuItem.acceleratorDelimiter - -+ MenuItem.acceleratorDelimiter - -+ OptionPane.isYesLast true - -- ProgressBar.font [active] Segoe UI plain 10 javax.swing.plaf.FontUIResource [UI] -+ ProgressBar.font [active] .SF NS Text plain 11 javax.swing.plaf.FontUIResource [UI] - -- ScrollBar.hoverThumbWithTrack false -+ ScrollBar.hoverThumbWithTrack true - -- ScrollBar.minimumThumbSize 10,10 javax.swing.plaf.DimensionUIResource [UI] -+ ScrollBar.minimumThumbSize 18,18 javax.swing.plaf.DimensionUIResource [UI] - -- ScrollBar.thumbArc 0 -+ ScrollBar.thumbArc 999 - -- ScrollBar.thumbInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -+ ScrollBar.thumbInsets 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] - -- defaultFont Segoe UI plain 12 javax.swing.plaf.FontUIResource [UI] -+ defaultFont .SF NS Text plain 13 javax.swing.plaf.FontUIResource [UI] - diff --git a/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0_202.txt b/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0_202.txt deleted file mode 100644 index 69102d69..00000000 --- a/flatlaf-testing/dumps/uidefaults/FlatDarkLaf_1.8.0_202.txt +++ /dev/null @@ -1,1417 +0,0 @@ -Class com.formdev.flatlaf.FlatDarkLaf -ID FlatLaf - FlatLaf Dark -Name FlatLaf Dark -Java 1.8.0_202 -OS Windows 10 - - -#---- ---- - -AATextInfoPropertyKey [unknown type] sun.swing.SwingUtilities2$AATextInfo - - -#---- Actions ---- - -Actions.Blue #3592c4 javax.swing.plaf.ColorUIResource [UI] -Actions.Green #499c54 javax.swing.plaf.ColorUIResource [UI] -Actions.Grey #afb1b3 javax.swing.plaf.ColorUIResource [UI] -Actions.GreyInline #7f8b91 javax.swing.plaf.ColorUIResource [UI] -Actions.Red #c75450 javax.swing.plaf.ColorUIResource [UI] -Actions.Yellow #f0a732 javax.swing.plaf.ColorUIResource [UI] - - -#---- AuditoryCues ---- - -AuditoryCues.allAuditoryCues length=13 [Ljava.lang.Object; - [0] CheckBoxMenuItem.commandSound - [1] InternalFrame.closeSound - [2] InternalFrame.maximizeSound - [3] InternalFrame.minimizeSound - [4] InternalFrame.restoreDownSound - [5] InternalFrame.restoreUpSound - [6] MenuItem.commandSound - [7] OptionPane.errorSound - [8] OptionPane.informationSound - [9] OptionPane.questionSound - [10] OptionPane.warningSound - [11] PopupMenu.popupSound - [12] RadioButtonMenuItem.commandSound -AuditoryCues.cueList length=13 [Ljava.lang.Object; - [0] CheckBoxMenuItem.commandSound - [1] InternalFrame.closeSound - [2] InternalFrame.maximizeSound - [3] InternalFrame.minimizeSound - [4] InternalFrame.restoreDownSound - [5] InternalFrame.restoreUpSound - [6] MenuItem.commandSound - [7] OptionPane.errorSound - [8] OptionPane.informationSound - [9] OptionPane.questionSound - [10] OptionPane.warningSound - [11] PopupMenu.popupSound - [12] RadioButtonMenuItem.commandSound -AuditoryCues.noAuditoryCues length=1 [Ljava.lang.Object; - [0] mute - - -#---- BusyLabel ---- - -BusyLabelUI com.formdev.flatlaf.swingx.ui.FlatBusyLabelUI - - -#---- Button ---- - -Button.arc 6 -Button.background #4c5052 javax.swing.plaf.ColorUIResource [UI] -Button.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatButtonBorder [UI] -Button.borderColor #5e6060 javax.swing.plaf.ColorUIResource [UI] -Button.borderWidth 1 -Button.darkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI] -Button.default.background #365880 javax.swing.plaf.ColorUIResource [UI] -Button.default.boldText true -Button.default.borderColor #4c708c javax.swing.plaf.ColorUIResource [UI] -Button.default.borderWidth 1 -Button.default.focusColor #43688c javax.swing.plaf.ColorUIResource [UI] -Button.default.focusedBorderColor #537699 javax.swing.plaf.ColorUIResource [UI] -Button.default.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Button.default.hoverBackground #3b5f8b com.formdev.flatlaf.util.DerivedColor [UI] lighten(3% autoInverse) -Button.default.hoverBorderColor #537699 javax.swing.plaf.ColorUIResource [UI] -Button.default.pressedBackground #3f6796 com.formdev.flatlaf.util.DerivedColor [UI] lighten(6% autoInverse) -Button.defaultButtonFollowsFocus false -Button.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -Button.disabledBorderColor #5e6060 javax.swing.plaf.ColorUIResource [UI] -Button.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI] -Button.disabledSelectedBackground #53585a com.formdev.flatlaf.util.DerivedColor [UI] lighten(3% autoInverse) -Button.disabledText #888888 javax.swing.plaf.ColorUIResource [UI] -Button.focusedBorderColor #466d94 javax.swing.plaf.ColorUIResource [UI] -Button.font [active] $defaultFont [UI] -Button.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Button.highlight #242424 javax.swing.plaf.ColorUIResource [UI] -Button.hoverBackground #53585a com.formdev.flatlaf.util.DerivedColor [UI] lighten(3% autoInverse) -Button.hoverBorderColor #466d94 javax.swing.plaf.ColorUIResource [UI] -Button.iconTextGap 4 -Button.innerFocusWidth 1 -Button.light #313131 javax.swing.plaf.ColorUIResource [UI] -Button.margin 2,14,2,14 javax.swing.plaf.InsetsUIResource [UI] -Button.minimumWidth 72 -Button.pressedBackground #5b5f62 com.formdev.flatlaf.util.DerivedColor [UI] lighten(6% autoInverse) -Button.rollover true -Button.selectedBackground #656a6c com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) -Button.selectedForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Button.shadow #646464 javax.swing.plaf.ColorUIResource [UI] -Button.textIconGap 4 -Button.textShiftOffset 0 -Button.toolbar.hoverBackground #4e5355 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1% autoInverse) -Button.toolbar.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] -Button.toolbar.pressedBackground #565a5d com.formdev.flatlaf.util.DerivedColor [UI] lighten(4% autoInverse) -Button.toolbar.selectedBackground #5d6265 com.formdev.flatlaf.util.DerivedColor [UI] lighten(7% autoInverse) -Button.toolbar.spacingInsets 1,2,1,2 javax.swing.plaf.InsetsUIResource [UI] -ButtonUI com.formdev.flatlaf.ui.FlatButtonUI - - -#---- Caret ---- - -Caret.width [active] 1 - - -#---- CheckBox ---- - -CheckBox.arc 4 -CheckBox.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -CheckBox.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -CheckBox.disabledText #888888 javax.swing.plaf.ColorUIResource [UI] -CheckBox.font [active] $defaultFont [UI] -CheckBox.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.background #43494a javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.borderColor #6b6b6b javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.checkmarkColor #a7a7a7 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.disabledBorderColor #545556 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.disabledCheckmarkColor #606060 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.focusedBackground #466d944d 30% javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.focusedBorderColor #466d94 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.hoverBackground #4a5152 com.formdev.flatlaf.util.DerivedColor [UI] lighten(3% autoInverse) -CheckBox.icon.hoverBorderColor #466d94 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.pressedBackground #52595a com.formdev.flatlaf.util.DerivedColor [UI] lighten(6% autoInverse) -CheckBox.icon.selectedBackground #43494a javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.selectedBorderColor #6b6b6b javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxIcon [UI] -CheckBox.iconTextGap 4 -CheckBox.icon[filled].checkmarkColor #43494a javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon[filled].selectedBackground #a7a7a7 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon[filled].selectedBorderColor #a7a7a7 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon[filled].selectedHoverBackground #9f9f9f com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) -CheckBox.icon[filled].selectedPressedBackground #989898 com.formdev.flatlaf.util.DerivedColor [UI] darken(6% autoInverse) -CheckBox.margin 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] -CheckBox.rollover true -CheckBox.textIconGap 4 -CheckBox.textShiftOffset 0 - - -#---- CheckBoxMenuItem ---- - -CheckBoxMenuItem.acceleratorFont [active] $defaultFont [UI] -CheckBoxMenuItem.acceleratorForeground #959595 javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.acceleratorSelectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] -CheckBoxMenuItem.background #303234 javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] -CheckBoxMenuItem.borderPainted true -CheckBoxMenuItem.checkIcon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxMenuItemIcon [UI] -CheckBoxMenuItem.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.font [active] $defaultFont [UI] -CheckBoxMenuItem.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] -CheckBoxMenuItem.opaque false -CheckBoxMenuItem.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItemUI com.formdev.flatlaf.ui.FlatCheckBoxMenuItemUI - - -#---- CheckBox ---- - -CheckBoxUI com.formdev.flatlaf.ui.FlatCheckBoxUI - - -#---- ColorChooser ---- - -ColorChooser.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -ColorChooser.font [active] $defaultFont [UI] -ColorChooser.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -ColorChooser.swatchesDefaultRecentColor #3c3f41 javax.swing.plaf.ColorUIResource [UI] -ColorChooser.swatchesRecentSwatchSize [active] 16,16 javax.swing.plaf.DimensionUIResource [UI] -ColorChooser.swatchesSwatchSize [active] 16,16 javax.swing.plaf.DimensionUIResource [UI] -ColorChooserUI com.formdev.flatlaf.ui.FlatColorChooserUI - - -#---- ComboBox ---- - -ComboBox.background #45494a javax.swing.plaf.ColorUIResource [UI] -ComboBox.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRoundBorder [UI] -ComboBox.buttonArrowColor #9a9da1 javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonBackground #45494a javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonDarkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonDisabledArrowColor #5a5d61 javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonEditableBackground #404445 javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonHighlight #242424 javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonHoverArrowColor #b4b7ba com.formdev.flatlaf.util.DerivedColor [UI] lighten(10%) -ComboBox.buttonPressedArrowColor #cfd0d2 com.formdev.flatlaf.util.DerivedColor [UI] lighten(20%) -ComboBox.buttonShadow #646464 javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonStyle auto -ComboBox.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -ComboBox.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI] -ComboBox.editorColumns 0 -ComboBox.font [active] $defaultFont [UI] -ComboBox.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -ComboBox.isEnterSelectablePopup false -ComboBox.maximumRowCount 15 -ComboBox.minimumWidth 72 -ComboBox.noActionOnKeyNavigation false -ComboBox.padding 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -ComboBox.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI] -ComboBox.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -ComboBox.timeFactor 1000 -ComboBoxUI com.formdev.flatlaf.ui.FlatComboBoxUI - - -#---- Component ---- - -Component.arc 5 -Component.arrowType chevron -Component.borderColor #646464 javax.swing.plaf.ColorUIResource [UI] -Component.custom.borderColor #bf4040 com.formdev.flatlaf.util.DerivedColor [UI] desaturate(50% relative) -Component.disabledBorderColor #646464 javax.swing.plaf.ColorUIResource [UI] -Component.error.borderColor #725555 javax.swing.plaf.ColorUIResource [UI] -Component.error.focusedBorderColor #8b3c3c javax.swing.plaf.ColorUIResource [UI] -Component.focusColor #3d6185 javax.swing.plaf.ColorUIResource [UI] -Component.focusWidth 0 -Component.focusedBorderColor #466d94 javax.swing.plaf.ColorUIResource [UI] -Component.grayFilter [lazy] [unknown type] com.formdev.flatlaf.util.GrayFilter -Component.hideMnemonics true -Component.innerFocusWidth 0.5 -Component.innerOutlineWidth 1.0 -Component.linkColor #589df6 javax.swing.plaf.ColorUIResource [UI] -Component.minimumWidth 64 -Component.warning.borderColor #725627 javax.swing.plaf.ColorUIResource [UI] -Component.warning.focusedBorderColor #ac7920 javax.swing.plaf.ColorUIResource [UI] - - -#---- DatePicker ---- - -DatePickerUI com.formdev.flatlaf.swingx.ui.FlatDatePickerUI - - -#---- Desktop ---- - -Desktop.background #3e434c javax.swing.plaf.ColorUIResource [UI] -Desktop.minOnScreenInsets 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] - - -#---- DesktopIcon ---- - -DesktopIcon.background #555c68 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) -DesktopIcon.border [lazy] 4,4,4,4 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -DesktopIcon.closeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameCloseIcon [UI] -DesktopIcon.closeSize 20,20 javax.swing.plaf.DimensionUIResource [UI] -DesktopIcon.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -DesktopIcon.iconSize 64,64 javax.swing.plaf.DimensionUIResource [UI] -DesktopIconUI com.formdev.flatlaf.ui.FlatDesktopIconUI - - -#---- DesktopPane ---- - -DesktopPaneUI com.formdev.flatlaf.ui.FlatDesktopPaneUI - - -#---- EditorPane ---- - -EditorPane.background #45494a javax.swing.plaf.ColorUIResource [UI] -EditorPane.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -EditorPane.caretBlinkRate 500 -EditorPane.caretForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -EditorPane.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -EditorPane.font [active] $defaultFont [UI] -EditorPane.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -EditorPane.inactiveBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -EditorPane.inactiveForeground #888888 javax.swing.plaf.ColorUIResource [UI] -EditorPane.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -EditorPane.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI] -EditorPane.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -EditorPaneUI com.formdev.flatlaf.ui.FlatEditorPaneUI - - -#---- FileChooser ---- - -FileChooser.detailsViewIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserDetailsViewIcon [UI] -FileChooser.homeFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserHomeFolderIcon [UI] -FileChooser.listViewIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserListViewIcon [UI] -FileChooser.newFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserNewFolderIcon [UI] -FileChooser.readOnly false -FileChooser.upFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserUpFolderIcon [UI] -FileChooser.useSystemExtensionHiding true -FileChooser.usesSingleFilePane true -FileChooserUI com.formdev.flatlaf.ui.FlatFileChooserUI - - -#---- FileView ---- - -FileView.computerIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewComputerIcon [UI] -FileView.directoryIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewDirectoryIcon [UI] -FileView.fileIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewFileIcon [UI] -FileView.floppyDriveIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewFloppyDriveIcon [UI] -FileView.hardDriveIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewHardDriveIcon [UI] - - -#---- FormattedTextField ---- - -FormattedTextField.background #45494a javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] -FormattedTextField.caretBlinkRate 500 -FormattedTextField.caretForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.font [active] $defaultFont [UI] -FormattedTextField.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.inactiveBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.inactiveForeground #888888 javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -FormattedTextField.placeholderForeground #888888 javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -FormattedTextFieldUI com.formdev.flatlaf.ui.FlatFormattedTextFieldUI - - -#---- Header ---- - -HeaderUI com.formdev.flatlaf.swingx.ui.FlatHeaderUI - - -#---- HelpButton ---- - -HelpButton.background #43494a javax.swing.plaf.ColorUIResource [UI] -HelpButton.borderColor #6b6b6b javax.swing.plaf.ColorUIResource [UI] -HelpButton.borderWidth 1 -HelpButton.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -HelpButton.disabledBorderColor #545556 javax.swing.plaf.ColorUIResource [UI] -HelpButton.disabledQuestionMarkColor #606060 javax.swing.plaf.ColorUIResource [UI] -HelpButton.focusedBorderColor #466d94 javax.swing.plaf.ColorUIResource [UI] -HelpButton.hoverBackground #4a5152 com.formdev.flatlaf.util.DerivedColor [UI] lighten(3% autoInverse) -HelpButton.hoverBorderColor #466d94 javax.swing.plaf.ColorUIResource [UI] -HelpButton.icon [lazy] 22,22 com.formdev.flatlaf.icons.FlatHelpButtonIcon [UI] -HelpButton.innerFocusWidth 1 -HelpButton.pressedBackground #52595a com.formdev.flatlaf.util.DerivedColor [UI] lighten(6% autoInverse) -HelpButton.questionMarkColor #a7a7a7 javax.swing.plaf.ColorUIResource [UI] - - -#---- Hyperlink ---- - -Hyperlink.disabledText #888888 javax.swing.plaf.ColorUIResource [UI] -Hyperlink.linkColor #589df6 javax.swing.plaf.ColorUIResource [UI] -Hyperlink.visitedColor #589df6 javax.swing.plaf.ColorUIResource [UI] -HyperlinkUI com.formdev.flatlaf.swingx.ui.FlatHyperlinkUI - - -#---- InternalFrame ---- - -InternalFrame.activeBorderColor #2b2d2e javax.swing.plaf.ColorUIResource [UI] -InternalFrame.activeDropShadowInsets 5,5,6,6 javax.swing.plaf.InsetsUIResource [UI] -InternalFrame.activeDropShadowOpacity 0.5 -InternalFrame.activeTitleBackground #242526 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.activeTitleForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -InternalFrame.border [lazy] 6,6,6,6 false com.formdev.flatlaf.ui.FlatInternalFrameUI$FlatInternalFrameBorder [UI] -InternalFrame.borderColor #3c3f41 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.borderDarkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI] -InternalFrame.borderHighlight #242424 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.borderLight #313131 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.borderLineWidth 1 -InternalFrame.borderMargins 6,6,6,6 javax.swing.plaf.InsetsUIResource [UI] -InternalFrame.borderShadow #646464 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.buttonHoverBackground #3d3f40 com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) -InternalFrame.buttonPressedBackground #56585a com.formdev.flatlaf.util.DerivedColor [UI] lighten(20% autoInverse) -InternalFrame.buttonSize 24,24 javax.swing.plaf.DimensionUIResource [UI] -InternalFrame.closeHoverBackground [lazy] #c75450 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.closeHoverForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -InternalFrame.closeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameCloseIcon [UI] -InternalFrame.closePressedBackground [lazy] #ad3b37 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.closePressedForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -InternalFrame.dropShadowPainted true -InternalFrame.icon [lazy] 16,16 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) -InternalFrame.iconifyIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameIconifyIcon [UI] -InternalFrame.inactiveBorderColor #353739 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.inactiveDropShadowInsets 3,3,4,4 javax.swing.plaf.InsetsUIResource [UI] -InternalFrame.inactiveDropShadowOpacity 0.75 -InternalFrame.inactiveTitleBackground #303234 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.inactiveTitleForeground #888888 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.maximizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameMaximizeIcon [UI] -InternalFrame.minimizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameRestoreIcon [UI] -InternalFrame.titleFont [active] $defaultFont [UI] - - -#---- InternalFrameTitlePane ---- - -InternalFrameTitlePane.border [lazy] 0,8,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -InternalFrameTitlePane.closeButtonOpacity true -InternalFrameTitlePane.iconifyButtonOpacity true -InternalFrameTitlePane.maximizeButtonOpacity true - - -#---- InternalFrame ---- - -InternalFrameUI com.formdev.flatlaf.ui.FlatInternalFrameUI - - -#---- JXBusyLabel ---- - -JXBusyLabel.baseColor #777777 javax.swing.plaf.ColorUIResource [UI] -JXBusyLabel.highlightColor #e0e0e0 javax.swing.plaf.ColorUIResource [UI] - - -#---- JXDatePicker ---- - -JXDatePicker.border [lazy] 1,1,1,1 false com.formdev.flatlaf.swingx.ui.FlatDatePickerBorder [UI] - - -#---- JXHeader ---- - -JXHeader.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -JXHeader.startBackground #4c5052 javax.swing.plaf.ColorUIResource [UI] - - -#---- JXMonthView ---- - -JXMonthView.arrowColor #bbbbbb javax.swing.plaf.ColorUIResource [UI] -JXMonthView.background #45494a javax.swing.plaf.ColorUIResource [UI] -JXMonthView.daysOfTheWeekForeground #aaaaaa javax.swing.plaf.ColorUIResource [UI] -JXMonthView.disabledArrowColor #888888 javax.swing.plaf.ColorUIResource [UI] -JXMonthView.flaggedDayForeground #e05555 javax.swing.plaf.ColorUIResource [UI] -JXMonthView.leadingDayForeground #888888 javax.swing.plaf.ColorUIResource [UI] -JXMonthView.monthDownFileName [lazy] 20,20 com.formdev.flatlaf.swingx.ui.FlatMonthDownIcon [UI] -JXMonthView.monthStringBackground #4c5052 javax.swing.plaf.ColorUIResource [UI] -JXMonthView.monthStringForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -JXMonthView.monthUpFileName [lazy] 20,20 com.formdev.flatlaf.swingx.ui.FlatMonthUpIcon [UI] -JXMonthView.selectedBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI] -JXMonthView.trailingDayForeground #888888 javax.swing.plaf.ColorUIResource [UI] -JXMonthView.unselectableDayForeground #e05555 javax.swing.plaf.ColorUIResource [UI] -JXMonthView.weekOfTheYearForeground #888888 javax.swing.plaf.ColorUIResource [UI] - - -#---- JXTitledPanel ---- - -JXTitledPanel.borderColor #5e6060 javax.swing.plaf.ColorUIResource [UI] -JXTitledPanel.captionInsets 4,10,4,10 javax.swing.plaf.InsetsUIResource [UI] -JXTitledPanel.titleBackground #4c5052 javax.swing.plaf.ColorUIResource [UI] -JXTitledPanel.titleForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] - - -#---- JideButton ---- - -JideButton.background #4c5052 javax.swing.plaf.ColorUIResource [UI] -JideButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -JideButton.borderColor #5e6060 javax.swing.plaf.ColorUIResource [UI] -JideButton.darkShadow #5e6060 javax.swing.plaf.ColorUIResource [UI] -JideButton.focusedBackground #4e5355 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1% autoInverse) -JideButton.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -JideButton.highlight #656a6c com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) -JideButton.light #5e6060 javax.swing.plaf.ColorUIResource [UI] -JideButton.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] -JideButton.selectedAndFocusedBackground #565a5d com.formdev.flatlaf.util.DerivedColor [UI] lighten(4% autoInverse) -JideButton.selectedBackground #5d6265 com.formdev.flatlaf.util.DerivedColor [UI] lighten(7% autoInverse) -JideButton.shadow #5e6060 javax.swing.plaf.ColorUIResource [UI] -JideButton.textIconGap [active] 4 -JideButtonUI com.formdev.flatlaf.jideoss.ui.FlatJideButtonUI - - -#---- JideLabel ---- - -JideLabel.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -JideLabel.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI] -JideLabel.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -JideLabelUI com.formdev.flatlaf.jideoss.ui.FlatJideLabelUI - - -#---- JidePopupMenu ---- - -JidePopupMenuUI com.formdev.flatlaf.jideoss.ui.FlatJidePopupMenuUI - - -#---- JideSplitButton ---- - -JideSplitButton.background #4c5052 javax.swing.plaf.ColorUIResource [UI] -JideSplitButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -JideSplitButton.buttonArrowColor #9a9da1 javax.swing.plaf.ColorUIResource [UI] -JideSplitButton.buttonDisabledArrowColor #5a5d61 javax.swing.plaf.ColorUIResource [UI] -JideSplitButton.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -JideSplitButton.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] -JideSplitButton.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -JideSplitButton.textIconGap [active] 4 -JideSplitButtonUI com.formdev.flatlaf.jideoss.ui.FlatJideSplitButtonUI - - -#---- JideTabbedPane ---- - -JideTabbedPane.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -JideTabbedPane.closeButtonLeftMargin 0 -JideTabbedPane.closeButtonRightMargin 0 -JideTabbedPane.contentBorderInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -JideTabbedPane.fitStyleBoundSize 0 -JideTabbedPane.fitStyleFirstTabMargin 0 -JideTabbedPane.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -JideTabbedPane.shadow #3c3f41 javax.swing.plaf.ColorUIResource [UI] -JideTabbedPane.tabAreaBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -JideTabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -JideTabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] -JideTabbedPane.tabRunOverlay 0 -JideTabbedPaneUI com.formdev.flatlaf.jideoss.ui.FlatJideTabbedPaneUI - - -#---- Label ---- - -Label.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -Label.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI] -Label.disabledShadow #646464 javax.swing.plaf.ColorUIResource [UI] -Label.font [active] $defaultFont [UI] -Label.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -LabelUI com.formdev.flatlaf.ui.FlatLabelUI - - -#---- List ---- - -List.background #45494a javax.swing.plaf.ColorUIResource [UI] -List.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -List.cellFocusColor #000000 javax.swing.plaf.ColorUIResource [UI] -List.cellMargins 1,6,1,6 javax.swing.plaf.InsetsUIResource [UI] -List.cellNoFocusBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatListCellBorder$Default [UI] lineColor=#000000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -List.cellRenderer [active] javax.swing.DefaultListCellRenderer$UIResource [UI] -List.dropCellBackground [lazy] #3c588b javax.swing.plaf.ColorUIResource [UI] -List.dropCellForeground [lazy] #bbbbbb javax.swing.plaf.ColorUIResource [UI] -List.dropLineColor [lazy] #6d8ac0 javax.swing.plaf.ColorUIResource [UI] -List.focusCellHighlightBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatListCellBorder$Focused [UI] lineColor=#000000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -List.focusSelectedCellHighlightBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatListCellBorder$Selected [UI] lineColor=#000000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -List.font [active] $defaultFont [UI] -List.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -List.noFocusBorder 1,1,1,1 false javax.swing.plaf.BorderUIResource$EmptyBorderUIResource [UI] -List.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI] -List.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -List.selectionInactiveBackground #0d293e javax.swing.plaf.ColorUIResource [UI] -List.selectionInactiveForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -List.showCellFocusIndicator false -List.timeFactor 1000 -ListUI com.formdev.flatlaf.ui.FlatListUI - - -#---- Menu ---- - -Menu.acceleratorFont [active] $defaultFont [UI] -Menu.acceleratorForeground #959595 javax.swing.plaf.ColorUIResource [UI] -Menu.acceleratorSelectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Menu.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuArrowIcon [UI] -Menu.background #303234 javax.swing.plaf.ColorUIResource [UI] -Menu.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] -Menu.borderPainted true -Menu.cancelMode hideLastSubmenu -Menu.crossMenuMnemonic true -Menu.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI] -Menu.font [active] $defaultFont [UI] -Menu.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Menu.icon.arrowColor #a7a7a7 javax.swing.plaf.ColorUIResource [UI] -Menu.icon.disabledArrowColor #606060 javax.swing.plaf.ColorUIResource [UI] -Menu.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] -Menu.menuPopupOffsetX 0 -Menu.menuPopupOffsetY 0 -Menu.opaque false -Menu.preserveTopLevelSelection false -Menu.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI] -Menu.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Menu.shortcutKeys length=1 [I - [0] 8 -Menu.submenuPopupOffsetX [active] -4 -Menu.submenuPopupOffsetY [active] -4 - - -#---- MenuBar ---- - -MenuBar.background #303234 javax.swing.plaf.ColorUIResource [UI] -MenuBar.border [lazy] 0,0,1,0 false com.formdev.flatlaf.ui.FlatMenuBarBorder [UI] -MenuBar.borderColor #515151 javax.swing.plaf.ColorUIResource [UI] -MenuBar.font [active] $defaultFont [UI] -MenuBar.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -MenuBar.highlight #242424 javax.swing.plaf.ColorUIResource [UI] -MenuBar.hoverBackground #484c4f com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) -MenuBar.itemMargins 3,8,3,8 javax.swing.plaf.InsetsUIResource [UI] -MenuBar.shadow #646464 javax.swing.plaf.ColorUIResource [UI] -MenuBar.windowBindings length=2 [Ljava.lang.Object; - [0] F10 - [1] takeFocus -MenuBarUI com.formdev.flatlaf.ui.FlatMenuBarUI - - -#---- MenuItem ---- - -MenuItem.acceleratorArrowGap 2 -MenuItem.acceleratorDelimiter - -MenuItem.acceleratorFont [active] $defaultFont [UI] -MenuItem.acceleratorForeground #959595 javax.swing.plaf.ColorUIResource [UI] -MenuItem.acceleratorSelectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -MenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] -MenuItem.background #303234 javax.swing.plaf.ColorUIResource [UI] -MenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] -MenuItem.borderPainted true -MenuItem.checkBackground #3c588b com.formdev.flatlaf.util.DerivedColor [UI] darken(10%) -MenuItem.checkMargins 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] -MenuItem.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI] -MenuItem.font [active] $defaultFont [UI] -MenuItem.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -MenuItem.iconTextGap 6 -MenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] -MenuItem.minimumIconSize 16,16 javax.swing.plaf.DimensionUIResource [UI] -MenuItem.minimumWidth 72 -MenuItem.opaque false -MenuItem.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI] -MenuItem.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -MenuItem.textAcceleratorGap 24 -MenuItem.textNoAcceleratorGap 6 -MenuItem.underlineSelectionBackground #484c4f com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) -MenuItem.underlineSelectionCheckBackground #3c588b com.formdev.flatlaf.util.DerivedColor [UI] darken(10%) -MenuItem.underlineSelectionColor #4a88c7 javax.swing.plaf.ColorUIResource [UI] -MenuItem.underlineSelectionHeight 3 - - -#---- MenuItemCheckBox ---- - -MenuItemCheckBox.icon.checkmarkColor #a7a7a7 javax.swing.plaf.ColorUIResource [UI] -MenuItemCheckBox.icon.disabledCheckmarkColor #606060 javax.swing.plaf.ColorUIResource [UI] - - -#---- MenuItem ---- - -MenuItemUI com.formdev.flatlaf.ui.FlatMenuItemUI - - -#---- Menu ---- - -MenuUI com.formdev.flatlaf.ui.FlatMenuUI - - -#---- MonthView ---- - -MonthViewUI com.formdev.flatlaf.swingx.ui.FlatMonthViewUI - - -#---- Objects ---- - -Objects.BlackText #231f20 javax.swing.plaf.ColorUIResource [UI] -Objects.Blue #40b6e0 javax.swing.plaf.ColorUIResource [UI] -Objects.Green #62b543 javax.swing.plaf.ColorUIResource [UI] -Objects.GreenAndroid #a4c639 javax.swing.plaf.ColorUIResource [UI] -Objects.Grey #9aa7b0 javax.swing.plaf.ColorUIResource [UI] -Objects.Pink #f98b9e javax.swing.plaf.ColorUIResource [UI] -Objects.Purple #b99bf8 javax.swing.plaf.ColorUIResource [UI] -Objects.Red #f26522 javax.swing.plaf.ColorUIResource [UI] -Objects.RedStatus #e05555 javax.swing.plaf.ColorUIResource [UI] -Objects.Yellow #f4af3d javax.swing.plaf.ColorUIResource [UI] -Objects.YellowDark #d9a343 javax.swing.plaf.ColorUIResource [UI] - - -#---- OptionPane ---- - -OptionPane.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -OptionPane.border [lazy] 12,12,12,12 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -OptionPane.buttonAreaBorder [lazy] 12,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -OptionPane.buttonClickThreshhold 500 -OptionPane.buttonMinimumWidth [active] 72 -OptionPane.buttonOrientation 4 -OptionPane.buttonPadding 8 -OptionPane.errorIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneErrorIcon [UI] -OptionPane.font [active] $defaultFont [UI] -OptionPane.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -OptionPane.iconMessageGap 16 -OptionPane.informationIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneInformationIcon [UI] -OptionPane.maxCharactersPerLine 80 -OptionPane.messageAreaBorder [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -OptionPane.messagePadding 3 -OptionPane.minimumSize 262,90 javax.swing.plaf.DimensionUIResource [UI] -OptionPane.questionIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneQuestionIcon [UI] -OptionPane.sameSizeButtons true -OptionPane.setButtonMargin false -OptionPane.warningIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneWarningIcon [UI] -OptionPane.windowBindings length=2 [Ljava.lang.Object; - [0] ESCAPE - [1] close -OptionPaneUI com.formdev.flatlaf.ui.FlatOptionPaneUI - - -#---- Panel ---- - -Panel.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -Panel.font [active] $defaultFont [UI] -Panel.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -PanelUI com.formdev.flatlaf.ui.FlatPanelUI - - -#---- PasswordField ---- - -PasswordField.background #45494a javax.swing.plaf.ColorUIResource [UI] -PasswordField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] -PasswordField.capsLockIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatCapsLockIcon [UI] -PasswordField.capsLockIconColor #ffffff64 39% javax.swing.plaf.ColorUIResource [UI] -PasswordField.caretBlinkRate 500 -PasswordField.caretForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -PasswordField.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -PasswordField.echoChar '\u2022' -PasswordField.font [active] $defaultFont [UI] -PasswordField.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -PasswordField.inactiveBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -PasswordField.inactiveForeground #888888 javax.swing.plaf.ColorUIResource [UI] -PasswordField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -PasswordField.placeholderForeground #888888 javax.swing.plaf.ColorUIResource [UI] -PasswordField.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI] -PasswordField.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -PasswordField.showCapsLock true -PasswordFieldUI com.formdev.flatlaf.ui.FlatPasswordFieldUI - - -#---- Popup ---- - -Popup.dropShadowColor #000000 javax.swing.plaf.ColorUIResource [UI] -Popup.dropShadowInsets -4,-4,4,4 javax.swing.plaf.InsetsUIResource [UI] -Popup.dropShadowOpacity 0.25 -Popup.dropShadowPainted true - - -#---- PopupMenu ---- - -PopupMenu.background #303234 javax.swing.plaf.ColorUIResource [UI] -PopupMenu.border [lazy] 4,1,4,1 false com.formdev.flatlaf.ui.FlatPopupMenuBorder [UI] lineColor=#5e5e5e javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -PopupMenu.borderColor #5e5e5e javax.swing.plaf.ColorUIResource [UI] -PopupMenu.borderInsets 4,1,4,1 javax.swing.plaf.InsetsUIResource [UI] -PopupMenu.consumeEventOnClose false -PopupMenu.font [active] $defaultFont [UI] -PopupMenu.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] - - -#---- PopupMenuSeparator ---- - -PopupMenuSeparator.height 9 -PopupMenuSeparator.stripeIndent 4 -PopupMenuSeparator.stripeWidth 1 -PopupMenuSeparatorUI com.formdev.flatlaf.ui.FlatPopupMenuSeparatorUI - - -#---- PopupMenu ---- - -PopupMenuUI com.formdev.flatlaf.ui.FlatPopupMenuUI - - -#---- ProgressBar ---- - -ProgressBar.arc 4 -ProgressBar.background #555555 javax.swing.plaf.ColorUIResource [UI] -ProgressBar.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -ProgressBar.cellLength 1 -ProgressBar.cellSpacing 0 -ProgressBar.cycleTime 4000 -ProgressBar.font [active] Segoe UI plain 10 javax.swing.plaf.FontUIResource [UI] -ProgressBar.foreground #4a88c7 javax.swing.plaf.ColorUIResource [UI] -ProgressBar.horizontalSize 146,4 javax.swing.plaf.DimensionUIResource [UI] -ProgressBar.repaintInterval 15 -ProgressBar.selectionBackground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -ProgressBar.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -ProgressBar.verticalSize 4,146 javax.swing.plaf.DimensionUIResource [UI] -ProgressBarUI com.formdev.flatlaf.ui.FlatProgressBarUI - - -#---- RadioButton ---- - -RadioButton.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -RadioButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -RadioButton.darkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI] -RadioButton.disabledText #888888 javax.swing.plaf.ColorUIResource [UI] -RadioButton.font [active] $defaultFont [UI] -RadioButton.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -RadioButton.highlight #242424 javax.swing.plaf.ColorUIResource [UI] -RadioButton.icon.centerDiameter 8 -RadioButton.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatRadioButtonIcon [UI] -RadioButton.iconTextGap 4 -RadioButton.icon[filled].centerDiameter 5 -RadioButton.light #313131 javax.swing.plaf.ColorUIResource [UI] -RadioButton.margin 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] -RadioButton.rollover true -RadioButton.shadow #646464 javax.swing.plaf.ColorUIResource [UI] -RadioButton.textIconGap 4 -RadioButton.textShiftOffset 0 - - -#---- RadioButtonMenuItem ---- - -RadioButtonMenuItem.acceleratorFont [active] $defaultFont [UI] -RadioButtonMenuItem.acceleratorForeground #959595 javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.acceleratorSelectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] -RadioButtonMenuItem.background #303234 javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] -RadioButtonMenuItem.borderPainted true -RadioButtonMenuItem.checkIcon [lazy] 15,15 com.formdev.flatlaf.icons.FlatRadioButtonMenuItemIcon [UI] -RadioButtonMenuItem.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.font [active] $defaultFont [UI] -RadioButtonMenuItem.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] -RadioButtonMenuItem.opaque false -RadioButtonMenuItem.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItemUI com.formdev.flatlaf.ui.FlatRadioButtonMenuItemUI - - -#---- RadioButton ---- - -RadioButtonUI com.formdev.flatlaf.ui.FlatRadioButtonUI - - -#---- RangeSlider ---- - -RangeSliderUI com.formdev.flatlaf.jideoss.ui.FlatRangeSliderUI - - -#---- Resizable ---- - -Resizable.resizeBorder [lazy] 4,4,4,4 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#5e5e5e javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 - - -#---- RootPane ---- - -RootPane.activeBorderColor #4d5154 com.formdev.flatlaf.util.DerivedColor [UI] lighten(7% autoInverse) -RootPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRootPaneUI$FlatWindowBorder [UI] -RootPane.borderDragThickness 5 -RootPane.cornerDragWidth 16 -RootPane.defaultButtonWindowKeyBindings length=8 [Ljava.lang.Object; - [0] ENTER - [1] press - [2] released ENTER - [3] release - [4] ctrl ENTER - [5] press - [6] ctrl released ENTER - [7] release -RootPane.honorDialogMinimumSizeOnResize true -RootPane.honorFrameMinimumSizeOnResize false -RootPane.inactiveBorderColor #484c4e com.formdev.flatlaf.util.DerivedColor [UI] lighten(5% autoInverse) -RootPaneUI com.formdev.flatlaf.ui.FlatRootPaneUI - - -#---- ScrollBar ---- - -ScrollBar.allowsAbsolutePositioning true -ScrollBar.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.buttonArrowColor #9a9da1 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.buttonDisabledArrowColor #5a5d61 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -ScrollBar.hoverButtonBackground #484c4e com.formdev.flatlaf.util.DerivedColor [UI] lighten(5%) -ScrollBar.hoverThumbColor #6e767a com.formdev.flatlaf.util.DerivedColor [UI] lighten(10%) -ScrollBar.hoverThumbWithTrack false -ScrollBar.hoverTrackColor #484c4f com.formdev.flatlaf.util.DerivedColor [UI] lighten(4%) -ScrollBar.maximumThumbSize 100000,100000 javax.swing.plaf.DimensionUIResource [UI] -ScrollBar.minimumThumbSize 10,10 javax.swing.plaf.DimensionUIResource [UI] -ScrollBar.pressedButtonBackground #54595c com.formdev.flatlaf.util.DerivedColor [UI] lighten(10%) -ScrollBar.pressedThumbColor #7a8387 com.formdev.flatlaf.util.DerivedColor [UI] lighten(15%) -ScrollBar.pressedThumbWithTrack false -ScrollBar.showButtons false -ScrollBar.squareButtons false -ScrollBar.thumb #565c5f com.formdev.flatlaf.util.DerivedColor [UI] lighten(10%) -ScrollBar.thumbArc 0 -ScrollBar.thumbDarkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI] -ScrollBar.thumbHighlight #242424 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.thumbInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -ScrollBar.thumbShadow #646464 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.track #3e4244 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%) -ScrollBar.trackArc 0 -ScrollBar.trackHighlight #7e7e7e javax.swing.plaf.ColorUIResource [UI] -ScrollBar.trackInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -ScrollBar.width 10 -ScrollBarUI com.formdev.flatlaf.ui.FlatScrollBarUI - - -#---- ScrollPane ---- - -ScrollPane.background #3e4244 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%) -ScrollPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatBorder [UI] -ScrollPane.fillUpperCorner true -ScrollPane.font [active] $defaultFont [UI] -ScrollPane.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -ScrollPane.smoothScrolling true -ScrollPaneUI com.formdev.flatlaf.ui.FlatScrollPaneUI - - -#---- Separator ---- - -Separator.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -Separator.foreground #515151 javax.swing.plaf.ColorUIResource [UI] -Separator.height 3 -Separator.highlight #242424 javax.swing.plaf.ColorUIResource [UI] -Separator.shadow #646464 javax.swing.plaf.ColorUIResource [UI] -Separator.stripeIndent 1 -Separator.stripeWidth 1 -SeparatorUI com.formdev.flatlaf.ui.FlatSeparatorUI - - -#---- Slider ---- - -Slider.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -Slider.disabledThumbColor #4c5052 javax.swing.plaf.ColorUIResource [UI] -Slider.disabledTrackColor #4c5052 javax.swing.plaf.ColorUIResource [UI] -Slider.focus #7e7e7e javax.swing.plaf.ColorUIResource [UI] -Slider.focusInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -Slider.focusWidth 4 -Slider.focusedColor #3d6185b3 70% com.formdev.flatlaf.util.DerivedColor [UI] fade(70%) -Slider.font [active] $defaultFont [UI] -Slider.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Slider.highlight #242424 javax.swing.plaf.ColorUIResource [UI] -Slider.horizontalSize 200,21 java.awt.Dimension -Slider.hoverThumbColor #5d95cd com.formdev.flatlaf.util.DerivedColor [UI] lighten(5% autoInverse) -Slider.minimumHorizontalSize 36,21 java.awt.Dimension -Slider.minimumVerticalSize 21,36 java.awt.Dimension -Slider.onlyLeftMouseButtonDrag true -Slider.pressedThumbColor #699cd1 com.formdev.flatlaf.util.DerivedColor [UI] lighten(8% autoInverse) -Slider.shadow #646464 javax.swing.plaf.ColorUIResource [UI] -Slider.thumbColor #4a88c7 javax.swing.plaf.ColorUIResource [UI] -Slider.thumbSize 12,12 javax.swing.plaf.DimensionUIResource [UI] -Slider.tickColor #888888 javax.swing.plaf.ColorUIResource [UI] -Slider.trackColor #646464 javax.swing.plaf.ColorUIResource [UI] -Slider.trackValueColor #4a88c7 javax.swing.plaf.ColorUIResource [UI] -Slider.trackWidth 2 -Slider.verticalSize 21,200 java.awt.Dimension -SliderUI com.formdev.flatlaf.ui.FlatSliderUI - - -#---- Spinner ---- - -Spinner.arrowButtonSize 16,5 java.awt.Dimension -Spinner.background #45494a javax.swing.plaf.ColorUIResource [UI] -Spinner.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRoundBorder [UI] -Spinner.buttonArrowColor #9a9da1 javax.swing.plaf.ColorUIResource [UI] -Spinner.buttonBackground #404445 javax.swing.plaf.ColorUIResource [UI] -Spinner.buttonDisabledArrowColor #5a5d61 javax.swing.plaf.ColorUIResource [UI] -Spinner.buttonHoverArrowColor #b4b7ba com.formdev.flatlaf.util.DerivedColor [UI] lighten(10%) -Spinner.buttonPressedArrowColor #cfd0d2 com.formdev.flatlaf.util.DerivedColor [UI] lighten(20%) -Spinner.buttonStyle button -Spinner.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -Spinner.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI] -Spinner.editorAlignment 11 -Spinner.editorBorderPainted false -Spinner.font [active] $defaultFont [UI] -Spinner.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Spinner.padding 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -SpinnerUI com.formdev.flatlaf.ui.FlatSpinnerUI - - -#---- SplitPane ---- - -SplitPane.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -SplitPane.centerOneTouchButtons true -SplitPane.continuousLayout true -SplitPane.darkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI] -SplitPane.dividerSize 5 -SplitPane.highlight #242424 javax.swing.plaf.ColorUIResource [UI] -SplitPane.oneTouchButtonOffset [active] 2 -SplitPane.oneTouchButtonSize [active] 6 -SplitPane.shadow #646464 javax.swing.plaf.ColorUIResource [UI] - - -#---- SplitPaneDivider ---- - -SplitPaneDivider.draggingColor #646464 javax.swing.plaf.ColorUIResource [UI] -SplitPaneDivider.gripColor #adadad javax.swing.plaf.ColorUIResource [UI] -SplitPaneDivider.gripDotCount 3 -SplitPaneDivider.gripDotSize 3 -SplitPaneDivider.gripGap 2 -SplitPaneDivider.oneTouchArrowColor #9a9da1 javax.swing.plaf.ColorUIResource [UI] -SplitPaneDivider.oneTouchHoverArrowColor #b4b7ba com.formdev.flatlaf.util.DerivedColor [UI] lighten(10%) -SplitPaneDivider.oneTouchPressedArrowColor #cfd0d2 com.formdev.flatlaf.util.DerivedColor [UI] lighten(20%) -SplitPaneDivider.style grip - - -#---- SplitPane ---- - -SplitPaneUI com.formdev.flatlaf.ui.FlatSplitPaneUI - - -#---- TabbedPane ---- - -TabbedPane.arrowType chevron -TabbedPane.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.buttonArc 6 -TabbedPane.buttonHoverBackground #303234 com.formdev.flatlaf.util.DerivedColor [UI] darken(5%) -TabbedPane.buttonInsets 2,1,2,1 javax.swing.plaf.InsetsUIResource [UI] -TabbedPane.buttonPressedBackground #282a2c com.formdev.flatlaf.util.DerivedColor [UI] darken(8%) -TabbedPane.closeArc 4 -TabbedPane.closeCrossFilledSize 7.5 -TabbedPane.closeCrossLineWidth 1.0 -TabbedPane.closeCrossPlainSize 7.5 -TabbedPane.closeForeground #888888 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.closeHoverBackground #484c4e com.formdev.flatlaf.util.DerivedColor [UI] lighten(5% autoInverse) -TabbedPane.closeHoverForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -TabbedPane.closeIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTabbedPaneCloseIcon [UI] -TabbedPane.closePressedBackground #54595c com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) -TabbedPane.closePressedForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -TabbedPane.closeSize 16,16 javax.swing.plaf.DimensionUIResource [UI] -TabbedPane.contentAreaColor #646464 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.contentOpaque true -TabbedPane.contentSeparatorHeight 1 -TabbedPane.darkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI] -TabbedPane.disabledForeground #888888 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.disabledUnderlineColor #7a7a7a javax.swing.plaf.ColorUIResource [UI] -TabbedPane.focus #bbbbbb javax.swing.plaf.ColorUIResource [UI] -TabbedPane.focusColor #3d4b5c javax.swing.plaf.ColorUIResource [UI] -TabbedPane.font [active] $defaultFont [UI] -TabbedPane.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -TabbedPane.hasFullBorder false -TabbedPane.hiddenTabsNavigation moreTabsButton -TabbedPane.highlight #242424 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.hoverColor #303234 com.formdev.flatlaf.util.DerivedColor [UI] darken(5%) -TabbedPane.labelShift 1 -TabbedPane.light #313131 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.scrollButtonsPlacement both -TabbedPane.scrollButtonsPolicy asNeededSingle -TabbedPane.selectedLabelShift -1 -TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -TabbedPane.selectionFollowsFocus true -TabbedPane.shadow #3c3f41 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.showTabSeparators false -TabbedPane.tabAlignment center -TabbedPane.tabAreaAlignment leading -TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -TabbedPane.tabHeight 32 -TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] -TabbedPane.tabRunOverlay 0 -TabbedPane.tabSelectionHeight 3 -TabbedPane.tabSeparatorsFullHeight false -TabbedPane.tabWidthMode preferred -TabbedPane.tabsOpaque true -TabbedPane.tabsOverlapBorder false -TabbedPane.tabsPopupPolicy asNeeded -TabbedPane.textIconGap 4 -TabbedPane.underlineColor #4a88c7 javax.swing.plaf.ColorUIResource [UI] -TabbedPaneUI com.formdev.flatlaf.ui.FlatTabbedPaneUI - - -#---- Table ---- - -Table.ascendingSortIcon [lazy] 10,5 com.formdev.flatlaf.icons.FlatAscendingSortIcon [UI] -Table.background #45494a javax.swing.plaf.ColorUIResource [UI] -Table.cellFocusColor #000000 javax.swing.plaf.ColorUIResource [UI] -Table.cellMargins 2,3,2,3 javax.swing.plaf.InsetsUIResource [UI] -Table.cellNoFocusBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Default [UI] lineColor=#000000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -Table.consistentHomeEndKeyBehavior true -Table.descendingSortIcon [lazy] 10,5 com.formdev.flatlaf.icons.FlatDescendingSortIcon [UI] -Table.dropCellBackground [lazy] #3c588b javax.swing.plaf.ColorUIResource [UI] -Table.dropCellForeground [lazy] #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Table.dropLineColor [lazy] #6d8ac0 javax.swing.plaf.ColorUIResource [UI] -Table.dropLineShortColor [lazy] #b4c3df javax.swing.plaf.ColorUIResource [UI] -Table.focusCellBackground #45494a javax.swing.plaf.ColorUIResource [UI] -Table.focusCellForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Table.focusCellHighlightBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Focused [UI] lineColor=#000000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -Table.focusSelectedCellHighlightBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Selected [UI] lineColor=#000000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -Table.font [active] $defaultFont [UI] -Table.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Table.gridColor #515657 javax.swing.plaf.ColorUIResource [UI] -Table.intercellSpacing 0,0 javax.swing.plaf.DimensionUIResource [UI] -Table.rowHeight 20 -Table.scrollPaneBorder [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatBorder [UI] -Table.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI] -Table.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Table.selectionInactiveBackground #0d293e javax.swing.plaf.ColorUIResource [UI] -Table.selectionInactiveForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Table.showHorizontalLines false -Table.showVerticalLines false -Table.sortIconColor #adadad javax.swing.plaf.ColorUIResource [UI] - - -#---- TableHeader ---- - -TableHeader.background #45494a javax.swing.plaf.ColorUIResource [UI] -TableHeader.bottomSeparatorColor #5e6364 javax.swing.plaf.ColorUIResource [UI] -TableHeader.cellBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableHeaderBorder [UI] -TableHeader.cellMargins 2,3,2,3 javax.swing.plaf.InsetsUIResource [UI] -TableHeader.focusCellBackground #45494a javax.swing.plaf.ColorUIResource [UI] -TableHeader.font [active] $defaultFont [UI] -TableHeader.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -TableHeader.height 25 -TableHeader.separatorColor #5e6364 javax.swing.plaf.ColorUIResource [UI] -TableHeaderUI com.formdev.flatlaf.ui.FlatTableHeaderUI - - -#---- Table ---- - -TableUI com.formdev.flatlaf.ui.FlatTableUI - - -#---- TaskPane ---- - -TaskPane.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -TaskPane.borderColor #5e6060 javax.swing.plaf.ColorUIResource [UI] -TaskPane.contentInsets 10,10,10,10 javax.swing.plaf.InsetsUIResource [UI] -TaskPane.specialTitleBackground #afafaf javax.swing.plaf.ColorUIResource [UI] -TaskPane.specialTitleForeground #222222 javax.swing.plaf.ColorUIResource [UI] -TaskPane.specialTitleOver #666666 javax.swing.plaf.ColorUIResource [UI] -TaskPane.titleBackgroundGradientStart #4c5052 javax.swing.plaf.ColorUIResource [UI] -TaskPane.titleForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -TaskPane.titleOver #888888 javax.swing.plaf.ColorUIResource [UI] - - -#---- TaskPaneContainer ---- - -TaskPaneContainer.background #3e434c javax.swing.plaf.ColorUIResource [UI] -TaskPaneContainer.border [lazy] 10,10,10,10 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] - - -#---- TextArea ---- - -TextArea.background #45494a javax.swing.plaf.ColorUIResource [UI] -TextArea.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -TextArea.caretBlinkRate 500 -TextArea.caretForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -TextArea.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -TextArea.font [active] $defaultFont [UI] -TextArea.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -TextArea.inactiveBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -TextArea.inactiveForeground #888888 javax.swing.plaf.ColorUIResource [UI] -TextArea.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -TextArea.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI] -TextArea.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -TextAreaUI com.formdev.flatlaf.ui.FlatTextAreaUI - - -#---- TextComponent ---- - -TextComponent.arc 0 -TextComponent.selectAllOnFocusPolicy once -TextComponent.selectAllOnMouseClick false - - -#---- TextField ---- - -TextField.background #45494a javax.swing.plaf.ColorUIResource [UI] -TextField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] -TextField.caretBlinkRate 500 -TextField.caretForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -TextField.darkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI] -TextField.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -TextField.font [active] $defaultFont [UI] -TextField.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -TextField.highlight #242424 javax.swing.plaf.ColorUIResource [UI] -TextField.inactiveBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -TextField.inactiveForeground #888888 javax.swing.plaf.ColorUIResource [UI] -TextField.light #313131 javax.swing.plaf.ColorUIResource [UI] -TextField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -TextField.placeholderForeground #888888 javax.swing.plaf.ColorUIResource [UI] -TextField.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI] -TextField.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -TextField.shadow #646464 javax.swing.plaf.ColorUIResource [UI] -TextFieldUI com.formdev.flatlaf.ui.FlatTextFieldUI - - -#---- TextPane ---- - -TextPane.background #45494a javax.swing.plaf.ColorUIResource [UI] -TextPane.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -TextPane.caretBlinkRate 500 -TextPane.caretForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -TextPane.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -TextPane.font [active] $defaultFont [UI] -TextPane.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -TextPane.inactiveBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -TextPane.inactiveForeground #888888 javax.swing.plaf.ColorUIResource [UI] -TextPane.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -TextPane.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI] -TextPane.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -TextPaneUI com.formdev.flatlaf.ui.FlatTextPaneUI - - -#---- TitlePane ---- - -TitlePane.background #303234 javax.swing.plaf.ColorUIResource [UI] -TitlePane.buttonHoverBackground #484c4f com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) -TitlePane.buttonMaximizedHeight 22 -TitlePane.buttonPressedBackground #616569 com.formdev.flatlaf.util.DerivedColor [UI] lighten(20% autoInverse) -TitlePane.buttonSize 44,30 javax.swing.plaf.DimensionUIResource [UI] -TitlePane.centerTitle false -TitlePane.centerTitleIfMenuBarEmbedded true -TitlePane.closeHoverBackground #e81123 javax.swing.plaf.ColorUIResource [UI] -TitlePane.closeHoverForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -TitlePane.closeIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowCloseIcon [UI] -TitlePane.closePressedBackground #e8112399 60% javax.swing.plaf.ColorUIResource [UI] -TitlePane.closePressedForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -TitlePane.embeddedForeground #959595 javax.swing.plaf.ColorUIResource [UI] -TitlePane.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -TitlePane.icon [lazy] 16,16 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) -TitlePane.iconMargins 3,8,3,8 javax.swing.plaf.InsetsUIResource [UI] -TitlePane.iconSize 16,16 javax.swing.plaf.DimensionUIResource [UI] -TitlePane.iconifyIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowIconifyIcon [UI] -TitlePane.inactiveBackground #303234 javax.swing.plaf.ColorUIResource [UI] -TitlePane.inactiveForeground #888888 javax.swing.plaf.ColorUIResource [UI] -TitlePane.maximizeIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowMaximizeIcon [UI] -TitlePane.menuBarEmbedded true -TitlePane.menuBarTitleGap 20 -TitlePane.restoreIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowRestoreIcon [UI] -TitlePane.titleMargins 3,0,3,0 javax.swing.plaf.InsetsUIResource [UI] -TitlePane.unifiedBackground false -TitlePane.useWindowDecorations true - - -#---- TitledBorder ---- - -TitledBorder.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#515151 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -TitledBorder.font [active] $defaultFont [UI] -TitledBorder.titleColor #bbbbbb javax.swing.plaf.ColorUIResource [UI] - - -#---- TitledPanel ---- - -TitledPanelUI com.formdev.flatlaf.swingx.ui.FlatTitledPanelUI - - -#---- ToggleButton ---- - -ToggleButton.background #4c5052 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatButtonBorder [UI] -ToggleButton.darkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI] -ToggleButton.disabledBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.disabledSelectedBackground #53585a com.formdev.flatlaf.util.DerivedColor [UI] lighten(3% autoInverse) -ToggleButton.disabledText #888888 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.font [active] $defaultFont [UI] -ToggleButton.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -ToggleButton.highlight #242424 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.iconTextGap 4 -ToggleButton.light #313131 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.margin 2,14,2,14 javax.swing.plaf.InsetsUIResource [UI] -ToggleButton.pressedBackground #5b5f62 com.formdev.flatlaf.util.DerivedColor [UI] lighten(6% autoInverse) -ToggleButton.rollover true -ToggleButton.selectedBackground #656a6c com.formdev.flatlaf.util.DerivedColor [UI] lighten(10% autoInverse) -ToggleButton.selectedForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -ToggleButton.shadow #646464 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.tab.disabledUnderlineColor #7a7a7a javax.swing.plaf.ColorUIResource [UI] -ToggleButton.tab.focusBackground #3d4b5c javax.swing.plaf.ColorUIResource [UI] -ToggleButton.tab.hoverBackground #303234 com.formdev.flatlaf.util.DerivedColor [UI] darken(5%) -ToggleButton.tab.underlineColor #4a88c7 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.tab.underlineHeight 2 -ToggleButton.textIconGap 4 -ToggleButton.textShiftOffset 0 -ToggleButton.toolbar.hoverBackground #4e5355 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1% autoInverse) -ToggleButton.toolbar.pressedBackground #565a5d com.formdev.flatlaf.util.DerivedColor [UI] lighten(4% autoInverse) -ToggleButton.toolbar.selectedBackground #5d6265 com.formdev.flatlaf.util.DerivedColor [UI] lighten(7% autoInverse) -ToggleButtonUI com.formdev.flatlaf.ui.FlatToggleButtonUI - - -#---- ToolBar ---- - -ToolBar.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -ToolBar.border [lazy] 2,2,2,2 false com.formdev.flatlaf.ui.FlatToolBarBorder [UI] -ToolBar.borderMargins 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] -ToolBar.darkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI] -ToolBar.dockingBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -ToolBar.dockingForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -ToolBar.floatingBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] -ToolBar.floatingForeground #888888 javax.swing.plaf.ColorUIResource [UI] -ToolBar.font [active] $defaultFont [UI] -ToolBar.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -ToolBar.gripColor #adadad javax.swing.plaf.ColorUIResource [UI] -ToolBar.highlight #242424 javax.swing.plaf.ColorUIResource [UI] -ToolBar.isRollover true -ToolBar.light #313131 javax.swing.plaf.ColorUIResource [UI] -ToolBar.separatorColor #515151 javax.swing.plaf.ColorUIResource [UI] -ToolBar.separatorWidth 7 -ToolBar.shadow #646464 javax.swing.plaf.ColorUIResource [UI] -ToolBar.spacingBorder [lazy] 1,2,1,2 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] - - -#---- ToolBarSeparator ---- - -ToolBarSeparatorUI com.formdev.flatlaf.ui.FlatToolBarSeparatorUI - - -#---- ToolBar ---- - -ToolBarUI com.formdev.flatlaf.ui.FlatToolBarUI - - -#---- ToolTip ---- - -ToolTip.background #1e2123 javax.swing.plaf.ColorUIResource [UI] -ToolTip.border [lazy] 4,6,4,6 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -ToolTip.font [active] $defaultFont [UI] -ToolTip.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] - - -#---- ToolTipManager ---- - -ToolTipManager.enableToolTipMode activeApplication - - -#---- ToolTip ---- - -ToolTipUI com.formdev.flatlaf.ui.FlatToolTipUI - - -#---- Tree ---- - -Tree.background #45494a javax.swing.plaf.ColorUIResource [UI] -Tree.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -Tree.changeSelectionWithFocus true -Tree.closedIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeClosedIcon [UI] -Tree.collapsedIcon [lazy] 11,11 com.formdev.flatlaf.icons.FlatTreeCollapsedIcon [UI] -Tree.drawsFocusBorderAroundIcon false -Tree.dropCellBackground [lazy] #3c588b javax.swing.plaf.ColorUIResource [UI] -Tree.dropCellForeground [lazy] #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Tree.dropLineColor [lazy] #6d8ac0 javax.swing.plaf.ColorUIResource [UI] -Tree.editorBorder [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#000000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -Tree.expandedIcon [lazy] 11,11 com.formdev.flatlaf.icons.FlatTreeExpandedIcon [UI] -Tree.font [active] $defaultFont [UI] -Tree.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Tree.hash #515657 javax.swing.plaf.ColorUIResource [UI] -Tree.icon.closedColor #adadad javax.swing.plaf.ColorUIResource [UI] -Tree.icon.collapsedColor #adadad javax.swing.plaf.ColorUIResource [UI] -Tree.icon.expandedColor #adadad javax.swing.plaf.ColorUIResource [UI] -Tree.icon.leafColor #adadad javax.swing.plaf.ColorUIResource [UI] -Tree.icon.openColor #adadad javax.swing.plaf.ColorUIResource [UI] -Tree.leafIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeLeafIcon [UI] -Tree.leftChildIndent 7 -Tree.lineTypeDashed false -Tree.openIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeOpenIcon [UI] -Tree.paintLines false -Tree.rendererFillBackground false -Tree.rendererMargins 1,2,1,2 javax.swing.plaf.InsetsUIResource [UI] -Tree.repaintWholeRow true -Tree.rightChildIndent 11 -Tree.rowHeight 0 -Tree.scrollsOnExpand true -Tree.selectionBackground #4b6eaf javax.swing.plaf.ColorUIResource [UI] -Tree.selectionBorderColor #000000 javax.swing.plaf.ColorUIResource [UI] -Tree.selectionForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Tree.selectionInactiveBackground #0d293e javax.swing.plaf.ColorUIResource [UI] -Tree.selectionInactiveForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Tree.showCellFocusIndicator false -Tree.textBackground #45494a javax.swing.plaf.ColorUIResource [UI] -Tree.textForeground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Tree.timeFactor 1000 -Tree.wideSelection true -TreeUI com.formdev.flatlaf.ui.FlatTreeUI - - -#---- TristateCheckBox ---- - -TristateCheckBox.clearMixed.clientProperty length=2 [Ljava.lang.Object; - [0] JButton.selectedState - [1] null -TristateCheckBox.setMixed.clientProperty length=2 [Ljava.lang.Object; - [0] JButton.selectedState - [1] indeterminate - - -#---- UIColorHighlighter ---- - -UIColorHighlighter.stripingBackground #515657 javax.swing.plaf.ColorUIResource [UI] - - -#---- Viewport ---- - -Viewport.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] -Viewport.font [active] $defaultFont [UI] -Viewport.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -ViewportUI com.formdev.flatlaf.ui.FlatViewportUI - - -#---- ---- - -activeCaption #434e60 javax.swing.plaf.ColorUIResource [UI] -activeCaptionBorder #434e60 javax.swing.plaf.ColorUIResource [UI] -activeCaptionText #bbbbbb javax.swing.plaf.ColorUIResource [UI] -control #3c3f41 javax.swing.plaf.ColorUIResource [UI] -controlDkShadow #7e7e7e javax.swing.plaf.ColorUIResource [UI] -controlHighlight #313131 javax.swing.plaf.ColorUIResource [UI] -controlLtHighlight #242424 javax.swing.plaf.ColorUIResource [UI] -controlShadow #646464 javax.swing.plaf.ColorUIResource [UI] -controlText #bbbbbb javax.swing.plaf.ColorUIResource [UI] -defaultFont Segoe UI plain 12 javax.swing.plaf.FontUIResource [UI] -desktop #45494a javax.swing.plaf.ColorUIResource [UI] - - -#---- html ---- - -html.missingImage [lazy] 38,38 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) -html.pendingImage [lazy] 38,38 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) - - -#---- ---- - -inactiveCaption #393c3d javax.swing.plaf.ColorUIResource [UI] -inactiveCaptionBorder #393c3d javax.swing.plaf.ColorUIResource [UI] -inactiveCaptionText #bbbbbb javax.swing.plaf.ColorUIResource [UI] -info #1e2123 javax.swing.plaf.ColorUIResource [UI] -infoText #bbbbbb javax.swing.plaf.ColorUIResource [UI] - - -#---- laf ---- - -laf.dark true -laf.scaleFactor [active] 1.0 - - -#---- ---- - -menu #3c3f41 javax.swing.plaf.ColorUIResource [UI] -menuText #bbbbbb javax.swing.plaf.ColorUIResource [UI] -scrollbar #3e4244 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%) - - -#---- swingx/TaskPane ---- - -swingx/TaskPaneUI com.formdev.flatlaf.swingx.ui.FlatTaskPaneUI - - -#---- ---- - -text #45494a javax.swing.plaf.ColorUIResource [UI] -textHighlight #4b6eaf javax.swing.plaf.ColorUIResource [UI] -textHighlightText #bbbbbb javax.swing.plaf.ColorUIResource [UI] -textInactiveText #888888 javax.swing.plaf.ColorUIResource [UI] -textText #bbbbbb javax.swing.plaf.ColorUIResource [UI] -window #3c3f41 javax.swing.plaf.ColorUIResource [UI] -windowBorder #bbbbbb javax.swing.plaf.ColorUIResource [UI] -windowText #bbbbbb javax.swing.plaf.ColorUIResource [UI] diff --git a/flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0_202.txt b/flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt similarity index 59% rename from flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0_202.txt rename to flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt index c5364197..f579ab89 100644 --- a/flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0_202.txt +++ b/flatlaf-testing/dumps/uidefaults/FlatIntelliJLaf_1.8.0.txt @@ -12,44 +12,45 @@ - Button.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatButtonBorder [UI] + Button.border [lazy] 3,3,3,3 false com.formdev.flatlaf.ui.FlatButtonBorder [UI] -- Button.default.background #ffffff javax.swing.plaf.ColorUIResource [UI] -+ Button.default.background #4d8ac9 javax.swing.plaf.ColorUIResource [UI] +- Button.default.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] ++ Button.default.background #478ac9 HSL 209 55 53 javax.swing.plaf.ColorUIResource [UI] + Button.default.boldText true -- Button.default.borderColor #4f9ee3 javax.swing.plaf.ColorUIResource [UI] -+ Button.default.borderColor #3d75b2 javax.swing.plaf.ColorUIResource [UI] +- Button.default.borderColor #4e9de7 HSL 209 76 61 javax.swing.plaf.ColorUIResource [UI] ++ Button.default.borderColor #3c75ab HSL 209 48 45 javax.swing.plaf.ColorUIResource [UI] - Button.default.borderWidth 2 + Button.default.borderWidth 1 -- Button.default.focusedBackground #e3f1fa javax.swing.plaf.ColorUIResource [UI] +- Button.default.focusedBackground #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] -- Button.default.focusedBorderColor #87afda javax.swing.plaf.ColorUIResource [UI] -+ Button.default.focusedBorderColor #a9c9f5 javax.swing.plaf.ColorUIResource [UI] +- Button.default.focusedBorderColor #89b0d4 HSL 209 47 68 javax.swing.plaf.ColorUIResource [UI] ++ Button.default.focusedBorderColor #a3c5e4 HSL 209 55 77 javax.swing.plaf.ColorUIResource [UI] -- Button.default.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -+ Button.default.foreground #ffffff javax.swing.plaf.ColorUIResource [UI] +- Button.default.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] ++ Button.default.foreground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] -- Button.default.hoverBackground #f7f7f7 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) -+ Button.default.hoverBackground #4182c5 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) +- Button.default.hoverBackground #f7f7f7 HSL 0 0 97 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) ++ Button.default.hoverBackground #3b82c6 HSL 209 55 50 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) -- Button.default.hoverBorderColor #87afda javax.swing.plaf.ColorUIResource [UI] -+ Button.default.hoverBorderColor #a9c9f5 javax.swing.plaf.ColorUIResource [UI] +- Button.default.hoverBorderColor #89b0d4 HSL 209 47 68 javax.swing.plaf.ColorUIResource [UI] ++ Button.default.hoverBorderColor #a3c5e4 HSL 209 55 77 javax.swing.plaf.ColorUIResource [UI] -- Button.default.pressedBackground #e6e6e6 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) -+ Button.default.pressedBackground #3571ae com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) +- Button.default.pressedBackground #e6e6e6 HSL 0 0 90 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) ++ Button.default.pressedBackground #3270ab HSL 209 55 43 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) -- Button.focusedBackground #e3f1fa javax.swing.plaf.ColorUIResource [UI] +- Button.focusedBackground #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] #---- CheckBox ---- -- CheckBox.icon.focusedBackground #e3f1fa javax.swing.plaf.ColorUIResource [UI] +- CheckBox.icon.focusWidth 1 +- CheckBox.icon.focusedBackground #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] + CheckBox.icon.style filled -- CheckBox.icon[filled].selectedFocusedCheckmarkColor #e3f1fa javax.swing.plaf.ColorUIResource [UI] +- CheckBox.icon[filled].focusedCheckmarkColor #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] #---- ComboBox ---- @@ -69,7 +70,7 @@ - Component.innerFocusWidth 0.5 + Component.innerFocusWidth 0 -- Component.innerOutlineWidth 1.0 +- Component.innerOutlineWidth 1 + Component.innerOutlineWidth 0 @@ -81,7 +82,7 @@ #---- HelpButton ---- -- HelpButton.focusedBackground #e3f1fa javax.swing.plaf.ColorUIResource [UI] +- HelpButton.focusedBackground #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] - HelpButton.icon [lazy] 22,22 com.formdev.flatlaf.icons.FlatHelpButtonIcon [UI] + HelpButton.icon [lazy] 26,26 com.formdev.flatlaf.icons.FlatHelpButtonIcon [UI] @@ -99,6 +100,11 @@ + PasswordField.border [lazy] 3,3,3,3 false com.formdev.flatlaf.ui.FlatTextBorder [UI] +#---- RadioButton ---- + ++ RadioButton.icon.style filled + + #---- ScrollPane ---- - ScrollPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatBorder [UI] diff --git a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0_202-linux.txt b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0-linux.txt similarity index 100% rename from flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0_202-linux.txt rename to flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0-linux.txt diff --git a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0-mac.txt b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0-mac.txt new file mode 100644 index 00000000..224fa680 --- /dev/null +++ b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0-mac.txt @@ -0,0 +1,145 @@ +- Java 1.8.0_202 ++ Java 1.8.0_292 + +- OS Windows 10 ++ OS Mac OS X + +#---- ComboBox ---- + ++ ComboBox.showPopupOnNavigation true + + +#---- FileChooser ---- + +- FileChooser.useSystemExtensionHiding true ++ FileChooser.useSystemExtensionHiding false + + +#---- Menu ---- + +- Menu.shortcutKeys length=1 [I + [0] 8 ++ Menu.shortcutKeys length=1 [I + [0] 10 + + +#---- MenuItem ---- + +- MenuItem.acceleratorDelimiter - ++ MenuItem.acceleratorDelimiter + + +#---- OptionPane ---- + ++ OptionPane.isYesLast true + + +#---- ProgressBar ---- + +- ProgressBar.font [active] Segoe UI plain 10 javax.swing.plaf.FontUIResource [UI] ++ ProgressBar.font [active] Helvetica Neue plain 11 javax.swing.plaf.FontUIResource [UI] + + +#---- ScrollBar ---- + +- ScrollBar.hoverThumbWithTrack false ++ ScrollBar.hoverThumbWithTrack true + +- ScrollBar.minimumThumbSize 10,10 javax.swing.plaf.DimensionUIResource [UI] ++ ScrollBar.minimumThumbSize 18,18 javax.swing.plaf.DimensionUIResource [UI] + +- ScrollBar.thumbArc 0 ++ ScrollBar.thumbArc 999 + +- ScrollBar.thumbInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] ++ ScrollBar.thumbInsets 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] +- defaultFont Segoe UI plain 12 javax.swing.plaf.FontUIResource [UI] ++ defaultFont Helvetica Neue plain 13 javax.swing.plaf.FontUIResource [UI] + + + +#---- h0 ---- + +- h0.font [active] Segoe UI plain 30 javax.swing.plaf.FontUIResource [UI] ++ h0.font [active] Helvetica Neue plain 31 javax.swing.plaf.FontUIResource [UI] + + +#---- h00 ---- + +- h00.font [active] Segoe UI plain 36 javax.swing.plaf.FontUIResource [UI] ++ h00.font [active] Helvetica Neue plain 37 javax.swing.plaf.FontUIResource [UI] + + +#---- h1 ---- + +- h1.font [active] Segoe UI Semibold plain 24 javax.swing.plaf.FontUIResource [UI] ++ h1.font [active] HelveticaNeue-Medium plain 25 javax.swing.plaf.FontUIResource [UI] + +- h1.regular.font [active] Segoe UI plain 24 javax.swing.plaf.FontUIResource [UI] ++ h1.regular.font [active] Helvetica Neue plain 25 javax.swing.plaf.FontUIResource [UI] + + +#---- h2 ---- + +- h2.font [active] Segoe UI Semibold plain 18 javax.swing.plaf.FontUIResource [UI] ++ h2.font [active] HelveticaNeue-Medium plain 19 javax.swing.plaf.FontUIResource [UI] + +- h2.regular.font [active] Segoe UI plain 18 javax.swing.plaf.FontUIResource [UI] ++ h2.regular.font [active] Helvetica Neue plain 19 javax.swing.plaf.FontUIResource [UI] + + +#---- h3 ---- + +- h3.font [active] Segoe UI Semibold plain 15 javax.swing.plaf.FontUIResource [UI] ++ h3.font [active] HelveticaNeue-Medium plain 16 javax.swing.plaf.FontUIResource [UI] + +- h3.regular.font [active] Segoe UI plain 15 javax.swing.plaf.FontUIResource [UI] ++ h3.regular.font [active] Helvetica Neue plain 16 javax.swing.plaf.FontUIResource [UI] + + +#---- h4 ---- + +- h4.font [active] Segoe UI bold 12 javax.swing.plaf.FontUIResource [UI] ++ h4.font [active] Helvetica Neue bold 13 javax.swing.plaf.FontUIResource [UI] + + +#---- large ---- + +- large.font [active] Segoe UI plain 14 javax.swing.plaf.FontUIResource [UI] ++ large.font [active] Helvetica Neue plain 15 javax.swing.plaf.FontUIResource [UI] + + +#---- light ---- + +- light.font [active] Segoe UI Light plain 12 javax.swing.plaf.FontUIResource [UI] ++ light.font [active] HelveticaNeue-Thin plain 13 javax.swing.plaf.FontUIResource [UI] + + +#---- medium ---- + +- medium.font [active] Segoe UI plain 11 javax.swing.plaf.FontUIResource [UI] ++ medium.font [active] Helvetica Neue plain 12 javax.swing.plaf.FontUIResource [UI] + + +#---- mini ---- + +- mini.font [active] Segoe UI plain 9 javax.swing.plaf.FontUIResource [UI] ++ mini.font [active] Helvetica Neue plain 10 javax.swing.plaf.FontUIResource [UI] + + +#---- monospaced ---- + +- monospaced.font [active] Consolas plain 12 javax.swing.plaf.FontUIResource [UI] ++ monospaced.font [active] Menlo plain 13 javax.swing.plaf.FontUIResource [UI] + + +#---- semibold ---- + +- semibold.font [active] Segoe UI Semibold plain 12 javax.swing.plaf.FontUIResource [UI] ++ semibold.font [active] HelveticaNeue-Medium plain 13 javax.swing.plaf.FontUIResource [UI] + + +#---- small ---- + +- small.font [active] Segoe UI plain 10 javax.swing.plaf.FontUIResource [UI] ++ small.font [active] Helvetica Neue plain 11 javax.swing.plaf.FontUIResource [UI] diff --git a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt new file mode 100644 index 00000000..7992ca66 --- /dev/null +++ b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0.txt @@ -0,0 +1,1584 @@ +Class com.formdev.flatlaf.FlatLightLaf +ID FlatLaf - FlatLaf Light +Name FlatLaf Light +Java 1.8.0_202 +OS Windows 10 + + +#---- ---- + +AATextInfoPropertyKey [unknown type] sun.swing.SwingUtilities2$AATextInfo + + +#---- Actions ---- + +Actions.Blue #389fd6 HSL 201 66 53 javax.swing.plaf.ColorUIResource [UI] +Actions.Green #59a869 HSL 132 31 50 javax.swing.plaf.ColorUIResource [UI] +Actions.Grey #6e6e6e HSL 0 0 43 javax.swing.plaf.ColorUIResource [UI] +Actions.GreyInline #7f8b91 HSL 200 8 53 javax.swing.plaf.ColorUIResource [UI] +Actions.Red #db5860 HSL 356 65 60 javax.swing.plaf.ColorUIResource [UI] +Actions.Yellow #eda200 HSL 41 100 46 javax.swing.plaf.ColorUIResource [UI] + + +#---- AuditoryCues ---- + +AuditoryCues.allAuditoryCues length=13 [Ljava.lang.Object; + [0] CheckBoxMenuItem.commandSound + [1] InternalFrame.closeSound + [2] InternalFrame.maximizeSound + [3] InternalFrame.minimizeSound + [4] InternalFrame.restoreDownSound + [5] InternalFrame.restoreUpSound + [6] MenuItem.commandSound + [7] OptionPane.errorSound + [8] OptionPane.informationSound + [9] OptionPane.questionSound + [10] OptionPane.warningSound + [11] PopupMenu.popupSound + [12] RadioButtonMenuItem.commandSound +AuditoryCues.cueList length=13 [Ljava.lang.Object; + [0] CheckBoxMenuItem.commandSound + [1] InternalFrame.closeSound + [2] InternalFrame.maximizeSound + [3] InternalFrame.minimizeSound + [4] InternalFrame.restoreDownSound + [5] InternalFrame.restoreUpSound + [6] MenuItem.commandSound + [7] OptionPane.errorSound + [8] OptionPane.informationSound + [9] OptionPane.questionSound + [10] OptionPane.warningSound + [11] PopupMenu.popupSound + [12] RadioButtonMenuItem.commandSound +AuditoryCues.noAuditoryCues length=1 [Ljava.lang.Object; + [0] mute + + +#---- BusyLabel ---- + +BusyLabelUI com.formdev.flatlaf.swingx.ui.FlatBusyLabelUI + + +#---- Button ---- + +Button.arc 6 +Button.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Button.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatButtonBorder [UI] +Button.borderColor #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +Button.borderWidth 1 +Button.darkShadow #9c9c9c HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +Button.default.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Button.default.borderColor #4e9de7 HSL 209 76 61 javax.swing.plaf.ColorUIResource [UI] +Button.default.borderWidth 2 +Button.default.focusColor #98c3eb HSL 209 67 76 javax.swing.plaf.ColorUIResource [UI] +Button.default.focusedBackground #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] +Button.default.focusedBorderColor #89b0d4 HSL 209 47 68 javax.swing.plaf.ColorUIResource [UI] +Button.default.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Button.default.hoverBackground #f7f7f7 HSL 0 0 97 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) +Button.default.hoverBorderColor #89b0d4 HSL 209 47 68 javax.swing.plaf.ColorUIResource [UI] +Button.default.pressedBackground #e6e6e6 HSL 0 0 90 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) +Button.defaultButtonFollowsFocus false +Button.disabledBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +Button.disabledBorderColor #cecece HSL 0 0 81 javax.swing.plaf.ColorUIResource [UI] +Button.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +Button.disabledSelectedBackground #dedede HSL 0 0 87 com.formdev.flatlaf.util.DerivedColor [UI] darken(13% autoInverse) +Button.disabledText #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +Button.focusedBackground #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] +Button.focusedBorderColor #89b0d4 HSL 209 47 68 javax.swing.plaf.ColorUIResource [UI] +Button.font [active] $defaultFont [UI] +Button.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Button.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Button.hoverBackground #f7f7f7 HSL 0 0 97 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) +Button.hoverBorderColor #89b0d4 HSL 209 47 68 javax.swing.plaf.ColorUIResource [UI] +Button.iconTextGap 4 +Button.innerFocusWidth 0 +Button.light #e1e1e1 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +Button.margin 2,14,2,14 javax.swing.plaf.InsetsUIResource [UI] +Button.minimumWidth 72 +Button.pressedBackground #e6e6e6 HSL 0 0 90 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) +Button.rollover true +Button.selectedBackground #cccccc HSL 0 0 80 com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) +Button.selectedForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Button.shadow #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +Button.textIconGap 4 +Button.textShiftOffset 0 +Button.toolbar.hoverBackground #e0e0e0 HSL 0 0 88 com.formdev.flatlaf.util.DerivedColor [UI] darken(12% autoInverse) +Button.toolbar.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] +Button.toolbar.pressedBackground #d9d9d9 HSL 0 0 85 com.formdev.flatlaf.util.DerivedColor [UI] darken(15% autoInverse) +Button.toolbar.selectedBackground #cccccc HSL 0 0 80 com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) +Button.toolbar.spacingInsets 1,2,1,2 javax.swing.plaf.InsetsUIResource [UI] +ButtonUI com.formdev.flatlaf.ui.FlatButtonUI + + +#---- Caret ---- + +Caret.width [active] 1 + + +#---- CheckBox ---- + +CheckBox.arc 4 +CheckBox.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +CheckBox.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +CheckBox.disabledText #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +CheckBox.font [active] $defaultFont [UI] +CheckBox.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.borderColor #afafaf HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.checkmarkColor #4e9de7 HSL 209 76 61 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.disabledBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.disabledBorderColor #bfbfbf HSL 0 0 75 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.disabledCheckmarkColor #a8a8a8 HSL 0 0 66 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.focusWidth 1 +CheckBox.icon.focusedBackground #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.focusedBorderColor #7b9ebf HSL 209 35 62 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.hoverBackground #f7f7f7 HSL 0 0 97 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) +CheckBox.icon.hoverBorderColor #7b9ebf HSL 209 35 62 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.pressedBackground #e6e6e6 HSL 0 0 90 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) +CheckBox.icon.pressedBorderColor #7b9ebf HSL 209 35 62 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.selectedBackground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.selectedBorderColor #4e9de7 HSL 209 76 61 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxIcon [UI] +CheckBox.iconTextGap 4 +CheckBox.icon[filled].checkmarkColor #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon[filled].focusedCheckmarkColor #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon[filled].focusedSelectedBackground #4e9de7 HSL 209 76 61 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon[filled].focusedSelectedBorderColor #a7cef3 HSL 209 76 80 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon[filled].hoverSelectedBackground #3891e4 HSL 209 76 56 com.formdev.flatlaf.util.DerivedColor [UI] darken(5% autoInverse) +CheckBox.icon[filled].pressedSelectedBackground #2184e1 HSL 209 76 51 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) +CheckBox.icon[filled].selectedBackground #4e9de7 HSL 209 76 61 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon[filled].selectedBorderColor #4a95db HSL 209 67 57 javax.swing.plaf.ColorUIResource [UI] +CheckBox.margin 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] +CheckBox.rollover true +CheckBox.textIconGap 4 +CheckBox.textShiftOffset 0 + + +#---- CheckBoxMenuItem ---- + +CheckBoxMenuItem.acceleratorFont [active] $defaultFont [UI] +CheckBoxMenuItem.acceleratorForeground #4d4d4d HSL 0 0 30 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.acceleratorSelectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] +CheckBoxMenuItem.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] +CheckBoxMenuItem.borderPainted true +CheckBoxMenuItem.checkIcon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxMenuItemIcon [UI] +CheckBoxMenuItem.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.font [active] $defaultFont [UI] +CheckBoxMenuItem.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.icon.checkmarkColor #4e9de7 HSL 209 76 61 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.icon.disabledCheckmarkColor #a6a6a6 HSL 0 0 65 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] +CheckBoxMenuItem.opaque false +CheckBoxMenuItem.selectionBackground #2675bf HSL 209 67 45 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.selectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItemUI com.formdev.flatlaf.ui.FlatCheckBoxMenuItemUI + + +#---- CheckBox ---- + +CheckBoxUI com.formdev.flatlaf.ui.FlatCheckBoxUI + + +#---- ColorChooser ---- + +ColorChooser.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +ColorChooser.font [active] $defaultFont [UI] +ColorChooser.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +ColorChooser.swatchesDefaultRecentColor #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +ColorChooser.swatchesRecentSwatchSize [active] 16,16 javax.swing.plaf.DimensionUIResource [UI] +ColorChooser.swatchesSwatchSize [active] 16,16 javax.swing.plaf.DimensionUIResource [UI] +ColorChooserUI com.formdev.flatlaf.ui.FlatColorChooserUI + + +#---- ColumnControlButton ---- + +ColumnControlButton.actionIcon [lazy] 10,10 com.formdev.flatlaf.swingx.icons.FlatColumnControlIcon [UI] +ColumnControlButton.iconColor #737373 HSL 0 0 45 javax.swing.plaf.ColorUIResource [UI] + + +#---- ComboBox ---- + +ComboBox.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +ComboBox.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRoundBorder [UI] +ComboBox.buttonArrowColor #666666 HSL 0 0 40 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonBackground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonDarkShadow #9c9c9c HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonDisabledArrowColor #a6a6a6 HSL 0 0 65 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonDisabledSeparatorColor #cecece HSL 0 0 81 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonEditableBackground #fafafa HSL 0 0 98 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonHighlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonHoverArrowColor #999999 HSL 0 0 60 com.formdev.flatlaf.util.DerivedColor [UI] lighten(20%) +ComboBox.buttonPressedArrowColor #b3b3b3 HSL 0 0 70 com.formdev.flatlaf.util.DerivedColor [UI] lighten(30%) +ComboBox.buttonSeparatorColor #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonShadow #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonStyle auto +ComboBox.disabledBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +ComboBox.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +ComboBox.editorColumns 0 +ComboBox.font [active] $defaultFont [UI] +ComboBox.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +ComboBox.isEnterSelectablePopup false +ComboBox.maximumRowCount 15 +ComboBox.minimumWidth 72 +ComboBox.noActionOnKeyNavigation false +ComboBox.padding 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +ComboBox.selectionBackground #2675bf HSL 209 67 45 javax.swing.plaf.ColorUIResource [UI] +ComboBox.selectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +ComboBox.timeFactor 1000 +ComboBoxUI com.formdev.flatlaf.ui.FlatComboBoxUI + + +#---- Component ---- + +Component.accentColor #2675bf HSL 209 67 45 javax.swing.plaf.ColorUIResource [UI] +Component.arc 5 +Component.arrowType chevron +Component.borderColor #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +Component.borderWidth 1 +Component.custom.borderColor #f38d8d HSL 0 81 75 com.formdev.flatlaf.util.DerivedColor [UI] desaturate(20%) lighten(25%) +Component.disabledBorderColor #cecece HSL 0 0 81 javax.swing.plaf.ColorUIResource [UI] +Component.error.borderColor #ebb8bc HSL 355 56 82 javax.swing.plaf.ColorUIResource [UI] +Component.error.focusedBorderColor #e53e4d HSL 355 76 57 javax.swing.plaf.ColorUIResource [UI] +Component.focusColor #98c3eb HSL 209 67 76 javax.swing.plaf.ColorUIResource [UI] +Component.focusWidth 0 +Component.focusedBorderColor #89b0d4 HSL 209 47 68 javax.swing.plaf.ColorUIResource [UI] +Component.grayFilter [lazy] [unknown type] com.formdev.flatlaf.util.GrayFilter +Component.hideMnemonics true +Component.innerFocusWidth 0.5 +Component.innerOutlineWidth 1 +Component.linkColor #236db2 HSL 209 67 42 javax.swing.plaf.ColorUIResource [UI] +Component.minimumWidth 64 +Component.warning.borderColor #fed284 HSL 38 98 76 javax.swing.plaf.ColorUIResource [UI] +Component.warning.focusedBorderColor #e2a53a HSL 38 74 56 javax.swing.plaf.ColorUIResource [UI] + + +#---- DatePicker ---- + +DatePickerUI com.formdev.flatlaf.swingx.ui.FlatDatePickerUI + + +#---- Desktop ---- + +Desktop.background #e6ebf0 HSL 210 25 92 javax.swing.plaf.ColorUIResource [UI] +Desktop.minOnScreenInsets 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] + + +#---- DesktopIcon ---- + +DesktopIcon.background #c6d2dd HSL 209 25 82 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) +DesktopIcon.border [lazy] 4,4,4,4 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +DesktopIcon.closeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameCloseIcon [UI] +DesktopIcon.closeSize 20,20 javax.swing.plaf.DimensionUIResource [UI] +DesktopIcon.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +DesktopIcon.iconSize 64,64 javax.swing.plaf.DimensionUIResource [UI] +DesktopIconUI com.formdev.flatlaf.ui.FlatDesktopIconUI + + +#---- DesktopPane ---- + +DesktopPaneUI com.formdev.flatlaf.ui.FlatDesktopPaneUI + + +#---- EditorPane ---- + +EditorPane.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +EditorPane.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +EditorPane.caretBlinkRate 500 +EditorPane.caretForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +EditorPane.disabledBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +EditorPane.font [active] $defaultFont [UI] +EditorPane.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +EditorPane.inactiveBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +EditorPane.inactiveForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +EditorPane.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +EditorPane.selectionBackground #2675bf HSL 209 67 45 javax.swing.plaf.ColorUIResource [UI] +EditorPane.selectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +EditorPaneUI com.formdev.flatlaf.ui.FlatEditorPaneUI + + +#---- FileChooser ---- + +FileChooser.detailsViewIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserDetailsViewIcon [UI] +FileChooser.homeFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserHomeFolderIcon [UI] +FileChooser.listViewIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserListViewIcon [UI] +FileChooser.newFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserNewFolderIcon [UI] +FileChooser.readOnly false +FileChooser.upFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserUpFolderIcon [UI] +FileChooser.useSystemExtensionHiding true +FileChooser.usesSingleFilePane true +FileChooserUI com.formdev.flatlaf.ui.FlatFileChooserUI + + +#---- FileView ---- + +FileView.computerIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewComputerIcon [UI] +FileView.directoryIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewDirectoryIcon [UI] +FileView.fileIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewFileIcon [UI] +FileView.floppyDriveIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewFloppyDriveIcon [UI] +FileView.fullRowSelection true +FileView.hardDriveIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewHardDriveIcon [UI] + + +#---- FormattedTextField ---- + +FormattedTextField.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] +FormattedTextField.caretBlinkRate 500 +FormattedTextField.caretForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.disabledBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.font [active] $defaultFont [UI] +FormattedTextField.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.iconTextGap 4 +FormattedTextField.inactiveBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.inactiveForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +FormattedTextField.placeholderForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.selectionBackground #2675bf HSL 209 67 45 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.selectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +FormattedTextFieldUI com.formdev.flatlaf.ui.FlatFormattedTextFieldUI + + +#---- Header ---- + +HeaderUI com.formdev.flatlaf.swingx.ui.FlatHeaderUI + + +#---- HelpButton ---- + +HelpButton.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +HelpButton.borderColor #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +HelpButton.borderWidth 1 +HelpButton.disabledBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +HelpButton.disabledBorderColor #cecece HSL 0 0 81 javax.swing.plaf.ColorUIResource [UI] +HelpButton.disabledQuestionMarkColor #a9a9a9 HSL 0 0 66 javax.swing.plaf.ColorUIResource [UI] +HelpButton.focusedBackground #eaf3fb HSL 208 68 95 javax.swing.plaf.ColorUIResource [UI] +HelpButton.focusedBorderColor #89b0d4 HSL 209 47 68 javax.swing.plaf.ColorUIResource [UI] +HelpButton.hoverBackground #f7f7f7 HSL 0 0 97 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) +HelpButton.hoverBorderColor #89b0d4 HSL 209 47 68 javax.swing.plaf.ColorUIResource [UI] +HelpButton.icon [lazy] 22,22 com.formdev.flatlaf.icons.FlatHelpButtonIcon [UI] +HelpButton.innerFocusWidth 0 +HelpButton.pressedBackground #e6e6e6 HSL 0 0 90 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) +HelpButton.questionMarkColor #4e9de7 HSL 209 76 61 javax.swing.plaf.ColorUIResource [UI] + + +#---- Hyperlink ---- + +Hyperlink.disabledText #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +Hyperlink.linkColor #236db2 HSL 209 67 42 javax.swing.plaf.ColorUIResource [UI] +Hyperlink.visitedColor #236db2 HSL 209 67 42 javax.swing.plaf.ColorUIResource [UI] +HyperlinkUI com.formdev.flatlaf.swingx.ui.FlatHyperlinkUI + + +#---- InternalFrame ---- + +InternalFrame.activeBorderColor #919191 HSL 0 0 57 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.activeDropShadowInsets 5,5,6,6 javax.swing.plaf.InsetsUIResource [UI] +InternalFrame.activeDropShadowOpacity 0.25 +InternalFrame.activeTitleBackground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.activeTitleForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.border [lazy] 6,6,6,6 false com.formdev.flatlaf.ui.FlatInternalFrameUI$FlatInternalFrameBorder [UI] +InternalFrame.borderColor #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.borderDarkShadow #9c9c9c HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.borderHighlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.borderLight #e1e1e1 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.borderLineWidth 1 +InternalFrame.borderMargins 6,6,6,6 javax.swing.plaf.InsetsUIResource [UI] +InternalFrame.borderShadow #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.buttonHoverBackground #e6e6e6 HSL 0 0 90 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) +InternalFrame.buttonPressedBackground #cccccc HSL 0 0 80 com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) +InternalFrame.buttonSize 24,24 javax.swing.plaf.DimensionUIResource [UI] +InternalFrame.closeHoverBackground [lazy] #db5860 HSL 356 65 60 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.closeHoverForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.closeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameCloseIcon [UI] +InternalFrame.closePressedBackground [lazy] #d22e38 HSL 356 65 50 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.closePressedForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.dropShadowPainted true +InternalFrame.icon [lazy] 16,16 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) +InternalFrame.iconifyIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameIconifyIcon [UI] +InternalFrame.inactiveBorderColor #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.inactiveDropShadowInsets 3,3,4,4 javax.swing.plaf.InsetsUIResource [UI] +InternalFrame.inactiveDropShadowOpacity 0.5 +InternalFrame.inactiveTitleBackground #fafafa HSL 0 0 98 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.inactiveTitleForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.maximizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameMaximizeIcon [UI] +InternalFrame.minimizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameRestoreIcon [UI] +InternalFrame.titleFont [active] $defaultFont [UI] + + +#---- InternalFrameTitlePane ---- + +InternalFrameTitlePane.border [lazy] 0,8,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +InternalFrameTitlePane.closeButtonOpacity true +InternalFrameTitlePane.iconifyButtonOpacity true +InternalFrameTitlePane.maximizeButtonOpacity true + + +#---- InternalFrame ---- + +InternalFrameUI com.formdev.flatlaf.ui.FlatInternalFrameUI + + +#---- JXBusyLabel ---- + +JXBusyLabel.baseColor #c4c4c4 HSL 0 0 77 javax.swing.plaf.ColorUIResource [UI] +JXBusyLabel.highlightColor #808080 HSL 0 0 50 javax.swing.plaf.ColorUIResource [UI] + + +#---- JXDatePicker ---- + +JXDatePicker.border [lazy] 1,1,1,1 false com.formdev.flatlaf.swingx.ui.FlatDatePickerBorder [UI] + + +#---- JXHeader ---- + +JXHeader.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +JXHeader.startBackground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] + + +#---- JXMonthView ---- + +JXMonthView.arrowColor #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.daysOfTheWeekForeground #444444 HSL 0 0 27 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.disabledArrowColor #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.flaggedDayForeground #e02222 HSL 0 75 51 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.leadingDayForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.monthDownFileName [lazy] 20,20 com.formdev.flatlaf.swingx.ui.FlatMonthDownIcon [UI] +JXMonthView.monthStringBackground #dfdfdf HSL 0 0 87 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.monthStringForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.monthUpFileName [lazy] 20,20 com.formdev.flatlaf.swingx.ui.FlatMonthUpIcon [UI] +JXMonthView.selectedBackground #bfdaf2 HSL 208 66 85 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.trailingDayForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.unselectableDayForeground #e02222 HSL 0 75 51 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.weekOfTheYearForeground #666666 HSL 0 0 40 javax.swing.plaf.ColorUIResource [UI] + + +#---- JXTitledPanel ---- + +JXTitledPanel.borderColor #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +JXTitledPanel.captionInsets 4,10,4,10 javax.swing.plaf.InsetsUIResource [UI] +JXTitledPanel.titleBackground #dfdfdf HSL 0 0 87 javax.swing.plaf.ColorUIResource [UI] +JXTitledPanel.titleForeground #222222 HSL 0 0 13 javax.swing.plaf.ColorUIResource [UI] + + +#---- JideButton ---- + +JideButton.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +JideButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +JideButton.borderColor #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +JideButton.darkShadow #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +JideButton.focusedBackground #e0e0e0 HSL 0 0 88 com.formdev.flatlaf.util.DerivedColor [UI] darken(12% autoInverse) +JideButton.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +JideButton.highlight #cccccc HSL 0 0 80 com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) +JideButton.light #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +JideButton.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] +JideButton.selectedAndFocusedBackground #d9d9d9 HSL 0 0 85 com.formdev.flatlaf.util.DerivedColor [UI] darken(15% autoInverse) +JideButton.selectedBackground #cccccc HSL 0 0 80 com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) +JideButton.shadow #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +JideButton.textIconGap [active] 4 +JideButtonUI com.formdev.flatlaf.jideoss.ui.FlatJideButtonUI + + +#---- JideLabel ---- + +JideLabel.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +JideLabel.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +JideLabel.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +JideLabelUI com.formdev.flatlaf.jideoss.ui.FlatJideLabelUI + + +#---- JidePopupMenu ---- + +JidePopupMenuUI com.formdev.flatlaf.jideoss.ui.FlatJidePopupMenuUI + + +#---- JideSplitButton ---- + +JideSplitButton.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +JideSplitButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +JideSplitButton.buttonArrowColor #666666 HSL 0 0 40 javax.swing.plaf.ColorUIResource [UI] +JideSplitButton.buttonDisabledArrowColor #a6a6a6 HSL 0 0 65 javax.swing.plaf.ColorUIResource [UI] +JideSplitButton.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +JideSplitButton.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] +JideSplitButton.selectionForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +JideSplitButton.textIconGap [active] 4 +JideSplitButtonUI com.formdev.flatlaf.jideoss.ui.FlatJideSplitButtonUI + + +#---- JideTabbedPane ---- + +JideTabbedPane.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +JideTabbedPane.closeButtonLeftMargin 0 +JideTabbedPane.closeButtonRightMargin 0 +JideTabbedPane.contentBorderInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +JideTabbedPane.fitStyleBoundSize 0 +JideTabbedPane.fitStyleFirstTabMargin 0 +JideTabbedPane.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +JideTabbedPane.shadow #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +JideTabbedPane.tabAreaBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +JideTabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +JideTabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] +JideTabbedPane.tabRunOverlay 0 +JideTabbedPaneUI com.formdev.flatlaf.jideoss.ui.FlatJideTabbedPaneUI + + +#---- Label ---- + +Label.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +Label.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +Label.disabledShadow #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +Label.font [active] $defaultFont [UI] +Label.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +LabelUI com.formdev.flatlaf.ui.FlatLabelUI + + +#---- List ---- + +List.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +List.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +List.cellFocusColor #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +List.cellMargins 1,6,1,6 javax.swing.plaf.InsetsUIResource [UI] +List.cellNoFocusBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatListCellBorder$Default [UI] lineColor=#000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +List.cellRenderer [active] javax.swing.DefaultListCellRenderer$UIResource [UI] +List.dropCellBackground [lazy] #3f8fd9 HSL 209 67 55 javax.swing.plaf.ColorUIResource [UI] +List.dropCellForeground [lazy] #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +List.dropLineColor [lazy] #6aa7e1 HSL 209 66 65 javax.swing.plaf.ColorUIResource [UI] +List.focusCellHighlightBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatListCellBorder$Focused [UI] lineColor=#000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +List.focusSelectedCellHighlightBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatListCellBorder$Selected [UI] lineColor=#000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +List.font [active] $defaultFont [UI] +List.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +List.noFocusBorder 1,1,1,1 false javax.swing.plaf.BorderUIResource$EmptyBorderUIResource [UI] +List.selectionBackground #2675bf HSL 209 67 45 javax.swing.plaf.ColorUIResource [UI] +List.selectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +List.selectionInactiveBackground #d3d3d3 HSL 0 0 83 javax.swing.plaf.ColorUIResource [UI] +List.selectionInactiveForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +List.showCellFocusIndicator false +List.timeFactor 1000 +ListUI com.formdev.flatlaf.ui.FlatListUI + + +#---- Menu ---- + +Menu.acceleratorFont [active] $defaultFont [UI] +Menu.acceleratorForeground #4d4d4d HSL 0 0 30 javax.swing.plaf.ColorUIResource [UI] +Menu.acceleratorSelectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Menu.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuArrowIcon [UI] +Menu.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Menu.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] +Menu.borderPainted true +Menu.cancelMode hideLastSubmenu +Menu.crossMenuMnemonic true +Menu.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +Menu.font [active] $defaultFont [UI] +Menu.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Menu.icon.arrowColor #666666 HSL 0 0 40 javax.swing.plaf.ColorUIResource [UI] +Menu.icon.disabledArrowColor #a6a6a6 HSL 0 0 65 javax.swing.plaf.ColorUIResource [UI] +Menu.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] +Menu.menuPopupOffsetX 0 +Menu.menuPopupOffsetY 0 +Menu.opaque false +Menu.preserveTopLevelSelection false +Menu.selectionBackground #2675bf HSL 209 67 45 javax.swing.plaf.ColorUIResource [UI] +Menu.selectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Menu.shortcutKeys length=1 [I + [0] 8 +Menu.submenuPopupOffsetX [active] -4 +Menu.submenuPopupOffsetY [active] -4 + + +#---- MenuBar ---- + +MenuBar.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +MenuBar.border [lazy] 0,0,1,0 false com.formdev.flatlaf.ui.FlatMenuBarBorder [UI] +MenuBar.borderColor #cecece HSL 0 0 81 javax.swing.plaf.ColorUIResource [UI] +MenuBar.font [active] $defaultFont [UI] +MenuBar.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +MenuBar.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +MenuBar.hoverBackground #e6e6e6 HSL 0 0 90 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) +MenuBar.itemMargins 3,8,3,8 javax.swing.plaf.InsetsUIResource [UI] +MenuBar.shadow #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +MenuBar.windowBindings length=2 [Ljava.lang.Object; + [0] F10 + [1] takeFocus +MenuBarUI com.formdev.flatlaf.ui.FlatMenuBarUI + + +#---- MenuItem ---- + +MenuItem.acceleratorArrowGap 2 +MenuItem.acceleratorDelimiter + +MenuItem.acceleratorFont [active] $defaultFont [UI] +MenuItem.acceleratorForeground #4d4d4d HSL 0 0 30 javax.swing.plaf.ColorUIResource [UI] +MenuItem.acceleratorSelectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +MenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] +MenuItem.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +MenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] +MenuItem.borderPainted true +MenuItem.checkBackground #bfd9f2 HSL 209 66 85 com.formdev.flatlaf.util.DerivedColor [UI] lighten(40%) +MenuItem.checkMargins 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] +MenuItem.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +MenuItem.font [active] $defaultFont [UI] +MenuItem.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +MenuItem.iconTextGap 6 +MenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] +MenuItem.minimumIconSize 16,16 javax.swing.plaf.DimensionUIResource [UI] +MenuItem.minimumWidth 72 +MenuItem.opaque false +MenuItem.selectionBackground #2675bf HSL 209 67 45 javax.swing.plaf.ColorUIResource [UI] +MenuItem.selectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +MenuItem.textAcceleratorGap 24 +MenuItem.textNoAcceleratorGap 6 +MenuItem.underlineSelectionBackground #e6e6e6 HSL 0 0 90 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) +MenuItem.underlineSelectionCheckBackground #bfd9f2 HSL 209 66 85 com.formdev.flatlaf.util.DerivedColor [UI] lighten(40%) +MenuItem.underlineSelectionColor #3c83c5 HSL 209 54 50 javax.swing.plaf.ColorUIResource [UI] +MenuItem.underlineSelectionHeight 3 +MenuItem.verticallyAlignText true +MenuItemUI com.formdev.flatlaf.ui.FlatMenuItemUI + + +#---- Menu ---- + +MenuUI com.formdev.flatlaf.ui.FlatMenuUI + + +#---- MonthView ---- + +MonthViewUI com.formdev.flatlaf.swingx.ui.FlatMonthViewUI + + +#---- Objects ---- + +Objects.BlackText #231f20 HSL 345 6 13 javax.swing.plaf.ColorUIResource [UI] +Objects.Blue #40b6e0 HSL 196 72 56 javax.swing.plaf.ColorUIResource [UI] +Objects.Green #62b543 HSL 104 46 49 javax.swing.plaf.ColorUIResource [UI] +Objects.GreenAndroid #a4c639 HSL 74 55 50 javax.swing.plaf.ColorUIResource [UI] +Objects.Grey #9aa7b0 HSL 205 12 65 javax.swing.plaf.ColorUIResource [UI] +Objects.Pink #f98b9e HSL 350 90 76 javax.swing.plaf.ColorUIResource [UI] +Objects.Purple #b99bf8 HSL 259 87 79 javax.swing.plaf.ColorUIResource [UI] +Objects.Red #f26522 HSL 19 89 54 javax.swing.plaf.ColorUIResource [UI] +Objects.RedStatus #e05555 HSL 0 69 61 javax.swing.plaf.ColorUIResource [UI] +Objects.Yellow #f4af3d HSL 37 89 60 javax.swing.plaf.ColorUIResource [UI] +Objects.YellowDark #d9a343 HSL 38 66 56 javax.swing.plaf.ColorUIResource [UI] + + +#---- OptionPane ---- + +OptionPane.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +OptionPane.border [lazy] 12,12,12,12 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +OptionPane.buttonAreaBorder [lazy] 12,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +OptionPane.buttonClickThreshhold 500 +OptionPane.buttonMinimumWidth [active] 72 +OptionPane.buttonOrientation 4 +OptionPane.buttonPadding 8 +OptionPane.errorIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneErrorIcon [UI] +OptionPane.font [active] $defaultFont [UI] +OptionPane.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +OptionPane.iconMessageGap 16 +OptionPane.informationIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneInformationIcon [UI] +OptionPane.maxCharactersPerLine 80 +OptionPane.messageAreaBorder [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +OptionPane.messagePadding 3 +OptionPane.minimumSize 262,90 javax.swing.plaf.DimensionUIResource [UI] +OptionPane.questionIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneQuestionIcon [UI] +OptionPane.sameSizeButtons true +OptionPane.setButtonMargin false +OptionPane.showIcon false +OptionPane.warningIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneWarningIcon [UI] +OptionPane.windowBindings length=2 [Ljava.lang.Object; + [0] ESCAPE + [1] close +OptionPaneUI com.formdev.flatlaf.ui.FlatOptionPaneUI + + +#---- Panel ---- + +Panel.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +Panel.font [active] $defaultFont [UI] +Panel.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +PanelUI com.formdev.flatlaf.ui.FlatPanelUI + + +#---- PasswordField ---- + +PasswordField.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +PasswordField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] +PasswordField.capsLockIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatCapsLockIcon [UI] +PasswordField.capsLockIconColor #00000064 39% HSLA 0 0 0 39 javax.swing.plaf.ColorUIResource [UI] +PasswordField.caretBlinkRate 500 +PasswordField.caretForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +PasswordField.disabledBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +PasswordField.echoChar '\u2022' +PasswordField.font [active] $defaultFont [UI] +PasswordField.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +PasswordField.iconTextGap 4 +PasswordField.inactiveBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +PasswordField.inactiveForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +PasswordField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +PasswordField.placeholderForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +PasswordField.revealIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatRevealIcon [UI] +PasswordField.revealIconColor #666666 HSL 0 0 40 javax.swing.plaf.ColorUIResource [UI] +PasswordField.selectionBackground #2675bf HSL 209 67 45 javax.swing.plaf.ColorUIResource [UI] +PasswordField.selectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +PasswordField.showCapsLock true +PasswordField.showRevealButton false +PasswordFieldUI com.formdev.flatlaf.ui.FlatPasswordFieldUI + + +#---- Popup ---- + +Popup.dropShadowColor #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Popup.dropShadowInsets -4,-4,4,4 javax.swing.plaf.InsetsUIResource [UI] +Popup.dropShadowOpacity 0.15 +Popup.dropShadowPainted true + + +#---- PopupMenu ---- + +PopupMenu.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +PopupMenu.border [lazy] 4,1,4,1 false com.formdev.flatlaf.ui.FlatPopupMenuBorder [UI] lineColor=#aeaeae HSL 0 0 68 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +PopupMenu.borderColor #aeaeae HSL 0 0 68 javax.swing.plaf.ColorUIResource [UI] +PopupMenu.borderInsets 4,1,4,1 javax.swing.plaf.InsetsUIResource [UI] +PopupMenu.consumeEventOnClose false +PopupMenu.font [active] $defaultFont [UI] +PopupMenu.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +PopupMenu.hoverScrollArrowBackground #e5e5e5 HSL 0 0 90 javax.swing.plaf.ColorUIResource [UI] +PopupMenu.scrollArrowColor #666666 HSL 0 0 40 javax.swing.plaf.ColorUIResource [UI] + + +#---- PopupMenuSeparator ---- + +PopupMenuSeparator.height 9 +PopupMenuSeparator.stripeIndent 4 +PopupMenuSeparator.stripeWidth 1 +PopupMenuSeparatorUI com.formdev.flatlaf.ui.FlatPopupMenuSeparatorUI + + +#---- PopupMenu ---- + +PopupMenuUI com.formdev.flatlaf.ui.FlatPopupMenuUI + + +#---- ProgressBar ---- + +ProgressBar.arc 4 +ProgressBar.background #d1d1d1 HSL 0 0 82 javax.swing.plaf.ColorUIResource [UI] +ProgressBar.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +ProgressBar.cellLength 1 +ProgressBar.cellSpacing 0 +ProgressBar.cycleTime 4000 +ProgressBar.font [active] Segoe UI plain 10 javax.swing.plaf.FontUIResource [UI] +ProgressBar.foreground #2285e1 HSL 209 76 51 javax.swing.plaf.ColorUIResource [UI] +ProgressBar.horizontalSize 146,4 javax.swing.plaf.DimensionUIResource [UI] +ProgressBar.repaintInterval 15 +ProgressBar.selectionBackground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +ProgressBar.selectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +ProgressBar.verticalSize 4,146 javax.swing.plaf.DimensionUIResource [UI] +ProgressBarUI com.formdev.flatlaf.ui.FlatProgressBarUI + + +#---- RadioButton ---- + +RadioButton.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +RadioButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +RadioButton.darkShadow #9c9c9c HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +RadioButton.disabledText #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +RadioButton.font [active] $defaultFont [UI] +RadioButton.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +RadioButton.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +RadioButton.icon.centerDiameter 8 +RadioButton.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatRadioButtonIcon [UI] +RadioButton.iconTextGap 4 +RadioButton.icon[filled].centerDiameter 5 +RadioButton.light #e1e1e1 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +RadioButton.margin 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] +RadioButton.rollover true +RadioButton.shadow #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +RadioButton.textIconGap 4 +RadioButton.textShiftOffset 0 + + +#---- RadioButtonMenuItem ---- + +RadioButtonMenuItem.acceleratorFont [active] $defaultFont [UI] +RadioButtonMenuItem.acceleratorForeground #4d4d4d HSL 0 0 30 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.acceleratorSelectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] +RadioButtonMenuItem.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] +RadioButtonMenuItem.borderPainted true +RadioButtonMenuItem.checkIcon [lazy] 15,15 com.formdev.flatlaf.icons.FlatRadioButtonMenuItemIcon [UI] +RadioButtonMenuItem.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.font [active] $defaultFont [UI] +RadioButtonMenuItem.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] +RadioButtonMenuItem.opaque false +RadioButtonMenuItem.selectionBackground #2675bf HSL 209 67 45 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.selectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItemUI com.formdev.flatlaf.ui.FlatRadioButtonMenuItemUI + + +#---- RadioButton ---- + +RadioButtonUI com.formdev.flatlaf.ui.FlatRadioButtonUI + + +#---- RangeSlider ---- + +RangeSliderUI com.formdev.flatlaf.jideoss.ui.FlatRangeSliderUI + + +#---- Resizable ---- + +Resizable.resizeBorder [lazy] 4,4,4,4 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#aeaeae HSL 0 0 68 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 + + +#---- RootPane ---- + +RootPane.activeBorderColor #737373 HSL 0 0 45 com.formdev.flatlaf.util.DerivedColor [UI] darken(50% autoInverse) +RootPane.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +RootPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRootPaneUI$FlatWindowBorder [UI] +RootPane.borderDragThickness 5 +RootPane.cornerDragWidth 16 +RootPane.defaultButtonWindowKeyBindings length=8 [Ljava.lang.Object; + [0] ENTER + [1] press + [2] released ENTER + [3] release + [4] ctrl ENTER + [5] press + [6] ctrl released ENTER + [7] release +RootPane.font [active] $defaultFont [UI] +RootPane.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +RootPane.honorDialogMinimumSizeOnResize true +RootPane.honorFrameMinimumSizeOnResize false +RootPane.inactiveBorderColor #a6a6a6 HSL 0 0 65 com.formdev.flatlaf.util.DerivedColor [UI] darken(30% autoInverse) +RootPaneUI com.formdev.flatlaf.ui.FlatRootPaneUI + + +#---- ScrollBar ---- + +ScrollBar.allowsAbsolutePositioning true +ScrollBar.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.buttonArrowColor #666666 HSL 0 0 40 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.buttonDisabledArrowColor #a6a6a6 HSL 0 0 65 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.hoverButtonBackground #e5e5e5 HSL 0 0 90 com.formdev.flatlaf.util.DerivedColor [UI] darken(5%) +ScrollBar.hoverThumbColor #c3c3c3 HSL 0 0 76 com.formdev.flatlaf.util.DerivedColor [UI] darken(10%) +ScrollBar.hoverThumbWithTrack false +ScrollBar.hoverTrackColor #ededed HSL 0 0 93 com.formdev.flatlaf.util.DerivedColor [UI] darken(3%) +ScrollBar.maximumThumbSize 100000,100000 javax.swing.plaf.DimensionUIResource [UI] +ScrollBar.minimumButtonSize 12,12 javax.swing.plaf.DimensionUIResource [UI] +ScrollBar.minimumThumbSize 10,10 javax.swing.plaf.DimensionUIResource [UI] +ScrollBar.pressedButtonBackground #d9d9d9 HSL 0 0 85 com.formdev.flatlaf.util.DerivedColor [UI] darken(10%) +ScrollBar.pressedThumbColor #a9a9a9 HSL 0 0 66 com.formdev.flatlaf.util.DerivedColor [UI] darken(20%) +ScrollBar.pressedThumbWithTrack false +ScrollBar.showButtons false +ScrollBar.squareButtons false +ScrollBar.thumb #dcdcdc HSL 0 0 86 com.formdev.flatlaf.util.DerivedColor [UI] darken(10%) +ScrollBar.thumbArc 0 +ScrollBar.thumbDarkShadow #9c9c9c HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.thumbHighlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.thumbInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +ScrollBar.thumbShadow #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.track #f5f5f5 HSL 0 0 96 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%) +ScrollBar.trackArc 0 +ScrollBar.trackHighlight #9c9c9c HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.trackInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +ScrollBar.width 10 +ScrollBarUI com.formdev.flatlaf.ui.FlatScrollBarUI + + +#---- ScrollPane ---- + +ScrollPane.background #f5f5f5 HSL 0 0 96 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%) +ScrollPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatBorder [UI] +ScrollPane.fillUpperCorner true +ScrollPane.font [active] $defaultFont [UI] +ScrollPane.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +ScrollPane.smoothScrolling true +ScrollPaneUI com.formdev.flatlaf.ui.FlatScrollPaneUI + + +#---- SearchField ---- + +SearchField.clearIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatClearIcon [UI] +SearchField.clearIconColor [lazy] #7f8b9180 50% HSLA 200 8 53 50 javax.swing.plaf.ColorUIResource [UI] +SearchField.clearIconHoverColor [lazy] #7f8b9180 50% HSLA 200 8 53 50 javax.swing.plaf.ColorUIResource [UI] +SearchField.clearIconPressedColor [lazy] #7f8b91cc 80% HSLA 200 8 53 80 javax.swing.plaf.ColorUIResource [UI] +SearchField.clearPressedIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatClearIcon [UI] +SearchField.clearRolloverIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatClearIcon [UI] +SearchField.icon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchIcon [UI] +SearchField.popupIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchWithHistoryIcon [UI] +SearchField.popupPressedIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchWithHistoryIcon [UI] +SearchField.popupRolloverIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchWithHistoryIcon [UI] +SearchField.pressedIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchIcon [UI] +SearchField.rolloverIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchIcon [UI] +SearchField.searchIconColor [lazy] #7f8b91e6 90% HSLA 200 8 53 90 javax.swing.plaf.ColorUIResource [UI] +SearchField.searchIconHoverColor [lazy] #7f8b91b3 70% HSLA 200 8 53 70 javax.swing.plaf.ColorUIResource [UI] +SearchField.searchIconPressedColor [lazy] #7f8b9180 50% HSLA 200 8 53 50 javax.swing.plaf.ColorUIResource [UI] + + +#---- Separator ---- + +Separator.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +Separator.foreground #cecece HSL 0 0 81 javax.swing.plaf.ColorUIResource [UI] +Separator.height 3 +Separator.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Separator.shadow #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +Separator.stripeIndent 1 +Separator.stripeWidth 1 +SeparatorUI com.formdev.flatlaf.ui.FlatSeparatorUI + + +#---- Slider ---- + +Slider.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +Slider.disabledThumbColor #d1d1d1 HSL 0 0 82 javax.swing.plaf.ColorUIResource [UI] +Slider.disabledTrackColor #d1d1d1 HSL 0 0 82 javax.swing.plaf.ColorUIResource [UI] +Slider.focus #9c9c9c HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +Slider.focusInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +Slider.focusWidth 4 +Slider.focusedColor #94c1ea80 50% HSLA 209 67 75 50 com.formdev.flatlaf.util.DerivedColor [UI] changeLightness(75%) fade(50%) +Slider.font [active] $defaultFont [UI] +Slider.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Slider.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Slider.horizontalSize 200,21 java.awt.Dimension +Slider.hoverThumbColor #1c78ce HSL 209 76 46 com.formdev.flatlaf.util.DerivedColor [UI] darken(5% autoInverse) +Slider.minimumHorizontalSize 36,21 java.awt.Dimension +Slider.minimumVerticalSize 21,36 java.awt.Dimension +Slider.onlyLeftMouseButtonDrag true +Slider.pressedThumbColor #1a70c0 HSL 209 76 43 com.formdev.flatlaf.util.DerivedColor [UI] darken(8% autoInverse) +Slider.shadow #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +Slider.thumbColor #2285e1 HSL 209 76 51 javax.swing.plaf.ColorUIResource [UI] +Slider.thumbSize 12,12 javax.swing.plaf.DimensionUIResource [UI] +Slider.tickColor #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +Slider.trackColor #c4c4c4 HSL 0 0 77 javax.swing.plaf.ColorUIResource [UI] +Slider.trackValueColor #2285e1 HSL 209 76 51 javax.swing.plaf.ColorUIResource [UI] +Slider.trackWidth 2 +Slider.verticalSize 21,200 java.awt.Dimension +SliderUI com.formdev.flatlaf.ui.FlatSliderUI + + +#---- Spinner ---- + +Spinner.arrowButtonSize 16,5 java.awt.Dimension +Spinner.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Spinner.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRoundBorder [UI] +Spinner.buttonArrowColor #666666 HSL 0 0 40 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonBackground #fafafa HSL 0 0 98 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonDisabledArrowColor #a6a6a6 HSL 0 0 65 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonDisabledSeparatorColor #cecece HSL 0 0 81 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonHoverArrowColor #999999 HSL 0 0 60 com.formdev.flatlaf.util.DerivedColor [UI] lighten(20%) +Spinner.buttonPressedArrowColor #b3b3b3 HSL 0 0 70 com.formdev.flatlaf.util.DerivedColor [UI] lighten(30%) +Spinner.buttonSeparatorColor #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonStyle button +Spinner.disabledBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +Spinner.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +Spinner.editorAlignment 11 +Spinner.editorBorderPainted false +Spinner.font [active] $defaultFont [UI] +Spinner.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Spinner.padding 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +SpinnerUI com.formdev.flatlaf.ui.FlatSpinnerUI + + +#---- SplitPane ---- + +SplitPane.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +SplitPane.centerOneTouchButtons true +SplitPane.continuousLayout true +SplitPane.darkShadow #9c9c9c HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +SplitPane.dividerSize 5 +SplitPane.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +SplitPane.oneTouchButtonOffset [active] 2 +SplitPane.oneTouchButtonSize [active] 6 +SplitPane.shadow #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] + + +#---- SplitPaneDivider ---- + +SplitPaneDivider.draggingColor #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +SplitPaneDivider.gripColor #b1b1b1 HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +SplitPaneDivider.gripDotCount 3 +SplitPaneDivider.gripDotSize 3 +SplitPaneDivider.gripGap 2 +SplitPaneDivider.oneTouchArrowColor #666666 HSL 0 0 40 javax.swing.plaf.ColorUIResource [UI] +SplitPaneDivider.oneTouchHoverArrowColor #999999 HSL 0 0 60 com.formdev.flatlaf.util.DerivedColor [UI] lighten(20%) +SplitPaneDivider.oneTouchPressedArrowColor #b3b3b3 HSL 0 0 70 com.formdev.flatlaf.util.DerivedColor [UI] lighten(30%) +SplitPaneDivider.style grip + + +#---- SplitPane ---- + +SplitPaneUI com.formdev.flatlaf.ui.FlatSplitPaneUI + + +#---- TabbedPane ---- + +TabbedPane.arrowType chevron +TabbedPane.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.buttonArc 6 +TabbedPane.buttonHoverBackground #e0e0e0 HSL 0 0 88 com.formdev.flatlaf.util.DerivedColor [UI] darken(7% autoInverse) +TabbedPane.buttonInsets 2,1,2,1 javax.swing.plaf.InsetsUIResource [UI] +TabbedPane.buttonPressedBackground #d9d9d9 HSL 0 0 85 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) +TabbedPane.cardTabSelectionHeight 2 +TabbedPane.closeArc 4 +TabbedPane.closeCrossFilledSize 7.5 +TabbedPane.closeCrossLineWidth 1 +TabbedPane.closeCrossPlainSize 7.5 +TabbedPane.closeForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.closeHoverBackground #bfbfbf HSL 0 0 75 com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) +TabbedPane.closeHoverForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.closeIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTabbedPaneCloseIcon [UI] +TabbedPane.closePressedBackground #b2b2b2 HSL 0 0 70 com.formdev.flatlaf.util.DerivedColor [UI] darken(25% autoInverse) +TabbedPane.closePressedForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.closeSize 16,16 javax.swing.plaf.DimensionUIResource [UI] +TabbedPane.contentAreaColor #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.contentOpaque true +TabbedPane.contentSeparatorHeight 1 +TabbedPane.darkShadow #9c9c9c HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.disabledForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.disabledUnderlineColor #ababab HSL 0 0 67 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.focus #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.focusColor #dee6ed HSL 208 29 90 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.font [active] $defaultFont [UI] +TabbedPane.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.hasFullBorder false +TabbedPane.hiddenTabsNavigation moreTabsButton +TabbedPane.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.hoverColor #e0e0e0 HSL 0 0 88 com.formdev.flatlaf.util.DerivedColor [UI] darken(7% autoInverse) +TabbedPane.labelShift 1 +TabbedPane.light #e1e1e1 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.scrollButtonsPlacement both +TabbedPane.scrollButtonsPolicy asNeededSingle +TabbedPane.selectedLabelShift -1 +TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +TabbedPane.selectionFollowsFocus true +TabbedPane.shadow #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.showTabSeparators false +TabbedPane.tabAlignment center +TabbedPane.tabAreaAlignment leading +TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +TabbedPane.tabHeight 32 +TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] +TabbedPane.tabRunOverlay 0 +TabbedPane.tabSelectionHeight 3 +TabbedPane.tabSeparatorsFullHeight false +TabbedPane.tabType underlined +TabbedPane.tabWidthMode preferred +TabbedPane.tabsOpaque true +TabbedPane.tabsOverlapBorder false +TabbedPane.tabsPopupPolicy asNeeded +TabbedPane.textIconGap 4 +TabbedPane.underlineColor #3c83c5 HSL 209 54 50 javax.swing.plaf.ColorUIResource [UI] +TabbedPaneUI com.formdev.flatlaf.ui.FlatTabbedPaneUI + + +#---- Table ---- + +Table.ascendingSortIcon [lazy] 10,5 com.formdev.flatlaf.icons.FlatAscendingSortIcon [UI] +Table.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Table.cellFocusColor #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Table.cellMargins 2,3,2,3 javax.swing.plaf.InsetsUIResource [UI] +Table.cellNoFocusBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Default [UI] lineColor=#000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +Table.consistentHomeEndKeyBehavior true +Table.descendingSortIcon [lazy] 10,5 com.formdev.flatlaf.icons.FlatDescendingSortIcon [UI] +Table.dropCellBackground [lazy] #3f8fd9 HSL 209 67 55 javax.swing.plaf.ColorUIResource [UI] +Table.dropCellForeground [lazy] #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Table.dropLineColor [lazy] #6aa7e1 HSL 209 66 65 javax.swing.plaf.ColorUIResource [UI] +Table.dropLineShortColor [lazy] #15416a HSL 209 67 25 javax.swing.plaf.ColorUIResource [UI] +Table.focusCellBackground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Table.focusCellForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Table.focusCellHighlightBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Focused [UI] lineColor=#000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +Table.focusSelectedCellHighlightBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Selected [UI] lineColor=#000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +Table.font [active] $defaultFont [UI] +Table.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Table.gridColor #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +Table.intercellSpacing 0,0 javax.swing.plaf.DimensionUIResource [UI] +Table.rowHeight 20 +Table.scrollPaneBorder [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatBorder [UI] +Table.selectionBackground #2675bf HSL 209 67 45 javax.swing.plaf.ColorUIResource [UI] +Table.selectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Table.selectionInactiveBackground #d3d3d3 HSL 0 0 83 javax.swing.plaf.ColorUIResource [UI] +Table.selectionInactiveForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Table.showHorizontalLines false +Table.showTrailingVerticalLine false +Table.showVerticalLines false +Table.sortIconColor #b1b1b1 HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] + + +#---- TableHeader ---- + +TableHeader.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TableHeader.bottomSeparatorColor #e6e6e6 HSL 0 0 90 javax.swing.plaf.ColorUIResource [UI] +TableHeader.cellBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableHeaderBorder [UI] +TableHeader.cellMargins 2,3,2,3 javax.swing.plaf.InsetsUIResource [UI] +TableHeader.focusCellBackground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TableHeader.font [active] $defaultFont [UI] +TableHeader.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +TableHeader.height 25 +TableHeader.separatorColor #e6e6e6 HSL 0 0 90 javax.swing.plaf.ColorUIResource [UI] +TableHeader.showTrailingVerticalLine false +TableHeaderUI com.formdev.flatlaf.ui.FlatTableHeaderUI + + +#---- Table ---- + +TableUI com.formdev.flatlaf.ui.FlatTableUI + + +#---- TaskPane ---- + +TaskPane.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +TaskPane.borderColor #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +TaskPane.contentInsets 10,10,10,10 javax.swing.plaf.InsetsUIResource [UI] +TaskPane.specialTitleBackground #afafaf HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +TaskPane.specialTitleForeground #222222 HSL 0 0 13 javax.swing.plaf.ColorUIResource [UI] +TaskPane.specialTitleOver #666666 HSL 0 0 40 javax.swing.plaf.ColorUIResource [UI] +TaskPane.titleBackgroundGradientStart #dfdfdf HSL 0 0 87 javax.swing.plaf.ColorUIResource [UI] +TaskPane.titleForeground #222222 HSL 0 0 13 javax.swing.plaf.ColorUIResource [UI] +TaskPane.titleOver #666666 HSL 0 0 40 javax.swing.plaf.ColorUIResource [UI] + + +#---- TaskPaneContainer ---- + +TaskPaneContainer.background #e6ebf0 HSL 210 25 92 javax.swing.plaf.ColorUIResource [UI] +TaskPaneContainer.border [lazy] 10,10,10,10 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] + + +#---- TextArea ---- + +TextArea.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TextArea.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +TextArea.caretBlinkRate 500 +TextArea.caretForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +TextArea.disabledBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +TextArea.font [active] $defaultFont [UI] +TextArea.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +TextArea.inactiveBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +TextArea.inactiveForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +TextArea.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +TextArea.selectionBackground #2675bf HSL 209 67 45 javax.swing.plaf.ColorUIResource [UI] +TextArea.selectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TextAreaUI com.formdev.flatlaf.ui.FlatTextAreaUI + + +#---- TextComponent ---- + +TextComponent.arc 0 +TextComponent.selectAllOnFocusPolicy once +TextComponent.selectAllOnMouseClick false + + +#---- TextField ---- + +TextField.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TextField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] +TextField.caretBlinkRate 500 +TextField.caretForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +TextField.darkShadow #9c9c9c HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +TextField.disabledBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +TextField.font [active] $defaultFont [UI] +TextField.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +TextField.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TextField.iconTextGap 4 +TextField.inactiveBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +TextField.inactiveForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +TextField.light #e1e1e1 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +TextField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +TextField.placeholderForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +TextField.selectionBackground #2675bf HSL 209 67 45 javax.swing.plaf.ColorUIResource [UI] +TextField.selectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TextField.shadow #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +TextFieldUI com.formdev.flatlaf.ui.FlatTextFieldUI + + +#---- TextPane ---- + +TextPane.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TextPane.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +TextPane.caretBlinkRate 500 +TextPane.caretForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +TextPane.disabledBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +TextPane.font [active] $defaultFont [UI] +TextPane.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +TextPane.inactiveBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +TextPane.inactiveForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +TextPane.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +TextPane.selectionBackground #2675bf HSL 209 67 45 javax.swing.plaf.ColorUIResource [UI] +TextPane.selectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TextPaneUI com.formdev.flatlaf.ui.FlatTextPaneUI + + +#---- TitlePane ---- + +TitlePane.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TitlePane.buttonHoverBackground #e6e6e6 HSL 0 0 90 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) +TitlePane.buttonMaximizedHeight 22 +TitlePane.buttonPressedBackground #ebebeb HSL 0 0 92 com.formdev.flatlaf.util.DerivedColor [UI] darken(8% autoInverse) +TitlePane.buttonSize 44,30 javax.swing.plaf.DimensionUIResource [UI] +TitlePane.centerTitle false +TitlePane.centerTitleIfMenuBarEmbedded true +TitlePane.closeHoverBackground #c42b1c HSL 5 75 44 javax.swing.plaf.ColorUIResource [UI] +TitlePane.closeHoverForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TitlePane.closeIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowCloseIcon [UI] +TitlePane.closePressedBackground #c42b1ce6 90% HSLA 5 75 44 90 javax.swing.plaf.ColorUIResource [UI] +TitlePane.closePressedForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TitlePane.embeddedForeground #595959 HSL 0 0 35 javax.swing.plaf.ColorUIResource [UI] +TitlePane.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +TitlePane.icon [lazy] 16,16 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) +TitlePane.iconMargins 3,8,3,8 javax.swing.plaf.InsetsUIResource [UI] +TitlePane.iconSize 16,16 javax.swing.plaf.DimensionUIResource [UI] +TitlePane.iconifyIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowIconifyIcon [UI] +TitlePane.inactiveBackground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TitlePane.inactiveForeground #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +TitlePane.maximizeIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowMaximizeIcon [UI] +TitlePane.menuBarEmbedded true +TitlePane.menuBarTitleGap 20 +TitlePane.noIconLeftGap 8 +TitlePane.restoreIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowRestoreIcon [UI] +TitlePane.showIcon true +TitlePane.titleMargins 3,0,3,0 javax.swing.plaf.InsetsUIResource [UI] +TitlePane.unifiedBackground true +TitlePane.useWindowDecorations true + + +#---- TitledBorder ---- + +TitledBorder.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#cecece HSL 0 0 81 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +TitledBorder.font [active] $defaultFont [UI] +TitledBorder.titleColor #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] + + +#---- TitledPanel ---- + +TitledPanelUI com.formdev.flatlaf.swingx.ui.FlatTitledPanelUI + + +#---- ToggleButton ---- + +ToggleButton.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatButtonBorder [UI] +ToggleButton.darkShadow #9c9c9c HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.disabledBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.disabledSelectedBackground #dedede HSL 0 0 87 com.formdev.flatlaf.util.DerivedColor [UI] darken(13% autoInverse) +ToggleButton.disabledText #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.font [active] $defaultFont [UI] +ToggleButton.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.iconTextGap 4 +ToggleButton.light #e1e1e1 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.margin 2,14,2,14 javax.swing.plaf.InsetsUIResource [UI] +ToggleButton.pressedBackground #e6e6e6 HSL 0 0 90 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) +ToggleButton.rollover true +ToggleButton.selectedBackground #cccccc HSL 0 0 80 com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) +ToggleButton.selectedForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.shadow #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.tab.disabledUnderlineColor #ababab HSL 0 0 67 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.tab.focusBackground #dee6ed HSL 208 29 90 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.tab.hoverBackground #e0e0e0 HSL 0 0 88 com.formdev.flatlaf.util.DerivedColor [UI] darken(7% autoInverse) +ToggleButton.tab.underlineColor #3c83c5 HSL 209 54 50 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.tab.underlineHeight 2 +ToggleButton.textIconGap 4 +ToggleButton.textShiftOffset 0 +ToggleButton.toolbar.hoverBackground #e0e0e0 HSL 0 0 88 com.formdev.flatlaf.util.DerivedColor [UI] darken(12% autoInverse) +ToggleButton.toolbar.pressedBackground #d9d9d9 HSL 0 0 85 com.formdev.flatlaf.util.DerivedColor [UI] darken(15% autoInverse) +ToggleButton.toolbar.selectedBackground #cccccc HSL 0 0 80 com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) +ToggleButtonUI com.formdev.flatlaf.ui.FlatToggleButtonUI + + +#---- ToolBar ---- + +ToolBar.arrowKeysOnlyNavigation true +ToolBar.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +ToolBar.border [lazy] 2,2,2,2 false com.formdev.flatlaf.ui.FlatToolBarBorder [UI] +ToolBar.borderMargins 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] +ToolBar.darkShadow #9c9c9c HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +ToolBar.dockingBackground #e5e5e5 HSL 0 0 90 javax.swing.plaf.ColorUIResource [UI] +ToolBar.dockingForeground #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +ToolBar.floatable false +ToolBar.floatingBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +ToolBar.floatingForeground #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +ToolBar.focusableButtons false +ToolBar.font [active] $defaultFont [UI] +ToolBar.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +ToolBar.gripColor #b1b1b1 HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +ToolBar.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +ToolBar.isRollover true +ToolBar.light #e1e1e1 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +ToolBar.separatorColor #cecece HSL 0 0 81 javax.swing.plaf.ColorUIResource [UI] +ToolBar.separatorWidth 7 +ToolBar.shadow #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +ToolBar.spacingBorder [lazy] 1,2,1,2 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] + + +#---- ToolBarSeparator ---- + +ToolBarSeparatorUI com.formdev.flatlaf.ui.FlatToolBarSeparatorUI + + +#---- ToolBar ---- + +ToolBarUI com.formdev.flatlaf.ui.FlatToolBarUI + + +#---- ToolTip ---- + +ToolTip.background #fafafa HSL 0 0 98 javax.swing.plaf.ColorUIResource [UI] +ToolTip.border [lazy] 4,6,4,6 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#919191 HSL 0 0 57 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +ToolTip.font [active] $defaultFont [UI] +ToolTip.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] + + +#---- ToolTipManager ---- + +ToolTipManager.enableToolTipMode activeApplication + + +#---- ToolTip ---- + +ToolTipUI com.formdev.flatlaf.ui.FlatToolTipUI + + +#---- Tree ---- + +Tree.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Tree.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +Tree.changeSelectionWithFocus true +Tree.closedIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeClosedIcon [UI] +Tree.collapsedIcon [lazy] 11,11 com.formdev.flatlaf.icons.FlatTreeCollapsedIcon [UI] +Tree.drawsFocusBorderAroundIcon false +Tree.dropCellBackground [lazy] #3f8fd9 HSL 209 67 55 javax.swing.plaf.ColorUIResource [UI] +Tree.dropCellForeground [lazy] #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Tree.dropLineColor [lazy] #6aa7e1 HSL 209 66 65 javax.swing.plaf.ColorUIResource [UI] +Tree.editorBorder [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +Tree.expandedIcon [lazy] 11,11 com.formdev.flatlaf.icons.FlatTreeExpandedIcon [UI] +Tree.font [active] $defaultFont [UI] +Tree.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Tree.hash #e6e6e6 HSL 0 0 90 javax.swing.plaf.ColorUIResource [UI] +Tree.icon.closedColor #b1b1b1 HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +Tree.icon.collapsedColor #b1b1b1 HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +Tree.icon.expandedColor #b1b1b1 HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +Tree.icon.leafColor #b1b1b1 HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +Tree.icon.openColor #b1b1b1 HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +Tree.leafIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeLeafIcon [UI] +Tree.leftChildIndent 7 +Tree.lineTypeDashed false +Tree.openIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeOpenIcon [UI] +Tree.paintLines false +Tree.rendererFillBackground false +Tree.rendererMargins 1,2,1,2 javax.swing.plaf.InsetsUIResource [UI] +Tree.repaintWholeRow true +Tree.rightChildIndent 11 +Tree.rowHeight 0 +Tree.scrollsOnExpand true +Tree.selectionBackground #2675bf HSL 209 67 45 javax.swing.plaf.ColorUIResource [UI] +Tree.selectionBorderColor #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Tree.selectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Tree.selectionInactiveBackground #d3d3d3 HSL 0 0 83 javax.swing.plaf.ColorUIResource [UI] +Tree.selectionInactiveForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Tree.showCellFocusIndicator false +Tree.textBackground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Tree.textForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +Tree.timeFactor 1000 +Tree.wideSelection true +TreeUI com.formdev.flatlaf.ui.FlatTreeUI + + +#---- TristateCheckBox ---- + +TristateCheckBox.clearMixed.clientProperty length=2 [Ljava.lang.Object; + [0] JButton.selectedState + [1] null +TristateCheckBox.setMixed.clientProperty length=2 [Ljava.lang.Object; + [0] JButton.selectedState + [1] indeterminate + + +#---- UIColorHighlighter ---- + +UIColorHighlighter.stripingBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] + + +#---- Viewport ---- + +Viewport.background #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +Viewport.font [active] $defaultFont [UI] +Viewport.foreground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +ViewportUI com.formdev.flatlaf.ui.FlatViewportUI + + +#---- [style] ---- + +[style].h00 font: $h00.font +[style].h0 font: $h0.font +[style].h1.regular font: $h1.regular.font +[style].h1 font: $h1.font +[style].h2.regular font: $h2.regular.font +[style].h2 font: $h2.font +[style].h3.regular font: $h3.regular.font +[style].h3 font: $h3.font +[style].h4 font: $h4.font +[style].large font: $large.font +[style].light font: $light.font +[style].medium font: $medium.font +[style].mini font: $mini.font +[style].monospaced font: $monospaced.font +[style].semibold font: $semibold.font +[style].small font: $small.font + + +#---- [style]Button ---- + +[style]Button.clearButton icon: com.formdev.flatlaf.icons.FlatClearIcon; focusable: false; toolbar.margin: 1,1,1,1; toolbar.spacingInsets: 1,1,1,1; toolbar.hoverBackground: null; toolbar.pressedBackground: null +[style]Button.inTextField focusable: false; toolbar.margin: 1,1,1,1; toolbar.spacingInsets: 1,1,1,1; toolbar.hoverBackground: darken($TextField.background,4%); toolbar.pressedBackground: darken($TextField.background,8%); toolbar.selectedBackground: darken($TextField.background,12%) + + +#---- [style]ToggleButton ---- + +[style]ToggleButton.inTextField focusable: false; toolbar.margin: 1,1,1,1; toolbar.spacingInsets: 1,1,1,1; toolbar.hoverBackground: darken($TextField.background,4%); toolbar.pressedBackground: darken($TextField.background,8%); toolbar.selectedBackground: darken($TextField.background,12%) + + +#---- [style]ToolBar ---- + +[style]ToolBar.inTextField floatable: false; opaque: false; borderMargins: 0,0,0,0 + + +#---- [style]ToolBarSeparator ---- + +[style]ToolBarSeparator.inTextField separatorWidth: 3 + + +#---- ---- + +activeCaption #99b4d1 HSL 211 38 71 javax.swing.plaf.ColorUIResource [UI] +activeCaptionBorder #99b4d1 HSL 211 38 71 javax.swing.plaf.ColorUIResource [UI] +activeCaptionText #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +control #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +controlDkShadow #9c9c9c HSL 0 0 61 javax.swing.plaf.ColorUIResource [UI] +controlHighlight #e1e1e1 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +controlLtHighlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +controlShadow #c2c2c2 HSL 0 0 76 javax.swing.plaf.ColorUIResource [UI] +controlText #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +defaultFont Segoe UI plain 12 javax.swing.plaf.FontUIResource [UI] +desktop #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] + + +#---- h0 ---- + +h0.font [active] Segoe UI plain 30 javax.swing.plaf.FontUIResource [UI] + + +#---- h00 ---- + +h00.font [active] Segoe UI plain 36 javax.swing.plaf.FontUIResource [UI] + + +#---- h1 ---- + +h1.font [active] Segoe UI Semibold plain 24 javax.swing.plaf.FontUIResource [UI] +h1.regular.font [active] Segoe UI plain 24 javax.swing.plaf.FontUIResource [UI] + + +#---- h2 ---- + +h2.font [active] Segoe UI Semibold plain 18 javax.swing.plaf.FontUIResource [UI] +h2.regular.font [active] Segoe UI plain 18 javax.swing.plaf.FontUIResource [UI] + + +#---- h3 ---- + +h3.font [active] Segoe UI Semibold plain 15 javax.swing.plaf.FontUIResource [UI] +h3.regular.font [active] Segoe UI plain 15 javax.swing.plaf.FontUIResource [UI] + + +#---- h4 ---- + +h4.font [active] Segoe UI bold 12 javax.swing.plaf.FontUIResource [UI] + + +#---- html ---- + +html.missingImage [lazy] 38,38 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) +html.pendingImage [lazy] 38,38 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) + + +#---- ---- + +inactiveCaption #bfcddb HSL 210 28 80 javax.swing.plaf.ColorUIResource [UI] +inactiveCaptionBorder #bfcddb HSL 210 28 80 javax.swing.plaf.ColorUIResource [UI] +inactiveCaptionText #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +info #fafafa HSL 0 0 98 javax.swing.plaf.ColorUIResource [UI] +infoText #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] + + +#---- laf ---- + +laf.dark false +laf.scaleFactor [active] 1.0 + + +#---- large ---- + +large.font [active] Segoe UI plain 14 javax.swing.plaf.FontUIResource [UI] + + +#---- light ---- + +light.font [active] Segoe UI Light plain 12 javax.swing.plaf.FontUIResource [UI] + + +#---- medium ---- + +medium.font [active] Segoe UI plain 11 javax.swing.plaf.FontUIResource [UI] + + +#---- ---- + +menu #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +menuText #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] + + +#---- mini ---- + +mini.font [active] Segoe UI plain 9 javax.swing.plaf.FontUIResource [UI] + + +#---- monospaced ---- + +monospaced.font [active] Consolas plain 12 javax.swing.plaf.FontUIResource [UI] + + +#---- ---- + +scrollbar #f5f5f5 HSL 0 0 96 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%) + + +#---- semibold ---- + +semibold.font [active] Segoe UI Semibold plain 12 javax.swing.plaf.FontUIResource [UI] + + +#---- small ---- + +small.font [active] Segoe UI plain 10 javax.swing.plaf.FontUIResource [UI] + + +#---- swingx/TaskPane ---- + +swingx/TaskPaneUI com.formdev.flatlaf.swingx.ui.FlatTaskPaneUI + + +#---- ---- + +text #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +textHighlight #2675bf HSL 209 67 45 javax.swing.plaf.ColorUIResource [UI] +textHighlightText #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +textInactiveText #8c8c8c HSL 0 0 55 javax.swing.plaf.ColorUIResource [UI] +textText #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +window #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +windowBorder #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +windowText #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] diff --git a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0_202-mac.txt b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0_202-mac.txt deleted file mode 100644 index ca6fa9ba..00000000 --- a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0_202-mac.txt +++ /dev/null @@ -1,33 +0,0 @@ -- OS Windows 10 -+ OS Mac OS X - -+ ComboBox.showPopupOnNavigation true - -- Menu.shortcutKeys length=1 [I - [0] 8 -+ Menu.shortcutKeys length=1 [I - [0] 10 - -- MenuItem.acceleratorDelimiter - -+ MenuItem.acceleratorDelimiter - -+ OptionPane.isYesLast true - -- ProgressBar.font [active] Segoe UI plain 10 javax.swing.plaf.FontUIResource [UI] -+ ProgressBar.font [active] .SF NS Text plain 11 javax.swing.plaf.FontUIResource [UI] - -- ScrollBar.hoverThumbWithTrack false -+ ScrollBar.hoverThumbWithTrack true - -- ScrollBar.minimumThumbSize 10,10 javax.swing.plaf.DimensionUIResource [UI] -+ ScrollBar.minimumThumbSize 18,18 javax.swing.plaf.DimensionUIResource [UI] - -- ScrollBar.thumbArc 0 -+ ScrollBar.thumbArc 999 - -- ScrollBar.thumbInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -+ ScrollBar.thumbInsets 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] - -- defaultFont Segoe UI plain 12 javax.swing.plaf.FontUIResource [UI] -+ defaultFont .SF NS Text plain 13 javax.swing.plaf.FontUIResource [UI] - diff --git a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0_202.txt b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0_202.txt deleted file mode 100644 index 272cc8a7..00000000 --- a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_1.8.0_202.txt +++ /dev/null @@ -1,1422 +0,0 @@ -Class com.formdev.flatlaf.FlatLightLaf -ID FlatLaf - FlatLaf Light -Name FlatLaf Light -Java 1.8.0_202 -OS Windows 10 - - -#---- ---- - -AATextInfoPropertyKey [unknown type] sun.swing.SwingUtilities2$AATextInfo - - -#---- Actions ---- - -Actions.Blue #389fd6 javax.swing.plaf.ColorUIResource [UI] -Actions.Green #59a869 javax.swing.plaf.ColorUIResource [UI] -Actions.Grey #6e6e6e javax.swing.plaf.ColorUIResource [UI] -Actions.GreyInline #7f8b91 javax.swing.plaf.ColorUIResource [UI] -Actions.Red #db5860 javax.swing.plaf.ColorUIResource [UI] -Actions.Yellow #eda200 javax.swing.plaf.ColorUIResource [UI] - - -#---- AuditoryCues ---- - -AuditoryCues.allAuditoryCues length=13 [Ljava.lang.Object; - [0] CheckBoxMenuItem.commandSound - [1] InternalFrame.closeSound - [2] InternalFrame.maximizeSound - [3] InternalFrame.minimizeSound - [4] InternalFrame.restoreDownSound - [5] InternalFrame.restoreUpSound - [6] MenuItem.commandSound - [7] OptionPane.errorSound - [8] OptionPane.informationSound - [9] OptionPane.questionSound - [10] OptionPane.warningSound - [11] PopupMenu.popupSound - [12] RadioButtonMenuItem.commandSound -AuditoryCues.cueList length=13 [Ljava.lang.Object; - [0] CheckBoxMenuItem.commandSound - [1] InternalFrame.closeSound - [2] InternalFrame.maximizeSound - [3] InternalFrame.minimizeSound - [4] InternalFrame.restoreDownSound - [5] InternalFrame.restoreUpSound - [6] MenuItem.commandSound - [7] OptionPane.errorSound - [8] OptionPane.informationSound - [9] OptionPane.questionSound - [10] OptionPane.warningSound - [11] PopupMenu.popupSound - [12] RadioButtonMenuItem.commandSound -AuditoryCues.noAuditoryCues length=1 [Ljava.lang.Object; - [0] mute - - -#---- BusyLabel ---- - -BusyLabelUI com.formdev.flatlaf.swingx.ui.FlatBusyLabelUI - - -#---- Button ---- - -Button.arc 6 -Button.background #ffffff javax.swing.plaf.ColorUIResource [UI] -Button.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatButtonBorder [UI] -Button.borderColor #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -Button.borderWidth 1 -Button.darkShadow #9e9e9e javax.swing.plaf.ColorUIResource [UI] -Button.default.background #ffffff javax.swing.plaf.ColorUIResource [UI] -Button.default.borderColor #4f9ee3 javax.swing.plaf.ColorUIResource [UI] -Button.default.borderWidth 2 -Button.default.focusColor #97c3f3 javax.swing.plaf.ColorUIResource [UI] -Button.default.focusedBackground #e3f1fa javax.swing.plaf.ColorUIResource [UI] -Button.default.focusedBorderColor #87afda javax.swing.plaf.ColorUIResource [UI] -Button.default.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -Button.default.hoverBackground #f7f7f7 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) -Button.default.hoverBorderColor #87afda javax.swing.plaf.ColorUIResource [UI] -Button.default.pressedBackground #e6e6e6 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) -Button.defaultButtonFollowsFocus false -Button.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -Button.disabledBorderColor #cfcfcf javax.swing.plaf.ColorUIResource [UI] -Button.disabledForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -Button.disabledSelectedBackground #dedede com.formdev.flatlaf.util.DerivedColor [UI] darken(13% autoInverse) -Button.disabledText #8c8c8c javax.swing.plaf.ColorUIResource [UI] -Button.focusedBackground #e3f1fa javax.swing.plaf.ColorUIResource [UI] -Button.focusedBorderColor #87afda javax.swing.plaf.ColorUIResource [UI] -Button.font [active] $defaultFont [UI] -Button.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -Button.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -Button.hoverBackground #f7f7f7 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) -Button.hoverBorderColor #87afda javax.swing.plaf.ColorUIResource [UI] -Button.iconTextGap 4 -Button.innerFocusWidth 0 -Button.light #e3e3e3 javax.swing.plaf.ColorUIResource [UI] -Button.margin 2,14,2,14 javax.swing.plaf.InsetsUIResource [UI] -Button.minimumWidth 72 -Button.pressedBackground #e6e6e6 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) -Button.rollover true -Button.selectedBackground #cccccc com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) -Button.selectedForeground #000000 javax.swing.plaf.ColorUIResource [UI] -Button.shadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -Button.textIconGap 4 -Button.textShiftOffset 0 -Button.toolbar.hoverBackground #e0e0e0 com.formdev.flatlaf.util.DerivedColor [UI] darken(12% autoInverse) -Button.toolbar.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] -Button.toolbar.pressedBackground #d9d9d9 com.formdev.flatlaf.util.DerivedColor [UI] darken(15% autoInverse) -Button.toolbar.selectedBackground #cccccc com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) -Button.toolbar.spacingInsets 1,2,1,2 javax.swing.plaf.InsetsUIResource [UI] -ButtonUI com.formdev.flatlaf.ui.FlatButtonUI - - -#---- Caret ---- - -Caret.width [active] 1 - - -#---- CheckBox ---- - -CheckBox.arc 4 -CheckBox.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -CheckBox.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -CheckBox.disabledText #8c8c8c javax.swing.plaf.ColorUIResource [UI] -CheckBox.font [active] $defaultFont [UI] -CheckBox.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.background #ffffff javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.borderColor #b0b0b0 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.checkmarkColor #4f9ee3 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.disabledBorderColor #bdbdbd javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.disabledCheckmarkColor #ababab javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.focusedBackground #e3f1fa javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.focusedBorderColor #7b9fc7 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.hoverBackground #f7f7f7 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) -CheckBox.icon.hoverBorderColor #7b9fc7 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.pressedBackground #e6e6e6 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) -CheckBox.icon.selectedBackground #ffffff javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.selectedBorderColor #b0b0b0 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxIcon [UI] -CheckBox.iconTextGap 4 -CheckBox.icon[filled].checkmarkColor #ffffff javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon[filled].selectedBackground #4f9ee3 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon[filled].selectedBorderColor #4b97d9 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon[filled].selectedFocusedBackground #4f9ee3 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon[filled].selectedFocusedBorderColor #accff7 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon[filled].selectedFocusedCheckmarkColor #e3f1fa javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon[filled].selectedHoverBackground #3992e0 com.formdev.flatlaf.util.DerivedColor [UI] darken(5% autoInverse) -CheckBox.icon[filled].selectedPressedBackground #2386dc com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) -CheckBox.margin 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] -CheckBox.rollover true -CheckBox.textIconGap 4 -CheckBox.textShiftOffset 0 - - -#---- CheckBoxMenuItem ---- - -CheckBoxMenuItem.acceleratorFont [active] $defaultFont [UI] -CheckBoxMenuItem.acceleratorForeground #4d4d4d javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.acceleratorSelectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] -CheckBoxMenuItem.background #ffffff javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] -CheckBoxMenuItem.borderPainted true -CheckBoxMenuItem.checkIcon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxMenuItemIcon [UI] -CheckBoxMenuItem.disabledForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.font [active] $defaultFont [UI] -CheckBoxMenuItem.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] -CheckBoxMenuItem.opaque false -CheckBoxMenuItem.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItemUI com.formdev.flatlaf.ui.FlatCheckBoxMenuItemUI - - -#---- CheckBox ---- - -CheckBoxUI com.formdev.flatlaf.ui.FlatCheckBoxUI - - -#---- ColorChooser ---- - -ColorChooser.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -ColorChooser.font [active] $defaultFont [UI] -ColorChooser.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -ColorChooser.swatchesDefaultRecentColor #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -ColorChooser.swatchesRecentSwatchSize [active] 16,16 javax.swing.plaf.DimensionUIResource [UI] -ColorChooser.swatchesSwatchSize [active] 16,16 javax.swing.plaf.DimensionUIResource [UI] -ColorChooserUI com.formdev.flatlaf.ui.FlatColorChooserUI - - -#---- ComboBox ---- - -ComboBox.background #ffffff javax.swing.plaf.ColorUIResource [UI] -ComboBox.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRoundBorder [UI] -ComboBox.buttonArrowColor #666666 javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonBackground #ffffff javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonDarkShadow #9e9e9e javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonDisabledArrowColor #a6a6a6 javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonEditableBackground #fafafa javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonHighlight #ffffff javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonHoverArrowColor #999999 com.formdev.flatlaf.util.DerivedColor [UI] lighten(20%) -ComboBox.buttonPressedArrowColor #b3b3b3 com.formdev.flatlaf.util.DerivedColor [UI] lighten(30%) -ComboBox.buttonShadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonStyle auto -ComboBox.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -ComboBox.disabledForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -ComboBox.editorColumns 0 -ComboBox.font [active] $defaultFont [UI] -ComboBox.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -ComboBox.isEnterSelectablePopup false -ComboBox.maximumRowCount 15 -ComboBox.minimumWidth 72 -ComboBox.noActionOnKeyNavigation false -ComboBox.padding 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -ComboBox.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI] -ComboBox.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -ComboBox.timeFactor 1000 -ComboBoxUI com.formdev.flatlaf.ui.FlatComboBoxUI - - -#---- Component ---- - -Component.arc 5 -Component.arrowType chevron -Component.borderColor #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -Component.custom.borderColor #f38d8d com.formdev.flatlaf.util.DerivedColor [UI] desaturate(20%) lighten(25%) -Component.disabledBorderColor #cfcfcf javax.swing.plaf.ColorUIResource [UI] -Component.error.borderColor #ebb8bc javax.swing.plaf.ColorUIResource [UI] -Component.error.focusedBorderColor #e53e4d javax.swing.plaf.ColorUIResource [UI] -Component.focusColor #97c3f3 javax.swing.plaf.ColorUIResource [UI] -Component.focusWidth 0 -Component.focusedBorderColor #87afda javax.swing.plaf.ColorUIResource [UI] -Component.grayFilter [lazy] [unknown type] com.formdev.flatlaf.util.GrayFilter -Component.hideMnemonics true -Component.innerFocusWidth 0.5 -Component.innerOutlineWidth 1.0 -Component.linkColor #2470b3 javax.swing.plaf.ColorUIResource [UI] -Component.minimumWidth 64 -Component.warning.borderColor #fed284 javax.swing.plaf.ColorUIResource [UI] -Component.warning.focusedBorderColor #e2a53a javax.swing.plaf.ColorUIResource [UI] - - -#---- DatePicker ---- - -DatePickerUI com.formdev.flatlaf.swingx.ui.FlatDatePickerUI - - -#---- Desktop ---- - -Desktop.background #e6ebf0 javax.swing.plaf.ColorUIResource [UI] -Desktop.minOnScreenInsets 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] - - -#---- DesktopIcon ---- - -DesktopIcon.background #c6d2dd com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) -DesktopIcon.border [lazy] 4,4,4,4 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -DesktopIcon.closeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameCloseIcon [UI] -DesktopIcon.closeSize 20,20 javax.swing.plaf.DimensionUIResource [UI] -DesktopIcon.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -DesktopIcon.iconSize 64,64 javax.swing.plaf.DimensionUIResource [UI] -DesktopIconUI com.formdev.flatlaf.ui.FlatDesktopIconUI - - -#---- DesktopPane ---- - -DesktopPaneUI com.formdev.flatlaf.ui.FlatDesktopPaneUI - - -#---- EditorPane ---- - -EditorPane.background #ffffff javax.swing.plaf.ColorUIResource [UI] -EditorPane.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -EditorPane.caretBlinkRate 500 -EditorPane.caretForeground #000000 javax.swing.plaf.ColorUIResource [UI] -EditorPane.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -EditorPane.font [active] $defaultFont [UI] -EditorPane.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -EditorPane.inactiveBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -EditorPane.inactiveForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -EditorPane.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -EditorPane.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI] -EditorPane.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -EditorPaneUI com.formdev.flatlaf.ui.FlatEditorPaneUI - - -#---- FileChooser ---- - -FileChooser.detailsViewIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserDetailsViewIcon [UI] -FileChooser.homeFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserHomeFolderIcon [UI] -FileChooser.listViewIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserListViewIcon [UI] -FileChooser.newFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserNewFolderIcon [UI] -FileChooser.readOnly false -FileChooser.upFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserUpFolderIcon [UI] -FileChooser.useSystemExtensionHiding true -FileChooser.usesSingleFilePane true -FileChooserUI com.formdev.flatlaf.ui.FlatFileChooserUI - - -#---- FileView ---- - -FileView.computerIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewComputerIcon [UI] -FileView.directoryIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewDirectoryIcon [UI] -FileView.fileIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewFileIcon [UI] -FileView.floppyDriveIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewFloppyDriveIcon [UI] -FileView.hardDriveIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewHardDriveIcon [UI] - - -#---- FormattedTextField ---- - -FormattedTextField.background #ffffff javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] -FormattedTextField.caretBlinkRate 500 -FormattedTextField.caretForeground #000000 javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.font [active] $defaultFont [UI] -FormattedTextField.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.inactiveBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.inactiveForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -FormattedTextField.placeholderForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -FormattedTextFieldUI com.formdev.flatlaf.ui.FlatFormattedTextFieldUI - - -#---- Header ---- - -HeaderUI com.formdev.flatlaf.swingx.ui.FlatHeaderUI - - -#---- HelpButton ---- - -HelpButton.background #ffffff javax.swing.plaf.ColorUIResource [UI] -HelpButton.borderColor #b0b0b0 javax.swing.plaf.ColorUIResource [UI] -HelpButton.borderWidth 1 -HelpButton.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -HelpButton.disabledBorderColor #bdbdbd javax.swing.plaf.ColorUIResource [UI] -HelpButton.disabledQuestionMarkColor #ababab javax.swing.plaf.ColorUIResource [UI] -HelpButton.focusedBackground #e3f1fa javax.swing.plaf.ColorUIResource [UI] -HelpButton.focusedBorderColor #7b9fc7 javax.swing.plaf.ColorUIResource [UI] -HelpButton.hoverBackground #f7f7f7 com.formdev.flatlaf.util.DerivedColor [UI] darken(3% autoInverse) -HelpButton.hoverBorderColor #7b9fc7 javax.swing.plaf.ColorUIResource [UI] -HelpButton.icon [lazy] 22,22 com.formdev.flatlaf.icons.FlatHelpButtonIcon [UI] -HelpButton.innerFocusWidth 0 -HelpButton.pressedBackground #e6e6e6 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) -HelpButton.questionMarkColor #4f9ee3 javax.swing.plaf.ColorUIResource [UI] - - -#---- Hyperlink ---- - -Hyperlink.disabledText #8c8c8c javax.swing.plaf.ColorUIResource [UI] -Hyperlink.linkColor #2470b3 javax.swing.plaf.ColorUIResource [UI] -Hyperlink.visitedColor #2470b3 javax.swing.plaf.ColorUIResource [UI] -HyperlinkUI com.formdev.flatlaf.swingx.ui.FlatHyperlinkUI - - -#---- InternalFrame ---- - -InternalFrame.activeBorderColor #919191 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.activeDropShadowInsets 5,5,6,6 javax.swing.plaf.InsetsUIResource [UI] -InternalFrame.activeDropShadowOpacity 0.25 -InternalFrame.activeTitleBackground #ffffff javax.swing.plaf.ColorUIResource [UI] -InternalFrame.activeTitleForeground #000000 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.border [lazy] 6,6,6,6 false com.formdev.flatlaf.ui.FlatInternalFrameUI$FlatInternalFrameBorder [UI] -InternalFrame.borderColor #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.borderDarkShadow #9e9e9e javax.swing.plaf.ColorUIResource [UI] -InternalFrame.borderHighlight #ffffff javax.swing.plaf.ColorUIResource [UI] -InternalFrame.borderLight #e3e3e3 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.borderLineWidth 1 -InternalFrame.borderMargins 6,6,6,6 javax.swing.plaf.InsetsUIResource [UI] -InternalFrame.borderShadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.buttonHoverBackground #e6e6e6 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) -InternalFrame.buttonPressedBackground #cccccc com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) -InternalFrame.buttonSize 24,24 javax.swing.plaf.DimensionUIResource [UI] -InternalFrame.closeHoverBackground [lazy] #db5860 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.closeHoverForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -InternalFrame.closeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameCloseIcon [UI] -InternalFrame.closePressedBackground [lazy] #d22e38 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.closePressedForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -InternalFrame.dropShadowPainted true -InternalFrame.icon [lazy] 16,16 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) -InternalFrame.iconifyIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameIconifyIcon [UI] -InternalFrame.inactiveBorderColor #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.inactiveDropShadowInsets 3,3,4,4 javax.swing.plaf.InsetsUIResource [UI] -InternalFrame.inactiveDropShadowOpacity 0.5 -InternalFrame.inactiveTitleBackground #fafafa javax.swing.plaf.ColorUIResource [UI] -InternalFrame.inactiveTitleForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -InternalFrame.maximizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameMaximizeIcon [UI] -InternalFrame.minimizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameRestoreIcon [UI] -InternalFrame.titleFont [active] $defaultFont [UI] - - -#---- InternalFrameTitlePane ---- - -InternalFrameTitlePane.border [lazy] 0,8,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -InternalFrameTitlePane.closeButtonOpacity true -InternalFrameTitlePane.iconifyButtonOpacity true -InternalFrameTitlePane.maximizeButtonOpacity true - - -#---- InternalFrame ---- - -InternalFrameUI com.formdev.flatlaf.ui.FlatInternalFrameUI - - -#---- JXBusyLabel ---- - -JXBusyLabel.baseColor #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -JXBusyLabel.highlightColor #808080 javax.swing.plaf.ColorUIResource [UI] - - -#---- JXDatePicker ---- - -JXDatePicker.border [lazy] 1,1,1,1 false com.formdev.flatlaf.swingx.ui.FlatDatePickerBorder [UI] - - -#---- JXHeader ---- - -JXHeader.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -JXHeader.startBackground #ffffff javax.swing.plaf.ColorUIResource [UI] - - -#---- JXMonthView ---- - -JXMonthView.arrowColor #000000 javax.swing.plaf.ColorUIResource [UI] -JXMonthView.background #ffffff javax.swing.plaf.ColorUIResource [UI] -JXMonthView.daysOfTheWeekForeground #444444 javax.swing.plaf.ColorUIResource [UI] -JXMonthView.disabledArrowColor #8c8c8c javax.swing.plaf.ColorUIResource [UI] -JXMonthView.flaggedDayForeground #e02222 javax.swing.plaf.ColorUIResource [UI] -JXMonthView.leadingDayForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -JXMonthView.monthDownFileName [lazy] 20,20 com.formdev.flatlaf.swingx.ui.FlatMonthDownIcon [UI] -JXMonthView.monthStringBackground #dfdfdf javax.swing.plaf.ColorUIResource [UI] -JXMonthView.monthStringForeground #000000 javax.swing.plaf.ColorUIResource [UI] -JXMonthView.monthUpFileName [lazy] 20,20 com.formdev.flatlaf.swingx.ui.FlatMonthUpIcon [UI] -JXMonthView.selectedBackground #b9cef8 javax.swing.plaf.ColorUIResource [UI] -JXMonthView.trailingDayForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -JXMonthView.unselectableDayForeground #e02222 javax.swing.plaf.ColorUIResource [UI] -JXMonthView.weekOfTheYearForeground #666666 javax.swing.plaf.ColorUIResource [UI] - - -#---- JXTitledPanel ---- - -JXTitledPanel.borderColor #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -JXTitledPanel.captionInsets 4,10,4,10 javax.swing.plaf.InsetsUIResource [UI] -JXTitledPanel.titleBackground #dfdfdf javax.swing.plaf.ColorUIResource [UI] -JXTitledPanel.titleForeground #222222 javax.swing.plaf.ColorUIResource [UI] - - -#---- JideButton ---- - -JideButton.background #ffffff javax.swing.plaf.ColorUIResource [UI] -JideButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -JideButton.borderColor #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -JideButton.darkShadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -JideButton.focusedBackground #e0e0e0 com.formdev.flatlaf.util.DerivedColor [UI] darken(12% autoInverse) -JideButton.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -JideButton.highlight #cccccc com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) -JideButton.light #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -JideButton.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] -JideButton.selectedAndFocusedBackground #d9d9d9 com.formdev.flatlaf.util.DerivedColor [UI] darken(15% autoInverse) -JideButton.selectedBackground #cccccc com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) -JideButton.shadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -JideButton.textIconGap [active] 4 -JideButtonUI com.formdev.flatlaf.jideoss.ui.FlatJideButtonUI - - -#---- JideLabel ---- - -JideLabel.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -JideLabel.disabledForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -JideLabel.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -JideLabelUI com.formdev.flatlaf.jideoss.ui.FlatJideLabelUI - - -#---- JidePopupMenu ---- - -JidePopupMenuUI com.formdev.flatlaf.jideoss.ui.FlatJidePopupMenuUI - - -#---- JideSplitButton ---- - -JideSplitButton.background #ffffff javax.swing.plaf.ColorUIResource [UI] -JideSplitButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -JideSplitButton.buttonArrowColor #666666 javax.swing.plaf.ColorUIResource [UI] -JideSplitButton.buttonDisabledArrowColor #a6a6a6 javax.swing.plaf.ColorUIResource [UI] -JideSplitButton.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -JideSplitButton.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] -JideSplitButton.selectionForeground #000000 javax.swing.plaf.ColorUIResource [UI] -JideSplitButton.textIconGap [active] 4 -JideSplitButtonUI com.formdev.flatlaf.jideoss.ui.FlatJideSplitButtonUI - - -#---- JideTabbedPane ---- - -JideTabbedPane.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -JideTabbedPane.closeButtonLeftMargin 0 -JideTabbedPane.closeButtonRightMargin 0 -JideTabbedPane.contentBorderInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -JideTabbedPane.fitStyleBoundSize 0 -JideTabbedPane.fitStyleFirstTabMargin 0 -JideTabbedPane.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -JideTabbedPane.shadow #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -JideTabbedPane.tabAreaBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -JideTabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -JideTabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] -JideTabbedPane.tabRunOverlay 0 -JideTabbedPaneUI com.formdev.flatlaf.jideoss.ui.FlatJideTabbedPaneUI - - -#---- Label ---- - -Label.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -Label.disabledForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -Label.disabledShadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -Label.font [active] $defaultFont [UI] -Label.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -LabelUI com.formdev.flatlaf.ui.FlatLabelUI - - -#---- List ---- - -List.background #ffffff javax.swing.plaf.ColorUIResource [UI] -List.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -List.cellFocusColor #000000 javax.swing.plaf.ColorUIResource [UI] -List.cellMargins 1,6,1,6 javax.swing.plaf.InsetsUIResource [UI] -List.cellNoFocusBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatListCellBorder$Default [UI] lineColor=#000000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -List.cellRenderer [active] javax.swing.DefaultListCellRenderer$UIResource [UI] -List.dropCellBackground [lazy] #3f8fd9 javax.swing.plaf.ColorUIResource [UI] -List.dropCellForeground [lazy] #ffffff javax.swing.plaf.ColorUIResource [UI] -List.dropLineColor [lazy] #6aa7e1 javax.swing.plaf.ColorUIResource [UI] -List.focusCellHighlightBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatListCellBorder$Focused [UI] lineColor=#000000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -List.focusSelectedCellHighlightBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatListCellBorder$Selected [UI] lineColor=#000000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -List.font [active] $defaultFont [UI] -List.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -List.noFocusBorder 1,1,1,1 false javax.swing.plaf.BorderUIResource$EmptyBorderUIResource [UI] -List.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI] -List.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -List.selectionInactiveBackground #d4d4d4 javax.swing.plaf.ColorUIResource [UI] -List.selectionInactiveForeground #000000 javax.swing.plaf.ColorUIResource [UI] -List.showCellFocusIndicator false -List.timeFactor 1000 -ListUI com.formdev.flatlaf.ui.FlatListUI - - -#---- Menu ---- - -Menu.acceleratorFont [active] $defaultFont [UI] -Menu.acceleratorForeground #4d4d4d javax.swing.plaf.ColorUIResource [UI] -Menu.acceleratorSelectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -Menu.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuArrowIcon [UI] -Menu.background #ffffff javax.swing.plaf.ColorUIResource [UI] -Menu.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] -Menu.borderPainted true -Menu.cancelMode hideLastSubmenu -Menu.crossMenuMnemonic true -Menu.disabledForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -Menu.font [active] $defaultFont [UI] -Menu.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -Menu.icon.arrowColor #666666 javax.swing.plaf.ColorUIResource [UI] -Menu.icon.disabledArrowColor #ababab javax.swing.plaf.ColorUIResource [UI] -Menu.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] -Menu.menuPopupOffsetX 0 -Menu.menuPopupOffsetY 0 -Menu.opaque false -Menu.preserveTopLevelSelection false -Menu.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI] -Menu.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -Menu.shortcutKeys length=1 [I - [0] 8 -Menu.submenuPopupOffsetX [active] -4 -Menu.submenuPopupOffsetY [active] -4 - - -#---- MenuBar ---- - -MenuBar.background #ffffff javax.swing.plaf.ColorUIResource [UI] -MenuBar.border [lazy] 0,0,1,0 false com.formdev.flatlaf.ui.FlatMenuBarBorder [UI] -MenuBar.borderColor #cdcdcd javax.swing.plaf.ColorUIResource [UI] -MenuBar.font [active] $defaultFont [UI] -MenuBar.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -MenuBar.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -MenuBar.hoverBackground #e6e6e6 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) -MenuBar.itemMargins 3,8,3,8 javax.swing.plaf.InsetsUIResource [UI] -MenuBar.shadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -MenuBar.windowBindings length=2 [Ljava.lang.Object; - [0] F10 - [1] takeFocus -MenuBarUI com.formdev.flatlaf.ui.FlatMenuBarUI - - -#---- MenuItem ---- - -MenuItem.acceleratorArrowGap 2 -MenuItem.acceleratorDelimiter - -MenuItem.acceleratorFont [active] $defaultFont [UI] -MenuItem.acceleratorForeground #4d4d4d javax.swing.plaf.ColorUIResource [UI] -MenuItem.acceleratorSelectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -MenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] -MenuItem.background #ffffff javax.swing.plaf.ColorUIResource [UI] -MenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] -MenuItem.borderPainted true -MenuItem.checkBackground #bfd9f2 com.formdev.flatlaf.util.DerivedColor [UI] lighten(40%) -MenuItem.checkMargins 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] -MenuItem.disabledForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -MenuItem.font [active] $defaultFont [UI] -MenuItem.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -MenuItem.iconTextGap 6 -MenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] -MenuItem.minimumIconSize 16,16 javax.swing.plaf.DimensionUIResource [UI] -MenuItem.minimumWidth 72 -MenuItem.opaque false -MenuItem.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI] -MenuItem.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -MenuItem.textAcceleratorGap 24 -MenuItem.textNoAcceleratorGap 6 -MenuItem.underlineSelectionBackground #e6e6e6 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) -MenuItem.underlineSelectionCheckBackground #bfd9f2 com.formdev.flatlaf.util.DerivedColor [UI] lighten(40%) -MenuItem.underlineSelectionColor #4083c9 javax.swing.plaf.ColorUIResource [UI] -MenuItem.underlineSelectionHeight 3 - - -#---- MenuItemCheckBox ---- - -MenuItemCheckBox.icon.checkmarkColor #4f9ee3 javax.swing.plaf.ColorUIResource [UI] -MenuItemCheckBox.icon.disabledCheckmarkColor #ababab javax.swing.plaf.ColorUIResource [UI] - - -#---- MenuItem ---- - -MenuItemUI com.formdev.flatlaf.ui.FlatMenuItemUI - - -#---- Menu ---- - -MenuUI com.formdev.flatlaf.ui.FlatMenuUI - - -#---- MonthView ---- - -MonthViewUI com.formdev.flatlaf.swingx.ui.FlatMonthViewUI - - -#---- Objects ---- - -Objects.BlackText #231f20 javax.swing.plaf.ColorUIResource [UI] -Objects.Blue #40b6e0 javax.swing.plaf.ColorUIResource [UI] -Objects.Green #62b543 javax.swing.plaf.ColorUIResource [UI] -Objects.GreenAndroid #a4c639 javax.swing.plaf.ColorUIResource [UI] -Objects.Grey #9aa7b0 javax.swing.plaf.ColorUIResource [UI] -Objects.Pink #f98b9e javax.swing.plaf.ColorUIResource [UI] -Objects.Purple #b99bf8 javax.swing.plaf.ColorUIResource [UI] -Objects.Red #f26522 javax.swing.plaf.ColorUIResource [UI] -Objects.RedStatus #e05555 javax.swing.plaf.ColorUIResource [UI] -Objects.Yellow #f4af3d javax.swing.plaf.ColorUIResource [UI] -Objects.YellowDark #d9a343 javax.swing.plaf.ColorUIResource [UI] - - -#---- OptionPane ---- - -OptionPane.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -OptionPane.border [lazy] 12,12,12,12 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -OptionPane.buttonAreaBorder [lazy] 12,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -OptionPane.buttonClickThreshhold 500 -OptionPane.buttonMinimumWidth [active] 72 -OptionPane.buttonOrientation 4 -OptionPane.buttonPadding 8 -OptionPane.errorIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneErrorIcon [UI] -OptionPane.font [active] $defaultFont [UI] -OptionPane.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -OptionPane.iconMessageGap 16 -OptionPane.informationIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneInformationIcon [UI] -OptionPane.maxCharactersPerLine 80 -OptionPane.messageAreaBorder [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -OptionPane.messagePadding 3 -OptionPane.minimumSize 262,90 javax.swing.plaf.DimensionUIResource [UI] -OptionPane.questionIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneQuestionIcon [UI] -OptionPane.sameSizeButtons true -OptionPane.setButtonMargin false -OptionPane.warningIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneWarningIcon [UI] -OptionPane.windowBindings length=2 [Ljava.lang.Object; - [0] ESCAPE - [1] close -OptionPaneUI com.formdev.flatlaf.ui.FlatOptionPaneUI - - -#---- Panel ---- - -Panel.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -Panel.font [active] $defaultFont [UI] -Panel.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -PanelUI com.formdev.flatlaf.ui.FlatPanelUI - - -#---- PasswordField ---- - -PasswordField.background #ffffff javax.swing.plaf.ColorUIResource [UI] -PasswordField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] -PasswordField.capsLockIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatCapsLockIcon [UI] -PasswordField.capsLockIconColor #00000064 39% javax.swing.plaf.ColorUIResource [UI] -PasswordField.caretBlinkRate 500 -PasswordField.caretForeground #000000 javax.swing.plaf.ColorUIResource [UI] -PasswordField.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -PasswordField.echoChar '\u2022' -PasswordField.font [active] $defaultFont [UI] -PasswordField.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -PasswordField.inactiveBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -PasswordField.inactiveForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -PasswordField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -PasswordField.placeholderForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -PasswordField.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI] -PasswordField.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -PasswordField.showCapsLock true -PasswordFieldUI com.formdev.flatlaf.ui.FlatPasswordFieldUI - - -#---- Popup ---- - -Popup.dropShadowColor #000000 javax.swing.plaf.ColorUIResource [UI] -Popup.dropShadowInsets -4,-4,4,4 javax.swing.plaf.InsetsUIResource [UI] -Popup.dropShadowOpacity 0.15 -Popup.dropShadowPainted true - - -#---- PopupMenu ---- - -PopupMenu.background #ffffff javax.swing.plaf.ColorUIResource [UI] -PopupMenu.border [lazy] 4,1,4,1 false com.formdev.flatlaf.ui.FlatPopupMenuBorder [UI] lineColor=#adadad javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -PopupMenu.borderColor #adadad javax.swing.plaf.ColorUIResource [UI] -PopupMenu.borderInsets 4,1,4,1 javax.swing.plaf.InsetsUIResource [UI] -PopupMenu.consumeEventOnClose false -PopupMenu.font [active] $defaultFont [UI] -PopupMenu.foreground #000000 javax.swing.plaf.ColorUIResource [UI] - - -#---- PopupMenuSeparator ---- - -PopupMenuSeparator.height 9 -PopupMenuSeparator.stripeIndent 4 -PopupMenuSeparator.stripeWidth 1 -PopupMenuSeparatorUI com.formdev.flatlaf.ui.FlatPopupMenuSeparatorUI - - -#---- PopupMenu ---- - -PopupMenuUI com.formdev.flatlaf.ui.FlatPopupMenuUI - - -#---- ProgressBar ---- - -ProgressBar.arc 4 -ProgressBar.background #d1d1d1 javax.swing.plaf.ColorUIResource [UI] -ProgressBar.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -ProgressBar.cellLength 1 -ProgressBar.cellSpacing 0 -ProgressBar.cycleTime 4000 -ProgressBar.font [active] Segoe UI plain 10 javax.swing.plaf.FontUIResource [UI] -ProgressBar.foreground #1e82e6 javax.swing.plaf.ColorUIResource [UI] -ProgressBar.horizontalSize 146,4 javax.swing.plaf.DimensionUIResource [UI] -ProgressBar.repaintInterval 15 -ProgressBar.selectionBackground #000000 javax.swing.plaf.ColorUIResource [UI] -ProgressBar.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -ProgressBar.verticalSize 4,146 javax.swing.plaf.DimensionUIResource [UI] -ProgressBarUI com.formdev.flatlaf.ui.FlatProgressBarUI - - -#---- RadioButton ---- - -RadioButton.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -RadioButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -RadioButton.darkShadow #9e9e9e javax.swing.plaf.ColorUIResource [UI] -RadioButton.disabledText #8c8c8c javax.swing.plaf.ColorUIResource [UI] -RadioButton.font [active] $defaultFont [UI] -RadioButton.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -RadioButton.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -RadioButton.icon.centerDiameter 8 -RadioButton.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatRadioButtonIcon [UI] -RadioButton.iconTextGap 4 -RadioButton.icon[filled].centerDiameter 5 -RadioButton.light #e3e3e3 javax.swing.plaf.ColorUIResource [UI] -RadioButton.margin 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] -RadioButton.rollover true -RadioButton.shadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -RadioButton.textIconGap 4 -RadioButton.textShiftOffset 0 - - -#---- RadioButtonMenuItem ---- - -RadioButtonMenuItem.acceleratorFont [active] $defaultFont [UI] -RadioButtonMenuItem.acceleratorForeground #4d4d4d javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.acceleratorSelectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] -RadioButtonMenuItem.background #ffffff javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] -RadioButtonMenuItem.borderPainted true -RadioButtonMenuItem.checkIcon [lazy] 15,15 com.formdev.flatlaf.icons.FlatRadioButtonMenuItemIcon [UI] -RadioButtonMenuItem.disabledForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.font [active] $defaultFont [UI] -RadioButtonMenuItem.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] -RadioButtonMenuItem.opaque false -RadioButtonMenuItem.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItemUI com.formdev.flatlaf.ui.FlatRadioButtonMenuItemUI - - -#---- RadioButton ---- - -RadioButtonUI com.formdev.flatlaf.ui.FlatRadioButtonUI - - -#---- RangeSlider ---- - -RangeSliderUI com.formdev.flatlaf.jideoss.ui.FlatRangeSliderUI - - -#---- Resizable ---- - -Resizable.resizeBorder [lazy] 4,4,4,4 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#adadad javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 - - -#---- RootPane ---- - -RootPane.activeBorderColor #737373 com.formdev.flatlaf.util.DerivedColor [UI] darken(50% autoInverse) -RootPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRootPaneUI$FlatWindowBorder [UI] -RootPane.borderDragThickness 5 -RootPane.cornerDragWidth 16 -RootPane.defaultButtonWindowKeyBindings length=8 [Ljava.lang.Object; - [0] ENTER - [1] press - [2] released ENTER - [3] release - [4] ctrl ENTER - [5] press - [6] ctrl released ENTER - [7] release -RootPane.honorDialogMinimumSizeOnResize true -RootPane.honorFrameMinimumSizeOnResize false -RootPane.inactiveBorderColor #a6a6a6 com.formdev.flatlaf.util.DerivedColor [UI] darken(30% autoInverse) -RootPaneUI com.formdev.flatlaf.ui.FlatRootPaneUI - - -#---- ScrollBar ---- - -ScrollBar.allowsAbsolutePositioning true -ScrollBar.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.buttonArrowColor #666666 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.buttonDisabledArrowColor #a6a6a6 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.hoverButtonBackground #e5e5e5 com.formdev.flatlaf.util.DerivedColor [UI] darken(5%) -ScrollBar.hoverThumbColor #c3c3c3 com.formdev.flatlaf.util.DerivedColor [UI] darken(10%) -ScrollBar.hoverThumbWithTrack false -ScrollBar.hoverTrackColor #ededed com.formdev.flatlaf.util.DerivedColor [UI] darken(3%) -ScrollBar.maximumThumbSize 100000,100000 javax.swing.plaf.DimensionUIResource [UI] -ScrollBar.minimumThumbSize 10,10 javax.swing.plaf.DimensionUIResource [UI] -ScrollBar.pressedButtonBackground #d9d9d9 com.formdev.flatlaf.util.DerivedColor [UI] darken(10%) -ScrollBar.pressedThumbColor #a9a9a9 com.formdev.flatlaf.util.DerivedColor [UI] darken(20%) -ScrollBar.pressedThumbWithTrack false -ScrollBar.showButtons false -ScrollBar.squareButtons false -ScrollBar.thumb #dcdcdc com.formdev.flatlaf.util.DerivedColor [UI] darken(10%) -ScrollBar.thumbArc 0 -ScrollBar.thumbDarkShadow #9e9e9e javax.swing.plaf.ColorUIResource [UI] -ScrollBar.thumbHighlight #ffffff javax.swing.plaf.ColorUIResource [UI] -ScrollBar.thumbInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -ScrollBar.thumbShadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.track #f5f5f5 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%) -ScrollBar.trackArc 0 -ScrollBar.trackHighlight #9e9e9e javax.swing.plaf.ColorUIResource [UI] -ScrollBar.trackInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -ScrollBar.width 10 -ScrollBarUI com.formdev.flatlaf.ui.FlatScrollBarUI - - -#---- ScrollPane ---- - -ScrollPane.background #f5f5f5 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%) -ScrollPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatBorder [UI] -ScrollPane.fillUpperCorner true -ScrollPane.font [active] $defaultFont [UI] -ScrollPane.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -ScrollPane.smoothScrolling true -ScrollPaneUI com.formdev.flatlaf.ui.FlatScrollPaneUI - - -#---- Separator ---- - -Separator.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -Separator.foreground #d1d1d1 javax.swing.plaf.ColorUIResource [UI] -Separator.height 3 -Separator.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -Separator.shadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -Separator.stripeIndent 1 -Separator.stripeWidth 1 -SeparatorUI com.formdev.flatlaf.ui.FlatSeparatorUI - - -#---- Slider ---- - -Slider.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -Slider.disabledThumbColor #c0c0c0 javax.swing.plaf.ColorUIResource [UI] -Slider.disabledTrackColor #c0c0c0 javax.swing.plaf.ColorUIResource [UI] -Slider.focus #9e9e9e javax.swing.plaf.ColorUIResource [UI] -Slider.focusInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -Slider.focusWidth 4 -Slider.focusedColor #97c3f380 50% com.formdev.flatlaf.util.DerivedColor [UI] fade(50%) -Slider.font [active] $defaultFont [UI] -Slider.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -Slider.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -Slider.horizontalSize 200,21 java.awt.Dimension -Slider.hoverThumbColor #1775d3 com.formdev.flatlaf.util.DerivedColor [UI] darken(5% autoInverse) -Slider.minimumHorizontalSize 36,21 java.awt.Dimension -Slider.minimumVerticalSize 21,36 java.awt.Dimension -Slider.onlyLeftMouseButtonDrag true -Slider.pressedThumbColor #166ec5 com.formdev.flatlaf.util.DerivedColor [UI] darken(8% autoInverse) -Slider.shadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -Slider.thumbColor #1e82e6 javax.swing.plaf.ColorUIResource [UI] -Slider.thumbSize 12,12 javax.swing.plaf.DimensionUIResource [UI] -Slider.tickColor #888888 javax.swing.plaf.ColorUIResource [UI] -Slider.trackColor #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -Slider.trackValueColor #1e82e6 javax.swing.plaf.ColorUIResource [UI] -Slider.trackWidth 2 -Slider.verticalSize 21,200 java.awt.Dimension -SliderUI com.formdev.flatlaf.ui.FlatSliderUI - - -#---- Spinner ---- - -Spinner.arrowButtonSize 16,5 java.awt.Dimension -Spinner.background #ffffff javax.swing.plaf.ColorUIResource [UI] -Spinner.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRoundBorder [UI] -Spinner.buttonArrowColor #666666 javax.swing.plaf.ColorUIResource [UI] -Spinner.buttonBackground #fafafa javax.swing.plaf.ColorUIResource [UI] -Spinner.buttonDisabledArrowColor #a6a6a6 javax.swing.plaf.ColorUIResource [UI] -Spinner.buttonHoverArrowColor #999999 com.formdev.flatlaf.util.DerivedColor [UI] lighten(20%) -Spinner.buttonPressedArrowColor #b3b3b3 com.formdev.flatlaf.util.DerivedColor [UI] lighten(30%) -Spinner.buttonStyle button -Spinner.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -Spinner.disabledForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -Spinner.editorAlignment 11 -Spinner.editorBorderPainted false -Spinner.font [active] $defaultFont [UI] -Spinner.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -Spinner.padding 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -SpinnerUI com.formdev.flatlaf.ui.FlatSpinnerUI - - -#---- SplitPane ---- - -SplitPane.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -SplitPane.centerOneTouchButtons true -SplitPane.continuousLayout true -SplitPane.darkShadow #9e9e9e javax.swing.plaf.ColorUIResource [UI] -SplitPane.dividerSize 5 -SplitPane.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -SplitPane.oneTouchButtonOffset [active] 2 -SplitPane.oneTouchButtonSize [active] 6 -SplitPane.shadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI] - - -#---- SplitPaneDivider ---- - -SplitPaneDivider.draggingColor #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -SplitPaneDivider.gripColor #afafaf javax.swing.plaf.ColorUIResource [UI] -SplitPaneDivider.gripDotCount 3 -SplitPaneDivider.gripDotSize 3 -SplitPaneDivider.gripGap 2 -SplitPaneDivider.oneTouchArrowColor #666666 javax.swing.plaf.ColorUIResource [UI] -SplitPaneDivider.oneTouchHoverArrowColor #999999 com.formdev.flatlaf.util.DerivedColor [UI] lighten(20%) -SplitPaneDivider.oneTouchPressedArrowColor #b3b3b3 com.formdev.flatlaf.util.DerivedColor [UI] lighten(30%) -SplitPaneDivider.style grip - - -#---- SplitPane ---- - -SplitPaneUI com.formdev.flatlaf.ui.FlatSplitPaneUI - - -#---- TabbedPane ---- - -TabbedPane.arrowType chevron -TabbedPane.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.buttonArc 6 -TabbedPane.buttonHoverBackground #e0e0e0 com.formdev.flatlaf.util.DerivedColor [UI] darken(7% autoInverse) -TabbedPane.buttonInsets 2,1,2,1 javax.swing.plaf.InsetsUIResource [UI] -TabbedPane.buttonPressedBackground #d9d9d9 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) -TabbedPane.closeArc 4 -TabbedPane.closeCrossFilledSize 7.5 -TabbedPane.closeCrossLineWidth 1.0 -TabbedPane.closeCrossPlainSize 7.5 -TabbedPane.closeForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -TabbedPane.closeHoverBackground #bfbfbf com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) -TabbedPane.closeHoverForeground #000000 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.closeIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTabbedPaneCloseIcon [UI] -TabbedPane.closePressedBackground #b2b2b2 com.formdev.flatlaf.util.DerivedColor [UI] darken(25% autoInverse) -TabbedPane.closePressedForeground #000000 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.closeSize 16,16 javax.swing.plaf.DimensionUIResource [UI] -TabbedPane.contentAreaColor #bfbfbf javax.swing.plaf.ColorUIResource [UI] -TabbedPane.contentOpaque true -TabbedPane.contentSeparatorHeight 1 -TabbedPane.darkShadow #9e9e9e javax.swing.plaf.ColorUIResource [UI] -TabbedPane.disabledForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -TabbedPane.disabledUnderlineColor #ababab javax.swing.plaf.ColorUIResource [UI] -TabbedPane.focus #000000 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.focusColor #dae4ed javax.swing.plaf.ColorUIResource [UI] -TabbedPane.font [active] $defaultFont [UI] -TabbedPane.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.hasFullBorder false -TabbedPane.hiddenTabsNavigation moreTabsButton -TabbedPane.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -TabbedPane.hoverColor #e0e0e0 com.formdev.flatlaf.util.DerivedColor [UI] darken(7% autoInverse) -TabbedPane.labelShift 1 -TabbedPane.light #e3e3e3 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.scrollButtonsPlacement both -TabbedPane.scrollButtonsPolicy asNeededSingle -TabbedPane.selectedLabelShift -1 -TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -TabbedPane.selectionFollowsFocus true -TabbedPane.shadow #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.showTabSeparators false -TabbedPane.tabAlignment center -TabbedPane.tabAreaAlignment leading -TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -TabbedPane.tabHeight 32 -TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] -TabbedPane.tabRunOverlay 0 -TabbedPane.tabSelectionHeight 3 -TabbedPane.tabSeparatorsFullHeight false -TabbedPane.tabWidthMode preferred -TabbedPane.tabsOpaque true -TabbedPane.tabsOverlapBorder false -TabbedPane.tabsPopupPolicy asNeeded -TabbedPane.textIconGap 4 -TabbedPane.underlineColor #4083c9 javax.swing.plaf.ColorUIResource [UI] -TabbedPaneUI com.formdev.flatlaf.ui.FlatTabbedPaneUI - - -#---- Table ---- - -Table.ascendingSortIcon [lazy] 10,5 com.formdev.flatlaf.icons.FlatAscendingSortIcon [UI] -Table.background #ffffff javax.swing.plaf.ColorUIResource [UI] -Table.cellFocusColor #000000 javax.swing.plaf.ColorUIResource [UI] -Table.cellMargins 2,3,2,3 javax.swing.plaf.InsetsUIResource [UI] -Table.cellNoFocusBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Default [UI] lineColor=#000000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -Table.consistentHomeEndKeyBehavior true -Table.descendingSortIcon [lazy] 10,5 com.formdev.flatlaf.icons.FlatDescendingSortIcon [UI] -Table.dropCellBackground [lazy] #3f8fd9 javax.swing.plaf.ColorUIResource [UI] -Table.dropCellForeground [lazy] #ffffff javax.swing.plaf.ColorUIResource [UI] -Table.dropLineColor [lazy] #6aa7e1 javax.swing.plaf.ColorUIResource [UI] -Table.dropLineShortColor [lazy] #15416a javax.swing.plaf.ColorUIResource [UI] -Table.focusCellBackground #ffffff javax.swing.plaf.ColorUIResource [UI] -Table.focusCellForeground #000000 javax.swing.plaf.ColorUIResource [UI] -Table.focusCellHighlightBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Focused [UI] lineColor=#000000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -Table.focusSelectedCellHighlightBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Selected [UI] lineColor=#000000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -Table.font [active] $defaultFont [UI] -Table.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -Table.gridColor #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -Table.intercellSpacing 0,0 javax.swing.plaf.DimensionUIResource [UI] -Table.rowHeight 20 -Table.scrollPaneBorder [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatBorder [UI] -Table.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI] -Table.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -Table.selectionInactiveBackground #d4d4d4 javax.swing.plaf.ColorUIResource [UI] -Table.selectionInactiveForeground #000000 javax.swing.plaf.ColorUIResource [UI] -Table.showHorizontalLines false -Table.showVerticalLines false -Table.sortIconColor #afafaf javax.swing.plaf.ColorUIResource [UI] - - -#---- TableHeader ---- - -TableHeader.background #ffffff javax.swing.plaf.ColorUIResource [UI] -TableHeader.bottomSeparatorColor #e6e6e6 javax.swing.plaf.ColorUIResource [UI] -TableHeader.cellBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableHeaderBorder [UI] -TableHeader.cellMargins 2,3,2,3 javax.swing.plaf.InsetsUIResource [UI] -TableHeader.focusCellBackground #ffffff javax.swing.plaf.ColorUIResource [UI] -TableHeader.font [active] $defaultFont [UI] -TableHeader.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -TableHeader.height 25 -TableHeader.separatorColor #e6e6e6 javax.swing.plaf.ColorUIResource [UI] -TableHeaderUI com.formdev.flatlaf.ui.FlatTableHeaderUI - - -#---- Table ---- - -TableUI com.formdev.flatlaf.ui.FlatTableUI - - -#---- TaskPane ---- - -TaskPane.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -TaskPane.borderColor #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -TaskPane.contentInsets 10,10,10,10 javax.swing.plaf.InsetsUIResource [UI] -TaskPane.specialTitleBackground #afafaf javax.swing.plaf.ColorUIResource [UI] -TaskPane.specialTitleForeground #222222 javax.swing.plaf.ColorUIResource [UI] -TaskPane.specialTitleOver #666666 javax.swing.plaf.ColorUIResource [UI] -TaskPane.titleBackgroundGradientStart #dfdfdf javax.swing.plaf.ColorUIResource [UI] -TaskPane.titleForeground #222222 javax.swing.plaf.ColorUIResource [UI] -TaskPane.titleOver #666666 javax.swing.plaf.ColorUIResource [UI] - - -#---- TaskPaneContainer ---- - -TaskPaneContainer.background #e6ebf0 javax.swing.plaf.ColorUIResource [UI] -TaskPaneContainer.border [lazy] 10,10,10,10 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] - - -#---- TextArea ---- - -TextArea.background #ffffff javax.swing.plaf.ColorUIResource [UI] -TextArea.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -TextArea.caretBlinkRate 500 -TextArea.caretForeground #000000 javax.swing.plaf.ColorUIResource [UI] -TextArea.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -TextArea.font [active] $defaultFont [UI] -TextArea.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -TextArea.inactiveBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -TextArea.inactiveForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -TextArea.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -TextArea.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI] -TextArea.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -TextAreaUI com.formdev.flatlaf.ui.FlatTextAreaUI - - -#---- TextComponent ---- - -TextComponent.arc 0 -TextComponent.selectAllOnFocusPolicy once -TextComponent.selectAllOnMouseClick false - - -#---- TextField ---- - -TextField.background #ffffff javax.swing.plaf.ColorUIResource [UI] -TextField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] -TextField.caretBlinkRate 500 -TextField.caretForeground #000000 javax.swing.plaf.ColorUIResource [UI] -TextField.darkShadow #9e9e9e javax.swing.plaf.ColorUIResource [UI] -TextField.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -TextField.font [active] $defaultFont [UI] -TextField.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -TextField.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -TextField.inactiveBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -TextField.inactiveForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -TextField.light #e3e3e3 javax.swing.plaf.ColorUIResource [UI] -TextField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -TextField.placeholderForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -TextField.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI] -TextField.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -TextField.shadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -TextFieldUI com.formdev.flatlaf.ui.FlatTextFieldUI - - -#---- TextPane ---- - -TextPane.background #ffffff javax.swing.plaf.ColorUIResource [UI] -TextPane.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -TextPane.caretBlinkRate 500 -TextPane.caretForeground #000000 javax.swing.plaf.ColorUIResource [UI] -TextPane.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -TextPane.font [active] $defaultFont [UI] -TextPane.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -TextPane.inactiveBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -TextPane.inactiveForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -TextPane.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -TextPane.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI] -TextPane.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -TextPaneUI com.formdev.flatlaf.ui.FlatTextPaneUI - - -#---- TitlePane ---- - -TitlePane.background #ffffff javax.swing.plaf.ColorUIResource [UI] -TitlePane.buttonHoverBackground #e6e6e6 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) -TitlePane.buttonMaximizedHeight 22 -TitlePane.buttonPressedBackground #cccccc com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) -TitlePane.buttonSize 44,30 javax.swing.plaf.DimensionUIResource [UI] -TitlePane.centerTitle false -TitlePane.centerTitleIfMenuBarEmbedded true -TitlePane.closeHoverBackground #e81123 javax.swing.plaf.ColorUIResource [UI] -TitlePane.closeHoverForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -TitlePane.closeIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowCloseIcon [UI] -TitlePane.closePressedBackground #e8112399 60% javax.swing.plaf.ColorUIResource [UI] -TitlePane.closePressedForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -TitlePane.embeddedForeground #595959 javax.swing.plaf.ColorUIResource [UI] -TitlePane.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -TitlePane.icon [lazy] 16,16 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) -TitlePane.iconMargins 3,8,3,8 javax.swing.plaf.InsetsUIResource [UI] -TitlePane.iconSize 16,16 javax.swing.plaf.DimensionUIResource [UI] -TitlePane.iconifyIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowIconifyIcon [UI] -TitlePane.inactiveBackground #ffffff javax.swing.plaf.ColorUIResource [UI] -TitlePane.inactiveForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -TitlePane.maximizeIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowMaximizeIcon [UI] -TitlePane.menuBarEmbedded true -TitlePane.menuBarTitleGap 20 -TitlePane.restoreIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowRestoreIcon [UI] -TitlePane.titleMargins 3,0,3,0 javax.swing.plaf.InsetsUIResource [UI] -TitlePane.unifiedBackground false -TitlePane.useWindowDecorations true - - -#---- TitledBorder ---- - -TitledBorder.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#d1d1d1 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -TitledBorder.font [active] $defaultFont [UI] -TitledBorder.titleColor #000000 javax.swing.plaf.ColorUIResource [UI] - - -#---- TitledPanel ---- - -TitledPanelUI com.formdev.flatlaf.swingx.ui.FlatTitledPanelUI - - -#---- ToggleButton ---- - -ToggleButton.background #ffffff javax.swing.plaf.ColorUIResource [UI] -ToggleButton.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatButtonBorder [UI] -ToggleButton.darkShadow #9e9e9e javax.swing.plaf.ColorUIResource [UI] -ToggleButton.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.disabledSelectedBackground #dedede com.formdev.flatlaf.util.DerivedColor [UI] darken(13% autoInverse) -ToggleButton.disabledText #8c8c8c javax.swing.plaf.ColorUIResource [UI] -ToggleButton.font [active] $defaultFont [UI] -ToggleButton.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -ToggleButton.iconTextGap 4 -ToggleButton.light #e3e3e3 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.margin 2,14,2,14 javax.swing.plaf.InsetsUIResource [UI] -ToggleButton.pressedBackground #e6e6e6 com.formdev.flatlaf.util.DerivedColor [UI] darken(10% autoInverse) -ToggleButton.rollover true -ToggleButton.selectedBackground #cccccc com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) -ToggleButton.selectedForeground #000000 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.shadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.tab.disabledUnderlineColor #ababab javax.swing.plaf.ColorUIResource [UI] -ToggleButton.tab.focusBackground #dae4ed javax.swing.plaf.ColorUIResource [UI] -ToggleButton.tab.hoverBackground #e0e0e0 com.formdev.flatlaf.util.DerivedColor [UI] darken(7% autoInverse) -ToggleButton.tab.underlineColor #4083c9 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.tab.underlineHeight 2 -ToggleButton.textIconGap 4 -ToggleButton.textShiftOffset 0 -ToggleButton.toolbar.hoverBackground #e0e0e0 com.formdev.flatlaf.util.DerivedColor [UI] darken(12% autoInverse) -ToggleButton.toolbar.pressedBackground #d9d9d9 com.formdev.flatlaf.util.DerivedColor [UI] darken(15% autoInverse) -ToggleButton.toolbar.selectedBackground #cccccc com.formdev.flatlaf.util.DerivedColor [UI] darken(20% autoInverse) -ToggleButtonUI com.formdev.flatlaf.ui.FlatToggleButtonUI - - -#---- ToolBar ---- - -ToolBar.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -ToolBar.border [lazy] 2,2,2,2 false com.formdev.flatlaf.ui.FlatToolBarBorder [UI] -ToolBar.borderMargins 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] -ToolBar.darkShadow #9e9e9e javax.swing.plaf.ColorUIResource [UI] -ToolBar.dockingBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -ToolBar.dockingForeground #000000 javax.swing.plaf.ColorUIResource [UI] -ToolBar.floatingBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -ToolBar.floatingForeground #8c8c8c javax.swing.plaf.ColorUIResource [UI] -ToolBar.font [active] $defaultFont [UI] -ToolBar.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -ToolBar.gripColor #afafaf javax.swing.plaf.ColorUIResource [UI] -ToolBar.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -ToolBar.isRollover true -ToolBar.light #e3e3e3 javax.swing.plaf.ColorUIResource [UI] -ToolBar.separatorColor #d1d1d1 javax.swing.plaf.ColorUIResource [UI] -ToolBar.separatorWidth 7 -ToolBar.shadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -ToolBar.spacingBorder [lazy] 1,2,1,2 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] - - -#---- ToolBarSeparator ---- - -ToolBarSeparatorUI com.formdev.flatlaf.ui.FlatToolBarSeparatorUI - - -#---- ToolBar ---- - -ToolBarUI com.formdev.flatlaf.ui.FlatToolBarUI - - -#---- ToolTip ---- - -ToolTip.background #fafafa javax.swing.plaf.ColorUIResource [UI] -ToolTip.border [lazy] 4,6,4,6 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#919191 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -ToolTip.font [active] $defaultFont [UI] -ToolTip.foreground #000000 javax.swing.plaf.ColorUIResource [UI] - - -#---- ToolTipManager ---- - -ToolTipManager.enableToolTipMode activeApplication - - -#---- ToolTip ---- - -ToolTipUI com.formdev.flatlaf.ui.FlatToolTipUI - - -#---- Tree ---- - -Tree.background #ffffff javax.swing.plaf.ColorUIResource [UI] -Tree.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -Tree.changeSelectionWithFocus true -Tree.closedIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeClosedIcon [UI] -Tree.collapsedIcon [lazy] 11,11 com.formdev.flatlaf.icons.FlatTreeCollapsedIcon [UI] -Tree.drawsFocusBorderAroundIcon false -Tree.dropCellBackground [lazy] #3f8fd9 javax.swing.plaf.ColorUIResource [UI] -Tree.dropCellForeground [lazy] #ffffff javax.swing.plaf.ColorUIResource [UI] -Tree.dropLineColor [lazy] #6aa7e1 javax.swing.plaf.ColorUIResource [UI] -Tree.editorBorder [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#000000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -Tree.expandedIcon [lazy] 11,11 com.formdev.flatlaf.icons.FlatTreeExpandedIcon [UI] -Tree.font [active] $defaultFont [UI] -Tree.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -Tree.hash #e6e6e6 javax.swing.plaf.ColorUIResource [UI] -Tree.icon.closedColor #afafaf javax.swing.plaf.ColorUIResource [UI] -Tree.icon.collapsedColor #afafaf javax.swing.plaf.ColorUIResource [UI] -Tree.icon.expandedColor #afafaf javax.swing.plaf.ColorUIResource [UI] -Tree.icon.leafColor #afafaf javax.swing.plaf.ColorUIResource [UI] -Tree.icon.openColor #afafaf javax.swing.plaf.ColorUIResource [UI] -Tree.leafIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeLeafIcon [UI] -Tree.leftChildIndent 7 -Tree.lineTypeDashed false -Tree.openIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeOpenIcon [UI] -Tree.paintLines false -Tree.rendererFillBackground false -Tree.rendererMargins 1,2,1,2 javax.swing.plaf.InsetsUIResource [UI] -Tree.repaintWholeRow true -Tree.rightChildIndent 11 -Tree.rowHeight 0 -Tree.scrollsOnExpand true -Tree.selectionBackground #2675bf javax.swing.plaf.ColorUIResource [UI] -Tree.selectionBorderColor #000000 javax.swing.plaf.ColorUIResource [UI] -Tree.selectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -Tree.selectionInactiveBackground #d4d4d4 javax.swing.plaf.ColorUIResource [UI] -Tree.selectionInactiveForeground #000000 javax.swing.plaf.ColorUIResource [UI] -Tree.showCellFocusIndicator false -Tree.textBackground #ffffff javax.swing.plaf.ColorUIResource [UI] -Tree.textForeground #000000 javax.swing.plaf.ColorUIResource [UI] -Tree.timeFactor 1000 -Tree.wideSelection true -TreeUI com.formdev.flatlaf.ui.FlatTreeUI - - -#---- TristateCheckBox ---- - -TristateCheckBox.clearMixed.clientProperty length=2 [Ljava.lang.Object; - [0] JButton.selectedState - [1] null -TristateCheckBox.setMixed.clientProperty length=2 [Ljava.lang.Object; - [0] JButton.selectedState - [1] indeterminate - - -#---- UIColorHighlighter ---- - -UIColorHighlighter.stripingBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] - - -#---- Viewport ---- - -Viewport.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -Viewport.font [active] $defaultFont [UI] -Viewport.foreground #000000 javax.swing.plaf.ColorUIResource [UI] -ViewportUI com.formdev.flatlaf.ui.FlatViewportUI - - -#---- ---- - -activeCaption #99b4d1 javax.swing.plaf.ColorUIResource [UI] -activeCaptionBorder #99b4d1 javax.swing.plaf.ColorUIResource [UI] -activeCaptionText #000000 javax.swing.plaf.ColorUIResource [UI] -control #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -controlDkShadow #9e9e9e javax.swing.plaf.ColorUIResource [UI] -controlHighlight #e3e3e3 javax.swing.plaf.ColorUIResource [UI] -controlLtHighlight #ffffff javax.swing.plaf.ColorUIResource [UI] -controlShadow #c4c4c4 javax.swing.plaf.ColorUIResource [UI] -controlText #000000 javax.swing.plaf.ColorUIResource [UI] -defaultFont Segoe UI plain 12 javax.swing.plaf.FontUIResource [UI] -desktop #ffffff javax.swing.plaf.ColorUIResource [UI] - - -#---- html ---- - -html.missingImage [lazy] 38,38 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) -html.pendingImage [lazy] 38,38 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) - - -#---- ---- - -inactiveCaption #bfcddb javax.swing.plaf.ColorUIResource [UI] -inactiveCaptionBorder #bfcddb javax.swing.plaf.ColorUIResource [UI] -inactiveCaptionText #000000 javax.swing.plaf.ColorUIResource [UI] -info #fafafa javax.swing.plaf.ColorUIResource [UI] -infoText #000000 javax.swing.plaf.ColorUIResource [UI] - - -#---- laf ---- - -laf.dark false -laf.scaleFactor [active] 1.0 - - -#---- ---- - -menu #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -menuText #000000 javax.swing.plaf.ColorUIResource [UI] -scrollbar #f5f5f5 com.formdev.flatlaf.util.DerivedColor [UI] lighten(1%) - - -#---- swingx/TaskPane ---- - -swingx/TaskPaneUI com.formdev.flatlaf.swingx.ui.FlatTaskPaneUI - - -#---- ---- - -text #ffffff javax.swing.plaf.ColorUIResource [UI] -textHighlight #2675bf javax.swing.plaf.ColorUIResource [UI] -textHighlightText #ffffff javax.swing.plaf.ColorUIResource [UI] -textInactiveText #8c8c8c javax.swing.plaf.ColorUIResource [UI] -textText #000000 javax.swing.plaf.ColorUIResource [UI] -window #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -windowBorder #000000 javax.swing.plaf.ColorUIResource [UI] -windowText #000000 javax.swing.plaf.ColorUIResource [UI] diff --git a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_InputMap_1.8.0_202-mac.txt b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_InputMap_1.8.0-mac.txt similarity index 100% rename from flatlaf-testing/dumps/uidefaults/FlatLightLaf_InputMap_1.8.0_202-mac.txt rename to flatlaf-testing/dumps/uidefaults/FlatLightLaf_InputMap_1.8.0-mac.txt diff --git a/flatlaf-testing/dumps/uidefaults/FlatLightLaf_InputMap_1.8.0_202.txt b/flatlaf-testing/dumps/uidefaults/FlatLightLaf_InputMap_1.8.0.txt similarity index 100% rename from flatlaf-testing/dumps/uidefaults/FlatLightLaf_InputMap_1.8.0_202.txt rename to flatlaf-testing/dumps/uidefaults/FlatLightLaf_InputMap_1.8.0.txt diff --git a/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt b/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt new file mode 100644 index 00000000..25dd0eb2 --- /dev/null +++ b/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0.txt @@ -0,0 +1,1597 @@ +Class com.formdev.flatlaf.testing.FlatTestLaf +ID FlatLaf - FlatLaf Test +Name FlatLaf Test +Java 1.8.0_202 +OS Windows 10 + + +#---- ---- + +AATextInfoPropertyKey [unknown type] sun.swing.SwingUtilities2$AATextInfo + + +#---- Actions ---- + +Actions.Blue #389fd6 HSL 201 66 53 javax.swing.plaf.ColorUIResource [UI] +Actions.Green #59a869 HSL 132 31 50 javax.swing.plaf.ColorUIResource [UI] +Actions.Grey #6e6e6e HSL 0 0 43 javax.swing.plaf.ColorUIResource [UI] +Actions.GreyInline #7f8b91 HSL 200 8 53 javax.swing.plaf.ColorUIResource [UI] +Actions.Red #db5860 HSL 356 65 60 javax.swing.plaf.ColorUIResource [UI] +Actions.Yellow #eda200 HSL 41 100 46 javax.swing.plaf.ColorUIResource [UI] + + +#---- AuditoryCues ---- + +AuditoryCues.allAuditoryCues length=13 [Ljava.lang.Object; + [0] CheckBoxMenuItem.commandSound + [1] InternalFrame.closeSound + [2] InternalFrame.maximizeSound + [3] InternalFrame.minimizeSound + [4] InternalFrame.restoreDownSound + [5] InternalFrame.restoreUpSound + [6] MenuItem.commandSound + [7] OptionPane.errorSound + [8] OptionPane.informationSound + [9] OptionPane.questionSound + [10] OptionPane.warningSound + [11] PopupMenu.popupSound + [12] RadioButtonMenuItem.commandSound +AuditoryCues.cueList length=13 [Ljava.lang.Object; + [0] CheckBoxMenuItem.commandSound + [1] InternalFrame.closeSound + [2] InternalFrame.maximizeSound + [3] InternalFrame.minimizeSound + [4] InternalFrame.restoreDownSound + [5] InternalFrame.restoreUpSound + [6] MenuItem.commandSound + [7] OptionPane.errorSound + [8] OptionPane.informationSound + [9] OptionPane.questionSound + [10] OptionPane.warningSound + [11] PopupMenu.popupSound + [12] RadioButtonMenuItem.commandSound +AuditoryCues.noAuditoryCues length=1 [Ljava.lang.Object; + [0] mute + + +#---- BusyLabel ---- + +BusyLabelUI com.formdev.flatlaf.swingx.ui.FlatBusyLabelUI + + +#---- Button ---- + +Button.arc 6 +Button.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +Button.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatButtonBorder [UI] +Button.borderColor #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.borderWidth 1 +Button.darkShadow #696969 HSL 0 0 41 javax.swing.plaf.ColorUIResource [UI] +Button.default.borderWidth 1 +Button.default.endBackground #888888 HSL 0 0 53 javax.swing.plaf.ColorUIResource [UI] +Button.default.endBorderColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.default.focusColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.default.focusedBackground #00ffff HSL 180 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.default.focusedBorderColor #537699 HSL 210 30 46 javax.swing.plaf.ColorUIResource [UI] +Button.default.foreground #880000 HSL 0 100 27 javax.swing.plaf.ColorUIResource [UI] +Button.default.hoverBackground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.default.hoverBorderColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.default.pressedBackground #ffc800 HSL 47 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.default.startBackground #dddddd HSL 0 0 87 javax.swing.plaf.ColorUIResource [UI] +Button.default.startBorderColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.defaultButtonFollowsFocus false +Button.disabledBackground #e0e0e0 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +Button.disabledBorderColor #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +Button.disabledForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +Button.disabledText #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +Button.endBackground #bbbbbb HSL 0 0 73 javax.swing.plaf.ColorUIResource [UI] +Button.endBorderColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.focusedBackground #00ffff HSL 180 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.focusedBorderColor #466d94 HSL 210 36 43 javax.swing.plaf.ColorUIResource [UI] +Button.font [active] $defaultFont [UI] +Button.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Button.hoverBackground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.hoverBorderColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.iconTextGap 4 +Button.innerFocusWidth 1 +Button.light #e3e3e3 HSL 0 0 89 javax.swing.plaf.ColorUIResource [UI] +Button.margin 2,14,2,14 javax.swing.plaf.InsetsUIResource [UI] +Button.minimumWidth 72 +Button.pressedBackground #ffc800 HSL 47 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.rollover true +Button.selectedBackground #ffbbbb HSL 0 100 87 javax.swing.plaf.ColorUIResource [UI] +Button.shadow #a0a0a0 HSL 0 0 63 javax.swing.plaf.ColorUIResource [UI] +Button.startBackground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Button.startBorderColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +Button.textIconGap 4 +Button.textShiftOffset 0 +Button.toolbar.hoverBackground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Button.toolbar.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] +Button.toolbar.pressedBackground #eeeeee HSL 0 0 93 javax.swing.plaf.ColorUIResource [UI] +Button.toolbar.selectedBackground #dddddd HSL 0 0 87 javax.swing.plaf.ColorUIResource [UI] +Button.toolbar.spacingInsets 1,2,1,2 javax.swing.plaf.InsetsUIResource [UI] +ButtonUI com.formdev.flatlaf.ui.FlatButtonUI + + +#---- Caret ---- + +Caret.width [active] 1 + + +#---- CheckBox ---- + +CheckBox.arc 4 +CheckBox.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +CheckBox.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +CheckBox.disabledText #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +CheckBox.font [active] $defaultFont [UI] +CheckBox.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.borderColor #878787 HSL 0 0 53 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.checkmarkColor #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.disabledBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.disabledBorderColor #bdbdbd HSL 0 0 74 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.disabledCheckmarkColor #ababab HSL 0 0 67 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.disabledSelectedBackground #f2f2f2 HSL 0 0 95 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.disabledSelectedBorderColor #dbdbdb HSL 0 0 86 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.disabledSelectedBorderWidth 2 +CheckBox.icon.focusedBackground #00ffff HSL 180 100 50 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.focusedBorderColor #7b9fc7 HSL 212 40 63 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.focusedSelectedBorderColor #accff7 HSL 212 82 82 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.hoverBackground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.hoverBorderColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.hoverCheckmarkColor #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.hoverSelectedBackground #ff88ff HSL 300 100 77 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.hoverSelectedBorderColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.pressedBackground #ffe99e HSL 46 100 81 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.pressedBorderColor #ffc800 HSL 47 100 50 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.pressedCheckmarkColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.pressedSelectedBackground #88ffff HSL 180 100 77 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.pressedSelectedBorderColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.selectedBackground #4d89c9 HSL 211 53 55 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon.selectedBorderColor #4982cc HSL 214 56 54 javax.swing.plaf.ColorUIResource [UI] +CheckBox.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxIcon [UI] +CheckBox.iconTextGap 4 +CheckBox.margin 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] +CheckBox.rollover true +CheckBox.textIconGap 4 +CheckBox.textShiftOffset 0 + + +#---- CheckBoxMenuItem ---- + +CheckBoxMenuItem.acceleratorFont [active] $defaultFont [UI] +CheckBoxMenuItem.acceleratorForeground #ff8888 HSL 0 100 77 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.acceleratorSelectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] +CheckBoxMenuItem.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] +CheckBoxMenuItem.borderPainted true +CheckBoxMenuItem.checkIcon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxMenuItemIcon [UI] +CheckBoxMenuItem.disabledForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.font [active] $defaultFont [UI] +CheckBoxMenuItem.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.icon.checkmarkColor #4d89c9 HSL 211 53 55 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.icon.disabledCheckmarkColor #ababab HSL 0 0 67 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] +CheckBoxMenuItem.opaque false +CheckBoxMenuItem.selectionBackground #00aa00 HSL 120 100 33 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItem.selectionForeground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +CheckBoxMenuItemUI com.formdev.flatlaf.ui.FlatCheckBoxMenuItemUI + + +#---- CheckBox ---- + +CheckBoxUI com.formdev.flatlaf.ui.FlatCheckBoxUI + + +#---- ColorChooser ---- + +ColorChooser.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +ColorChooser.font [active] $defaultFont [UI] +ColorChooser.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +ColorChooser.swatchesDefaultRecentColor #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +ColorChooser.swatchesRecentSwatchSize [active] 16,16 javax.swing.plaf.DimensionUIResource [UI] +ColorChooser.swatchesSwatchSize [active] 16,16 javax.swing.plaf.DimensionUIResource [UI] +ColorChooserUI com.formdev.flatlaf.ui.FlatColorChooserUI + + +#---- ColumnControlButton ---- + +ColumnControlButton.actionIcon [lazy] 10,10 com.formdev.flatlaf.swingx.icons.FlatColumnControlIcon [UI] + + +#---- ComboBox ---- + +ComboBox.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +ComboBox.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRoundBorder [UI] +ComboBox.buttonArrowColor #666666 HSL 0 0 40 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonBackground #f0f0f0 HSL 0 0 94 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonDarkShadow #696969 HSL 0 0 41 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonDisabledArrowColor #ababab HSL 0 0 67 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonDisabledSeparatorColor #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonEditableBackground #cccccc HSL 0 0 80 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonFocusedBackground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonHighlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonHoverArrowColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonPressedArrowColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonSeparatorColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonShadow #a0a0a0 HSL 0 0 63 javax.swing.plaf.ColorUIResource [UI] +ComboBox.buttonStyle auto +ComboBox.disabledBackground #e0e0e0 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +ComboBox.disabledForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +ComboBox.editorColumns 0 +ComboBox.focusedBackground #ffff88 HSL 60 100 77 javax.swing.plaf.ColorUIResource [UI] +ComboBox.font [active] $defaultFont [UI] +ComboBox.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +ComboBox.isEnterSelectablePopup false +ComboBox.maximumRowCount 15 +ComboBox.minimumWidth 72 +ComboBox.noActionOnKeyNavigation false +ComboBox.padding 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +ComboBox.popupBackground #ffffcc HSL 60 100 90 javax.swing.plaf.ColorUIResource [UI] +ComboBox.selectionBackground #00aa00 HSL 120 100 33 javax.swing.plaf.ColorUIResource [UI] +ComboBox.selectionForeground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +ComboBox.timeFactor 1000 +ComboBoxUI com.formdev.flatlaf.ui.FlatComboBoxUI + + +#---- Component ---- + +Component.arc 5 +Component.arrowType chevron +Component.borderColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Component.borderWidth 1 +Component.disabledBorderColor #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +Component.focusColor #97c3f3 HSL 211 79 77 javax.swing.plaf.ColorUIResource [UI] +Component.focusWidth 0 +Component.focusedBorderColor #466d94 HSL 210 36 43 javax.swing.plaf.ColorUIResource [UI] +Component.grayFilter [lazy] [unknown type] com.formdev.flatlaf.util.GrayFilter +Component.hideMnemonics true +Component.innerFocusWidth 0.5 +Component.innerOutlineWidth 1 +Component.minimumWidth 64 + + +#---- DatePicker ---- + +DatePickerUI com.formdev.flatlaf.swingx.ui.FlatDatePickerUI + + +#---- Desktop ---- + +Desktop.background #aaffee HSL 168 100 83 javax.swing.plaf.ColorUIResource [UI] +Desktop.minOnScreenInsets 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] + + +#---- DesktopIcon ---- + +DesktopIcon.background #44ffda HSL 168 100 63 javax.swing.plaf.ColorUIResource [UI] +DesktopIcon.border [lazy] 4,4,4,4 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +DesktopIcon.closeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameCloseIcon [UI] +DesktopIcon.closeSize 20,20 javax.swing.plaf.DimensionUIResource [UI] +DesktopIcon.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +DesktopIcon.iconSize 64,64 javax.swing.plaf.DimensionUIResource [UI] +DesktopIconUI com.formdev.flatlaf.ui.FlatDesktopIconUI + + +#---- DesktopPane ---- + +DesktopPaneUI com.formdev.flatlaf.ui.FlatDesktopPaneUI + + +#---- EditorPane ---- + +EditorPane.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +EditorPane.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +EditorPane.caretBlinkRate 500 +EditorPane.caretForeground #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +EditorPane.disabledBackground #e0e0e0 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +EditorPane.focusedBackground #ffff88 HSL 60 100 77 javax.swing.plaf.ColorUIResource [UI] +EditorPane.font [active] $defaultFont [UI] +EditorPane.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +EditorPane.inactiveBackground #f0f0f0 HSL 0 0 94 javax.swing.plaf.ColorUIResource [UI] +EditorPane.inactiveForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +EditorPane.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +EditorPane.selectionBackground #00aa00 HSL 120 100 33 javax.swing.plaf.ColorUIResource [UI] +EditorPane.selectionForeground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +EditorPaneUI com.formdev.flatlaf.ui.FlatEditorPaneUI + + +#---- FileChooser ---- + +FileChooser.detailsViewIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserDetailsViewIcon [UI] +FileChooser.homeFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserHomeFolderIcon [UI] +FileChooser.listViewIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserListViewIcon [UI] +FileChooser.newFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserNewFolderIcon [UI] +FileChooser.readOnly false +FileChooser.upFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserUpFolderIcon [UI] +FileChooser.useSystemExtensionHiding true +FileChooser.usesSingleFilePane true +FileChooserUI com.formdev.flatlaf.ui.FlatFileChooserUI + + +#---- FileView ---- + +FileView.computerIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewComputerIcon [UI] +FileView.directoryIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewDirectoryIcon [UI] +FileView.fileIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewFileIcon [UI] +FileView.floppyDriveIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewFloppyDriveIcon [UI] +FileView.fullRowSelection true +FileView.hardDriveIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewHardDriveIcon [UI] + + +#---- FormattedTextField ---- + +FormattedTextField.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] +FormattedTextField.caretBlinkRate 500 +FormattedTextField.caretForeground #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.disabledBackground #e0e0e0 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.focusedBackground #ffff88 HSL 60 100 77 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.font [active] $defaultFont [UI] +FormattedTextField.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.iconTextGap 4 +FormattedTextField.inactiveBackground #f0f0f0 HSL 0 0 94 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.inactiveForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +FormattedTextField.placeholderForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.selectionBackground #00aa00 HSL 120 100 33 javax.swing.plaf.ColorUIResource [UI] +FormattedTextField.selectionForeground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +FormattedTextFieldUI com.formdev.flatlaf.ui.FlatFormattedTextFieldUI + + +#---- Header ---- + +HeaderUI com.formdev.flatlaf.swingx.ui.FlatHeaderUI + + +#---- HelpButton ---- + +HelpButton.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +HelpButton.borderColor #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +HelpButton.borderWidth 1 +HelpButton.disabledBackground #e0e0e0 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +HelpButton.disabledBorderColor #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +HelpButton.disabledQuestionMarkColor #8888ff HSL 240 100 77 javax.swing.plaf.ColorUIResource [UI] +HelpButton.focusedBackground #00ffff HSL 180 100 50 javax.swing.plaf.ColorUIResource [UI] +HelpButton.focusedBorderColor #466d94 HSL 210 36 43 javax.swing.plaf.ColorUIResource [UI] +HelpButton.hoverBackground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +HelpButton.hoverBorderColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +HelpButton.icon [lazy] 22,22 com.formdev.flatlaf.icons.FlatHelpButtonIcon [UI] +HelpButton.innerFocusWidth 1 +HelpButton.pressedBackground #ffc800 HSL 47 100 50 javax.swing.plaf.ColorUIResource [UI] +HelpButton.questionMarkColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] + + +#---- Hyperlink ---- + +Hyperlink.disabledText #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +Hyperlink.linkColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Hyperlink.visitedColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +HyperlinkUI com.formdev.flatlaf.swingx.ui.FlatHyperlinkUI + + +#---- InternalFrame ---- + +InternalFrame.activeBorderColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.activeDropShadowInsets 5,5,6,6 javax.swing.plaf.InsetsUIResource [UI] +InternalFrame.activeTitleBackground #880000 HSL 0 100 27 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.activeTitleForeground #ffaaaa HSL 0 100 83 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.border [lazy] 6,6,6,6 false com.formdev.flatlaf.ui.FlatInternalFrameUI$FlatInternalFrameBorder [UI] +InternalFrame.borderColor #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.borderDarkShadow #696969 HSL 0 0 41 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.borderHighlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.borderLight #e3e3e3 HSL 0 0 89 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.borderLineWidth 1 +InternalFrame.borderMargins 6,6,6,6 javax.swing.plaf.InsetsUIResource [UI] +InternalFrame.borderShadow #a0a0a0 HSL 0 0 63 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.buttonHoverBackground #006600 HSL 120 100 20 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.buttonPressedBackground #00aa00 HSL 120 100 33 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.buttonSize 24,24 javax.swing.plaf.DimensionUIResource [UI] +InternalFrame.closeHoverBackground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.closeHoverForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.closeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameCloseIcon [UI] +InternalFrame.closePressedBackground #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.closePressedForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.dropShadowPainted true +InternalFrame.icon [lazy] 16,16 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) +InternalFrame.iconifyIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameIconifyIcon [UI] +InternalFrame.inactiveBorderColor #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.inactiveDropShadowInsets 3,3,4,4 javax.swing.plaf.InsetsUIResource [UI] +InternalFrame.inactiveTitleBackground #008800 HSL 120 100 27 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.inactiveTitleForeground #aaffaa HSL 120 100 83 javax.swing.plaf.ColorUIResource [UI] +InternalFrame.maximizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameMaximizeIcon [UI] +InternalFrame.minimizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameRestoreIcon [UI] +InternalFrame.titleFont [active] $defaultFont [UI] + + +#---- InternalFrameTitlePane ---- + +InternalFrameTitlePane.border [lazy] 0,8,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +InternalFrameTitlePane.closeButtonOpacity true +InternalFrameTitlePane.iconifyButtonOpacity true +InternalFrameTitlePane.maximizeButtonOpacity true + + +#---- InternalFrame ---- + +InternalFrameUI com.formdev.flatlaf.ui.FlatInternalFrameUI + + +#---- JXBusyLabel ---- + +JXBusyLabel.baseColor #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +JXBusyLabel.highlightColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] + + +#---- JXDatePicker ---- + +JXDatePicker.border [lazy] 1,1,1,1 false com.formdev.flatlaf.swingx.ui.FlatDatePickerBorder [UI] + + +#---- JXHeader ---- + +JXHeader.background #ff8888 HSL 0 100 77 javax.swing.plaf.ColorUIResource [UI] +JXHeader.descriptionForeground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +JXHeader.startBackground #ffcccc HSL 0 100 90 javax.swing.plaf.ColorUIResource [UI] +JXHeader.titleForeground #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] + + +#---- JXMonthView ---- + +JXMonthView.arrowColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.daysOfTheWeekForeground #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.disabledArrowColor #ababab HSL 0 0 67 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.flaggedDayForeground #00ffff HSL 180 100 50 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.leadingDayForeground #c0c0c0 HSL 0 0 75 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.monthDownFileName [lazy] 20,20 com.formdev.flatlaf.swingx.ui.FlatMonthDownIcon [UI] +JXMonthView.monthStringBackground #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.monthStringForeground #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.monthUpFileName [lazy] 20,20 com.formdev.flatlaf.swingx.ui.FlatMonthUpIcon [UI] +JXMonthView.selectedBackground #aaffaa HSL 120 100 83 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.trailingDayForeground #c0c0c0 HSL 0 0 75 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.unselectableDayForeground #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +JXMonthView.weekOfTheYearForeground #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] + + +#---- JXTitledPanel ---- + +JXTitledPanel.borderColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +JXTitledPanel.captionInsets 4,10,4,10 javax.swing.plaf.InsetsUIResource [UI] +JXTitledPanel.titleBackground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +JXTitledPanel.titleForeground #ff00ff HSL 300 100 50 javax.swing.plaf.ColorUIResource [UI] + + +#---- JideButton ---- + +JideButton.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +JideButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +JideButton.borderColor #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +JideButton.darkShadow #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +JideButton.focusedBackground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +JideButton.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +JideButton.highlight #ffbbbb HSL 0 100 87 javax.swing.plaf.ColorUIResource [UI] +JideButton.light #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +JideButton.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] +JideButton.selectedAndFocusedBackground #eeeeee HSL 0 0 93 javax.swing.plaf.ColorUIResource [UI] +JideButton.selectedBackground #dddddd HSL 0 0 87 javax.swing.plaf.ColorUIResource [UI] +JideButton.shadow #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +JideButton.textIconGap [active] 4 +JideButtonUI com.formdev.flatlaf.jideoss.ui.FlatJideButtonUI + + +#---- JideLabel ---- + +JideLabel.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +JideLabel.disabledForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +JideLabel.foreground #008800 HSL 120 100 27 javax.swing.plaf.ColorUIResource [UI] +JideLabelUI com.formdev.flatlaf.jideoss.ui.FlatJideLabelUI + + +#---- JidePopupMenu ---- + +JidePopupMenuUI com.formdev.flatlaf.jideoss.ui.FlatJidePopupMenuUI + + +#---- JideSplitButton ---- + +JideSplitButton.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +JideSplitButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +JideSplitButton.buttonArrowColor #666666 HSL 0 0 40 javax.swing.plaf.ColorUIResource [UI] +JideSplitButton.buttonDisabledArrowColor #ababab HSL 0 0 67 javax.swing.plaf.ColorUIResource [UI] +JideSplitButton.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +JideSplitButton.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] +JideSplitButton.selectionForeground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +JideSplitButton.textIconGap [active] 4 +JideSplitButtonUI com.formdev.flatlaf.jideoss.ui.FlatJideSplitButtonUI + + +#---- JideTabbedPane ---- + +JideTabbedPane.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +JideTabbedPane.closeButtonLeftMargin 0 +JideTabbedPane.closeButtonRightMargin 0 +JideTabbedPane.contentBorderInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +JideTabbedPane.fitStyleBoundSize 0 +JideTabbedPane.fitStyleFirstTabMargin 0 +JideTabbedPane.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +JideTabbedPane.shadow #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +JideTabbedPane.tabAreaBackground #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +JideTabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +JideTabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] +JideTabbedPane.tabRunOverlay 0 +JideTabbedPaneUI com.formdev.flatlaf.jideoss.ui.FlatJideTabbedPaneUI + + +#---- Label ---- + +Label.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +Label.disabledForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +Label.disabledShadow #a0a0a0 HSL 0 0 63 javax.swing.plaf.ColorUIResource [UI] +Label.font [active] $defaultFont [UI] +Label.foreground #008800 HSL 120 100 27 javax.swing.plaf.ColorUIResource [UI] +LabelUI com.formdev.flatlaf.ui.FlatLabelUI + + +#---- List ---- + +List.background #f0ffff HSL 180 100 97 javax.swing.plaf.ColorUIResource [UI] +List.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +List.cellFocusColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +List.cellMargins 1,6,1,6 javax.swing.plaf.InsetsUIResource [UI] +List.cellNoFocusBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +List.cellRenderer [active] javax.swing.DefaultListCellRenderer$UIResource [UI] +List.dropCellBackground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +List.dropCellForeground #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +List.dropLineColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +List.focusCellHighlightBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#880000 HSL 0 100 27 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +List.focusSelectedCellHighlightBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#880000 HSL 0 100 27 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +List.font [active] $defaultFont [UI] +List.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +List.noFocusBorder 1,1,1,1 false javax.swing.plaf.BorderUIResource$EmptyBorderUIResource [UI] +List.selectionBackground #00aa00 HSL 120 100 33 javax.swing.plaf.ColorUIResource [UI] +List.selectionForeground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +List.selectionInactiveBackground #888888 HSL 0 0 53 javax.swing.plaf.ColorUIResource [UI] +List.selectionInactiveForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +List.showCellFocusIndicator false +List.timeFactor 1000 +ListUI com.formdev.flatlaf.ui.FlatListUI + + +#---- Menu ---- + +Menu.acceleratorFont [active] $defaultFont [UI] +Menu.acceleratorForeground #ff8888 HSL 0 100 77 javax.swing.plaf.ColorUIResource [UI] +Menu.acceleratorSelectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Menu.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuArrowIcon [UI] +Menu.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Menu.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] +Menu.borderPainted true +Menu.cancelMode hideLastSubmenu +Menu.crossMenuMnemonic true +Menu.disabledForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +Menu.font [active] $defaultFont [UI] +Menu.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Menu.icon.arrowColor #4d89c9 HSL 211 53 55 javax.swing.plaf.ColorUIResource [UI] +Menu.icon.disabledArrowColor #ababab HSL 0 0 67 javax.swing.plaf.ColorUIResource [UI] +Menu.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] +Menu.menuPopupOffsetX 0 +Menu.menuPopupOffsetY 0 +Menu.opaque false +Menu.preserveTopLevelSelection false +Menu.selectionBackground #00aa00 HSL 120 100 33 javax.swing.plaf.ColorUIResource [UI] +Menu.selectionForeground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +Menu.shortcutKeys length=1 [I + [0] 8 +Menu.submenuPopupOffsetX [active] -4 +Menu.submenuPopupOffsetY [active] -4 + + +#---- MenuBar ---- + +MenuBar.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +MenuBar.border [lazy] 0,0,1,0 false com.formdev.flatlaf.ui.FlatMenuBarBorder [UI] +MenuBar.borderColor #4444ff HSL 240 100 63 javax.swing.plaf.ColorUIResource [UI] +MenuBar.font [active] $defaultFont [UI] +MenuBar.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +MenuBar.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +MenuBar.hoverBackground #ffdddd HSL 0 100 93 javax.swing.plaf.ColorUIResource [UI] +MenuBar.itemMargins 3,8,3,8 javax.swing.plaf.InsetsUIResource [UI] +MenuBar.shadow #a0a0a0 HSL 0 0 63 javax.swing.plaf.ColorUIResource [UI] +MenuBar.underlineSelectionBackground #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +MenuBar.underlineSelectionColor #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +MenuBar.underlineSelectionHeight 5 +MenuBar.windowBindings length=2 [Ljava.lang.Object; + [0] F10 + [1] takeFocus +MenuBarUI com.formdev.flatlaf.ui.FlatMenuBarUI + + +#---- MenuItem ---- + +MenuItem.acceleratorArrowGap 2 +MenuItem.acceleratorDelimiter + +MenuItem.acceleratorFont [active] $defaultFont [UI] +MenuItem.acceleratorForeground #ff8888 HSL 0 100 77 javax.swing.plaf.ColorUIResource [UI] +MenuItem.acceleratorSelectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +MenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] +MenuItem.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +MenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] +MenuItem.borderPainted true +MenuItem.checkBackground #ccccff HSL 240 100 90 javax.swing.plaf.ColorUIResource [UI] +MenuItem.checkMargins 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] +MenuItem.disabledForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +MenuItem.font [active] $defaultFont [UI] +MenuItem.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +MenuItem.iconTextGap 6 +MenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] +MenuItem.minimumIconSize 16,16 javax.swing.plaf.DimensionUIResource [UI] +MenuItem.minimumWidth 72 +MenuItem.opaque false +MenuItem.selectionBackground #00aa00 HSL 120 100 33 javax.swing.plaf.ColorUIResource [UI] +MenuItem.selectionForeground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +MenuItem.textAcceleratorGap 24 +MenuItem.textNoAcceleratorGap 6 +MenuItem.underlineSelectionBackground #e6e6e6 HSL 0 0 90 javax.swing.plaf.ColorUIResource [UI] +MenuItem.underlineSelectionCheckBackground #ccccff HSL 240 100 90 javax.swing.plaf.ColorUIResource [UI] +MenuItem.underlineSelectionColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +MenuItem.underlineSelectionHeight 3 +MenuItem.verticallyAlignText true +MenuItemUI com.formdev.flatlaf.ui.FlatMenuItemUI + + +#---- Menu ---- + +MenuUI com.formdev.flatlaf.ui.FlatMenuUI + + +#---- MonthView ---- + +MonthViewUI com.formdev.flatlaf.swingx.ui.FlatMonthViewUI + + +#---- Objects ---- + +Objects.BlackText #231f20 HSL 345 6 13 javax.swing.plaf.ColorUIResource [UI] +Objects.Blue #40b6e0 HSL 196 72 56 javax.swing.plaf.ColorUIResource [UI] +Objects.Green #62b543 HSL 104 46 49 javax.swing.plaf.ColorUIResource [UI] +Objects.GreenAndroid #a4c639 HSL 74 55 50 javax.swing.plaf.ColorUIResource [UI] +Objects.Grey #9aa7b0 HSL 205 12 65 javax.swing.plaf.ColorUIResource [UI] +Objects.Pink #f98b9e HSL 350 90 76 javax.swing.plaf.ColorUIResource [UI] +Objects.Purple #b99bf8 HSL 259 87 79 javax.swing.plaf.ColorUIResource [UI] +Objects.Red #f26522 HSL 19 89 54 javax.swing.plaf.ColorUIResource [UI] +Objects.RedStatus #e05555 HSL 0 69 61 javax.swing.plaf.ColorUIResource [UI] +Objects.Yellow #f4af3d HSL 37 89 60 javax.swing.plaf.ColorUIResource [UI] +Objects.YellowDark #d9a343 HSL 38 66 56 javax.swing.plaf.ColorUIResource [UI] + + +#---- OptionPane ---- + +OptionPane.background #ffdddd HSL 0 100 93 javax.swing.plaf.ColorUIResource [UI] +OptionPane.border [lazy] 12,12,12,12 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +OptionPane.buttonAreaBorder [lazy] 12,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +OptionPane.buttonClickThreshhold 500 +OptionPane.buttonMinimumWidth [active] 72 +OptionPane.buttonOrientation 4 +OptionPane.buttonPadding 8 +OptionPane.errorIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneErrorIcon [UI] +OptionPane.font [active] $defaultFont [UI] +OptionPane.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +OptionPane.icon.errorColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +OptionPane.icon.foreground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +OptionPane.icon.informationColor #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +OptionPane.icon.questionColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +OptionPane.icon.warningColor #ffcc00 HSL 48 100 50 javax.swing.plaf.ColorUIResource [UI] +OptionPane.iconMessageGap 16 +OptionPane.informationIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneInformationIcon [UI] +OptionPane.maxCharactersPerLine 80 +OptionPane.messageAreaBorder [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +OptionPane.messagePadding 3 +OptionPane.minimumSize 262,90 javax.swing.plaf.DimensionUIResource [UI] +OptionPane.questionIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneQuestionIcon [UI] +OptionPane.sameSizeButtons true +OptionPane.setButtonMargin false +OptionPane.showIcon false +OptionPane.warningIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneWarningIcon [UI] +OptionPane.windowBindings length=2 [Ljava.lang.Object; + [0] ESCAPE + [1] close +OptionPaneUI com.formdev.flatlaf.ui.FlatOptionPaneUI + + +#---- Panel ---- + +Panel.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +Panel.font [active] $defaultFont [UI] +Panel.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +PanelUI com.formdev.flatlaf.ui.FlatPanelUI + + +#---- PasswordField ---- + +PasswordField.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +PasswordField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] +PasswordField.capsLockIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatCapsLockIcon [UI] +PasswordField.caretBlinkRate 500 +PasswordField.caretForeground #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +PasswordField.disabledBackground #e0e0e0 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +PasswordField.echoChar '\u2022' +PasswordField.focusedBackground #ffff88 HSL 60 100 77 javax.swing.plaf.ColorUIResource [UI] +PasswordField.font [active] $defaultFont [UI] +PasswordField.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +PasswordField.iconTextGap 4 +PasswordField.inactiveBackground #f0f0f0 HSL 0 0 94 javax.swing.plaf.ColorUIResource [UI] +PasswordField.inactiveForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +PasswordField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +PasswordField.placeholderForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +PasswordField.revealIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatRevealIcon [UI] +PasswordField.revealIconColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +PasswordField.selectionBackground #00aa00 HSL 120 100 33 javax.swing.plaf.ColorUIResource [UI] +PasswordField.selectionForeground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +PasswordField.showCapsLock true +PasswordField.showRevealButton false +PasswordFieldUI com.formdev.flatlaf.ui.FlatPasswordFieldUI + + +#---- Popup ---- + +Popup.dropShadowColor #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +Popup.dropShadowInsets -6,6,6,6 javax.swing.plaf.InsetsUIResource [UI] +Popup.dropShadowOpacity 0.5 +Popup.dropShadowPainted true + + +#---- PopupMenu ---- + +PopupMenu.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +PopupMenu.border [lazy] 4,1,4,1 false com.formdev.flatlaf.ui.FlatPopupMenuBorder [UI] lineColor=#0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +PopupMenu.borderColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +PopupMenu.borderInsets 4,1,4,1 javax.swing.plaf.InsetsUIResource [UI] +PopupMenu.consumeEventOnClose false +PopupMenu.font [active] $defaultFont [UI] +PopupMenu.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +PopupMenu.hoverScrollArrowBackground #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +PopupMenu.scrollArrowColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] + + +#---- PopupMenuSeparator ---- + +PopupMenuSeparator.height 30 +PopupMenuSeparator.stripeIndent 1 +PopupMenuSeparator.stripeWidth 3 +PopupMenuSeparatorUI com.formdev.flatlaf.ui.FlatPopupMenuSeparatorUI + + +#---- PopupMenu ---- + +PopupMenuUI com.formdev.flatlaf.ui.FlatPopupMenuUI + + +#---- ProgressBar ---- + +ProgressBar.arc 4 +ProgressBar.background #88ff88 HSL 120 100 77 javax.swing.plaf.ColorUIResource [UI] +ProgressBar.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +ProgressBar.cellLength 1 +ProgressBar.cellSpacing 0 +ProgressBar.cycleTime 10000 +ProgressBar.font [active] Segoe UI plain 10 javax.swing.plaf.FontUIResource [UI] +ProgressBar.foreground #73737333 20% HSLA 0 0 45 20 javax.swing.plaf.ColorUIResource [UI] +ProgressBar.horizontalSize 146,4 javax.swing.plaf.DimensionUIResource [UI] +ProgressBar.repaintInterval 15 +ProgressBar.selectionBackground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +ProgressBar.selectionForeground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +ProgressBar.verticalSize 4,146 javax.swing.plaf.DimensionUIResource [UI] +ProgressBarUI com.formdev.flatlaf.ui.FlatProgressBarUI + + +#---- RadioButton ---- + +RadioButton.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +RadioButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +RadioButton.darkShadow #696969 HSL 0 0 41 javax.swing.plaf.ColorUIResource [UI] +RadioButton.disabledText #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +RadioButton.font [active] $defaultFont [UI] +RadioButton.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +RadioButton.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +RadioButton.icon.centerDiameter 8 +RadioButton.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatRadioButtonIcon [UI] +RadioButton.iconTextGap 4 +RadioButton.icon[filled].centerDiameter 5 +RadioButton.light #e3e3e3 HSL 0 0 89 javax.swing.plaf.ColorUIResource [UI] +RadioButton.margin 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] +RadioButton.rollover true +RadioButton.shadow #a0a0a0 HSL 0 0 63 javax.swing.plaf.ColorUIResource [UI] +RadioButton.textIconGap 4 +RadioButton.textShiftOffset 0 + + +#---- RadioButtonMenuItem ---- + +RadioButtonMenuItem.acceleratorFont [active] $defaultFont [UI] +RadioButtonMenuItem.acceleratorForeground #ff8888 HSL 0 100 77 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.acceleratorSelectionForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] +RadioButtonMenuItem.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] +RadioButtonMenuItem.borderPainted true +RadioButtonMenuItem.checkIcon [lazy] 15,15 com.formdev.flatlaf.icons.FlatRadioButtonMenuItemIcon [UI] +RadioButtonMenuItem.disabledForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.font [active] $defaultFont [UI] +RadioButtonMenuItem.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] +RadioButtonMenuItem.opaque false +RadioButtonMenuItem.selectionBackground #00aa00 HSL 120 100 33 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItem.selectionForeground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +RadioButtonMenuItemUI com.formdev.flatlaf.ui.FlatRadioButtonMenuItemUI + + +#---- RadioButton ---- + +RadioButtonUI com.formdev.flatlaf.ui.FlatRadioButtonUI + + +#---- RangeSlider ---- + +RangeSliderUI com.formdev.flatlaf.jideoss.ui.FlatRangeSliderUI + + +#---- Resizable ---- + +Resizable.resizeBorder [lazy] 4,4,4,4 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 + + +#---- RootPane ---- + +RootPane.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +RootPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRootPaneUI$FlatWindowBorder [UI] +RootPane.borderDragThickness 5 +RootPane.cornerDragWidth 16 +RootPane.defaultButtonWindowKeyBindings length=8 [Ljava.lang.Object; + [0] ENTER + [1] press + [2] released ENTER + [3] release + [4] ctrl ENTER + [5] press + [6] ctrl released ENTER + [7] release +RootPane.font [active] $defaultFont [UI] +RootPane.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +RootPane.honorDialogMinimumSizeOnResize true +RootPane.honorFrameMinimumSizeOnResize false +RootPaneUI com.formdev.flatlaf.ui.FlatRootPaneUI + + +#---- ScrollBar ---- + +ScrollBar.allowsAbsolutePositioning true +ScrollBar.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.buttonArrowColor #666666 HSL 0 0 40 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.buttonDisabledArrowColor #ababab HSL 0 0 67 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.hoverThumbColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.hoverThumbWithTrack false +ScrollBar.hoverTrackColor #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.maximumThumbSize 100000,100000 javax.swing.plaf.DimensionUIResource [UI] +ScrollBar.minimumButtonSize 12,12 javax.swing.plaf.DimensionUIResource [UI] +ScrollBar.minimumThumbSize 10,10 javax.swing.plaf.DimensionUIResource [UI] +ScrollBar.pressedThumbWithTrack false +ScrollBar.showButtons false +ScrollBar.squareButtons false +ScrollBar.thumb #73737333 20% HSLA 0 0 45 20 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.thumbArc 0 +ScrollBar.thumbDarkShadow #696969 HSL 0 0 41 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.thumbHighlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.thumbInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +ScrollBar.thumbShadow #a0a0a0 HSL 0 0 63 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.track #88ff88 HSL 120 100 77 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.trackArc 0 +ScrollBar.trackHighlight #696969 HSL 0 0 41 javax.swing.plaf.ColorUIResource [UI] +ScrollBar.trackInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +ScrollBar.width 10 +ScrollBarUI com.formdev.flatlaf.ui.FlatScrollBarUI + + +#---- ScrollPane ---- + +ScrollPane.background #88ff88 HSL 120 100 77 javax.swing.plaf.ColorUIResource [UI] +ScrollPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatBorder [UI] +ScrollPane.fillUpperCorner true +ScrollPane.font [active] $defaultFont [UI] +ScrollPane.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +ScrollPane.smoothScrolling true +ScrollPaneUI com.formdev.flatlaf.ui.FlatScrollPaneUI + + +#---- SearchField ---- + +SearchField.clearIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatClearIcon [UI] +SearchField.clearIconColor [lazy] #7f8b9180 50% HSLA 200 8 53 50 javax.swing.plaf.ColorUIResource [UI] +SearchField.clearIconHoverColor [lazy] #7f8b9180 50% HSLA 200 8 53 50 javax.swing.plaf.ColorUIResource [UI] +SearchField.clearIconPressedColor [lazy] #7f8b91cc 80% HSLA 200 8 53 80 javax.swing.plaf.ColorUIResource [UI] +SearchField.clearPressedIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatClearIcon [UI] +SearchField.clearRolloverIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatClearIcon [UI] +SearchField.icon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchIcon [UI] +SearchField.popupIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchWithHistoryIcon [UI] +SearchField.popupPressedIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchWithHistoryIcon [UI] +SearchField.popupRolloverIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchWithHistoryIcon [UI] +SearchField.pressedIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchIcon [UI] +SearchField.rolloverIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatSearchIcon [UI] +SearchField.searchIconColor [lazy] #7f8b91e6 90% HSLA 200 8 53 90 javax.swing.plaf.ColorUIResource [UI] +SearchField.searchIconHoverColor [lazy] #7f8b91b3 70% HSLA 200 8 53 70 javax.swing.plaf.ColorUIResource [UI] +SearchField.searchIconPressedColor [lazy] #7f8b9180 50% HSLA 200 8 53 50 javax.swing.plaf.ColorUIResource [UI] + + +#---- Separator ---- + +Separator.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +Separator.foreground #00bb00 HSL 120 100 37 javax.swing.plaf.ColorUIResource [UI] +Separator.height 20 +Separator.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Separator.shadow #a0a0a0 HSL 0 0 63 javax.swing.plaf.ColorUIResource [UI] +Separator.stripeIndent 5 +Separator.stripeWidth 10 +SeparatorUI com.formdev.flatlaf.ui.FlatSeparatorUI + + +#---- Slider ---- + +Slider.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +Slider.disabledThumbColor #888800 HSL 60 100 27 javax.swing.plaf.ColorUIResource [UI] +Slider.disabledTrackColor #ffff88 HSL 60 100 77 javax.swing.plaf.ColorUIResource [UI] +Slider.focus #696969 HSL 0 0 41 javax.swing.plaf.ColorUIResource [UI] +Slider.focusInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +Slider.focusWidth 4 +Slider.focusedColor #97c3f3 HSL 211 79 77 javax.swing.plaf.ColorUIResource [UI] +Slider.focusedThumbBorderColor #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +Slider.font [active] $defaultFont [UI] +Slider.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Slider.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Slider.horizontalSize 200,21 java.awt.Dimension +Slider.hoverThumbColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +Slider.hoverTrackColor #4444ff HSL 240 100 63 javax.swing.plaf.ColorUIResource [UI] +Slider.minimumHorizontalSize 36,21 java.awt.Dimension +Slider.minimumVerticalSize 21,36 java.awt.Dimension +Slider.onlyLeftMouseButtonDrag true +Slider.pressedThumbColor #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +Slider.pressedTrackColor #88ff88 HSL 120 100 77 javax.swing.plaf.ColorUIResource [UI] +Slider.shadow #a0a0a0 HSL 0 0 63 javax.swing.plaf.ColorUIResource [UI] +Slider.thumbBorderColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Slider.thumbBorderWidth 1.5 +Slider.thumbColor #ffaaaa HSL 0 100 83 javax.swing.plaf.ColorUIResource [UI] +Slider.thumbSize 12,12 javax.swing.plaf.DimensionUIResource [UI] +Slider.tickColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Slider.trackColor #88ff88 HSL 120 100 77 javax.swing.plaf.ColorUIResource [UI] +Slider.trackWidth 2 +Slider.verticalSize 21,200 java.awt.Dimension +SliderUI com.formdev.flatlaf.ui.FlatSliderUI + + +#---- Spinner ---- + +Spinner.arrowButtonSize 16,5 java.awt.Dimension +Spinner.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Spinner.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRoundBorder [UI] +Spinner.buttonArrowColor #666666 HSL 0 0 40 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonBackground #cccccc HSL 0 0 80 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonDisabledArrowColor #ababab HSL 0 0 67 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonDisabledSeparatorColor #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonHoverArrowColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonPressedArrowColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonSeparatorColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Spinner.buttonStyle button +Spinner.disabledBackground #e0e0e0 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +Spinner.disabledForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +Spinner.editorAlignment 11 +Spinner.editorBorderPainted false +Spinner.focusedBackground #ffff88 HSL 60 100 77 javax.swing.plaf.ColorUIResource [UI] +Spinner.font [active] $defaultFont [UI] +Spinner.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Spinner.padding 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +SpinnerUI com.formdev.flatlaf.ui.FlatSpinnerUI + + +#---- SplitPane ---- + +SplitPane.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +SplitPane.centerOneTouchButtons true +SplitPane.continuousLayout true +SplitPane.darkShadow #696969 HSL 0 0 41 javax.swing.plaf.ColorUIResource [UI] +SplitPane.dividerSize 5 +SplitPane.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +SplitPane.oneTouchButtonOffset [active] 2 +SplitPane.oneTouchButtonSize [active] 6 +SplitPane.shadow #a0a0a0 HSL 0 0 63 javax.swing.plaf.ColorUIResource [UI] + + +#---- SplitPaneDivider ---- + +SplitPaneDivider.draggingColor #880000 HSL 0 100 27 javax.swing.plaf.ColorUIResource [UI] +SplitPaneDivider.gripColor #afafaf HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +SplitPaneDivider.gripDotCount 3 +SplitPaneDivider.gripDotSize 3 +SplitPaneDivider.gripGap 2 +SplitPaneDivider.oneTouchArrowColor #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +SplitPaneDivider.oneTouchHoverArrowColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +SplitPaneDivider.oneTouchPressedArrowColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +SplitPaneDivider.style grip + + +#---- SplitPane ---- + +SplitPaneUI com.formdev.flatlaf.ui.FlatSplitPaneUI + + +#---- TabbedPane ---- + +TabbedPane.arrowType chevron +TabbedPane.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.buttonArc 6 +TabbedPane.buttonHoverBackground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.buttonInsets 2,1,2,1 javax.swing.plaf.InsetsUIResource [UI] +TabbedPane.buttonPressedBackground #ffc800 HSL 47 100 50 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.cardTabSelectionHeight 2 +TabbedPane.closeArc 999 +TabbedPane.closeCrossFilledSize 6.5 +TabbedPane.closeCrossLineWidth 2 +TabbedPane.closeCrossPlainSize 12.0 +TabbedPane.closeForeground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.closeHoverBackground #aa0000 HSL 0 100 33 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.closeHoverForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.closeIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTabbedPaneCloseIcon [UI] +TabbedPane.closePressedBackground #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.closePressedForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.closeSize 16,16 javax.swing.plaf.DimensionUIResource [UI] +TabbedPane.contentAreaColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.contentOpaque true +TabbedPane.contentSeparatorHeight 1 +TabbedPane.darkShadow #696969 HSL 0 0 41 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.disabledForeground #777777 HSL 0 0 47 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.disabledUnderlineColor #7a7a7a HSL 0 0 48 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.focus #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.focusColor #dddddd HSL 0 0 87 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.font [active] $defaultFont [UI] +TabbedPane.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.hasFullBorder false +TabbedPane.hiddenTabsNavigation moreTabsButton +TabbedPane.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.hoverColor #eeeeee HSL 0 0 93 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.labelShift 1 +TabbedPane.light #e3e3e3 HSL 0 0 89 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.scrollButtonsPlacement both +TabbedPane.scrollButtonsPolicy asNeededSingle +TabbedPane.selectedBackground #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.selectedForeground #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.selectedLabelShift -1 +TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +TabbedPane.selectionFollowsFocus true +TabbedPane.shadow #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.showTabSeparators false +TabbedPane.tabAlignment center +TabbedPane.tabAreaAlignment leading +TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] +TabbedPane.tabHeight 32 +TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] +TabbedPane.tabRunOverlay 0 +TabbedPane.tabSelectionHeight 3 +TabbedPane.tabSeparatorColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +TabbedPane.tabSeparatorsFullHeight false +TabbedPane.tabType underlined +TabbedPane.tabWidthMode preferred +TabbedPane.tabsOpaque true +TabbedPane.tabsOverlapBorder false +TabbedPane.tabsPopupPolicy asNeeded +TabbedPane.textIconGap 4 +TabbedPane.underlineColor #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +TabbedPaneUI com.formdev.flatlaf.ui.FlatTabbedPaneUI + + +#---- Table ---- + +Table.ascendingSortIcon [lazy] 10,5 com.formdev.flatlaf.icons.FlatAscendingSortIcon [UI] +Table.background #fffff0 HSL 60 100 97 javax.swing.plaf.ColorUIResource [UI] +Table.cellFocusColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Table.cellMargins 2,3,2,3 javax.swing.plaf.InsetsUIResource [UI] +Table.cellNoFocusBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Default [UI] lineColor=#ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +Table.consistentHomeEndKeyBehavior true +Table.descendingSortIcon [lazy] 10,5 com.formdev.flatlaf.icons.FlatDescendingSortIcon [UI] +Table.dropCellBackground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Table.dropCellForeground #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +Table.dropLineColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +Table.dropLineShortColor #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +Table.focusCellBackground #fffff0 HSL 60 100 97 javax.swing.plaf.ColorUIResource [UI] +Table.focusCellForeground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Table.focusCellHighlightBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Focused [UI] lineColor=#ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +Table.focusSelectedCellHighlightBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Selected [UI] lineColor=#ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +Table.font [active] $defaultFont [UI] +Table.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Table.gridColor #00ffff HSL 180 100 50 javax.swing.plaf.ColorUIResource [UI] +Table.intercellSpacing 0,0 javax.swing.plaf.DimensionUIResource [UI] +Table.rowHeight 25 +Table.scrollPaneBorder [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatBorder [UI] +Table.selectionBackground #00aa00 HSL 120 100 33 javax.swing.plaf.ColorUIResource [UI] +Table.selectionForeground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +Table.selectionInactiveBackground #888888 HSL 0 0 53 javax.swing.plaf.ColorUIResource [UI] +Table.selectionInactiveForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Table.showHorizontalLines false +Table.showTrailingVerticalLine false +Table.showVerticalLines false +Table.sortIconColor #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] + + +#---- TableHeader ---- + +TableHeader.background #4444ff HSL 240 100 63 javax.swing.plaf.ColorUIResource [UI] +TableHeader.bottomSeparatorColor #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +TableHeader.cellBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableHeaderBorder [UI] +TableHeader.cellMargins 2,3,2,3 javax.swing.plaf.InsetsUIResource [UI] +TableHeader.focusCellBackground #4444ff HSL 240 100 63 javax.swing.plaf.ColorUIResource [UI] +TableHeader.font [active] $defaultFont [UI] +TableHeader.foreground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TableHeader.height 25 +TableHeader.separatorColor #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +TableHeader.showTrailingVerticalLine false +TableHeaderUI com.formdev.flatlaf.ui.FlatTableHeaderUI + + +#---- Table ---- + +TableUI com.formdev.flatlaf.ui.FlatTableUI + + +#---- TaskPane ---- + +TaskPane.background #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +TaskPane.borderColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +TaskPane.contentInsets 10,10,10,10 javax.swing.plaf.InsetsUIResource [UI] +TaskPane.specialTitleBackground #00ffff HSL 180 100 50 javax.swing.plaf.ColorUIResource [UI] +TaskPane.specialTitleForeground #444444 HSL 0 0 27 javax.swing.plaf.ColorUIResource [UI] +TaskPane.specialTitleOver #dd0000 HSL 0 100 43 javax.swing.plaf.ColorUIResource [UI] +TaskPane.titleBackgroundGradientStart #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +TaskPane.titleForeground #ff00ff HSL 300 100 50 javax.swing.plaf.ColorUIResource [UI] +TaskPane.titleOver #0000aa HSL 240 100 33 javax.swing.plaf.ColorUIResource [UI] + + +#---- TaskPaneContainer ---- + +TaskPaneContainer.background #ff8888 HSL 0 100 77 javax.swing.plaf.ColorUIResource [UI] +TaskPaneContainer.border [lazy] 10,10,10,10 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] + + +#---- TextArea ---- + +TextArea.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TextArea.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +TextArea.caretBlinkRate 500 +TextArea.caretForeground #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +TextArea.disabledBackground #e0e0e0 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +TextArea.focusedBackground #ffff88 HSL 60 100 77 javax.swing.plaf.ColorUIResource [UI] +TextArea.font [active] $defaultFont [UI] +TextArea.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +TextArea.inactiveBackground #f0f0f0 HSL 0 0 94 javax.swing.plaf.ColorUIResource [UI] +TextArea.inactiveForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +TextArea.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +TextArea.selectionBackground #00aa00 HSL 120 100 33 javax.swing.plaf.ColorUIResource [UI] +TextArea.selectionForeground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +TextAreaUI com.formdev.flatlaf.ui.FlatTextAreaUI + + +#---- TextComponent ---- + +TextComponent.arc 0 +TextComponent.selectAllOnFocusPolicy once +TextComponent.selectAllOnMouseClick false + + +#---- TextField ---- + +TextField.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TextField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] +TextField.caretBlinkRate 500 +TextField.caretForeground #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +TextField.darkShadow #696969 HSL 0 0 41 javax.swing.plaf.ColorUIResource [UI] +TextField.disabledBackground #e0e0e0 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +TextField.focusedBackground #ffff88 HSL 60 100 77 javax.swing.plaf.ColorUIResource [UI] +TextField.font [active] $defaultFont [UI] +TextField.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +TextField.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TextField.iconTextGap 4 +TextField.inactiveBackground #f0f0f0 HSL 0 0 94 javax.swing.plaf.ColorUIResource [UI] +TextField.inactiveForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +TextField.light #e3e3e3 HSL 0 0 89 javax.swing.plaf.ColorUIResource [UI] +TextField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +TextField.placeholderForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +TextField.selectionBackground #00aa00 HSL 120 100 33 javax.swing.plaf.ColorUIResource [UI] +TextField.selectionForeground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +TextField.shadow #a0a0a0 HSL 0 0 63 javax.swing.plaf.ColorUIResource [UI] +TextFieldUI com.formdev.flatlaf.ui.FlatTextFieldUI + + +#---- TextPane ---- + +TextPane.background #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TextPane.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] +TextPane.caretBlinkRate 500 +TextPane.caretForeground #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +TextPane.disabledBackground #e0e0e0 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +TextPane.focusedBackground #ffff88 HSL 60 100 77 javax.swing.plaf.ColorUIResource [UI] +TextPane.font [active] $defaultFont [UI] +TextPane.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +TextPane.inactiveBackground #f0f0f0 HSL 0 0 94 javax.swing.plaf.ColorUIResource [UI] +TextPane.inactiveForeground #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +TextPane.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] +TextPane.selectionBackground #00aa00 HSL 120 100 33 javax.swing.plaf.ColorUIResource [UI] +TextPane.selectionForeground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +TextPaneUI com.formdev.flatlaf.ui.FlatTextPaneUI + + +#---- TitlePane ---- + +TitlePane.background #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +TitlePane.borderColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +TitlePane.buttonMaximizedHeight 22 +TitlePane.buttonSize 44,30 javax.swing.plaf.DimensionUIResource [UI] +TitlePane.centerTitle false +TitlePane.centerTitleIfMenuBarEmbedded true +TitlePane.closeHoverBackground #c42b1c HSL 5 75 44 javax.swing.plaf.ColorUIResource [UI] +TitlePane.closeHoverForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TitlePane.closeIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowCloseIcon [UI] +TitlePane.closePressedBackground #c42b1ce6 90% HSLA 5 75 44 90 javax.swing.plaf.ColorUIResource [UI] +TitlePane.closePressedForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TitlePane.foreground #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +TitlePane.icon [lazy] 16,16 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) +TitlePane.iconMargins 3,8,3,8 javax.swing.plaf.InsetsUIResource [UI] +TitlePane.iconSize 16,16 javax.swing.plaf.DimensionUIResource [UI] +TitlePane.iconifyIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowIconifyIcon [UI] +TitlePane.inactiveBackground #008800 HSL 120 100 27 javax.swing.plaf.ColorUIResource [UI] +TitlePane.inactiveForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +TitlePane.maximizeIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowMaximizeIcon [UI] +TitlePane.menuBarEmbedded true +TitlePane.menuBarTitleGap 20 +TitlePane.noIconLeftGap 8 +TitlePane.restoreIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowRestoreIcon [UI] +TitlePane.showIcon true +TitlePane.titleMargins 3,0,3,0 javax.swing.plaf.InsetsUIResource [UI] +TitlePane.unifiedBackground true +TitlePane.useWindowDecorations true + + +#---- TitledBorder ---- + +TitledBorder.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#ff00ff HSL 300 100 50 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +TitledBorder.font [active] $defaultFont [UI] +TitledBorder.titleColor #ff00ff HSL 300 100 50 javax.swing.plaf.ColorUIResource [UI] + + +#---- TitledPanel ---- + +TitledPanelUI com.formdev.flatlaf.swingx.ui.FlatTitledPanelUI + + +#---- ToggleButton ---- + +ToggleButton.background #ddddff HSL 240 100 93 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatButtonBorder [UI] +ToggleButton.darkShadow #696969 HSL 0 0 41 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.disabledBackground #e0e0e0 HSL 0 0 88 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.disabledSelectedBackground #44dd44 HSL 120 69 57 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.disabledText #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.focusedBackground #00ffff HSL 180 100 50 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.font [active] $defaultFont [UI] +ToggleButton.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.hoverBackground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.iconTextGap 4 +ToggleButton.light #e3e3e3 HSL 0 0 89 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.margin 2,14,2,14 javax.swing.plaf.InsetsUIResource [UI] +ToggleButton.pressedBackground #ffc800 HSL 47 100 50 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.rollover true +ToggleButton.selectedBackground #44ff44 HSL 120 100 63 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.selectedForeground #000000 HSL 0 0 0 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.shadow #a0a0a0 HSL 0 0 63 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.tab.disabledUnderlineColor #7a7a7a HSL 0 0 48 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.tab.focusBackground #dddddd HSL 0 0 87 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.tab.hoverBackground #eeeeee HSL 0 0 93 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.tab.selectedBackground #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.tab.underlineColor #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.tab.underlineHeight 2 +ToggleButton.textIconGap 4 +ToggleButton.textShiftOffset 0 +ToggleButton.toolbar.hoverBackground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.toolbar.pressedBackground #eeeeee HSL 0 0 93 javax.swing.plaf.ColorUIResource [UI] +ToggleButton.toolbar.selectedBackground #dddddd HSL 0 0 87 javax.swing.plaf.ColorUIResource [UI] +ToggleButtonUI com.formdev.flatlaf.ui.FlatToggleButtonUI + + +#---- ToolBar ---- + +ToolBar.arrowKeysOnlyNavigation true +ToolBar.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +ToolBar.border [lazy] 2,2,2,2 false com.formdev.flatlaf.ui.FlatToolBarBorder [UI] +ToolBar.borderMargins 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] +ToolBar.darkShadow #696969 HSL 0 0 41 javax.swing.plaf.ColorUIResource [UI] +ToolBar.dockingBackground #b3ffb3 HSL 120 100 85 javax.swing.plaf.ColorUIResource [UI] +ToolBar.dockingForeground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +ToolBar.floatable false +ToolBar.floatingBackground #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +ToolBar.floatingForeground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +ToolBar.focusableButtons true +ToolBar.font [active] $defaultFont [UI] +ToolBar.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +ToolBar.gripColor #afafaf HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +ToolBar.highlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +ToolBar.isRollover true +ToolBar.light #e3e3e3 HSL 0 0 89 javax.swing.plaf.ColorUIResource [UI] +ToolBar.separatorColor #00bb00 HSL 120 100 37 javax.swing.plaf.ColorUIResource [UI] +ToolBar.separatorWidth 7 +ToolBar.shadow #a0a0a0 HSL 0 0 63 javax.swing.plaf.ColorUIResource [UI] +ToolBar.spacingBorder [lazy] 1,2,1,2 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] + + +#---- ToolBarSeparator ---- + +ToolBarSeparatorUI com.formdev.flatlaf.ui.FlatToolBarSeparatorUI + + +#---- ToolBar ---- + +ToolBarUI com.formdev.flatlaf.ui.FlatToolBarUI + + +#---- ToolTip ---- + +ToolTip.background #eeeeff HSL 240 100 97 javax.swing.plaf.ColorUIResource [UI] +ToolTip.border [lazy] line: #000000 HSL 0 0 0 java.awt.Color 1 false 1,1,1,1 true javax.swing.plaf.BorderUIResource$LineBorderUIResource [UI] +ToolTip.font [active] $defaultFont [UI] +ToolTip.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] + + +#---- ToolTipManager ---- + +ToolTipManager.enableToolTipMode activeApplication + + +#---- ToolTip ---- + +ToolTipUI com.formdev.flatlaf.ui.FlatToolTipUI + + +#---- Tree ---- + +Tree.background #fff0ff HSL 300 100 97 javax.swing.plaf.ColorUIResource [UI] +Tree.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] +Tree.changeSelectionWithFocus true +Tree.closedIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeClosedIcon [UI] +Tree.collapsedIcon [lazy] 11,11 com.formdev.flatlaf.icons.FlatTreeCollapsedIcon [UI] +Tree.drawsFocusBorderAroundIcon false +Tree.dropCellBackground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Tree.dropCellForeground #00ff00 HSL 120 100 50 javax.swing.plaf.ColorUIResource [UI] +Tree.dropLineColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +Tree.editorBorder [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 +Tree.editorBorderSelectionColor #0000ff HSL 240 100 50 javax.swing.plaf.ColorUIResource [UI] +Tree.expandedIcon [lazy] 11,11 com.formdev.flatlaf.icons.FlatTreeExpandedIcon [UI] +Tree.font [active] $defaultFont [UI] +Tree.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Tree.hash #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Tree.icon.closedColor #afafaf HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +Tree.icon.collapsedColor #afafaf HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +Tree.icon.expandedColor #afafaf HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +Tree.icon.leafColor #afafaf HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +Tree.icon.openColor #afafaf HSL 0 0 69 javax.swing.plaf.ColorUIResource [UI] +Tree.leafIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeLeafIcon [UI] +Tree.leftChildIndent 7 +Tree.lineTypeDashed false +Tree.openIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeOpenIcon [UI] +Tree.paintLines true +Tree.rendererFillBackground false +Tree.rendererMargins 1,2,1,2 javax.swing.plaf.InsetsUIResource [UI] +Tree.repaintWholeRow true +Tree.rightChildIndent 11 +Tree.rowHeight 0 +Tree.scrollsOnExpand true +Tree.selectionBackground #00aa00 HSL 120 100 33 javax.swing.plaf.ColorUIResource [UI] +Tree.selectionBorderColor #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Tree.selectionForeground #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +Tree.selectionInactiveBackground #888888 HSL 0 0 53 javax.swing.plaf.ColorUIResource [UI] +Tree.selectionInactiveForeground #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +Tree.showCellFocusIndicator false +Tree.textBackground #fff0ff HSL 300 100 97 javax.swing.plaf.ColorUIResource [UI] +Tree.textForeground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +Tree.timeFactor 1000 +Tree.wideSelection true +TreeUI com.formdev.flatlaf.ui.FlatTreeUI + + +#---- TristateCheckBox ---- + +TristateCheckBox.clearMixed.clientProperty length=2 [Ljava.lang.Object; + [0] JButton.selectedState + [1] null +TristateCheckBox.setMixed.clientProperty length=2 [Ljava.lang.Object; + [0] JButton.selectedState + [1] indeterminate + + +#---- Viewport ---- + +Viewport.background #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +Viewport.font [active] $defaultFont [UI] +Viewport.foreground #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +ViewportUI com.formdev.flatlaf.ui.FlatViewportUI + + +#---- [style] ---- + +[style].h00 font: $h00.font +[style].h0 font: $h0.font +[style].h1.regular font: $h1.regular.font +[style].h1 font: $h1.font +[style].h2.regular font: $h2.regular.font +[style].h2 font: $h2.font +[style].h3.regular font: $h3.regular.font +[style].h3 font: $h3.font +[style].h4 font: $h4.font +[style].large font: $large.font +[style].light font: $light.font +[style].medium font: $medium.font +[style].mini font: $mini.font +[style].monospaced font: $monospaced.font +[style].semibold font: $semibold.font +[style].small font: $small.font + + +#---- [style]Button ---- + +[style]Button.clearButton icon: com.formdev.flatlaf.icons.FlatClearIcon; focusable: false; toolbar.margin: 1,1,1,1; toolbar.spacingInsets: 1,1,1,1; toolbar.hoverBackground: null; toolbar.pressedBackground: null +[style]Button.inTextField focusable: false; toolbar.margin: 1,1,1,1; toolbar.spacingInsets: 1,1,1,1 + + +#---- [style]ToggleButton ---- + +[style]ToggleButton.inTextField focusable: false; toolbar.margin: 1,1,1,1; toolbar.spacingInsets: 1,1,1,1 + + +#---- [style]ToolBar ---- + +[style]ToolBar.inTextField floatable: false; opaque: false; borderMargins: 0,0,0,0 + + +#---- [style]ToolBarSeparator ---- + +[style]ToolBarSeparator.inTextField separatorWidth: 3 + + +#---- ---- + +activeCaption #99b4d1 HSL 211 38 71 javax.swing.plaf.ColorUIResource [UI] +activeCaptionBorder #99b4d1 HSL 211 38 71 javax.swing.plaf.ColorUIResource [UI] +activeCaptionText #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +control #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +controlDkShadow #696969 HSL 0 0 41 javax.swing.plaf.ColorUIResource [UI] +controlHighlight #e3e3e3 HSL 0 0 89 javax.swing.plaf.ColorUIResource [UI] +controlLtHighlight #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +controlShadow #a0a0a0 HSL 0 0 63 javax.swing.plaf.ColorUIResource [UI] +controlText #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +defaultFont Segoe UI plain 12 javax.swing.plaf.FontUIResource [UI] +desktop #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] + + +#---- h0 ---- + +h0.font [active] Segoe UI plain 30 javax.swing.plaf.FontUIResource [UI] + + +#---- h00 ---- + +h00.font [active] Segoe UI plain 36 javax.swing.plaf.FontUIResource [UI] + + +#---- h1 ---- + +h1.font [active] Segoe UI Semibold plain 24 javax.swing.plaf.FontUIResource [UI] +h1.regular.font [active] Segoe UI plain 24 javax.swing.plaf.FontUIResource [UI] + + +#---- h2 ---- + +h2.font [active] Segoe UI Semibold plain 18 javax.swing.plaf.FontUIResource [UI] +h2.regular.font [active] Segoe UI plain 18 javax.swing.plaf.FontUIResource [UI] + + +#---- h3 ---- + +h3.font [active] Segoe UI Semibold plain 15 javax.swing.plaf.FontUIResource [UI] +h3.regular.font [active] Segoe UI plain 15 javax.swing.plaf.FontUIResource [UI] + + +#---- h4 ---- + +h4.font [active] Segoe UI bold 12 javax.swing.plaf.FontUIResource [UI] + + +#---- html ---- + +html.missingImage [lazy] 38,38 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) +html.pendingImage [lazy] 38,38 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) + + +#---- ---- + +inactiveCaption #bfcddb HSL 210 28 80 javax.swing.plaf.ColorUIResource [UI] +inactiveCaptionBorder #bfcddb HSL 210 28 80 javax.swing.plaf.ColorUIResource [UI] +inactiveCaptionText #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +info #eeeeff HSL 240 100 97 javax.swing.plaf.ColorUIResource [UI] +infoText #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] + + +#---- laf ---- + +laf.dark false +laf.scaleFactor [active] 1.0 + + +#---- large ---- + +large.font [active] Segoe UI plain 14 javax.swing.plaf.FontUIResource [UI] + + +#---- light ---- + +light.font [active] Segoe UI Light plain 12 javax.swing.plaf.FontUIResource [UI] + + +#---- medium ---- + +medium.font [active] Segoe UI plain 11 javax.swing.plaf.FontUIResource [UI] + + +#---- ---- + +menu #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +menuText #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] + + +#---- mini ---- + +mini.font [active] Segoe UI plain 9 javax.swing.plaf.FontUIResource [UI] + + +#---- monospaced ---- + +monospaced.font [active] Consolas plain 12 javax.swing.plaf.FontUIResource [UI] + + +#---- ---- + +scrollbar #88ff88 HSL 120 100 77 javax.swing.plaf.ColorUIResource [UI] + + +#---- semibold ---- + +semibold.font [active] Segoe UI Semibold plain 12 javax.swing.plaf.FontUIResource [UI] + + +#---- small ---- + +small.font [active] Segoe UI plain 10 javax.swing.plaf.FontUIResource [UI] + + +#---- swingx/TaskPane ---- + +swingx/TaskPaneUI com.formdev.flatlaf.swingx.ui.FlatTaskPaneUI + + +#---- ---- + +text #ffffff HSL 0 0 100 javax.swing.plaf.ColorUIResource [UI] +textHighlight #00aa00 HSL 120 100 33 javax.swing.plaf.ColorUIResource [UI] +textHighlightText #ffff00 HSL 60 100 50 javax.swing.plaf.ColorUIResource [UI] +textInactiveText #000088 HSL 240 100 27 javax.swing.plaf.ColorUIResource [UI] +textText #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +window #ccffcc HSL 120 100 90 javax.swing.plaf.ColorUIResource [UI] +windowBorder #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] +windowText #ff0000 HSL 0 100 50 javax.swing.plaf.ColorUIResource [UI] diff --git a/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0_202.txt b/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0_202.txt deleted file mode 100644 index 0ab6c35f..00000000 --- a/flatlaf-testing/dumps/uidefaults/FlatTestLaf_1.8.0_202.txt +++ /dev/null @@ -1,1417 +0,0 @@ -Class com.formdev.flatlaf.testing.FlatTestLaf -ID FlatLaf - Flat Test -Name Flat Test -Java 1.8.0_202 -OS Windows 10 - - -#---- ---- - -AATextInfoPropertyKey [unknown type] sun.swing.SwingUtilities2$AATextInfo - - -#---- Actions ---- - -Actions.Blue #389fd6 javax.swing.plaf.ColorUIResource [UI] -Actions.Green #59a869 javax.swing.plaf.ColorUIResource [UI] -Actions.Grey #6e6e6e javax.swing.plaf.ColorUIResource [UI] -Actions.GreyInline #7f8b91 javax.swing.plaf.ColorUIResource [UI] -Actions.Red #db5860 javax.swing.plaf.ColorUIResource [UI] -Actions.Yellow #eda200 javax.swing.plaf.ColorUIResource [UI] - - -#---- AuditoryCues ---- - -AuditoryCues.allAuditoryCues length=13 [Ljava.lang.Object; - [0] CheckBoxMenuItem.commandSound - [1] InternalFrame.closeSound - [2] InternalFrame.maximizeSound - [3] InternalFrame.minimizeSound - [4] InternalFrame.restoreDownSound - [5] InternalFrame.restoreUpSound - [6] MenuItem.commandSound - [7] OptionPane.errorSound - [8] OptionPane.informationSound - [9] OptionPane.questionSound - [10] OptionPane.warningSound - [11] PopupMenu.popupSound - [12] RadioButtonMenuItem.commandSound -AuditoryCues.cueList length=13 [Ljava.lang.Object; - [0] CheckBoxMenuItem.commandSound - [1] InternalFrame.closeSound - [2] InternalFrame.maximizeSound - [3] InternalFrame.minimizeSound - [4] InternalFrame.restoreDownSound - [5] InternalFrame.restoreUpSound - [6] MenuItem.commandSound - [7] OptionPane.errorSound - [8] OptionPane.informationSound - [9] OptionPane.questionSound - [10] OptionPane.warningSound - [11] PopupMenu.popupSound - [12] RadioButtonMenuItem.commandSound -AuditoryCues.noAuditoryCues length=1 [Ljava.lang.Object; - [0] mute - - -#---- BusyLabel ---- - -BusyLabelUI com.formdev.flatlaf.swingx.ui.FlatBusyLabelUI - - -#---- Button ---- - -Button.arc 6 -Button.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -Button.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatButtonBorder [UI] -Button.borderColor #00ff00 javax.swing.plaf.ColorUIResource [UI] -Button.borderWidth 1 -Button.darkShadow #696969 javax.swing.plaf.ColorUIResource [UI] -Button.default.borderWidth 1 -Button.default.endBackground #888888 javax.swing.plaf.ColorUIResource [UI] -Button.default.endBorderColor #0000ff javax.swing.plaf.ColorUIResource [UI] -Button.default.focusColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -Button.default.focusedBackground #00ffff javax.swing.plaf.ColorUIResource [UI] -Button.default.focusedBorderColor #537699 javax.swing.plaf.ColorUIResource [UI] -Button.default.foreground #880000 javax.swing.plaf.ColorUIResource [UI] -Button.default.hoverBackground #ffff00 javax.swing.plaf.ColorUIResource [UI] -Button.default.hoverBorderColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -Button.default.pressedBackground #ffc800 javax.swing.plaf.ColorUIResource [UI] -Button.default.startBackground #dddddd javax.swing.plaf.ColorUIResource [UI] -Button.default.startBorderColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -Button.defaultButtonFollowsFocus false -Button.disabledBackground #e0e0e0 javax.swing.plaf.ColorUIResource [UI] -Button.disabledBorderColor #000088 javax.swing.plaf.ColorUIResource [UI] -Button.disabledForeground #000088 javax.swing.plaf.ColorUIResource [UI] -Button.disabledText #000088 javax.swing.plaf.ColorUIResource [UI] -Button.endBackground #bbbbbb javax.swing.plaf.ColorUIResource [UI] -Button.endBorderColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -Button.focusedBackground #00ffff javax.swing.plaf.ColorUIResource [UI] -Button.focusedBorderColor #466d94 javax.swing.plaf.ColorUIResource [UI] -Button.font [active] $defaultFont [UI] -Button.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -Button.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -Button.hoverBackground #ffff00 javax.swing.plaf.ColorUIResource [UI] -Button.hoverBorderColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -Button.iconTextGap 4 -Button.innerFocusWidth 1 -Button.light #e3e3e3 javax.swing.plaf.ColorUIResource [UI] -Button.margin 2,14,2,14 javax.swing.plaf.InsetsUIResource [UI] -Button.minimumWidth 72 -Button.pressedBackground #ffc800 javax.swing.plaf.ColorUIResource [UI] -Button.rollover true -Button.selectedBackground #ffbbbb javax.swing.plaf.ColorUIResource [UI] -Button.shadow #a0a0a0 javax.swing.plaf.ColorUIResource [UI] -Button.startBackground #ffffff javax.swing.plaf.ColorUIResource [UI] -Button.startBorderColor #0000ff javax.swing.plaf.ColorUIResource [UI] -Button.textIconGap 4 -Button.textShiftOffset 0 -Button.toolbar.hoverBackground #ffffff javax.swing.plaf.ColorUIResource [UI] -Button.toolbar.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] -Button.toolbar.pressedBackground #eeeeee javax.swing.plaf.ColorUIResource [UI] -Button.toolbar.selectedBackground #dddddd javax.swing.plaf.ColorUIResource [UI] -Button.toolbar.spacingInsets 1,2,1,2 javax.swing.plaf.InsetsUIResource [UI] -ButtonUI com.formdev.flatlaf.ui.FlatButtonUI - - -#---- Caret ---- - -Caret.width [active] 1 - - -#---- CheckBox ---- - -CheckBox.arc 4 -CheckBox.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -CheckBox.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -CheckBox.disabledText #000088 javax.swing.plaf.ColorUIResource [UI] -CheckBox.font [active] $defaultFont [UI] -CheckBox.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.background #ffffff javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.borderColor #878787 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.checkmarkColor #ffffff javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.disabledBorderColor #bdbdbd javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.disabledCheckmarkColor #ababab javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.focusedBackground #00ffff javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.focusedBorderColor #7b9fc7 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.hoverBackground #ffff00 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.hoverBorderColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.pressedBackground #ffc800 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.selectedBackground #4d89c9 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.selectedBorderColor #4982cc javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon.selectedFocusedBorderColor #accff7 javax.swing.plaf.ColorUIResource [UI] -CheckBox.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxIcon [UI] -CheckBox.iconTextGap 4 -CheckBox.margin 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] -CheckBox.rollover true -CheckBox.textIconGap 4 -CheckBox.textShiftOffset 0 - - -#---- CheckBoxMenuItem ---- - -CheckBoxMenuItem.acceleratorFont [active] $defaultFont [UI] -CheckBoxMenuItem.acceleratorForeground #ff8888 javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.acceleratorSelectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] -CheckBoxMenuItem.background #ffffff javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] -CheckBoxMenuItem.borderPainted true -CheckBoxMenuItem.checkIcon [lazy] 15,15 com.formdev.flatlaf.icons.FlatCheckBoxMenuItemIcon [UI] -CheckBoxMenuItem.disabledForeground #000088 javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.font [active] $defaultFont [UI] -CheckBoxMenuItem.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] -CheckBoxMenuItem.opaque false -CheckBoxMenuItem.selectionBackground #00aa00 javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItem.selectionForeground #ffff00 javax.swing.plaf.ColorUIResource [UI] -CheckBoxMenuItemUI com.formdev.flatlaf.ui.FlatCheckBoxMenuItemUI - - -#---- CheckBox ---- - -CheckBoxUI com.formdev.flatlaf.ui.FlatCheckBoxUI - - -#---- ColorChooser ---- - -ColorChooser.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -ColorChooser.font [active] $defaultFont [UI] -ColorChooser.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -ColorChooser.swatchesDefaultRecentColor #ccffcc javax.swing.plaf.ColorUIResource [UI] -ColorChooser.swatchesRecentSwatchSize [active] 16,16 javax.swing.plaf.DimensionUIResource [UI] -ColorChooser.swatchesSwatchSize [active] 16,16 javax.swing.plaf.DimensionUIResource [UI] -ColorChooserUI com.formdev.flatlaf.ui.FlatColorChooserUI - - -#---- ComboBox ---- - -ComboBox.background #ffffff javax.swing.plaf.ColorUIResource [UI] -ComboBox.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRoundBorder [UI] -ComboBox.buttonArrowColor #666666 javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonBackground #f0f0f0 javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonDarkShadow #696969 javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonDisabledArrowColor #ababab javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonEditableBackground #cccccc javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonHighlight #ffffff javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonHoverArrowColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonPressedArrowColor #0000ff javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonShadow #a0a0a0 javax.swing.plaf.ColorUIResource [UI] -ComboBox.buttonStyle auto -ComboBox.disabledBackground #e0e0e0 javax.swing.plaf.ColorUIResource [UI] -ComboBox.disabledForeground #000088 javax.swing.plaf.ColorUIResource [UI] -ComboBox.editorColumns 0 -ComboBox.font [active] $defaultFont [UI] -ComboBox.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -ComboBox.isEnterSelectablePopup false -ComboBox.maximumRowCount 15 -ComboBox.minimumWidth 72 -ComboBox.noActionOnKeyNavigation false -ComboBox.padding 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -ComboBox.selectionBackground #00aa00 javax.swing.plaf.ColorUIResource [UI] -ComboBox.selectionForeground #ffff00 javax.swing.plaf.ColorUIResource [UI] -ComboBox.timeFactor 1000 -ComboBoxUI com.formdev.flatlaf.ui.FlatComboBoxUI - - -#---- Component ---- - -Component.arc 5 -Component.arrowType chevron -Component.borderColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -Component.disabledBorderColor #000088 javax.swing.plaf.ColorUIResource [UI] -Component.focusColor #97c3f3 javax.swing.plaf.ColorUIResource [UI] -Component.focusWidth 0 -Component.focusedBorderColor #466d94 javax.swing.plaf.ColorUIResource [UI] -Component.grayFilter [lazy] [unknown type] com.formdev.flatlaf.util.GrayFilter -Component.hideMnemonics true -Component.innerFocusWidth 0.5 -Component.innerOutlineWidth 1.0 -Component.minimumWidth 64 - - -#---- DatePicker ---- - -DatePickerUI com.formdev.flatlaf.swingx.ui.FlatDatePickerUI - - -#---- Desktop ---- - -Desktop.background #aaffee javax.swing.plaf.ColorUIResource [UI] -Desktop.minOnScreenInsets 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] - - -#---- DesktopIcon ---- - -DesktopIcon.background #44ffda javax.swing.plaf.ColorUIResource [UI] -DesktopIcon.border [lazy] 4,4,4,4 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -DesktopIcon.closeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameCloseIcon [UI] -DesktopIcon.closeSize 20,20 javax.swing.plaf.DimensionUIResource [UI] -DesktopIcon.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -DesktopIcon.iconSize 64,64 javax.swing.plaf.DimensionUIResource [UI] -DesktopIconUI com.formdev.flatlaf.ui.FlatDesktopIconUI - - -#---- DesktopPane ---- - -DesktopPaneUI com.formdev.flatlaf.ui.FlatDesktopPaneUI - - -#---- EditorPane ---- - -EditorPane.background #ffffff javax.swing.plaf.ColorUIResource [UI] -EditorPane.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -EditorPane.caretBlinkRate 500 -EditorPane.caretForeground #0000ff javax.swing.plaf.ColorUIResource [UI] -EditorPane.disabledBackground #e0e0e0 javax.swing.plaf.ColorUIResource [UI] -EditorPane.font [active] $defaultFont [UI] -EditorPane.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -EditorPane.inactiveBackground #f0f0f0 javax.swing.plaf.ColorUIResource [UI] -EditorPane.inactiveForeground #000088 javax.swing.plaf.ColorUIResource [UI] -EditorPane.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -EditorPane.selectionBackground #00aa00 javax.swing.plaf.ColorUIResource [UI] -EditorPane.selectionForeground #ffff00 javax.swing.plaf.ColorUIResource [UI] -EditorPaneUI com.formdev.flatlaf.ui.FlatEditorPaneUI - - -#---- FileChooser ---- - -FileChooser.detailsViewIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserDetailsViewIcon [UI] -FileChooser.homeFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserHomeFolderIcon [UI] -FileChooser.listViewIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserListViewIcon [UI] -FileChooser.newFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserNewFolderIcon [UI] -FileChooser.readOnly false -FileChooser.upFolderIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileChooserUpFolderIcon [UI] -FileChooser.useSystemExtensionHiding true -FileChooser.usesSingleFilePane true -FileChooserUI com.formdev.flatlaf.ui.FlatFileChooserUI - - -#---- FileView ---- - -FileView.computerIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewComputerIcon [UI] -FileView.directoryIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewDirectoryIcon [UI] -FileView.fileIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewFileIcon [UI] -FileView.floppyDriveIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewFloppyDriveIcon [UI] -FileView.hardDriveIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatFileViewHardDriveIcon [UI] - - -#---- FormattedTextField ---- - -FormattedTextField.background #ffffff javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] -FormattedTextField.caretBlinkRate 500 -FormattedTextField.caretForeground #0000ff javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.disabledBackground #e0e0e0 javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.font [active] $defaultFont [UI] -FormattedTextField.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.inactiveBackground #f0f0f0 javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.inactiveForeground #000088 javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -FormattedTextField.placeholderForeground #000088 javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.selectionBackground #00aa00 javax.swing.plaf.ColorUIResource [UI] -FormattedTextField.selectionForeground #ffff00 javax.swing.plaf.ColorUIResource [UI] -FormattedTextFieldUI com.formdev.flatlaf.ui.FlatFormattedTextFieldUI - - -#---- Header ---- - -HeaderUI com.formdev.flatlaf.swingx.ui.FlatHeaderUI - - -#---- HelpButton ---- - -HelpButton.background #ffffff javax.swing.plaf.ColorUIResource [UI] -HelpButton.borderColor #878787 javax.swing.plaf.ColorUIResource [UI] -HelpButton.borderWidth 1 -HelpButton.disabledBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] -HelpButton.disabledBorderColor #bdbdbd javax.swing.plaf.ColorUIResource [UI] -HelpButton.disabledQuestionMarkColor #ababab javax.swing.plaf.ColorUIResource [UI] -HelpButton.focusedBackground #00ffff javax.swing.plaf.ColorUIResource [UI] -HelpButton.focusedBorderColor #7b9fc7 javax.swing.plaf.ColorUIResource [UI] -HelpButton.hoverBackground #ffff00 javax.swing.plaf.ColorUIResource [UI] -HelpButton.hoverBorderColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -HelpButton.icon [lazy] 22,22 com.formdev.flatlaf.icons.FlatHelpButtonIcon [UI] -HelpButton.innerFocusWidth 1 -HelpButton.pressedBackground #ffc800 javax.swing.plaf.ColorUIResource [UI] -HelpButton.questionMarkColor #0000ff javax.swing.plaf.ColorUIResource [UI] - - -#---- Hyperlink ---- - -Hyperlink.disabledText #000088 javax.swing.plaf.ColorUIResource [UI] -Hyperlink.linkColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -Hyperlink.visitedColor #0000ff javax.swing.plaf.ColorUIResource [UI] -HyperlinkUI com.formdev.flatlaf.swingx.ui.FlatHyperlinkUI - - -#---- InternalFrame ---- - -InternalFrame.activeBorderColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.activeDropShadowInsets 5,5,6,6 javax.swing.plaf.InsetsUIResource [UI] -InternalFrame.activeTitleBackground #880000 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.activeTitleForeground #ffaaaa javax.swing.plaf.ColorUIResource [UI] -InternalFrame.border [lazy] 6,6,6,6 false com.formdev.flatlaf.ui.FlatInternalFrameUI$FlatInternalFrameBorder [UI] -InternalFrame.borderColor #ccffcc javax.swing.plaf.ColorUIResource [UI] -InternalFrame.borderDarkShadow #696969 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.borderHighlight #ffffff javax.swing.plaf.ColorUIResource [UI] -InternalFrame.borderLight #e3e3e3 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.borderLineWidth 1 -InternalFrame.borderMargins 6,6,6,6 javax.swing.plaf.InsetsUIResource [UI] -InternalFrame.borderShadow #a0a0a0 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.buttonHoverBackground #006600 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.buttonPressedBackground #00aa00 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.buttonSize 24,24 javax.swing.plaf.DimensionUIResource [UI] -InternalFrame.closeHoverBackground #000088 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.closeHoverForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -InternalFrame.closeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameCloseIcon [UI] -InternalFrame.closePressedBackground #0000ff javax.swing.plaf.ColorUIResource [UI] -InternalFrame.closePressedForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -InternalFrame.dropShadowPainted true -InternalFrame.icon [lazy] 16,16 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) -InternalFrame.iconifyIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameIconifyIcon [UI] -InternalFrame.inactiveBorderColor #00ff00 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.inactiveDropShadowInsets 3,3,4,4 javax.swing.plaf.InsetsUIResource [UI] -InternalFrame.inactiveTitleBackground #008800 javax.swing.plaf.ColorUIResource [UI] -InternalFrame.inactiveTitleForeground #aaffaa javax.swing.plaf.ColorUIResource [UI] -InternalFrame.maximizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameMaximizeIcon [UI] -InternalFrame.minimizeIcon [lazy] 24,24 com.formdev.flatlaf.icons.FlatInternalFrameRestoreIcon [UI] -InternalFrame.titleFont [active] $defaultFont [UI] - - -#---- InternalFrameTitlePane ---- - -InternalFrameTitlePane.border [lazy] 0,8,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -InternalFrameTitlePane.closeButtonOpacity true -InternalFrameTitlePane.iconifyButtonOpacity true -InternalFrameTitlePane.maximizeButtonOpacity true - - -#---- InternalFrame ---- - -InternalFrameUI com.formdev.flatlaf.ui.FlatInternalFrameUI - - -#---- JXBusyLabel ---- - -JXBusyLabel.baseColor #00ff00 javax.swing.plaf.ColorUIResource [UI] -JXBusyLabel.highlightColor #ff0000 javax.swing.plaf.ColorUIResource [UI] - - -#---- JXDatePicker ---- - -JXDatePicker.border [lazy] 1,1,1,1 false com.formdev.flatlaf.swingx.ui.FlatDatePickerBorder [UI] - - -#---- JXHeader ---- - -JXHeader.background #ff8888 javax.swing.plaf.ColorUIResource [UI] -JXHeader.descriptionForeground #ff0000 javax.swing.plaf.ColorUIResource [UI] -JXHeader.startBackground #ffcccc javax.swing.plaf.ColorUIResource [UI] -JXHeader.titleForeground #0000ff javax.swing.plaf.ColorUIResource [UI] - - -#---- JXMonthView ---- - -JXMonthView.arrowColor #0000ff javax.swing.plaf.ColorUIResource [UI] -JXMonthView.background #ffffff javax.swing.plaf.ColorUIResource [UI] -JXMonthView.daysOfTheWeekForeground #00ff00 javax.swing.plaf.ColorUIResource [UI] -JXMonthView.disabledArrowColor #ababab javax.swing.plaf.ColorUIResource [UI] -JXMonthView.flaggedDayForeground #00ffff javax.swing.plaf.ColorUIResource [UI] -JXMonthView.leadingDayForeground #c0c0c0 javax.swing.plaf.ColorUIResource [UI] -JXMonthView.monthDownFileName [lazy] 20,20 com.formdev.flatlaf.swingx.ui.FlatMonthDownIcon [UI] -JXMonthView.monthStringBackground #00ff00 javax.swing.plaf.ColorUIResource [UI] -JXMonthView.monthStringForeground #0000ff javax.swing.plaf.ColorUIResource [UI] -JXMonthView.monthUpFileName [lazy] 20,20 com.formdev.flatlaf.swingx.ui.FlatMonthUpIcon [UI] -JXMonthView.selectedBackground #aaffaa javax.swing.plaf.ColorUIResource [UI] -JXMonthView.trailingDayForeground #c0c0c0 javax.swing.plaf.ColorUIResource [UI] -JXMonthView.unselectableDayForeground #0000ff javax.swing.plaf.ColorUIResource [UI] -JXMonthView.weekOfTheYearForeground #0000ff javax.swing.plaf.ColorUIResource [UI] - - -#---- JXTitledPanel ---- - -JXTitledPanel.borderColor #0000ff javax.swing.plaf.ColorUIResource [UI] -JXTitledPanel.captionInsets 4,10,4,10 javax.swing.plaf.InsetsUIResource [UI] -JXTitledPanel.titleBackground #ffff00 javax.swing.plaf.ColorUIResource [UI] -JXTitledPanel.titleForeground #ff00ff javax.swing.plaf.ColorUIResource [UI] - - -#---- JideButton ---- - -JideButton.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -JideButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -JideButton.borderColor #00ff00 javax.swing.plaf.ColorUIResource [UI] -JideButton.darkShadow #00ff00 javax.swing.plaf.ColorUIResource [UI] -JideButton.focusedBackground #ffffff javax.swing.plaf.ColorUIResource [UI] -JideButton.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -JideButton.highlight #ffbbbb javax.swing.plaf.ColorUIResource [UI] -JideButton.light #00ff00 javax.swing.plaf.ColorUIResource [UI] -JideButton.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] -JideButton.selectedAndFocusedBackground #eeeeee javax.swing.plaf.ColorUIResource [UI] -JideButton.selectedBackground #dddddd javax.swing.plaf.ColorUIResource [UI] -JideButton.shadow #00ff00 javax.swing.plaf.ColorUIResource [UI] -JideButton.textIconGap [active] 4 -JideButtonUI com.formdev.flatlaf.jideoss.ui.FlatJideButtonUI - - -#---- JideLabel ---- - -JideLabel.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -JideLabel.disabledForeground #000088 javax.swing.plaf.ColorUIResource [UI] -JideLabel.foreground #008800 javax.swing.plaf.ColorUIResource [UI] -JideLabelUI com.formdev.flatlaf.jideoss.ui.FlatJideLabelUI - - -#---- JidePopupMenu ---- - -JidePopupMenuUI com.formdev.flatlaf.jideoss.ui.FlatJidePopupMenuUI - - -#---- JideSplitButton ---- - -JideSplitButton.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -JideSplitButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -JideSplitButton.buttonArrowColor #666666 javax.swing.plaf.ColorUIResource [UI] -JideSplitButton.buttonDisabledArrowColor #ababab javax.swing.plaf.ColorUIResource [UI] -JideSplitButton.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -JideSplitButton.margin 3,3,3,3 javax.swing.plaf.InsetsUIResource [UI] -JideSplitButton.selectionForeground #ff0000 javax.swing.plaf.ColorUIResource [UI] -JideSplitButton.textIconGap [active] 4 -JideSplitButtonUI com.formdev.flatlaf.jideoss.ui.FlatJideSplitButtonUI - - -#---- JideTabbedPane ---- - -JideTabbedPane.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -JideTabbedPane.closeButtonLeftMargin 0 -JideTabbedPane.closeButtonRightMargin 0 -JideTabbedPane.contentBorderInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -JideTabbedPane.fitStyleBoundSize 0 -JideTabbedPane.fitStyleFirstTabMargin 0 -JideTabbedPane.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -JideTabbedPane.shadow #ccffcc javax.swing.plaf.ColorUIResource [UI] -JideTabbedPane.tabAreaBackground #ccffcc javax.swing.plaf.ColorUIResource [UI] -JideTabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -JideTabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] -JideTabbedPane.tabRunOverlay 0 -JideTabbedPaneUI com.formdev.flatlaf.jideoss.ui.FlatJideTabbedPaneUI - - -#---- Label ---- - -Label.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -Label.disabledForeground #000088 javax.swing.plaf.ColorUIResource [UI] -Label.disabledShadow #a0a0a0 javax.swing.plaf.ColorUIResource [UI] -Label.font [active] $defaultFont [UI] -Label.foreground #008800 javax.swing.plaf.ColorUIResource [UI] -LabelUI com.formdev.flatlaf.ui.FlatLabelUI - - -#---- List ---- - -List.background #f0ffff javax.swing.plaf.ColorUIResource [UI] -List.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -List.cellFocusColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -List.cellMargins 1,6,1,6 javax.swing.plaf.InsetsUIResource [UI] -List.cellNoFocusBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -List.cellRenderer [active] javax.swing.DefaultListCellRenderer$UIResource [UI] -List.dropCellBackground #ff0000 javax.swing.plaf.ColorUIResource [UI] -List.dropCellForeground #00ff00 javax.swing.plaf.ColorUIResource [UI] -List.dropLineColor #0000ff javax.swing.plaf.ColorUIResource [UI] -List.focusCellHighlightBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#880000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -List.focusSelectedCellHighlightBorder [lazy] 1,6,1,6 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#880000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -List.font [active] $defaultFont [UI] -List.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -List.noFocusBorder 1,1,1,1 false javax.swing.plaf.BorderUIResource$EmptyBorderUIResource [UI] -List.selectionBackground #00aa00 javax.swing.plaf.ColorUIResource [UI] -List.selectionForeground #ffff00 javax.swing.plaf.ColorUIResource [UI] -List.selectionInactiveBackground #888888 javax.swing.plaf.ColorUIResource [UI] -List.selectionInactiveForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -List.showCellFocusIndicator false -List.timeFactor 1000 -ListUI com.formdev.flatlaf.ui.FlatListUI - - -#---- Menu ---- - -Menu.acceleratorFont [active] $defaultFont [UI] -Menu.acceleratorForeground #ff8888 javax.swing.plaf.ColorUIResource [UI] -Menu.acceleratorSelectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -Menu.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuArrowIcon [UI] -Menu.background #ffffff javax.swing.plaf.ColorUIResource [UI] -Menu.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] -Menu.borderPainted true -Menu.cancelMode hideLastSubmenu -Menu.crossMenuMnemonic true -Menu.disabledForeground #000088 javax.swing.plaf.ColorUIResource [UI] -Menu.font [active] $defaultFont [UI] -Menu.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -Menu.icon.arrowColor #4d89c9 javax.swing.plaf.ColorUIResource [UI] -Menu.icon.disabledArrowColor #ababab javax.swing.plaf.ColorUIResource [UI] -Menu.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] -Menu.menuPopupOffsetX 0 -Menu.menuPopupOffsetY 0 -Menu.opaque false -Menu.preserveTopLevelSelection false -Menu.selectionBackground #00aa00 javax.swing.plaf.ColorUIResource [UI] -Menu.selectionForeground #ffff00 javax.swing.plaf.ColorUIResource [UI] -Menu.shortcutKeys length=1 [I - [0] 8 -Menu.submenuPopupOffsetX [active] -4 -Menu.submenuPopupOffsetY [active] -4 - - -#---- MenuBar ---- - -MenuBar.background #ffffff javax.swing.plaf.ColorUIResource [UI] -MenuBar.border [lazy] 0,0,1,0 false com.formdev.flatlaf.ui.FlatMenuBarBorder [UI] -MenuBar.borderColor #4444ff javax.swing.plaf.ColorUIResource [UI] -MenuBar.font [active] $defaultFont [UI] -MenuBar.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -MenuBar.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -MenuBar.hoverBackground #ffdddd javax.swing.plaf.ColorUIResource [UI] -MenuBar.itemMargins 3,8,3,8 javax.swing.plaf.InsetsUIResource [UI] -MenuBar.shadow #a0a0a0 javax.swing.plaf.ColorUIResource [UI] -MenuBar.underlineSelectionBackground #00ff00 javax.swing.plaf.ColorUIResource [UI] -MenuBar.underlineSelectionColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -MenuBar.underlineSelectionHeight 5 -MenuBar.windowBindings length=2 [Ljava.lang.Object; - [0] F10 - [1] takeFocus -MenuBarUI com.formdev.flatlaf.ui.FlatMenuBarUI - - -#---- MenuItem ---- - -MenuItem.acceleratorArrowGap 2 -MenuItem.acceleratorDelimiter - -MenuItem.acceleratorFont [active] $defaultFont [UI] -MenuItem.acceleratorForeground #ff8888 javax.swing.plaf.ColorUIResource [UI] -MenuItem.acceleratorSelectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -MenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] -MenuItem.background #ffffff javax.swing.plaf.ColorUIResource [UI] -MenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] -MenuItem.borderPainted true -MenuItem.checkBackground #ccccff javax.swing.plaf.ColorUIResource [UI] -MenuItem.checkMargins 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] -MenuItem.disabledForeground #000088 javax.swing.plaf.ColorUIResource [UI] -MenuItem.font [active] $defaultFont [UI] -MenuItem.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -MenuItem.iconTextGap 6 -MenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] -MenuItem.minimumIconSize 16,16 javax.swing.plaf.DimensionUIResource [UI] -MenuItem.minimumWidth 72 -MenuItem.opaque false -MenuItem.selectionBackground #00aa00 javax.swing.plaf.ColorUIResource [UI] -MenuItem.selectionForeground #ffff00 javax.swing.plaf.ColorUIResource [UI] -MenuItem.textAcceleratorGap 24 -MenuItem.textNoAcceleratorGap 6 -MenuItem.underlineSelectionBackground #e6e6e6 javax.swing.plaf.ColorUIResource [UI] -MenuItem.underlineSelectionCheckBackground #ccccff javax.swing.plaf.ColorUIResource [UI] -MenuItem.underlineSelectionColor #ffff00 javax.swing.plaf.ColorUIResource [UI] -MenuItem.underlineSelectionHeight 3 - - -#---- MenuItemCheckBox ---- - -MenuItemCheckBox.icon.checkmarkColor #4d89c9 javax.swing.plaf.ColorUIResource [UI] -MenuItemCheckBox.icon.disabledCheckmarkColor #ababab javax.swing.plaf.ColorUIResource [UI] - - -#---- MenuItem ---- - -MenuItemUI com.formdev.flatlaf.ui.FlatMenuItemUI - - -#---- Menu ---- - -MenuUI com.formdev.flatlaf.ui.FlatMenuUI - - -#---- MonthView ---- - -MonthViewUI com.formdev.flatlaf.swingx.ui.FlatMonthViewUI - - -#---- Objects ---- - -Objects.BlackText #231f20 javax.swing.plaf.ColorUIResource [UI] -Objects.Blue #40b6e0 javax.swing.plaf.ColorUIResource [UI] -Objects.Green #62b543 javax.swing.plaf.ColorUIResource [UI] -Objects.GreenAndroid #a4c639 javax.swing.plaf.ColorUIResource [UI] -Objects.Grey #9aa7b0 javax.swing.plaf.ColorUIResource [UI] -Objects.Pink #f98b9e javax.swing.plaf.ColorUIResource [UI] -Objects.Purple #b99bf8 javax.swing.plaf.ColorUIResource [UI] -Objects.Red #f26522 javax.swing.plaf.ColorUIResource [UI] -Objects.RedStatus #e05555 javax.swing.plaf.ColorUIResource [UI] -Objects.Yellow #f4af3d javax.swing.plaf.ColorUIResource [UI] -Objects.YellowDark #d9a343 javax.swing.plaf.ColorUIResource [UI] - - -#---- OptionPane ---- - -OptionPane.background #ffdddd javax.swing.plaf.ColorUIResource [UI] -OptionPane.border [lazy] 12,12,12,12 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -OptionPane.buttonAreaBorder [lazy] 12,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -OptionPane.buttonClickThreshhold 500 -OptionPane.buttonMinimumWidth [active] 72 -OptionPane.buttonOrientation 4 -OptionPane.buttonPadding 8 -OptionPane.errorIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneErrorIcon [UI] -OptionPane.font [active] $defaultFont [UI] -OptionPane.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -OptionPane.icon.errorColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -OptionPane.icon.foreground #ffffff javax.swing.plaf.ColorUIResource [UI] -OptionPane.icon.informationColor #00ff00 javax.swing.plaf.ColorUIResource [UI] -OptionPane.icon.questionColor #0000ff javax.swing.plaf.ColorUIResource [UI] -OptionPane.icon.warningColor #ffcc00 javax.swing.plaf.ColorUIResource [UI] -OptionPane.iconMessageGap 16 -OptionPane.informationIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneInformationIcon [UI] -OptionPane.maxCharactersPerLine 80 -OptionPane.messageAreaBorder [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -OptionPane.messagePadding 3 -OptionPane.minimumSize 262,90 javax.swing.plaf.DimensionUIResource [UI] -OptionPane.questionIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneQuestionIcon [UI] -OptionPane.sameSizeButtons true -OptionPane.setButtonMargin false -OptionPane.warningIcon [lazy] 32,32 com.formdev.flatlaf.icons.FlatOptionPaneWarningIcon [UI] -OptionPane.windowBindings length=2 [Ljava.lang.Object; - [0] ESCAPE - [1] close -OptionPaneUI com.formdev.flatlaf.ui.FlatOptionPaneUI - - -#---- Panel ---- - -Panel.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -Panel.font [active] $defaultFont [UI] -Panel.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -PanelUI com.formdev.flatlaf.ui.FlatPanelUI - - -#---- PasswordField ---- - -PasswordField.background #ffffff javax.swing.plaf.ColorUIResource [UI] -PasswordField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] -PasswordField.capsLockIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatCapsLockIcon [UI] -PasswordField.caretBlinkRate 500 -PasswordField.caretForeground #0000ff javax.swing.plaf.ColorUIResource [UI] -PasswordField.disabledBackground #e0e0e0 javax.swing.plaf.ColorUIResource [UI] -PasswordField.echoChar '\u2022' -PasswordField.font [active] $defaultFont [UI] -PasswordField.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -PasswordField.inactiveBackground #f0f0f0 javax.swing.plaf.ColorUIResource [UI] -PasswordField.inactiveForeground #000088 javax.swing.plaf.ColorUIResource [UI] -PasswordField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -PasswordField.placeholderForeground #000088 javax.swing.plaf.ColorUIResource [UI] -PasswordField.selectionBackground #00aa00 javax.swing.plaf.ColorUIResource [UI] -PasswordField.selectionForeground #ffff00 javax.swing.plaf.ColorUIResource [UI] -PasswordField.showCapsLock true -PasswordFieldUI com.formdev.flatlaf.ui.FlatPasswordFieldUI - - -#---- Popup ---- - -Popup.dropShadowColor #00ff00 javax.swing.plaf.ColorUIResource [UI] -Popup.dropShadowInsets -6,6,6,6 javax.swing.plaf.InsetsUIResource [UI] -Popup.dropShadowOpacity 0.5 -Popup.dropShadowPainted true - - -#---- PopupMenu ---- - -PopupMenu.background #ffffff javax.swing.plaf.ColorUIResource [UI] -PopupMenu.border [lazy] 4,1,4,1 false com.formdev.flatlaf.ui.FlatPopupMenuBorder [UI] lineColor=#0000ff javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -PopupMenu.borderColor #0000ff javax.swing.plaf.ColorUIResource [UI] -PopupMenu.borderInsets 4,1,4,1 javax.swing.plaf.InsetsUIResource [UI] -PopupMenu.consumeEventOnClose false -PopupMenu.font [active] $defaultFont [UI] -PopupMenu.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] - - -#---- PopupMenuSeparator ---- - -PopupMenuSeparator.height 30 -PopupMenuSeparator.stripeIndent 1 -PopupMenuSeparator.stripeWidth 3 -PopupMenuSeparatorUI com.formdev.flatlaf.ui.FlatPopupMenuSeparatorUI - - -#---- PopupMenu ---- - -PopupMenuUI com.formdev.flatlaf.ui.FlatPopupMenuUI - - -#---- ProgressBar ---- - -ProgressBar.arc 4 -ProgressBar.background #88ff88 javax.swing.plaf.ColorUIResource [UI] -ProgressBar.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -ProgressBar.cellLength 1 -ProgressBar.cellSpacing 0 -ProgressBar.cycleTime 10000 -ProgressBar.font [active] Segoe UI plain 10 javax.swing.plaf.FontUIResource [UI] -ProgressBar.foreground #73737333 20% javax.swing.plaf.ColorUIResource [UI] -ProgressBar.horizontalSize 146,4 javax.swing.plaf.DimensionUIResource [UI] -ProgressBar.repaintInterval 15 -ProgressBar.selectionBackground #000088 javax.swing.plaf.ColorUIResource [UI] -ProgressBar.selectionForeground #ff0000 javax.swing.plaf.ColorUIResource [UI] -ProgressBar.verticalSize 4,146 javax.swing.plaf.DimensionUIResource [UI] -ProgressBarUI com.formdev.flatlaf.ui.FlatProgressBarUI - - -#---- RadioButton ---- - -RadioButton.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -RadioButton.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -RadioButton.darkShadow #696969 javax.swing.plaf.ColorUIResource [UI] -RadioButton.disabledText #000088 javax.swing.plaf.ColorUIResource [UI] -RadioButton.font [active] $defaultFont [UI] -RadioButton.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -RadioButton.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -RadioButton.icon.centerDiameter 8 -RadioButton.icon [lazy] 15,15 com.formdev.flatlaf.icons.FlatRadioButtonIcon [UI] -RadioButton.iconTextGap 4 -RadioButton.icon[filled].centerDiameter 5 -RadioButton.light #e3e3e3 javax.swing.plaf.ColorUIResource [UI] -RadioButton.margin 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] -RadioButton.rollover true -RadioButton.shadow #a0a0a0 javax.swing.plaf.ColorUIResource [UI] -RadioButton.textIconGap 4 -RadioButton.textShiftOffset 0 - - -#---- RadioButtonMenuItem ---- - -RadioButtonMenuItem.acceleratorFont [active] $defaultFont [UI] -RadioButtonMenuItem.acceleratorForeground #ff8888 javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.acceleratorSelectionForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.arrowIcon [lazy] 6,10 com.formdev.flatlaf.icons.FlatMenuItemArrowIcon [UI] -RadioButtonMenuItem.background #ffffff javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMenuItemBorder [UI] -RadioButtonMenuItem.borderPainted true -RadioButtonMenuItem.checkIcon [lazy] 15,15 com.formdev.flatlaf.icons.FlatRadioButtonMenuItemIcon [UI] -RadioButtonMenuItem.disabledForeground #000088 javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.font [active] $defaultFont [UI] -RadioButtonMenuItem.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.margin 3,6,3,6 javax.swing.plaf.InsetsUIResource [UI] -RadioButtonMenuItem.opaque false -RadioButtonMenuItem.selectionBackground #00aa00 javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItem.selectionForeground #ffff00 javax.swing.plaf.ColorUIResource [UI] -RadioButtonMenuItemUI com.formdev.flatlaf.ui.FlatRadioButtonMenuItemUI - - -#---- RadioButton ---- - -RadioButtonUI com.formdev.flatlaf.ui.FlatRadioButtonUI - - -#---- RangeSlider ---- - -RangeSliderUI com.formdev.flatlaf.jideoss.ui.FlatRangeSliderUI - - -#---- Resizable ---- - -Resizable.resizeBorder [lazy] 4,4,4,4 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#0000ff javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 - - -#---- RootPane ---- - -RootPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRootPaneUI$FlatWindowBorder [UI] -RootPane.borderDragThickness 5 -RootPane.cornerDragWidth 16 -RootPane.defaultButtonWindowKeyBindings length=8 [Ljava.lang.Object; - [0] ENTER - [1] press - [2] released ENTER - [3] release - [4] ctrl ENTER - [5] press - [6] ctrl released ENTER - [7] release -RootPane.honorDialogMinimumSizeOnResize true -RootPane.honorFrameMinimumSizeOnResize false -RootPaneUI com.formdev.flatlaf.ui.FlatRootPaneUI - - -#---- ScrollBar ---- - -ScrollBar.allowsAbsolutePositioning true -ScrollBar.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -ScrollBar.buttonArrowColor #666666 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.buttonDisabledArrowColor #ababab javax.swing.plaf.ColorUIResource [UI] -ScrollBar.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.hoverThumbColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.hoverThumbWithTrack false -ScrollBar.hoverTrackColor #00ff00 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.maximumThumbSize 100000,100000 javax.swing.plaf.DimensionUIResource [UI] -ScrollBar.minimumThumbSize 10,10 javax.swing.plaf.DimensionUIResource [UI] -ScrollBar.pressedThumbWithTrack false -ScrollBar.showButtons false -ScrollBar.squareButtons false -ScrollBar.thumb #73737333 20% javax.swing.plaf.ColorUIResource [UI] -ScrollBar.thumbArc 0 -ScrollBar.thumbDarkShadow #696969 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.thumbHighlight #ffffff javax.swing.plaf.ColorUIResource [UI] -ScrollBar.thumbInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -ScrollBar.thumbShadow #a0a0a0 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.track #88ff88 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.trackArc 0 -ScrollBar.trackHighlight #696969 javax.swing.plaf.ColorUIResource [UI] -ScrollBar.trackInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -ScrollBar.width 10 -ScrollBarUI com.formdev.flatlaf.ui.FlatScrollBarUI - - -#---- ScrollPane ---- - -ScrollPane.background #88ff88 javax.swing.plaf.ColorUIResource [UI] -ScrollPane.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatBorder [UI] -ScrollPane.fillUpperCorner true -ScrollPane.font [active] $defaultFont [UI] -ScrollPane.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -ScrollPane.smoothScrolling true -ScrollPaneUI com.formdev.flatlaf.ui.FlatScrollPaneUI - - -#---- Separator ---- - -Separator.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -Separator.foreground #00bb00 javax.swing.plaf.ColorUIResource [UI] -Separator.height 20 -Separator.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -Separator.shadow #a0a0a0 javax.swing.plaf.ColorUIResource [UI] -Separator.stripeIndent 5 -Separator.stripeWidth 10 -SeparatorUI com.formdev.flatlaf.ui.FlatSeparatorUI - - -#---- Slider ---- - -Slider.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -Slider.disabledThumbColor #888800 javax.swing.plaf.ColorUIResource [UI] -Slider.disabledTrackColor #ffff88 javax.swing.plaf.ColorUIResource [UI] -Slider.focus #696969 javax.swing.plaf.ColorUIResource [UI] -Slider.focusInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -Slider.focusWidth 4 -Slider.focusedColor #97c3f3 javax.swing.plaf.ColorUIResource [UI] -Slider.font [active] $defaultFont [UI] -Slider.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -Slider.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -Slider.horizontalSize 200,21 java.awt.Dimension -Slider.hoverThumbColor #0000ff javax.swing.plaf.ColorUIResource [UI] -Slider.hoverTrackColor #4444ff javax.swing.plaf.ColorUIResource [UI] -Slider.minimumHorizontalSize 36,21 java.awt.Dimension -Slider.minimumVerticalSize 21,36 java.awt.Dimension -Slider.onlyLeftMouseButtonDrag true -Slider.pressedThumbColor #00ff00 javax.swing.plaf.ColorUIResource [UI] -Slider.pressedTrackColor #88ff88 javax.swing.plaf.ColorUIResource [UI] -Slider.shadow #a0a0a0 javax.swing.plaf.ColorUIResource [UI] -Slider.thumbBorderColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -Slider.thumbColor #ffaaaa javax.swing.plaf.ColorUIResource [UI] -Slider.thumbSize 12,12 javax.swing.plaf.DimensionUIResource [UI] -Slider.tickColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -Slider.trackColor #88ff88 javax.swing.plaf.ColorUIResource [UI] -Slider.trackWidth 2 -Slider.verticalSize 21,200 java.awt.Dimension -SliderUI com.formdev.flatlaf.ui.FlatSliderUI - - -#---- Spinner ---- - -Spinner.arrowButtonSize 16,5 java.awt.Dimension -Spinner.background #ffffff javax.swing.plaf.ColorUIResource [UI] -Spinner.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatRoundBorder [UI] -Spinner.buttonArrowColor #666666 javax.swing.plaf.ColorUIResource [UI] -Spinner.buttonBackground #cccccc javax.swing.plaf.ColorUIResource [UI] -Spinner.buttonDisabledArrowColor #ababab javax.swing.plaf.ColorUIResource [UI] -Spinner.buttonHoverArrowColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -Spinner.buttonPressedArrowColor #0000ff javax.swing.plaf.ColorUIResource [UI] -Spinner.buttonStyle button -Spinner.disabledBackground #e0e0e0 javax.swing.plaf.ColorUIResource [UI] -Spinner.disabledForeground #000088 javax.swing.plaf.ColorUIResource [UI] -Spinner.editorAlignment 11 -Spinner.editorBorderPainted false -Spinner.font [active] $defaultFont [UI] -Spinner.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -Spinner.padding 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -SpinnerUI com.formdev.flatlaf.ui.FlatSpinnerUI - - -#---- SplitPane ---- - -SplitPane.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -SplitPane.centerOneTouchButtons true -SplitPane.continuousLayout true -SplitPane.darkShadow #696969 javax.swing.plaf.ColorUIResource [UI] -SplitPane.dividerSize 5 -SplitPane.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -SplitPane.oneTouchButtonOffset [active] 2 -SplitPane.oneTouchButtonSize [active] 6 -SplitPane.shadow #a0a0a0 javax.swing.plaf.ColorUIResource [UI] - - -#---- SplitPaneDivider ---- - -SplitPaneDivider.draggingColor #880000 javax.swing.plaf.ColorUIResource [UI] -SplitPaneDivider.gripColor #afafaf javax.swing.plaf.ColorUIResource [UI] -SplitPaneDivider.gripDotCount 3 -SplitPaneDivider.gripDotSize 3 -SplitPaneDivider.gripGap 2 -SplitPaneDivider.oneTouchArrowColor #00ff00 javax.swing.plaf.ColorUIResource [UI] -SplitPaneDivider.oneTouchHoverArrowColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -SplitPaneDivider.oneTouchPressedArrowColor #0000ff javax.swing.plaf.ColorUIResource [UI] -SplitPaneDivider.style grip - - -#---- SplitPane ---- - -SplitPaneUI com.formdev.flatlaf.ui.FlatSplitPaneUI - - -#---- TabbedPane ---- - -TabbedPane.arrowType chevron -TabbedPane.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -TabbedPane.buttonArc 6 -TabbedPane.buttonHoverBackground #ffff00 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.buttonInsets 2,1,2,1 javax.swing.plaf.InsetsUIResource [UI] -TabbedPane.buttonPressedBackground #ffc800 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.closeArc 999 -TabbedPane.closeCrossFilledSize 6.5 -TabbedPane.closeCrossLineWidth 2.0 -TabbedPane.closeCrossPlainSize 12.0 -TabbedPane.closeForeground #ff0000 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.closeHoverBackground #aa0000 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.closeHoverForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -TabbedPane.closeIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTabbedPaneCloseIcon [UI] -TabbedPane.closePressedBackground #00ff00 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.closePressedForeground #000000 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.closeSize 16,16 javax.swing.plaf.DimensionUIResource [UI] -TabbedPane.contentAreaColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.contentOpaque true -TabbedPane.contentSeparatorHeight 1 -TabbedPane.darkShadow #696969 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.disabledForeground #777777 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.disabledUnderlineColor #7a7a7a javax.swing.plaf.ColorUIResource [UI] -TabbedPane.focus #ff0000 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.focusColor #dddddd javax.swing.plaf.ColorUIResource [UI] -TabbedPane.font [active] $defaultFont [UI] -TabbedPane.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.hasFullBorder false -TabbedPane.hiddenTabsNavigation moreTabsButton -TabbedPane.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -TabbedPane.hoverColor #eeeeee javax.swing.plaf.ColorUIResource [UI] -TabbedPane.labelShift 1 -TabbedPane.light #e3e3e3 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.scrollButtonsPlacement both -TabbedPane.scrollButtonsPolicy asNeededSingle -TabbedPane.selectedBackground #00ff00 javax.swing.plaf.ColorUIResource [UI] -TabbedPane.selectedForeground #0000ff javax.swing.plaf.ColorUIResource [UI] -TabbedPane.selectedLabelShift -1 -TabbedPane.selectedTabPadInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -TabbedPane.selectionFollowsFocus true -TabbedPane.shadow #ccffcc javax.swing.plaf.ColorUIResource [UI] -TabbedPane.showTabSeparators false -TabbedPane.tabAlignment center -TabbedPane.tabAreaAlignment leading -TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] -TabbedPane.tabHeight 32 -TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI] -TabbedPane.tabRunOverlay 0 -TabbedPane.tabSelectionHeight 3 -TabbedPane.tabSeparatorColor #0000ff javax.swing.plaf.ColorUIResource [UI] -TabbedPane.tabSeparatorsFullHeight false -TabbedPane.tabWidthMode preferred -TabbedPane.tabsOpaque true -TabbedPane.tabsOverlapBorder false -TabbedPane.tabsPopupPolicy asNeeded -TabbedPane.textIconGap 4 -TabbedPane.underlineColor #ffff00 javax.swing.plaf.ColorUIResource [UI] -TabbedPaneUI com.formdev.flatlaf.ui.FlatTabbedPaneUI - - -#---- Table ---- - -Table.ascendingSortIcon [lazy] 10,5 com.formdev.flatlaf.icons.FlatAscendingSortIcon [UI] -Table.background #fffff0 javax.swing.plaf.ColorUIResource [UI] -Table.cellFocusColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -Table.cellMargins 2,3,2,3 javax.swing.plaf.InsetsUIResource [UI] -Table.cellNoFocusBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Default [UI] lineColor=#ff0000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -Table.consistentHomeEndKeyBehavior true -Table.descendingSortIcon [lazy] 10,5 com.formdev.flatlaf.icons.FlatDescendingSortIcon [UI] -Table.dropCellBackground #ff0000 javax.swing.plaf.ColorUIResource [UI] -Table.dropCellForeground #00ff00 javax.swing.plaf.ColorUIResource [UI] -Table.dropLineColor #0000ff javax.swing.plaf.ColorUIResource [UI] -Table.dropLineShortColor #ffff00 javax.swing.plaf.ColorUIResource [UI] -Table.focusCellBackground #ffffff javax.swing.plaf.ColorUIResource [UI] -Table.focusCellForeground #ff0000 javax.swing.plaf.ColorUIResource [UI] -Table.focusCellHighlightBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Focused [UI] lineColor=#ff0000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -Table.focusSelectedCellHighlightBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableCellBorder$Selected [UI] lineColor=#ff0000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -Table.font [active] $defaultFont [UI] -Table.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -Table.gridColor #00ffff javax.swing.plaf.ColorUIResource [UI] -Table.intercellSpacing 0,0 javax.swing.plaf.DimensionUIResource [UI] -Table.rowHeight 25 -Table.scrollPaneBorder [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatBorder [UI] -Table.selectionBackground #00aa00 javax.swing.plaf.ColorUIResource [UI] -Table.selectionForeground #ffff00 javax.swing.plaf.ColorUIResource [UI] -Table.selectionInactiveBackground #888888 javax.swing.plaf.ColorUIResource [UI] -Table.selectionInactiveForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -Table.showHorizontalLines false -Table.showVerticalLines false -Table.sortIconColor #ffff00 javax.swing.plaf.ColorUIResource [UI] - - -#---- TableHeader ---- - -TableHeader.background #4444ff javax.swing.plaf.ColorUIResource [UI] -TableHeader.bottomSeparatorColor #00ff00 javax.swing.plaf.ColorUIResource [UI] -TableHeader.cellBorder [lazy] 2,3,2,3 false com.formdev.flatlaf.ui.FlatTableHeaderBorder [UI] -TableHeader.cellMargins 2,3,2,3 javax.swing.plaf.InsetsUIResource [UI] -TableHeader.focusCellBackground #4444ff javax.swing.plaf.ColorUIResource [UI] -TableHeader.font [active] $defaultFont [UI] -TableHeader.foreground #ffffff javax.swing.plaf.ColorUIResource [UI] -TableHeader.height 25 -TableHeader.separatorColor #00ff00 javax.swing.plaf.ColorUIResource [UI] -TableHeaderUI com.formdev.flatlaf.ui.FlatTableHeaderUI - - -#---- Table ---- - -TableUI com.formdev.flatlaf.ui.FlatTableUI - - -#---- TaskPane ---- - -TaskPane.background #00ff00 javax.swing.plaf.ColorUIResource [UI] -TaskPane.borderColor #0000ff javax.swing.plaf.ColorUIResource [UI] -TaskPane.contentInsets 10,10,10,10 javax.swing.plaf.InsetsUIResource [UI] -TaskPane.specialTitleBackground #00ffff javax.swing.plaf.ColorUIResource [UI] -TaskPane.specialTitleForeground #444444 javax.swing.plaf.ColorUIResource [UI] -TaskPane.specialTitleOver #dd0000 javax.swing.plaf.ColorUIResource [UI] -TaskPane.titleBackgroundGradientStart #ffff00 javax.swing.plaf.ColorUIResource [UI] -TaskPane.titleForeground #ff00ff javax.swing.plaf.ColorUIResource [UI] -TaskPane.titleOver #0000aa javax.swing.plaf.ColorUIResource [UI] - - -#---- TaskPaneContainer ---- - -TaskPaneContainer.background #ff8888 javax.swing.plaf.ColorUIResource [UI] -TaskPaneContainer.border [lazy] 10,10,10,10 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] - - -#---- TextArea ---- - -TextArea.background #ffffff javax.swing.plaf.ColorUIResource [UI] -TextArea.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -TextArea.caretBlinkRate 500 -TextArea.caretForeground #0000ff javax.swing.plaf.ColorUIResource [UI] -TextArea.disabledBackground #e0e0e0 javax.swing.plaf.ColorUIResource [UI] -TextArea.font [active] $defaultFont [UI] -TextArea.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -TextArea.inactiveBackground #f0f0f0 javax.swing.plaf.ColorUIResource [UI] -TextArea.inactiveForeground #000088 javax.swing.plaf.ColorUIResource [UI] -TextArea.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -TextArea.selectionBackground #00aa00 javax.swing.plaf.ColorUIResource [UI] -TextArea.selectionForeground #ffff00 javax.swing.plaf.ColorUIResource [UI] -TextAreaUI com.formdev.flatlaf.ui.FlatTextAreaUI - - -#---- TextComponent ---- - -TextComponent.arc 0 -TextComponent.selectAllOnFocusPolicy once -TextComponent.selectAllOnMouseClick false - - -#---- TextField ---- - -TextField.background #ffffff javax.swing.plaf.ColorUIResource [UI] -TextField.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatTextBorder [UI] -TextField.caretBlinkRate 500 -TextField.caretForeground #0000ff javax.swing.plaf.ColorUIResource [UI] -TextField.darkShadow #696969 javax.swing.plaf.ColorUIResource [UI] -TextField.disabledBackground #e0e0e0 javax.swing.plaf.ColorUIResource [UI] -TextField.font [active] $defaultFont [UI] -TextField.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -TextField.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -TextField.inactiveBackground #f0f0f0 javax.swing.plaf.ColorUIResource [UI] -TextField.inactiveForeground #000088 javax.swing.plaf.ColorUIResource [UI] -TextField.light #e3e3e3 javax.swing.plaf.ColorUIResource [UI] -TextField.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -TextField.placeholderForeground #000088 javax.swing.plaf.ColorUIResource [UI] -TextField.selectionBackground #00aa00 javax.swing.plaf.ColorUIResource [UI] -TextField.selectionForeground #ffff00 javax.swing.plaf.ColorUIResource [UI] -TextField.shadow #a0a0a0 javax.swing.plaf.ColorUIResource [UI] -TextFieldUI com.formdev.flatlaf.ui.FlatTextFieldUI - - -#---- TextPane ---- - -TextPane.background #ffffff javax.swing.plaf.ColorUIResource [UI] -TextPane.border [lazy] 0,0,0,0 false com.formdev.flatlaf.ui.FlatMarginBorder [UI] -TextPane.caretBlinkRate 500 -TextPane.caretForeground #0000ff javax.swing.plaf.ColorUIResource [UI] -TextPane.disabledBackground #e0e0e0 javax.swing.plaf.ColorUIResource [UI] -TextPane.font [active] $defaultFont [UI] -TextPane.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -TextPane.inactiveBackground #f0f0f0 javax.swing.plaf.ColorUIResource [UI] -TextPane.inactiveForeground #000088 javax.swing.plaf.ColorUIResource [UI] -TextPane.margin 2,6,2,6 javax.swing.plaf.InsetsUIResource [UI] -TextPane.selectionBackground #00aa00 javax.swing.plaf.ColorUIResource [UI] -TextPane.selectionForeground #ffff00 javax.swing.plaf.ColorUIResource [UI] -TextPaneUI com.formdev.flatlaf.ui.FlatTextPaneUI - - -#---- TitlePane ---- - -TitlePane.background #00ff00 javax.swing.plaf.ColorUIResource [UI] -TitlePane.borderColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -TitlePane.buttonMaximizedHeight 22 -TitlePane.buttonSize 44,30 javax.swing.plaf.DimensionUIResource [UI] -TitlePane.centerTitle false -TitlePane.centerTitleIfMenuBarEmbedded true -TitlePane.closeHoverBackground #e81123 javax.swing.plaf.ColorUIResource [UI] -TitlePane.closeHoverForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -TitlePane.closeIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowCloseIcon [UI] -TitlePane.closePressedBackground #e8112399 60% javax.swing.plaf.ColorUIResource [UI] -TitlePane.closePressedForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -TitlePane.foreground #0000ff javax.swing.plaf.ColorUIResource [UI] -TitlePane.icon [lazy] 16,16 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) -TitlePane.iconMargins 3,8,3,8 javax.swing.plaf.InsetsUIResource [UI] -TitlePane.iconSize 16,16 javax.swing.plaf.DimensionUIResource [UI] -TitlePane.iconifyIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowIconifyIcon [UI] -TitlePane.inactiveBackground #008800 javax.swing.plaf.ColorUIResource [UI] -TitlePane.inactiveForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -TitlePane.maximizeIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowMaximizeIcon [UI] -TitlePane.menuBarEmbedded true -TitlePane.menuBarTitleGap 20 -TitlePane.restoreIcon [lazy] 44,30 com.formdev.flatlaf.icons.FlatWindowRestoreIcon [UI] -TitlePane.titleMargins 3,0,3,0 javax.swing.plaf.InsetsUIResource [UI] -TitlePane.unifiedBackground false -TitlePane.useWindowDecorations true - - -#---- TitledBorder ---- - -TitledBorder.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#ff00ff javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -TitledBorder.font [active] $defaultFont [UI] -TitledBorder.titleColor #ff00ff javax.swing.plaf.ColorUIResource [UI] - - -#---- TitledPanel ---- - -TitledPanelUI com.formdev.flatlaf.swingx.ui.FlatTitledPanelUI - - -#---- ToggleButton ---- - -ToggleButton.background #ddddff javax.swing.plaf.ColorUIResource [UI] -ToggleButton.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatButtonBorder [UI] -ToggleButton.darkShadow #696969 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.disabledBackground #e0e0e0 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.disabledSelectedBackground #44dd44 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.disabledText #000088 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.focusedBackground #00ffff javax.swing.plaf.ColorUIResource [UI] -ToggleButton.font [active] $defaultFont [UI] -ToggleButton.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -ToggleButton.hoverBackground #ffff00 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.iconTextGap 4 -ToggleButton.light #e3e3e3 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.margin 2,14,2,14 javax.swing.plaf.InsetsUIResource [UI] -ToggleButton.pressedBackground #ffc800 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.rollover true -ToggleButton.selectedBackground #44ff44 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.selectedForeground #000000 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.shadow #a0a0a0 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.tab.disabledUnderlineColor #7a7a7a javax.swing.plaf.ColorUIResource [UI] -ToggleButton.tab.focusBackground #dddddd javax.swing.plaf.ColorUIResource [UI] -ToggleButton.tab.hoverBackground #eeeeee javax.swing.plaf.ColorUIResource [UI] -ToggleButton.tab.selectedBackground #00ff00 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.tab.underlineColor #ffff00 javax.swing.plaf.ColorUIResource [UI] -ToggleButton.tab.underlineHeight 2 -ToggleButton.textIconGap 4 -ToggleButton.textShiftOffset 0 -ToggleButton.toolbar.hoverBackground #ffffff javax.swing.plaf.ColorUIResource [UI] -ToggleButton.toolbar.pressedBackground #eeeeee javax.swing.plaf.ColorUIResource [UI] -ToggleButton.toolbar.selectedBackground #dddddd javax.swing.plaf.ColorUIResource [UI] -ToggleButtonUI com.formdev.flatlaf.ui.FlatToggleButtonUI - - -#---- ToolBar ---- - -ToolBar.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -ToolBar.border [lazy] 2,2,2,2 false com.formdev.flatlaf.ui.FlatToolBarBorder [UI] -ToolBar.borderMargins 2,2,2,2 javax.swing.plaf.InsetsUIResource [UI] -ToolBar.darkShadow #696969 javax.swing.plaf.ColorUIResource [UI] -ToolBar.dockingBackground #ccffcc javax.swing.plaf.ColorUIResource [UI] -ToolBar.dockingForeground #ff0000 javax.swing.plaf.ColorUIResource [UI] -ToolBar.floatingBackground #ccffcc javax.swing.plaf.ColorUIResource [UI] -ToolBar.floatingForeground #000088 javax.swing.plaf.ColorUIResource [UI] -ToolBar.font [active] $defaultFont [UI] -ToolBar.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -ToolBar.gripColor #afafaf javax.swing.plaf.ColorUIResource [UI] -ToolBar.highlight #ffffff javax.swing.plaf.ColorUIResource [UI] -ToolBar.isRollover true -ToolBar.light #e3e3e3 javax.swing.plaf.ColorUIResource [UI] -ToolBar.separatorColor #00bb00 javax.swing.plaf.ColorUIResource [UI] -ToolBar.separatorWidth 7 -ToolBar.shadow #a0a0a0 javax.swing.plaf.ColorUIResource [UI] -ToolBar.spacingBorder [lazy] 1,2,1,2 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] - - -#---- ToolBarSeparator ---- - -ToolBarSeparatorUI com.formdev.flatlaf.ui.FlatToolBarSeparatorUI - - -#---- ToolBar ---- - -ToolBarUI com.formdev.flatlaf.ui.FlatToolBarUI - - -#---- ToolTip ---- - -ToolTip.background #eeeeff javax.swing.plaf.ColorUIResource [UI] -ToolTip.border [lazy] line: #000000 java.awt.Color 1 false 1,1,1,1 true javax.swing.plaf.BorderUIResource$LineBorderUIResource [UI] -ToolTip.font [active] $defaultFont [UI] -ToolTip.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] - - -#---- ToolTipManager ---- - -ToolTipManager.enableToolTipMode activeApplication - - -#---- ToolTip ---- - -ToolTipUI com.formdev.flatlaf.ui.FlatToolTipUI - - -#---- Tree ---- - -Tree.background #fff0ff javax.swing.plaf.ColorUIResource [UI] -Tree.border [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatEmptyBorder [UI] -Tree.changeSelectionWithFocus true -Tree.closedIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeClosedIcon [UI] -Tree.collapsedIcon [lazy] 11,11 com.formdev.flatlaf.icons.FlatTreeCollapsedIcon [UI] -Tree.drawsFocusBorderAroundIcon false -Tree.dropCellBackground #ff0000 javax.swing.plaf.ColorUIResource [UI] -Tree.dropCellForeground #00ff00 javax.swing.plaf.ColorUIResource [UI] -Tree.dropLineColor #0000ff javax.swing.plaf.ColorUIResource [UI] -Tree.editorBorder [lazy] 1,1,1,1 false com.formdev.flatlaf.ui.FlatLineBorder [UI] lineColor=#ff0000 javax.swing.plaf.ColorUIResource [UI] lineThickness=1.000000 -Tree.editorBorderSelectionColor #0000ff javax.swing.plaf.ColorUIResource [UI] -Tree.expandedIcon [lazy] 11,11 com.formdev.flatlaf.icons.FlatTreeExpandedIcon [UI] -Tree.font [active] $defaultFont [UI] -Tree.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -Tree.hash #ff0000 javax.swing.plaf.ColorUIResource [UI] -Tree.icon.closedColor #afafaf javax.swing.plaf.ColorUIResource [UI] -Tree.icon.collapsedColor #afafaf javax.swing.plaf.ColorUIResource [UI] -Tree.icon.expandedColor #afafaf javax.swing.plaf.ColorUIResource [UI] -Tree.icon.leafColor #afafaf javax.swing.plaf.ColorUIResource [UI] -Tree.icon.openColor #afafaf javax.swing.plaf.ColorUIResource [UI] -Tree.leafIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeLeafIcon [UI] -Tree.leftChildIndent 7 -Tree.lineTypeDashed false -Tree.openIcon [lazy] 16,16 com.formdev.flatlaf.icons.FlatTreeOpenIcon [UI] -Tree.paintLines true -Tree.rendererFillBackground false -Tree.rendererMargins 1,2,1,2 javax.swing.plaf.InsetsUIResource [UI] -Tree.repaintWholeRow true -Tree.rightChildIndent 11 -Tree.rowHeight 0 -Tree.scrollsOnExpand true -Tree.selectionBackground #00aa00 javax.swing.plaf.ColorUIResource [UI] -Tree.selectionBorderColor #ff0000 javax.swing.plaf.ColorUIResource [UI] -Tree.selectionForeground #ffff00 javax.swing.plaf.ColorUIResource [UI] -Tree.selectionInactiveBackground #888888 javax.swing.plaf.ColorUIResource [UI] -Tree.selectionInactiveForeground #ffffff javax.swing.plaf.ColorUIResource [UI] -Tree.showCellFocusIndicator false -Tree.textBackground #fff0ff javax.swing.plaf.ColorUIResource [UI] -Tree.textForeground #ff0000 javax.swing.plaf.ColorUIResource [UI] -Tree.timeFactor 1000 -Tree.wideSelection true -TreeUI com.formdev.flatlaf.ui.FlatTreeUI - - -#---- TristateCheckBox ---- - -TristateCheckBox.clearMixed.clientProperty length=2 [Ljava.lang.Object; - [0] JButton.selectedState - [1] null -TristateCheckBox.setMixed.clientProperty length=2 [Ljava.lang.Object; - [0] JButton.selectedState - [1] indeterminate - - -#---- Viewport ---- - -Viewport.background #ccffcc javax.swing.plaf.ColorUIResource [UI] -Viewport.font [active] $defaultFont [UI] -Viewport.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] -ViewportUI com.formdev.flatlaf.ui.FlatViewportUI - - -#---- ---- - -activeCaption #99b4d1 javax.swing.plaf.ColorUIResource [UI] -activeCaptionBorder #99b4d1 javax.swing.plaf.ColorUIResource [UI] -activeCaptionText #ff0000 javax.swing.plaf.ColorUIResource [UI] -control #ccffcc javax.swing.plaf.ColorUIResource [UI] -controlDkShadow #696969 javax.swing.plaf.ColorUIResource [UI] -controlHighlight #e3e3e3 javax.swing.plaf.ColorUIResource [UI] -controlLtHighlight #ffffff javax.swing.plaf.ColorUIResource [UI] -controlShadow #a0a0a0 javax.swing.plaf.ColorUIResource [UI] -controlText #ff0000 javax.swing.plaf.ColorUIResource [UI] -defaultFont Segoe UI plain 12 javax.swing.plaf.FontUIResource [UI] -desktop #ffffff javax.swing.plaf.ColorUIResource [UI] - - -#---- html ---- - -html.missingImage [lazy] 38,38 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) -html.pendingImage [lazy] 38,38 sun.swing.ImageIconUIResource [UI] (sun.awt.image.ToolkitImage) - - -#---- ---- - -inactiveCaption #bfcddb javax.swing.plaf.ColorUIResource [UI] -inactiveCaptionBorder #bfcddb javax.swing.plaf.ColorUIResource [UI] -inactiveCaptionText #ff0000 javax.swing.plaf.ColorUIResource [UI] -info #eeeeff javax.swing.plaf.ColorUIResource [UI] -infoText #ff0000 javax.swing.plaf.ColorUIResource [UI] - - -#---- laf ---- - -laf.dark false -laf.scaleFactor [active] 1.0 - - -#---- ---- - -menu #ccffcc javax.swing.plaf.ColorUIResource [UI] -menuText #ff0000 javax.swing.plaf.ColorUIResource [UI] -scrollbar #88ff88 javax.swing.plaf.ColorUIResource [UI] - - -#---- swingx/TaskPane ---- - -swingx/TaskPaneUI com.formdev.flatlaf.swingx.ui.FlatTaskPaneUI - - -#---- ---- - -text #ffffff javax.swing.plaf.ColorUIResource [UI] -textHighlight #00aa00 javax.swing.plaf.ColorUIResource [UI] -textHighlightText #ffff00 javax.swing.plaf.ColorUIResource [UI] -textInactiveText #000088 javax.swing.plaf.ColorUIResource [UI] -textText #ff0000 javax.swing.plaf.ColorUIResource [UI] -window #ccffcc javax.swing.plaf.ColorUIResource [UI] -windowBorder #ff0000 javax.swing.plaf.ColorUIResource [UI] -windowText #ff0000 javax.swing.plaf.ColorUIResource [UI] diff --git a/flatlaf-testing/dumps/uidefaults/JIDE-FlatDarkLaf_1.8.0_202.txt b/flatlaf-testing/dumps/uidefaults/JIDE-FlatDarkLaf_1.8.0.txt similarity index 100% rename from flatlaf-testing/dumps/uidefaults/JIDE-FlatDarkLaf_1.8.0_202.txt rename to flatlaf-testing/dumps/uidefaults/JIDE-FlatDarkLaf_1.8.0.txt diff --git a/flatlaf-testing/dumps/uidefaults/JIDE-FlatLightLaf_1.8.0_202.txt b/flatlaf-testing/dumps/uidefaults/JIDE-FlatLightLaf_1.8.0.txt similarity index 100% rename from flatlaf-testing/dumps/uidefaults/JIDE-FlatLightLaf_1.8.0_202.txt rename to flatlaf-testing/dumps/uidefaults/JIDE-FlatLightLaf_1.8.0.txt diff --git a/flatlaf-testing/dumps/uidefaults/JIDE-FlatLightLaf_InputMap_1.8.0_202.txt b/flatlaf-testing/dumps/uidefaults/JIDE-FlatLightLaf_InputMap_1.8.0.txt similarity index 100% rename from flatlaf-testing/dumps/uidefaults/JIDE-FlatLightLaf_InputMap_1.8.0_202.txt rename to flatlaf-testing/dumps/uidefaults/JIDE-FlatLightLaf_InputMap_1.8.0.txt diff --git a/flatlaf-testing/flatlaf-testing-modular-app/FlatModularAppTest JAR.launch b/flatlaf-testing/flatlaf-testing-modular-app/FlatModularAppTest JAR.launch new file mode 100644 index 00000000..1437b0c9 --- /dev/null +++ b/flatlaf-testing/flatlaf-testing-modular-app/FlatModularAppTest JAR.launch @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/flatlaf-testing/flatlaf-testing-modular-app/build.gradle.kts b/flatlaf-testing/flatlaf-testing-modular-app/build.gradle.kts new file mode 100644 index 00000000..75c4f860 --- /dev/null +++ b/flatlaf-testing/flatlaf-testing-modular-app/build.gradle.kts @@ -0,0 +1,30 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +plugins { + `java-library` + `flatlaf-module-info` +} + +dependencies { + implementation( project( ":flatlaf-core" ) ) + implementation( project( ":flatlaf-extras" ) ) +} + +flatlafModuleInfo { + dependsOn( ":flatlaf-core:jar" ) + dependsOn( ":flatlaf-extras:jar" ) +} diff --git a/flatlaf-testing/flatlaf-testing-modular-app/src/main/java/com/formdev/flatlaf/testing/modular/app/FlatModularAppTest.java b/flatlaf-testing/flatlaf-testing-modular-app/src/main/java/com/formdev/flatlaf/testing/modular/app/FlatModularAppTest.java new file mode 100644 index 00000000..fb0306e0 --- /dev/null +++ b/flatlaf-testing/flatlaf-testing-modular-app/src/main/java/com/formdev/flatlaf/testing/modular/app/FlatModularAppTest.java @@ -0,0 +1,61 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.testing.modular.app; + +import javax.swing.JButton; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.FlatLightLaf; +import com.formdev.flatlaf.extras.FlatSVGIcon; +import com.formdev.flatlaf.extras.FlatSVGUtils; + +/** + * @author Karl Tauber + */ +public class FlatModularAppTest +{ + public static void main( String[] args ) { + SwingUtilities.invokeLater( () -> { + FlatLaf.registerCustomDefaultsSource( + FlatModularAppTest.class.getResource( "/com/formdev/flatlaf/testing/modular/app/themes/" ) ); + FlatLightLaf.setup(); + + JButton button1 = new JButton( "Hello" ); + JButton button2 = new JButton( "World" ); + + button1.setIcon( new FlatSVGIcon( + FlatModularAppTest.class.getResource( "/com/formdev/flatlaf/testing/modular/app/icons/copy.svg" ) ) ); + + JPanel panel = new JPanel(); + panel.add( new JLabel( "Hello World" ) ); + panel.add( button1 ); + panel.add( button2 ); + + JFrame frame = new JFrame( "FlatModularAppTest" ); + frame.setIconImages( FlatSVGUtils.createWindowIconImages( + FlatModularAppTest.class.getResource( "/com/formdev/flatlaf/testing/modular/app/icons/copy.svg" ) ) ); + frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); + frame.getContentPane().add( panel ); + frame.pack(); + frame.setLocationRelativeTo( null ); + frame.setVisible( true ); + } ); + } +} diff --git a/flatlaf-testing/flatlaf-testing-modular-app/src/main/java/com/formdev/flatlaf/testing/modular/app/plaf/MyButtonUI.java b/flatlaf-testing/flatlaf-testing-modular-app/src/main/java/com/formdev/flatlaf/testing/modular/app/plaf/MyButtonUI.java new file mode 100644 index 00000000..4e0fe557 --- /dev/null +++ b/flatlaf-testing/flatlaf-testing-modular-app/src/main/java/com/formdev/flatlaf/testing/modular/app/plaf/MyButtonUI.java @@ -0,0 +1,36 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.formdev.flatlaf.testing.modular.app.plaf; + +import javax.swing.JComponent; +import javax.swing.plaf.ComponentUI; +import com.formdev.flatlaf.ui.FlatButtonUI; + +/** + * @author Karl Tauber + */ +public class MyButtonUI + extends FlatButtonUI +{ + public static ComponentUI createUI( JComponent c ) { + return new MyButtonUI(); + } + + protected MyButtonUI() { + super( false ); + System.out.println( "MyButtonUI" ); + } +} diff --git a/flatlaf-testing/flatlaf-testing-modular-app/src/main/module-info/module-info.java b/flatlaf-testing/flatlaf-testing-modular-app/src/main/module-info/module-info.java new file mode 100644 index 00000000..87e4d76e --- /dev/null +++ b/flatlaf-testing/flatlaf-testing-modular-app/src/main/module-info/module-info.java @@ -0,0 +1,27 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @author Karl Tauber + */ +module com.formdev.flatlaf.testing.modular.app { + requires java.desktop; + requires com.formdev.flatlaf; + requires com.formdev.flatlaf.extras; + requires com.kitfox.svg; + + exports com.formdev.flatlaf.testing.modular.app.plaf; +} diff --git a/flatlaf-testing/flatlaf-testing-modular-app/src/main/resources/com/formdev/flatlaf/testing/modular/app/icons/copy.svg b/flatlaf-testing/flatlaf-testing-modular-app/src/main/resources/com/formdev/flatlaf/testing/modular/app/icons/copy.svg new file mode 100644 index 00000000..2200896e --- /dev/null +++ b/flatlaf-testing/flatlaf-testing-modular-app/src/main/resources/com/formdev/flatlaf/testing/modular/app/icons/copy.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flatlaf-testing/flatlaf-testing-modular-app/src/main/resources/com/formdev/flatlaf/testing/modular/app/themes/FlatLightLaf.properties b/flatlaf-testing/flatlaf-testing-modular-app/src/main/resources/com/formdev/flatlaf/testing/modular/app/themes/FlatLightLaf.properties new file mode 100644 index 00000000..4b52328e --- /dev/null +++ b/flatlaf-testing/flatlaf-testing-modular-app/src/main/resources/com/formdev/flatlaf/testing/modular/app/themes/FlatLightLaf.properties @@ -0,0 +1,20 @@ +# +# Copyright 2020 FormDev Software GmbH +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +@background = #fff +@foreground = #f00 + +ButtonUI = com.formdev.flatlaf.testing.modular.app.plaf.MyButtonUI diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatAWTTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatAWTTest.java new file mode 100644 index 00000000..2a9691f1 --- /dev/null +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatAWTTest.java @@ -0,0 +1,76 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.testing; + +import java.awt.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import com.formdev.flatlaf.FlatLightLaf; + +/** + * Used to test AWT components on macOS, which internally use Swing. + * + * @author Karl Tauber + */ +public class FlatAWTTest +{ + public static void main( String[] args ) { + EventQueue.invokeLater( () -> { + FlatLightLaf.setup(); + + Frame frame = new Frame( "FlatAWTTest" ); + frame.addWindowListener( new WindowAdapter() { + @Override + public void windowClosing( WindowEvent e ) { + System.exit( 0 ); + } + } ); + frame.setLayout( new FlowLayout() ); + + frame.add( new Label( "text" ) ); + frame.add( new Button( "text" ) ); + frame.add( new Checkbox( "text" ) ); + + CheckboxGroup checkboxGroup = new CheckboxGroup(); + frame.add( new Checkbox( "radio 1", true, checkboxGroup ) ); + frame.add( new Checkbox( "radio 2", false, checkboxGroup ) ); + frame.add( new Checkbox( "radio 3", false, checkboxGroup ) ); + + Choice choice = new Choice(); + choice.add( "item 1" ); + choice.add( "item 2" ); + choice.add( "item 3" ); + frame.add( choice ); + + frame.add( new TextField( "text" ) ); + frame.add( new TextArea( "text" ) ); + + List list = new List(); + list.add( "item 1" ); + list.add( "item 2" ); + frame.add( list ); + + frame.add( new Scrollbar() ); + frame.add( new ScrollPane() ); + frame.add( new Panel() ); + frame.add( new Canvas() ); + + frame.setSize( 800, 600 ); + frame.setVisible( true ); + }); + } +} diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatAnimatedIconTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatAnimatedIconTest.java index 0bf90add..160caca6 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatAnimatedIconTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatAnimatedIconTest.java @@ -147,7 +147,7 @@ public class FlatAnimatedIconTest @Override public void paintIconAnimated( Component c, Graphics g, int x, int y, float animatedValue ) { - Color color = ColorFunctions.mix( onColor, offColor, animatedValue );; + Color color = ColorFunctions.mix( onColor, offColor, animatedValue ); // border g.setColor( color ); @@ -190,7 +190,7 @@ public class FlatAnimatedIconTest @Override public void paintIconAnimated( Component c, Graphics g, int x, int y, float animatedValue ) { - Color color = ColorFunctions.mix( onColor, offColor, animatedValue );; + Color color = ColorFunctions.mix( onColor, offColor, animatedValue ); g.setColor( color ); g.fillRoundRect( x, y, width, height, height, height ); diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatBaselineTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatBaselineTest.java index 22a4851c..028a8eea 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatBaselineTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatBaselineTest.java @@ -51,6 +51,7 @@ public class FlatBaselineTest JFormattedTextField formattedTextField1 = new JFormattedTextField(); JPasswordField passwordField1 = new JPasswordField(); JComboBox comboBox1 = new JComboBox<>(); + JComboBox comboBox2 = new JComboBox<>(); JSpinner spinner1 = new JSpinner(); JLabel label6 = new JLabel(); JScrollPane scrollPane1 = new JScrollPane(); @@ -88,7 +89,7 @@ public class FlatBaselineTest //======== this ======== setLayout(new MigLayout( - "insets dialog,hidemode 3,debug", + "insets dialog,hidemode 3", // columns "[fill]" + "[fill]" + @@ -96,6 +97,7 @@ public class FlatBaselineTest "[fill]" + "[fill]" + "[fill]" + + "[fill]" + "[fill]", // rows "[]" + @@ -130,7 +132,7 @@ public class FlatBaselineTest //---- textField4 ---- textField4.setText("Dext field"); - add(textField4, "cell 6 0"); + add(textField4, "cell 7 0"); //---- label2 ---- label2.setText("Dext"); @@ -147,8 +149,20 @@ public class FlatBaselineTest //---- passwordField1 ---- passwordField1.setText("Dext"); add(passwordField1, "cell 3 1"); + + //---- comboBox1 ---- + comboBox1.setModel(new DefaultComboBoxModel<>(new String[] { + "Dext" + })); add(comboBox1, "cell 4 1"); - add(spinner1, "cell 5 1"); + + //---- comboBox2 ---- + comboBox2.setModel(new DefaultComboBoxModel<>(new String[] { + "Dext" + })); + comboBox2.setEditable(true); + add(comboBox2, "cell 5 1"); + add(spinner1, "cell 6 1"); //---- label6 ---- label6.setText("Dext"); @@ -171,7 +185,7 @@ public class FlatBaselineTest //---- textField2 ---- textField2.setText("Dext field"); - add(textField2, "cell 6 2"); + add(textField2, "cell 7 2"); //---- label7 ---- label7.setText("Dext"); @@ -230,18 +244,18 @@ public class FlatBaselineTest //---- textField3 ---- textField3.setText("Dext field"); - add(textField3, "cell 6 3"); + add(textField3, "cell 7 3"); //---- label3 ---- label3.setText("Dext"); add(label3, "cell 0 4"); - add(slider1, "cell 1 4 6 1"); + add(slider1, "cell 1 4 7 1"); //---- slider6 ---- slider6.setPaintTicks(true); slider6.setMajorTickSpacing(25); slider6.setMinorTickSpacing(5); - add(slider6, "cell 1 4 6 1"); + add(slider6, "cell 1 4 7 1"); //---- label8 ---- label8.setText("Dext"); @@ -251,14 +265,14 @@ public class FlatBaselineTest slider7.setPaintLabels(true); slider7.setMajorTickSpacing(25); slider7.setMinorTickSpacing(5); - add(slider7, "cell 1 5 6 1"); + add(slider7, "cell 1 5 7 1"); //---- slider8 ---- slider8.setPaintLabels(true); slider8.setPaintTicks(true); slider8.setMajorTickSpacing(25); slider8.setMinorTickSpacing(5); - add(slider8, "cell 1 5 6 1"); + add(slider8, "cell 1 5 7 1"); //---- label4 ---- label4.setText("Dext"); @@ -266,13 +280,13 @@ public class FlatBaselineTest //---- progressBar1 ---- progressBar1.setValue(30); - add(progressBar1, "cell 1 6 6 1"); + add(progressBar1, "cell 1 6 7 1"); //---- progressBar3 ---- progressBar3.setStringPainted(true); progressBar3.setValue(30); - add(progressBar3, "cell 1 6 6 1"); - add(separator1, "cell 1 6 6 1"); + add(progressBar3, "cell 1 6 7 1"); + add(separator1, "cell 1 6 7 1"); //---- label5 ---- label5.setText("Dext"); @@ -280,26 +294,26 @@ public class FlatBaselineTest //---- slider2 ---- slider2.setOrientation(SwingConstants.VERTICAL); - add(slider2, "cell 1 7 6 1"); + add(slider2, "cell 1 7 7 1"); //---- slider3 ---- slider3.setOrientation(SwingConstants.VERTICAL); slider3.setPaintTicks(true); slider3.setMajorTickSpacing(25); slider3.setMinorTickSpacing(5); - add(slider3, "cell 1 7 6 1"); + add(slider3, "cell 1 7 7 1"); //---- progressBar2 ---- progressBar2.setOrientation(SwingConstants.VERTICAL); progressBar2.setValue(30); - add(progressBar2, "cell 1 7 6 1"); + add(progressBar2, "cell 1 7 7 1"); //---- progressBar4 ---- progressBar4.setOrientation(SwingConstants.VERTICAL); progressBar4.setStringPainted(true); progressBar4.setValue(30); - add(progressBar4, "cell 1 7 6 1"); - add(hSpacer1, "cell 1 7 6 1,growx"); + add(progressBar4, "cell 1 7 7 1"); + add(hSpacer1, "cell 1 7 7 1,growx"); //---- label9 ---- label9.setText("Dext"); @@ -310,7 +324,7 @@ public class FlatBaselineTest slider4.setPaintLabels(true); slider4.setMajorTickSpacing(25); slider4.setMinorTickSpacing(5); - add(slider4, "cell 1 8 6 1"); + add(slider4, "cell 1 8 7 1"); //---- slider5 ---- slider5.setOrientation(SwingConstants.VERTICAL); @@ -318,8 +332,8 @@ public class FlatBaselineTest slider5.setPaintTicks(true); slider5.setMajorTickSpacing(25); slider5.setMinorTickSpacing(5); - add(slider5, "cell 1 8 6 1"); - add(hSpacer2, "cell 1 8 6 1,growx"); + add(slider5, "cell 1 8 7 1"); + add(hSpacer2, "cell 1 8 7 1,growx"); // JFormDesigner - End of component initialization //GEN-END:initComponents } diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatBaselineTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatBaselineTest.jfd index b41f8d16..21df15b5 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatBaselineTest.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatBaselineTest.jfd @@ -1,4 +1,4 @@ -JFDML JFormDesigner: "7.0.2.0.298" Java: "15" encoding: "UTF-8" +JFDML JFormDesigner: "7.0.4.0.360" Java: "16" encoding: "UTF-8" new FormModel { contentType: "form/swing" @@ -7,8 +7,8 @@ new FormModel { "JavaCodeGenerator.defaultVariableLocal": true } add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { - "$layoutConstraints": "insets dialog,hidemode 3,debug" - "$columnConstraints": "[fill][fill][fill][fill][fill][fill][fill]" + "$layoutConstraints": "insets dialog,hidemode 3" + "$columnConstraints": "[fill][fill][fill][fill][fill][fill][fill][fill]" "$rowConstraints": "[][][50][::80][][][][][]" } ) { name: "this" @@ -46,7 +46,7 @@ new FormModel { name: "textField4" "text": "Dext field" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 6 0" + "value": "cell 7 0" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "label2" @@ -74,16 +74,33 @@ new FormModel { } ) add( new FormComponent( "javax.swing.JComboBox" ) { name: "comboBox1" + "model": new javax.swing.DefaultComboBoxModel { + selectedItem: "Dext" + addElement( "Dext" ) + } auxiliary() { "JavaCodeGenerator.typeParameters": "String" } }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 4 1" } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox2" + "model": new javax.swing.DefaultComboBoxModel { + selectedItem: "Dext" + addElement( "Dext" ) + } + "editable": true + auxiliary() { + "JavaCodeGenerator.typeParameters": "String" + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 1" + } ) add( new FormComponent( "javax.swing.JSpinner" ) { name: "spinner1" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 5 1" + "value": "cell 6 1" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "label6" @@ -112,7 +129,7 @@ new FormModel { name: "textField2" "text": "Dext field" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 6 2" + "value": "cell 7 2" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "label7" @@ -184,7 +201,7 @@ new FormModel { name: "textField3" "text": "Dext field" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 6 3" + "value": "cell 7 3" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "label3" @@ -195,7 +212,7 @@ new FormModel { add( new FormComponent( "javax.swing.JSlider" ) { name: "slider1" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 4 6 1" + "value": "cell 1 4 7 1" } ) add( new FormComponent( "javax.swing.JSlider" ) { name: "slider6" @@ -203,7 +220,7 @@ new FormModel { "majorTickSpacing": 25 "minorTickSpacing": 5 }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 4 6 1" + "value": "cell 1 4 7 1" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "label8" @@ -217,7 +234,7 @@ new FormModel { "majorTickSpacing": 25 "minorTickSpacing": 5 }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 5 6 1" + "value": "cell 1 5 7 1" } ) add( new FormComponent( "javax.swing.JSlider" ) { name: "slider8" @@ -226,7 +243,7 @@ new FormModel { "majorTickSpacing": 25 "minorTickSpacing": 5 }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 5 6 1" + "value": "cell 1 5 7 1" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "label4" @@ -238,19 +255,19 @@ new FormModel { name: "progressBar1" "value": 30 }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 6 6 1" + "value": "cell 1 6 7 1" } ) add( new FormComponent( "javax.swing.JProgressBar" ) { name: "progressBar3" "stringPainted": true "value": 30 }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 6 6 1" + "value": "cell 1 6 7 1" } ) add( new FormComponent( "javax.swing.JSeparator" ) { name: "separator1" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 6 6 1" + "value": "cell 1 6 7 1" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "label5" @@ -262,7 +279,7 @@ new FormModel { name: "slider2" "orientation": 1 }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 7 6 1" + "value": "cell 1 7 7 1" } ) add( new FormComponent( "javax.swing.JSlider" ) { name: "slider3" @@ -271,14 +288,14 @@ new FormModel { "majorTickSpacing": 25 "minorTickSpacing": 5 }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 7 6 1" + "value": "cell 1 7 7 1" } ) add( new FormComponent( "javax.swing.JProgressBar" ) { name: "progressBar2" "orientation": 1 "value": 30 }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 7 6 1" + "value": "cell 1 7 7 1" } ) add( new FormComponent( "javax.swing.JProgressBar" ) { name: "progressBar4" @@ -286,12 +303,12 @@ new FormModel { "stringPainted": true "value": 30 }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 7 6 1" + "value": "cell 1 7 7 1" } ) add( new FormComponent( "com.jformdesigner.designer.wrapper.HSpacer" ) { name: "hSpacer1" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 7 6 1,growx" + "value": "cell 1 7 7 1,growx" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "label9" @@ -306,7 +323,7 @@ new FormModel { "majorTickSpacing": 25 "minorTickSpacing": 5 }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 8 6 1" + "value": "cell 1 8 7 1" } ) add( new FormComponent( "javax.swing.JSlider" ) { name: "slider5" @@ -316,12 +333,12 @@ new FormModel { "majorTickSpacing": 25 "minorTickSpacing": 5 }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 8 6 1" + "value": "cell 1 8 7 1" } ) add( new FormComponent( "com.jformdesigner.designer.wrapper.HSpacer" ) { name: "hSpacer2" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 8 6 1,growx" + "value": "cell 1 8 7 1,growx" } ) }, new FormLayoutConstraints( null ) { "location": new java.awt.Point( 0, 0 ) diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponentStateTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponentStateTest.java index 49a0e4d3..8f3b7bf4 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponentStateTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponentStateTest.java @@ -198,17 +198,17 @@ public class FlatComponentStateTest //---- label11 ---- label11.setText("JButton"); - label11.setFont(label11.getFont().deriveFont(label11.getFont().getSize() + 4f)); + label11.putClientProperty("FlatLaf.styleClass", "h3"); add(label11, "cell 1 0 2 1"); //---- label12 ---- label12.setText("JToggleButton"); - label12.setFont(label12.getFont().deriveFont(label12.getFont().getSize() + 4f)); + label12.putClientProperty("FlatLaf.styleClass", "h3"); add(label12, "cell 5 0 3 1"); //---- label32 ---- label32.setText("Help Button"); - label32.setFont(label32.getFont().deriveFont(label32.getFont().getSize() + 4f)); + label32.putClientProperty("FlatLaf.styleClass", "h3"); add(label32, "cell 9 0 2 1"); //---- label5 ---- @@ -513,12 +513,12 @@ public class FlatComponentStateTest //---- label22 ---- label22.setText("JCheckBox"); - label22.setFont(label22.getFont().deriveFont(label22.getFont().getSize() + 4f)); + label22.putClientProperty("FlatLaf.styleClass", "h3"); add(label22, "cell 1 8 2 1"); //---- label27 ---- label27.setText("JRadioButton"); - label27.setFont(label27.getFont().deriveFont(label27.getFont().getSize() + 4f)); + label27.putClientProperty("FlatLaf.styleClass", "h3"); add(label27, "cell 5 8 2 1"); //---- label23 ---- @@ -1076,7 +1076,7 @@ public class FlatComponentStateTest } } - //---- class TestStateCheckBox -------------------------------------------- + //---- class TestStateRadioButton ----------------------------------------- private static class TestStateRadioButton extends JRadioButton diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponentStateTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponentStateTest.jfd index f0af5569..2798e3bf 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponentStateTest.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponentStateTest.jfd @@ -12,21 +12,21 @@ new FormModel { add( new FormComponent( "javax.swing.JLabel" ) { name: "label11" "text": "JButton" - "font": &SwingDerivedFont0 new com.jformdesigner.model.SwingDerivedFont( null, 0, 4, false ) + "$client.FlatLaf.styleClass": "h3" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 0 2 1" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "label12" "text": "JToggleButton" - "font": #SwingDerivedFont0 + "$client.FlatLaf.styleClass": "h3" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 5 0 3 1" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "label32" "text": "Help Button" - "font": #SwingDerivedFont0 + "$client.FlatLaf.styleClass": "h3" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 9 0 2 1" } ) @@ -447,14 +447,14 @@ new FormModel { add( new FormComponent( "javax.swing.JLabel" ) { name: "label22" "text": "JCheckBox" - "font": #SwingDerivedFont0 + "$client.FlatLaf.styleClass": "h3" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 8 2 1" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "label27" "text": "JRadioButton" - "font": #SwingDerivedFont0 + "$client.FlatLaf.styleClass": "h3" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 5 8 2 1" } ) diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponents2Test.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponents2Test.java index 3546933c..54aae794 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponents2Test.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponents2Test.java @@ -24,6 +24,7 @@ import java.awt.EventQueue; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; import java.awt.datatransfer.Transferable; +import java.awt.event.*; import java.io.File; import java.util.ArrayList; import java.util.HashMap; @@ -39,6 +40,7 @@ import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.DefaultTreeModel; import javax.swing.tree.TreeCellRenderer; +import javax.swing.tree.TreePath; import com.formdev.flatlaf.FlatClientProperties; import com.formdev.flatlaf.FlatLaf; import com.formdev.flatlaf.icons.FlatMenuArrowIcon; @@ -69,6 +71,7 @@ public class FlatComponents2Test SwingUtilities.invokeLater( () -> { FlatTestFrame frame = FlatTestFrame.create( args, "FlatComponents2Test" ); frame.useApplyComponentOrientation = true; + UIManager.put( "FlatLaf.experimental.tree.widePathForLocation", true ); frame.showFrame( FlatComponents2Test::new ); } ); } @@ -114,6 +117,7 @@ public class FlatComponents2Test ColorHighlighter rollover = new ColorHighlighter( HighlightPredicate.ROLLOVER_ROW, Color.cyan, null ); Highlighter shading = new ShadingColorHighlighter( new HighlightPredicate.ColumnHighlightPredicate( 1 ) ); xTable1.setHighlighters( simpleStriping, magenta, rollover, shading ); + xTable1.setColumnControlVisible( true ); // JXTreeTable xTreeTable1.setTreeTableModel( new FileSystemModel( new File( "." ) ) ); @@ -327,6 +331,11 @@ public class FlatComponents2Test } } + private void focusCellEditorChanged() { + for( JTable table : allTables ) + table.setSurrendersFocusOnKeystroke( focusCellEditorCheckBox.isSelected() ); + } + private void treeRendererChanged() { Object sel = treeRendererComboBox.getSelectedItem(); if( !(sel instanceof String) ) @@ -378,6 +387,29 @@ public class FlatComponents2Test tree.putClientProperty( FlatClientProperties.TREE_PAINT_SELECTION, paintSelection ); } + private void treeEditableChanged() { + boolean editable = treeEditableCheckBox.isSelected(); + for( JTree tree : allTrees ) + tree.setEditable( editable ); + } + + private void treeMouseClicked( MouseEvent e ) { + JTree tree = (JTree) e.getSource(); + int x = e.getX(); + int y = e.getY(); + + TreePath path = tree.getPathForLocation( x, y ); + TreePath closestPath = tree.getClosestPathForLocation( x, y ); + int row = tree.getRowForLocation( x, y ); + int closestRow = tree.getClosestRowForLocation( x, y ); + + System.out.println( "---- tree mouseClicked " + x + "," + y + " ----" ); + System.out.println( " path: " + path ); + System.out.println( "closest path: " + closestPath ); + System.out.println( " row: " + row ); + System.out.println( "closest row: " + closestRow ); + } + @Override public void applyComponentOrientation( ComponentOrientation o ) { super.applyComponentOrientation( o ); @@ -450,6 +482,7 @@ public class FlatComponents2Test treeRendererComboBox = new JComboBox<>(); treeWideSelectionCheckBox = new JCheckBox(); treePaintSelectionCheckBox = new JCheckBox(); + treeEditableCheckBox = new JCheckBox(); JPanel tableOptionsPanel = new JPanel(); JLabel autoResizeModeLabel = new JLabel(); autoResizeModeField = new JComboBox<>(); @@ -457,6 +490,7 @@ public class FlatComponents2Test sortIconPositionComboBox = new JComboBox<>(); showHorizontalLinesCheckBox = new JCheckBox(); rowSelectionCheckBox = new JCheckBox(); + focusCellEditorCheckBox = new JCheckBox(); showVerticalLinesCheckBox = new JCheckBox(); columnSelectionCheckBox = new JCheckBox(); intercellSpacingCheckBox = new JCheckBox(); @@ -470,7 +504,7 @@ public class FlatComponents2Test // columns "[]" + "[200,grow,sizegroup 1,fill]" + - "[200,grow,sizegroup 1,fill]" + + "[200,grow,sizegroup 1,fill]para" + "[fill]" + "[200,grow,sizegroup 1,fill]" + "[200,grow,sizegroup 1,fill]", @@ -605,6 +639,12 @@ public class FlatComponents2Test //---- tree1 ---- tree1.setShowsRootHandles(true); tree1.setEditable(true); + tree1.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + treeMouseClicked(e); + } + }); scrollPane3.setViewportView(tree1); } add(scrollPane3, "cell 1 2"); @@ -614,6 +654,12 @@ public class FlatComponents2Test //---- tree2 ---- tree2.setEnabled(false); + tree2.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + treeMouseClicked(e); + } + }); scrollPane4.setViewportView(tree2); } add(scrollPane4, "cell 2 2"); @@ -655,12 +701,28 @@ public class FlatComponents2Test //======== scrollPane5 ======== { + + //---- xTree1 ---- + xTree1.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + treeMouseClicked(e); + } + }); scrollPane5.setViewportView(xTree1); } add(scrollPane5, "cell 1 3"); //======== scrollPane6 ======== { + + //---- checkBoxTree1 ---- + checkBoxTree1.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + treeMouseClicked(e); + } + }); scrollPane6.setViewportView(checkBoxTree1); } add(scrollPane6, "cell 2 3"); @@ -700,10 +762,11 @@ public class FlatComponents2Test treeOptionsPanel.setLayout(new MigLayout( "hidemode 3", // columns - "[fill]", + "[left]", // rows "[]" + "[]0" + + "[]0" + "[]")); //---- treeRendererLabel ---- @@ -732,6 +795,11 @@ public class FlatComponents2Test treePaintSelectionCheckBox.setSelected(true); treePaintSelectionCheckBox.addActionListener(e -> treePaintSelectionChanged()); treeOptionsPanel.add(treePaintSelectionCheckBox, "cell 0 2"); + + //---- treeEditableCheckBox ---- + treeEditableCheckBox.setText("editable"); + treeEditableCheckBox.addActionListener(e -> treeEditableChanged()); + treeOptionsPanel.add(treeEditableCheckBox, "cell 0 3"); } add(treeOptionsPanel, "cell 2 4"); @@ -742,6 +810,7 @@ public class FlatComponents2Test "hidemode 3", // columns "[]" + + "[fill]" + "[fill]", // rows "[]" + @@ -752,7 +821,7 @@ public class FlatComponents2Test //---- autoResizeModeLabel ---- autoResizeModeLabel.setText("Auto resize mode:"); - tableOptionsPanel.add(autoResizeModeLabel, "cell 0 0 2 1"); + tableOptionsPanel.add(autoResizeModeLabel, "cell 0 0 3 1"); //---- autoResizeModeField ---- autoResizeModeField.setModel(new DefaultComboBoxModel<>(new String[] { @@ -764,11 +833,11 @@ public class FlatComponents2Test })); autoResizeModeField.setSelectedIndex(2); autoResizeModeField.addActionListener(e -> autoResizeModeChanged()); - tableOptionsPanel.add(autoResizeModeField, "cell 0 0 2 1"); + tableOptionsPanel.add(autoResizeModeField, "cell 0 0 3 1"); //---- sortIconPositionLabel ---- sortIconPositionLabel.setText("Sort icon:"); - tableOptionsPanel.add(sortIconPositionLabel, "cell 0 0 2 1"); + tableOptionsPanel.add(sortIconPositionLabel, "cell 0 0 3 1"); //---- sortIconPositionComboBox ---- sortIconPositionComboBox.setModel(new DefaultComboBoxModel<>(new String[] { @@ -778,7 +847,7 @@ public class FlatComponents2Test "bottom" })); sortIconPositionComboBox.addActionListener(e -> sortIconPositionChanged()); - tableOptionsPanel.add(sortIconPositionComboBox, "cell 0 0 2 1"); + tableOptionsPanel.add(sortIconPositionComboBox, "cell 0 0 3 1"); //---- showHorizontalLinesCheckBox ---- showHorizontalLinesCheckBox.setText("show horizontal lines"); @@ -791,6 +860,11 @@ public class FlatComponents2Test rowSelectionCheckBox.addActionListener(e -> rowSelectionChanged()); tableOptionsPanel.add(rowSelectionCheckBox, "cell 1 1"); + //---- focusCellEditorCheckBox ---- + focusCellEditorCheckBox.setText("focus cell editor"); + focusCellEditorCheckBox.addActionListener(e -> focusCellEditorChanged()); + tableOptionsPanel.add(focusCellEditorCheckBox, "cell 2 1"); + //---- showVerticalLinesCheckBox ---- showVerticalLinesCheckBox.setText("show vertical lines"); showVerticalLinesCheckBox.addActionListener(e -> showVerticalLinesChanged()); @@ -819,7 +893,7 @@ public class FlatComponents2Test //---- tableHeaderButtonCheckBox ---- tableHeaderButtonCheckBox.setText("show button in table header"); tableHeaderButtonCheckBox.addActionListener(e -> tableHeaderButtonChanged()); - tableOptionsPanel.add(tableHeaderButtonCheckBox, "cell 1 4"); + tableOptionsPanel.add(tableHeaderButtonCheckBox, "cell 1 4 2 1"); } add(tableOptionsPanel, "cell 4 4 2 1"); // JFormDesigner - End of component initialization //GEN-END:initComponents @@ -845,10 +919,12 @@ public class FlatComponents2Test private JComboBox treeRendererComboBox; private JCheckBox treeWideSelectionCheckBox; private JCheckBox treePaintSelectionCheckBox; + private JCheckBox treeEditableCheckBox; private JComboBox autoResizeModeField; private JComboBox sortIconPositionComboBox; private JCheckBox showHorizontalLinesCheckBox; private JCheckBox rowSelectionCheckBox; + private JCheckBox focusCellEditorCheckBox; private JCheckBox showVerticalLinesCheckBox; private JCheckBox columnSelectionCheckBox; private JCheckBox intercellSpacingCheckBox; diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponents2Test.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponents2Test.jfd index caa82559..2ded4803 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponents2Test.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponents2Test.jfd @@ -1,4 +1,4 @@ -JFDML JFormDesigner: "7.0.3.1.342" Java: "16" encoding: "UTF-8" +JFDML JFormDesigner: "7.0.5.0.382" Java: "16" encoding: "UTF-8" new FormModel { contentType: "form/swing" @@ -8,7 +8,7 @@ new FormModel { } add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { "$layoutConstraints": "ltr,insets dialog,hidemode 3" - "$columnConstraints": "[][200,grow,sizegroup 1,fill][200,grow,sizegroup 1,fill][fill][200,grow,sizegroup 1,fill][200,grow,sizegroup 1,fill]" + "$columnConstraints": "[][200,grow,sizegroup 1,fill][200,grow,sizegroup 1,fill]para[fill][200,grow,sizegroup 1,fill][200,grow,sizegroup 1,fill]" "$rowConstraints": "[][150,grow,sizegroup 1,fill][150,grow,sizegroup 1,fill][150,grow,sizegroup 1,fill][fill]" } ) { name: "this" @@ -185,6 +185,7 @@ new FormModel { auxiliary() { "JavaCodeGenerator.variableLocal": false } + addEvent( new FormEvent( "java.awt.event.MouseListener", "mouseClicked", "treeMouseClicked", true ) ) } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 2" @@ -197,6 +198,7 @@ new FormModel { auxiliary() { "JavaCodeGenerator.variableLocal": false } + addEvent( new FormEvent( "java.awt.event.MouseListener", "mouseClicked", "treeMouseClicked", true ) ) } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 2 2" @@ -255,6 +257,7 @@ new FormModel { auxiliary() { "JavaCodeGenerator.variableLocal": false } + addEvent( new FormEvent( "java.awt.event.MouseListener", "mouseClicked", "treeMouseClicked", true ) ) } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 3" @@ -266,6 +269,7 @@ new FormModel { auxiliary() { "JavaCodeGenerator.variableLocal": false } + addEvent( new FormEvent( "java.awt.event.MouseListener", "mouseClicked", "treeMouseClicked", true ) ) } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 2 3" @@ -313,8 +317,8 @@ new FormModel { } ) add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { "$layoutConstraints": "hidemode 3" - "$columnConstraints": "[fill]" - "$rowConstraints": "[][]0[]" + "$columnConstraints": "[left]" + "$rowConstraints": "[][]0[]0[]" } ) { name: "treeOptionsPanel" "border": new javax.swing.border.TitledBorder( "JTree Control" ) @@ -363,12 +367,22 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 2" } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "treeEditableCheckBox" + "text": "editable" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "treeEditableChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 3" + } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 2 4" } ) add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { "$layoutConstraints": "hidemode 3" - "$columnConstraints": "[][fill]" + "$columnConstraints": "[][fill][fill]" "$rowConstraints": "[][]0[]0[]0[]0" } ) { name: "tableOptionsPanel" @@ -377,7 +391,7 @@ new FormModel { name: "autoResizeModeLabel" "text": "Auto resize mode:" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 0 0 2 1" + "value": "cell 0 0 3 1" } ) add( new FormComponent( "javax.swing.JComboBox" ) { name: "autoResizeModeField" @@ -396,13 +410,13 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "autoResizeModeChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 0 0 2 1" + "value": "cell 0 0 3 1" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "sortIconPositionLabel" "text": "Sort icon:" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 0 0 2 1" + "value": "cell 0 0 3 1" } ) add( new FormComponent( "javax.swing.JComboBox" ) { name: "sortIconPositionComboBox" @@ -418,7 +432,7 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "sortIconPositionChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 0 0 2 1" + "value": "cell 0 0 3 1" } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "showHorizontalLinesCheckBox" @@ -441,6 +455,16 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 1" } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "focusCellEditorCheckBox" + "text": "focus cell editor" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "focusCellEditorChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 1" + } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "showVerticalLinesCheckBox" "text": "show vertical lines" @@ -499,14 +523,14 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tableHeaderButtonChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 4" + "value": "cell 1 4 2 1" } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 4 4 2 1" } ) }, new FormLayoutConstraints( null ) { "location": new java.awt.Point( 0, 0 ) - "size": new java.awt.Dimension( 1000, 600 ) + "size": new java.awt.Dimension( 1095, 610 ) } ) } } diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponentsTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponentsTest.java index b74c3aa8..12983d6a 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponentsTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatComponentsTest.java @@ -162,7 +162,6 @@ public class FlatComponentsTest ((JComponent)c).putClientProperty( FlatClientProperties.OUTLINE, outline ); } ); - repaint(); textField1.requestFocusInWindow(); } @@ -1621,6 +1620,11 @@ public class FlatComponentsTest // customRenderer.setBorder( new LineBorder( Color.red ) ); // comboBox1.setRenderer( customRenderer ); // comboBox3.setRenderer( customRenderer ); +// comboBox5.setRenderer( new DefaultListCellRenderer() ); + + // for testing issue #382 +// spinner1.setModel( new SpinnerNumberModel( 0, null, 100, 1 ) ); +// comboBox1.setEditor( new BasicComboBoxEditor() ); } // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatContainerTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatContainerTest.java index d465a652..9fa10da9 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatContainerTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatContainerTest.java @@ -50,6 +50,8 @@ public class FlatContainerTest public FlatContainerTest() { initComponents(); + tabTypeComboBox.init( TabType.class, true ); + tabPlacementField.init( TabPlacement.class, true ); iconPlacementField.init( TabIconPlacement.class, true ); tabsPopupPolicyField.init( TabsPopupPolicy.class, true ); @@ -310,6 +312,12 @@ public class FlatContainerTest tabbedPane.setTabWidthMode( value ); } + private void tabTypeChanged() { + TabType value = tabTypeComboBox.getSelectedValue(); + for( FlatTabbedPane tabbedPane : allTabbedPanes ) + tabbedPane.setTabType( value ); + } + private void tabBackForegroundChanged() { for( JTabbedPane tabbedPane : allTabbedPanes ) tabBackForegroundChanged( tabbedPane ); @@ -491,6 +499,8 @@ public class FlatContainerTest tabAlignmentField = new FlatTestEnumComboBox<>(); JLabel tabWidthModeLabel = new JLabel(); tabWidthModeField = new FlatTestEnumComboBox<>(); + JLabel tabTypeLabel = new JLabel(); + tabTypeComboBox = new FlatTestEnumComboBox<>(); leadingComponentCheckBox = new JCheckBox(); customBorderCheckBox = new JCheckBox(); tabAreaInsetsCheckBox = new JCheckBox(); @@ -619,6 +629,7 @@ public class FlatContainerTest "[]" + "[]" + "[]" + + "[]" + "[]para" + "[]" + "[]para" + @@ -739,75 +750,83 @@ public class FlatContainerTest tabWidthModeField.addActionListener(e -> tabWidthModeChanged()); tabbedPaneControlPanel.add(tabWidthModeField, "cell 2 5"); + //---- tabTypeLabel ---- + tabTypeLabel.setText("Tab type:"); + tabbedPaneControlPanel.add(tabTypeLabel, "cell 0 6"); + + //---- tabTypeComboBox ---- + tabTypeComboBox.addActionListener(e -> tabTypeChanged()); + tabbedPaneControlPanel.add(tabTypeComboBox, "cell 1 6"); + //---- leadingComponentCheckBox ---- leadingComponentCheckBox.setText("Leading component"); leadingComponentCheckBox.addActionListener(e -> leadingComponentChanged()); - tabbedPaneControlPanel.add(leadingComponentCheckBox, "cell 0 6"); + tabbedPaneControlPanel.add(leadingComponentCheckBox, "cell 0 7"); //---- customBorderCheckBox ---- customBorderCheckBox.setText("Custom border"); customBorderCheckBox.addActionListener(e -> customBorderChanged()); - tabbedPaneControlPanel.add(customBorderCheckBox, "cell 1 6"); + tabbedPaneControlPanel.add(customBorderCheckBox, "cell 1 7"); //---- tabAreaInsetsCheckBox ---- tabAreaInsetsCheckBox.setText("Tab area insets (5,5,10,10)"); tabAreaInsetsCheckBox.addActionListener(e -> tabAreaInsetsChanged()); - tabbedPaneControlPanel.add(tabAreaInsetsCheckBox, "cell 2 6"); + tabbedPaneControlPanel.add(tabAreaInsetsCheckBox, "cell 2 7"); //---- trailingComponentCheckBox ---- trailingComponentCheckBox.setText("Trailing component"); trailingComponentCheckBox.addActionListener(e -> trailingComponentChanged()); - tabbedPaneControlPanel.add(trailingComponentCheckBox, "cell 0 7"); + tabbedPaneControlPanel.add(trailingComponentCheckBox, "cell 0 8"); //---- hasFullBorderCheckBox ---- hasFullBorderCheckBox.setText("Show content border"); hasFullBorderCheckBox.addActionListener(e -> hasFullBorderChanged()); - tabbedPaneControlPanel.add(hasFullBorderCheckBox, "cell 1 7,alignx left,growx 0"); + tabbedPaneControlPanel.add(hasFullBorderCheckBox, "cell 1 8,alignx left,growx 0"); //---- smallerTabHeightCheckBox ---- smallerTabHeightCheckBox.setText("Smaller tab height (26)"); smallerTabHeightCheckBox.addActionListener(e -> smallerTabHeightChanged()); - tabbedPaneControlPanel.add(smallerTabHeightCheckBox, "cell 2 7"); + tabbedPaneControlPanel.add(smallerTabHeightCheckBox, "cell 2 8"); //---- minimumTabWidthCheckBox ---- minimumTabWidthCheckBox.setText("Minimum tab width (100)"); minimumTabWidthCheckBox.addActionListener(e -> minimumTabWidthChanged()); - tabbedPaneControlPanel.add(minimumTabWidthCheckBox, "cell 0 8"); + tabbedPaneControlPanel.add(minimumTabWidthCheckBox, "cell 0 9"); //---- hideContentSeparatorCheckBox ---- hideContentSeparatorCheckBox.setText("Hide content separator"); hideContentSeparatorCheckBox.addActionListener(e -> hideContentSeparatorChanged()); - tabbedPaneControlPanel.add(hideContentSeparatorCheckBox, "cell 1 8"); + tabbedPaneControlPanel.add(hideContentSeparatorCheckBox, "cell 1 9"); //---- smallerInsetsCheckBox ---- smallerInsetsCheckBox.setText("Smaller tab insets (2,2,2,2)"); smallerInsetsCheckBox.addActionListener(e -> smallerInsetsChanged()); - tabbedPaneControlPanel.add(smallerInsetsCheckBox, "cell 2 8"); + tabbedPaneControlPanel.add(smallerInsetsCheckBox, "cell 2 9"); //---- maximumTabWidthCheckBox ---- maximumTabWidthCheckBox.setText("Maximum tab width (60)"); maximumTabWidthCheckBox.addActionListener(e -> maximumTabWidthChanged()); - tabbedPaneControlPanel.add(maximumTabWidthCheckBox, "cell 0 9"); + tabbedPaneControlPanel.add(maximumTabWidthCheckBox, "cell 0 10"); //---- showTabSeparatorsCheckBox ---- showTabSeparatorsCheckBox.setText("Show tab separators"); showTabSeparatorsCheckBox.addActionListener(e -> showTabSeparatorsChanged()); - tabbedPaneControlPanel.add(showTabSeparatorsCheckBox, "cell 1 9"); + tabbedPaneControlPanel.add(showTabSeparatorsCheckBox, "cell 1 10"); //---- secondTabWiderCheckBox ---- secondTabWiderCheckBox.setText("Second Tab insets wider (4,20,4,20)"); secondTabWiderCheckBox.addActionListener(e -> secondTabWiderChanged()); - tabbedPaneControlPanel.add(secondTabWiderCheckBox, "cell 2 9"); + tabbedPaneControlPanel.add(secondTabWiderCheckBox, "cell 2 10"); //---- hideTabAreaWithOneTabCheckBox ---- hideTabAreaWithOneTabCheckBox.setText("Hide tab area with one tab"); hideTabAreaWithOneTabCheckBox.addActionListener(e -> hideTabAreaWithOneTabChanged()); - tabbedPaneControlPanel.add(hideTabAreaWithOneTabCheckBox, "cell 1 10"); + tabbedPaneControlPanel.add(hideTabAreaWithOneTabCheckBox, "cell 1 11"); //---- customWheelScrollingCheckBox ---- customWheelScrollingCheckBox.setText("Custom wheel scrolling"); customWheelScrollingCheckBox.addActionListener(e -> customWheelScrollingChanged()); - tabbedPaneControlPanel.add(customWheelScrollingCheckBox, "cell 2 10"); + tabbedPaneControlPanel.add(customWheelScrollingCheckBox, "cell 2 11"); } panel9.add(tabbedPaneControlPanel, cc.xywh(1, 11, 3, 1)); } @@ -840,6 +859,7 @@ public class FlatContainerTest private FlatTestEnumComboBox tabAreaAlignmentField; private FlatTestEnumComboBox tabAlignmentField; private FlatTestEnumComboBox tabWidthModeField; + private FlatTestEnumComboBox tabTypeComboBox; private JCheckBox leadingComponentCheckBox; private JCheckBox customBorderCheckBox; private JCheckBox tabAreaInsetsCheckBox; diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatContainerTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatContainerTest.jfd index 2fe1d8b9..cecff88e 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatContainerTest.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatContainerTest.jfd @@ -132,7 +132,7 @@ new FormModel { add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestFrame$NoRightToLeftPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { "$layoutConstraints": "insets 0,hidemode 3" "$columnConstraints": "[][fill][]" - "$rowConstraints": "[center][][][][][]para[][]para[][][]" + "$rowConstraints": "[center][][][][][][]para[][]para[][][]" } ) { name: "tabbedPaneControlPanel" "opaque": false @@ -372,6 +372,22 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 2 5" } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "tabTypeLabel" + "text": "Tab type:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTestEnumComboBox" ) { + name: "tabTypeComboBox" + auxiliary() { + "JavaCodeGenerator.typeParameters": "TabType" + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabTypeChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 6" + } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "leadingComponentCheckBox" "text": "Leading component" @@ -380,7 +396,7 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "leadingComponentChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 0 6" + "value": "cell 0 7" } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "customBorderCheckBox" @@ -390,7 +406,7 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "customBorderChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 6" + "value": "cell 1 7" } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "tabAreaInsetsCheckBox" @@ -400,7 +416,7 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabAreaInsetsChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 6" + "value": "cell 2 7" } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "trailingComponentCheckBox" @@ -410,7 +426,7 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "trailingComponentChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 0 7" + "value": "cell 0 8" } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "hasFullBorderCheckBox" @@ -420,7 +436,7 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "hasFullBorderChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 7,alignx left,growx 0" + "value": "cell 1 8,alignx left,growx 0" } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "smallerTabHeightCheckBox" @@ -430,7 +446,7 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "smallerTabHeightChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 7" + "value": "cell 2 8" } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "minimumTabWidthCheckBox" @@ -440,7 +456,7 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "minimumTabWidthChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 0 8" + "value": "cell 0 9" } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "hideContentSeparatorCheckBox" @@ -450,7 +466,7 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "hideContentSeparatorChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 8" + "value": "cell 1 9" } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "smallerInsetsCheckBox" @@ -460,7 +476,7 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "smallerInsetsChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 8" + "value": "cell 2 9" } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "maximumTabWidthCheckBox" @@ -470,7 +486,7 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "maximumTabWidthChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 0 9" + "value": "cell 0 10" } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "showTabSeparatorsCheckBox" @@ -480,7 +496,7 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showTabSeparatorsChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 9" + "value": "cell 1 10" } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "secondTabWiderCheckBox" @@ -490,7 +506,7 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "secondTabWiderChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 9" + "value": "cell 2 10" } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "hideTabAreaWithOneTabCheckBox" @@ -500,7 +516,7 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "hideTabAreaWithOneTabChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 10" + "value": "cell 1 11" } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "customWheelScrollingCheckBox" @@ -510,7 +526,7 @@ new FormModel { } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "customWheelScrollingChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 10" + "value": "cell 2 11" } ) }, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) { "gridY": 11 diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatCustomBordersTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatCustomBordersTest.java index 18c5a0cb..2d2bd064 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatCustomBordersTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatCustomBordersTest.java @@ -20,6 +20,7 @@ import java.awt.*; import javax.swing.*; import javax.swing.border.*; import javax.swing.plaf.basic.BasicComboBoxEditor; +import javax.swing.plaf.basic.BasicComboBoxRenderer; import com.formdev.flatlaf.icons.FlatFileViewFloppyDriveIcon; import com.formdev.flatlaf.util.UIScale; import net.miginfocom.swing.*; @@ -33,7 +34,7 @@ public class FlatCustomBordersTest private static final Color RED = new Color( 0x60ff0000, true ); private static final Color GREEN = new Color( 0x6000ff00, true ); private static final Color MAGENTA = new Color( 0x60ff00ff, true ); - private static final Color ORANGE = new Color( 0x60ffc800, true ); + private static final Color BLUE = new Color( 0x300000ff, true ); public static void main( String[] args ) { SwingUtilities.invokeLater( () -> { @@ -42,9 +43,24 @@ public class FlatCustomBordersTest } ); } + @SuppressWarnings( "unchecked" ) FlatCustomBordersTest() { initComponents(); applyCustomBorders(); + applySpecialComboBoxRenderers(); + + DefaultComboBoxModel model = new DefaultComboBoxModel<>( new String[] { + "text", + "123", + "4567", + "abc", + "def" + } ); + + for( Component c : getComponents() ) { + if( c instanceof JComboBox ) + ((JComboBox)c).setModel( model ); + } } @Override @@ -99,6 +115,40 @@ public class FlatCustomBordersTest applyCustomComboBoxEditorBorderWithIcon( comboBox20 ); applyCustomComboBoxEditorBorder( comboBox21, null ); applyCustomComboBoxEditorBorder( comboBox22, null ); + + applyCustomComboBoxRendererBorder( comboBox23 ); + applyCustomComboBoxRendererBorder( comboBox24 ); + applyCustomComboBoxRendererBorderWithIcon( comboBox25 ); + applyCustomComboBoxRendererBorderWithIcon( comboBox26 ); + applyCustomComboBoxRendererBorder( comboBox27, null ); + applyCustomComboBoxRendererBorder( comboBox28, null ); + } + + @SuppressWarnings( "unchecked" ) + private void applySpecialComboBoxRenderers() { + BasicComboBoxRenderer sharedRenderer = new BasicComboBoxRenderer(); + sharedRenderer.setBorder( new LineBorder( BLUE, UIScale.scale( 2 ) ) ); + comboBox29.setRenderer( sharedRenderer ); + comboBox30.setRenderer( sharedRenderer ); + + comboBox31.setRenderer( new ListCellRenderer() { + JLabel l1 = new JLabel(); + JLabel l2 = new JLabel(); + + @Override + public Component getListCellRendererComponent( JList list, + String value, int index, boolean isSelected, boolean cellHasFocus ) + { + JLabel l = (index % 2 == 0) ? l1 : l2; + l.setText( (value != null) ? value.toString() : "" ); + l.setBorder( new LineBorder( (index % 2 == 0) ? GREEN : RED, UIScale.scale( 2 ) ) ); + l.setBackground( isSelected ? list.getSelectionBackground() : list.getBackground() ); + l.setForeground( isSelected ? list.getSelectionForeground() : list.getForeground() ); + l.setFont( list.getFont() ); + l.setOpaque( true ); + return l; + } + } ); } private void applyCustomInsideBorder( JComponent c, String uiKey ) { @@ -110,7 +160,7 @@ public class FlatCustomBordersTest } private void applyCustomComboBoxEditorBorder( JComboBox comboBox ) { - applyCustomComboBoxEditorBorder( comboBox, new LineBorder( ORANGE, UIScale.scale( 3 ) ) ); + applyCustomComboBoxEditorBorder( comboBox, new LineBorder( BLUE, UIScale.scale( 6 ) ) ); } private void applyCustomComboBoxEditorBorderWithIcon( JComboBox comboBox ) { @@ -129,6 +179,21 @@ public class FlatCustomBordersTest } ); } + private void applyCustomComboBoxRendererBorder( JComboBox comboBox ) { + applyCustomComboBoxRendererBorder( comboBox, new LineBorder( BLUE, UIScale.scale( 6 ) ) ); + } + + private void applyCustomComboBoxRendererBorderWithIcon( JComboBox comboBox ) { + applyCustomComboBoxRendererBorder( comboBox, new BorderWithIcon() ); + } + + @SuppressWarnings( "unchecked" ) + private void applyCustomComboBoxRendererBorder( JComboBox comboBox, Border border ) { + BasicComboBoxRenderer customRenderer = new BasicComboBoxRenderer(); + customRenderer.setBorder( border ); + comboBox.setRenderer( customRenderer ); + } + private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents label1 = new JLabel(); @@ -152,10 +217,16 @@ public class FlatCustomBordersTest comboBox2 = new JComboBox<>(); comboBox3 = new JComboBox<>(); comboBox4 = new JComboBox<>(); + comboBox23 = new JComboBox<>(); + comboBox25 = new JComboBox<>(); + comboBox27 = new JComboBox<>(); comboBox5 = new JComboBox<>(); comboBox6 = new JComboBox<>(); comboBox7 = new JComboBox<>(); comboBox8 = new JComboBox<>(); + comboBox24 = new JComboBox<>(); + comboBox26 = new JComboBox<>(); + comboBox28 = new JComboBox<>(); comboBox9 = new JComboBox<>(); comboBox10 = new JComboBox<>(); comboBox11 = new JComboBox<>(); @@ -188,6 +259,11 @@ public class FlatCustomBordersTest textField6 = new JTextField(); textField7 = new JTextField(); textField8 = new JTextField(); + label11 = new JLabel(); + label12 = new JLabel(); + comboBox29 = new JComboBox<>(); + comboBox30 = new JComboBox<>(); + comboBox31 = new JComboBox<>(); //======== this ======== setLayout(new MigLayout( @@ -212,6 +288,8 @@ public class FlatCustomBordersTest "[]" + "[]" + "[]" + + "[]para" + + "[]" + "[]")); //---- label1 ---- @@ -289,6 +367,9 @@ public class FlatCustomBordersTest add(comboBox2, "cell 2 3"); add(comboBox3, "cell 3 3"); add(comboBox4, "cell 4 3"); + add(comboBox23, "cell 5 3"); + add(comboBox25, "cell 6 3"); + add(comboBox27, "cell 7 3"); //---- comboBox5 ---- comboBox5.putClientProperty("JComponent.roundRect", true); @@ -306,6 +387,18 @@ public class FlatCustomBordersTest comboBox8.putClientProperty("JComponent.roundRect", true); add(comboBox8, "cell 4 4"); + //---- comboBox24 ---- + comboBox24.putClientProperty("JComponent.roundRect", true); + add(comboBox24, "cell 5 4"); + + //---- comboBox26 ---- + comboBox26.putClientProperty("JComponent.roundRect", true); + add(comboBox26, "cell 6 4"); + + //---- comboBox28 ---- + comboBox28.putClientProperty("JComponent.roundRect", true); + add(comboBox28, "cell 7 4"); + //---- comboBox9 ---- comboBox9.setEditable(true); add(comboBox9, "cell 1 5"); @@ -435,6 +528,17 @@ public class FlatCustomBordersTest textField8.putClientProperty("JComponent.roundRect", true); textField8.setText("text"); add(textField8, "cell 4 10"); + + //---- label11 ---- + label11.setText("JComboBox with shared renderer:"); + add(label11, "cell 1 11 2 1"); + + //---- label12 ---- + label12.setText("JComboBox with renderer that uses varying components:"); + add(label12, "cell 3 11 3 1"); + add(comboBox29, "cell 1 12"); + add(comboBox30, "cell 2 12"); + add(comboBox31, "cell 3 12"); // JFormDesigner - End of component initialization //GEN-END:initComponents } @@ -460,10 +564,16 @@ public class FlatCustomBordersTest private JComboBox comboBox2; private JComboBox comboBox3; private JComboBox comboBox4; + private JComboBox comboBox23; + private JComboBox comboBox25; + private JComboBox comboBox27; private JComboBox comboBox5; private JComboBox comboBox6; private JComboBox comboBox7; private JComboBox comboBox8; + private JComboBox comboBox24; + private JComboBox comboBox26; + private JComboBox comboBox28; private JComboBox comboBox9; private JComboBox comboBox10; private JComboBox comboBox11; @@ -496,6 +606,11 @@ public class FlatCustomBordersTest private JTextField textField6; private JTextField textField7; private JTextField textField8; + private JLabel label11; + private JLabel label12; + private JComboBox comboBox29; + private JComboBox comboBox30; + private JComboBox comboBox31; // JFormDesigner - End of variables declaration //GEN-END:variables //---- class BorderWithIcon ----------------------------------------------- @@ -508,6 +623,9 @@ public class FlatCustomBordersTest @Override public void paintBorder( Component c, Graphics g, int x, int y, int width, int height ) { icon.paintIcon( c, g, x + width - icon.getIconWidth() - 2, y + ((height - icon.getIconHeight()) / 2) ); + + g.setColor( RED ); + g.drawRect( x, y, width - 1, height - 1 ); } @Override diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatCustomBordersTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatCustomBordersTest.jfd index 36dea94b..f2ca9cd3 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatCustomBordersTest.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatCustomBordersTest.jfd @@ -1,4 +1,4 @@ -JFDML JFormDesigner: "7.0.2.0.298" Java: "15" encoding: "UTF-8" +JFDML JFormDesigner: "7.0.4.0.360" Java: "16" encoding: "UTF-8" new FormModel { contentType: "form/swing" @@ -6,7 +6,7 @@ new FormModel { add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { "$layoutConstraints": "ltr,insets dialog,hidemode 3" "$columnConstraints": "[][fill][fill][fill][fill][fill][fill][fill]" - "$rowConstraints": "[][][][][][][][][][][]" + "$rowConstraints": "[][][][][][][][][][][]para[][]" } ) { name: "this" add( new FormComponent( "javax.swing.JLabel" ) { @@ -147,6 +147,30 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 4 3" } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox23" + auxiliary() { + "JavaCodeGenerator.typeParameters": "String" + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 3" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox25" + auxiliary() { + "JavaCodeGenerator.typeParameters": "String" + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 3" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox27" + auxiliary() { + "JavaCodeGenerator.typeParameters": "String" + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 3" + } ) add( new FormComponent( "javax.swing.JComboBox" ) { name: "comboBox5" "$client.JComponent.roundRect": true @@ -183,6 +207,33 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 4 4" } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox24" + "$client.JComponent.roundRect": true + auxiliary() { + "JavaCodeGenerator.typeParameters": "String" + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 4" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox26" + "$client.JComponent.roundRect": true + auxiliary() { + "JavaCodeGenerator.typeParameters": "String" + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 4" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox28" + "$client.JComponent.roundRect": true + auxiliary() { + "JavaCodeGenerator.typeParameters": "String" + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 4" + } ) add( new FormComponent( "javax.swing.JComboBox" ) { name: "comboBox9" "editable": true @@ -427,6 +478,42 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 4 10" } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label11" + "text": "JComboBox with shared renderer:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 11 2 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label12" + "text": "JComboBox with renderer that uses varying components:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 11 3 1" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox29" + auxiliary() { + "JavaCodeGenerator.typeParameters": "String" + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 12" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox30" + auxiliary() { + "JavaCodeGenerator.typeParameters": "String" + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 12" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox31" + auxiliary() { + "JavaCodeGenerator.typeParameters": "String" + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 12" + } ) }, new FormLayoutConstraints( null ) { "location": new java.awt.Point( 0, 0 ) "size": new java.awt.Dimension( 915, 715 ) diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatFontsTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatFontsTest.java new file mode 100644 index 00000000..75c2b254 --- /dev/null +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatFontsTest.java @@ -0,0 +1,243 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.testing; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Font; +import java.awt.GraphicsEnvironment; +import java.util.Map; +import java.util.TreeMap; +import javax.swing.*; +import com.formdev.flatlaf.util.UIScale; +import net.miginfocom.swing.*; + +/** + * @author Karl Tauber + */ +public class FlatFontsTest + extends JPanel +{ + public static void main( String[] args ) { + SwingUtilities.invokeLater( () -> { + FlatTestFrame frame = FlatTestFrame.create( args, "FlatFontsTest" ); + frame.showFrame( FlatFontsTest::new ); + } ); + } + + FlatFontsTest() { + initComponents(); + + Font[] allFonts = GraphicsEnvironment.getLocalGraphicsEnvironment().getAllFonts(); + + TreeMap> familiesMap = new TreeMap<>(); + for( Font font : allFonts ) { + TreeMap familyFontsMap = familiesMap.computeIfAbsent( font.getFamily(), key -> new TreeMap<>() ); + Font old = familyFontsMap.put( font.getName(), font ); + if( old != null ) { + System.err.println( "Duplicate font name '" + font.getName() + "'" ); + System.err.println( " " + old ); + System.err.println( " " + font ); + } + } + + DefaultListModel model = new DefaultListModel<>(); + for( Map.Entry> e : familiesMap.entrySet() ) { + FontFamilyInfo info = new FontFamilyInfo(); + info.name = e.getKey(); + info.fonts = e.getValue(); + model.addElement( info ); + } + familiesList.setModel( model ); + familiesList.setCellRenderer( new FontFamilyRenderer() ); + familiesList.setSelectedIndex( 0 ); + + SwingUtilities.invokeLater( () -> { + SwingUtilities.invokeLater( () -> { + familiesList.requestFocusInWindow(); + } ); + } ); + } + + private void familyChanged() { + previewFamilyNameLabel.setText( "" ); + previewPanel.removeAll(); + + FontFamilyInfo info = familiesList.getSelectedValue(); + if( info == null ) + return; + + previewFamilyNameLabel.setText( info.name ); + + for( Map.Entry e : info.fonts.entrySet() ) { + JLabel label = new JLabel( e.getKey() ); + label.setFont( e.getValue().deriveFont( (float) UIScale.scale( 36 ) ) ); + label.setToolTipText( e.getValue().toString() ); + previewPanel.add( label, "wrap" ); + } + + previewPanel.revalidate(); + previewPanel.repaint(); + } + + private void initComponents() { + // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents + JLabel familiesLabel = new JLabel(); + previewFamilyNameLabel = new JLabel(); + JScrollPane familiesScrollPane = new JScrollPane(); + familiesList = new JList<>(); + JSeparator separator1 = new JSeparator(); + JScrollPane scrollPane1 = new JScrollPane(); + previewPanel = new JPanel(); + + //======== this ======== + setBorder(null); + setLayout(new MigLayout( + "insets dialog,hidemode 3", + // columns + "[230:230,fill]para" + + "[grow,fill]", + // rows + "[top]" + + "[]" + + "[]" + + "[800,grow,fill]")); + + //---- familiesLabel ---- + familiesLabel.setText("Families:"); + add(familiesLabel, "cell 0 0"); + + //---- previewFamilyNameLabel ---- + previewFamilyNameLabel.setText("name"); + previewFamilyNameLabel.putClientProperty("FlatLaf.styleClass", "h1"); + add(previewFamilyNameLabel, "cell 1 1"); + + //======== familiesScrollPane ======== + { + + //---- familiesList ---- + familiesList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); + familiesList.addListSelectionListener(e -> familyChanged()); + familiesScrollPane.setViewportView(familiesList); + } + add(familiesScrollPane, "cell 0 1 1 3,growy"); + add(separator1, "cell 1 2"); + + //======== scrollPane1 ======== + { + scrollPane1.setBorder(BorderFactory.createEmptyBorder()); + + //======== previewPanel ======== + { + previewPanel.setLayout(new MigLayout( + "insets dialog,hidemode 3", + // columns + "[fill]", + // rows + "[]")); + } + scrollPane1.setViewportView(previewPanel); + } + add(scrollPane1, "cell 1 3"); + // JFormDesigner - End of component initialization //GEN-END:initComponents + } + + // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + private JLabel previewFamilyNameLabel; + private JList familiesList; + private JPanel previewPanel; + // JFormDesigner - End of variables declaration //GEN-END:variables + + //---- class FontFamilyInfo ----------------------------------------------- + + private static class FontFamilyInfo + { + String name; + TreeMap fonts; + } + + //---- class FontFamilyRenderer ------------------------------------------- + + private static class FontFamilyRenderer + extends JPanel + implements ListCellRenderer + { + private FontFamilyRenderer() { + initComponents(); + } + + @Override + public Component getListCellRendererComponent( JList list, + FontFamilyInfo value, int index, boolean isSelected, boolean cellHasFocus ) + { + String family = value.name; + StringBuilder buf = new StringBuilder(); + for( String key : value.fonts.keySet() ) { + if( key.startsWith( family ) ) { + key = key.substring( family.length() ).trim(); + if( key.isEmpty() ) + key = "Regular"; + } + if( buf.length() > 0 ) + buf.append( ", " ); + buf.append( key ); + } + + familyNameLabel.setText( family ); + familyDescriptionLabel.setText( buf.toString() ); + + familyNameLabel.setFont( UIManager.getFont( "large.font" ) ); + familyDescriptionLabel.setFont( UIManager.getFont( "small.font" ) ); + familyDescriptionLabel.setEnabled( isSelected ); + + setBackground( isSelected ? list.getSelectionBackground() : list.getBackground() ); + Color fg = isSelected ? list.getSelectionForeground() : list.getForeground(); + familyNameLabel.setForeground( fg ); + familyDescriptionLabel.setForeground( fg ); + return this; + } + + private void initComponents() { + // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents + familyNameLabel = new JLabel(); + familyDescriptionLabel = new JLabel(); + + //======== this ======== + setLayout(new MigLayout( + "insets 2 6 2 6,hidemode 3", + // columns + "[fill]", + // rows + "[]0" + + "[]")); + + //---- familyNameLabel ---- + familyNameLabel.setText("text"); + add(familyNameLabel, "cell 0 0"); + + //---- familyDescriptionLabel ---- + familyDescriptionLabel.setText("text"); + add(familyDescriptionLabel, "cell 0 1"); + // JFormDesigner - End of component initialization //GEN-END:initComponents + } + + // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + private JLabel familyNameLabel; + private JLabel familyDescriptionLabel; + // JFormDesigner - End of variables declaration //GEN-END:variables + } +} diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatFontsTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatFontsTest.jfd new file mode 100644 index 00000000..36672ba8 --- /dev/null +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatFontsTest.jfd @@ -0,0 +1,103 @@ +JFDML JFormDesigner: "7.0.5.0.382" Java: "16" encoding: "UTF-8" + +new FormModel { + contentType: "form/swing" + root: new FormRoot { + auxiliary() { + "JavaCodeGenerator.defaultVariableLocal": true + } + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "insets dialog,hidemode 3" + "$columnConstraints": "[230:230,fill]para[grow,fill]" + "$rowConstraints": "[top][][][800,grow,fill]" + } ) { + name: "this" + "border": sfield com.jformdesigner.model.FormObject NULL_VALUE + add( new FormComponent( "javax.swing.JLabel" ) { + name: "familiesLabel" + "text": "Families:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "previewFamilyNameLabel" + "text": "name" + "$client.FlatLaf.styleClass": "h1" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 1" + } ) + add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { + name: "familiesScrollPane" + add( new FormComponent( "javax.swing.JList" ) { + name: "familiesList" + "selectionMode": 0 + auxiliary() { + "JavaCodeGenerator.variableLocal": false + "JavaCodeGenerator.typeParameters": "FontFamilyInfo" + } + addEvent( new FormEvent( "javax.swing.event.ListSelectionListener", "valueChanged", "familyChanged", false ) ) + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 1 1 3,growy" + } ) + add( new FormComponent( "javax.swing.JSeparator" ) { + name: "separator1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 2" + } ) + add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { + name: "scrollPane1" + "border": new javax.swing.border.EmptyBorder( 0, 0, 0, 0 ) + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "insets dialog,hidemode 3" + "$columnConstraints": "[fill]" + "$rowConstraints": "[]" + } ) { + name: "previewPanel" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 3" + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 0, 0 ) + "size": new java.awt.Dimension( 450, 300 ) + } ) + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "insets 2 6 2 6,hidemode 3" + "$columnConstraints": "[fill]" + "$rowConstraints": "[]0[]" + } ) { + name: "panel1" + auxiliary() { + "JavaCodeGenerator.className": "FontFamilyRenderer" + } + add( new FormComponent( "javax.swing.JLabel" ) { + name: "familyNameLabel" + "text": "text" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "familyDescriptionLabel" + "text": "text" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 1" + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 0, 330 ) + "size": new java.awt.Dimension( 255, 105 ) + } ) + } +} diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatInternalFrameTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatInternalFrameTest.java index 5ebe5c84..75a328ae 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatInternalFrameTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatInternalFrameTest.java @@ -89,6 +89,15 @@ public class FlatInternalFrameTest }; internalFrame.setContentPane( panel ); + if( minSizeCheckBox.isSelected() ) { + internalFrame.setMinimumSize( new Dimension( 300, 150 ) ); + panel.add( new JLabel( "min 300,150" ) ); + } + if( maxSizeCheckBox.isSelected() ) { + internalFrame.setMaximumSize( new Dimension( 400, 200 ) ); + panel.add( new JLabel( "max 400,200" ) ); + } + if( !palette.getComponentOrientation().isLeftToRight() ) internalFrame.setComponentOrientation( ComponentOrientation.RIGHT_TO_LEFT ); @@ -123,6 +132,8 @@ public class FlatInternalFrameTest maximizableCheckBox = new JCheckBox(); iconCheckBox = new FlatTriStateCheckBox(); menuBarCheckBox = new JCheckBox(); + minSizeCheckBox = new JCheckBox(); + maxSizeCheckBox = new JCheckBox(); titleLabel = new JLabel(); titleField = new JTextField(); createFrameButton = new JButton(); @@ -158,6 +169,8 @@ public class FlatInternalFrameTest "[fill]0" + "[]0" + "[]0" + + "[]0" + + "[]0" + "[]unrel" + "[]unrel")); @@ -189,18 +202,26 @@ public class FlatInternalFrameTest menuBarCheckBox.setText("Menu Bar"); paletteContentPane.add(menuBarCheckBox, "cell 1 2"); + //---- minSizeCheckBox ---- + minSizeCheckBox.setText("Minimum size 300,150"); + paletteContentPane.add(minSizeCheckBox, "cell 0 3 2 1,alignx left,growx 0"); + + //---- maxSizeCheckBox ---- + maxSizeCheckBox.setText("Maximum size 400,200"); + paletteContentPane.add(maxSizeCheckBox, "cell 0 4 2 1,alignx left,growx 0"); + //---- titleLabel ---- titleLabel.setText("Frame title:"); - paletteContentPane.add(titleLabel, "cell 0 3"); - paletteContentPane.add(titleField, "cell 1 3"); + paletteContentPane.add(titleLabel, "cell 0 5"); + paletteContentPane.add(titleField, "cell 1 5"); //---- createFrameButton ---- createFrameButton.setText("Create Frame"); createFrameButton.addActionListener(e -> createInternalFrame()); - paletteContentPane.add(createFrameButton, "cell 1 4,alignx right,growx 0"); + paletteContentPane.add(createFrameButton, "cell 1 6,alignx right,growx 0"); } desktopPane.add(palette, JLayeredPane.PALETTE_LAYER); - palette.setBounds(15, 25, 275, 185); + palette.setBounds(15, 25, 275, 275); } add(desktopPane, "cell 0 0,width 600,height 600"); @@ -234,6 +255,8 @@ public class FlatInternalFrameTest private JCheckBox maximizableCheckBox; private FlatTriStateCheckBox iconCheckBox; private JCheckBox menuBarCheckBox; + private JCheckBox minSizeCheckBox; + private JCheckBox maxSizeCheckBox; private JLabel titleLabel; private JTextField titleField; private JButton createFrameButton; diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatInternalFrameTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatInternalFrameTest.jfd index 34cb827d..c35083f0 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatInternalFrameTest.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatInternalFrameTest.jfd @@ -1,4 +1,4 @@ -JFDML JFormDesigner: "7.0.3.1.342" Java: "16" encoding: "UTF-8" +JFDML JFormDesigner: "7.0.4.0.360" Java: "16" encoding: "UTF-8" new FormModel { contentType: "form/swing" @@ -14,7 +14,7 @@ new FormModel { add( new FormContainer( "javax.swing.JInternalFrame", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { "$layoutConstraints": "hidemode 3" "$columnConstraints": "[fill][fill]" - "$rowConstraints": "[fill]0[]0[]0[]unrel[]unrel" + "$rowConstraints": "[fill]0[]0[]0[]0[]0[]unrel[]unrel" } ) { name: "palette" "visible": true @@ -62,29 +62,41 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 2" } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "minSizeCheckBox" + "text": "Minimum size 300,150" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 3 2 1,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "maxSizeCheckBox" + "text": "Maximum size 400,200" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 4 2 1,alignx left,growx 0" + } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "titleLabel" "text": "Frame title:" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 0 3" + "value": "cell 0 5" } ) add( new FormComponent( "javax.swing.JTextField" ) { name: "titleField" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 3" + "value": "cell 1 5" } ) add( new FormComponent( "javax.swing.JButton" ) { name: "createFrameButton" "text": "Create Frame" addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "createInternalFrame", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 4,alignx right,growx 0" + "value": "cell 1 6,alignx right,growx 0" } ) }, new FormLayoutConstraints( null ) { "x": 15 "y": 25 "width": 275 - "height": 185 + "height": 275 "layer": 100 } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMenusTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMenusTest.java index a1802256..848700e7 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMenusTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMenusTest.java @@ -80,13 +80,24 @@ public class FlatMenusTest FlatLaf.updateUI(); } - private void showPopupMenuButtonActionPerformed(ActionEvent e) { + private void showPopupMenuButton(ActionEvent e) { Component invoker = (Component) e.getSource(); PopupMenu popupMenu = new PopupMenu(); popupMenu.applyComponentOrientation( getComponentOrientation() ); popupMenu.show( invoker, 0, invoker.getHeight() ); } + private void showScrollingPopupMenu(ActionEvent e) { + Component invoker = (Component) e.getSource(); + JPopupMenu popupMenu = new JPopupMenu(); + for( int i = 1; i <= 100; i++ ) { + popupMenu.add( "menu item " + i + (i % 5 == 0 ? " test" : "") ) + .addActionListener( e2 -> System.out.println( ((JMenuItem)e2.getSource()).getText() ) ); + } + popupMenu.applyComponentOrientation( getComponentOrientation() ); + popupMenu.show( invoker, 0, invoker.getHeight() ); + } + private void largerChanged() { LargerMenuItem.useLargerSize = largerCheckBox.isSelected(); menuBar2.revalidate(); @@ -162,6 +173,14 @@ public class FlatMenusTest FlatMenusTest.MenuWithAccelerator menuWithAccelerator2 = new FlatMenusTest.MenuWithAccelerator(); JMenuItem menuItem40 = new JMenuItem(); JMenuItem menuItem39 = new JMenuItem(); + JMenu menu12 = new JMenu(); + JMenuItem menuItem41 = new JMenuItem(); + JMenuItem menuItem42 = new JMenuItem(); + JMenuItem menuItem43 = new JMenuItem(); + JMenuItem menuItem44 = new JMenuItem(); + JMenuItem menuItem45 = new JMenuItem(); + JMenuItem menuItem46 = new JMenuItem(); + JMenuItem menuItem47 = new JMenuItem(); menuBar2 = new JMenuBar(); JMenu menu8 = new JMenu(); FlatMenusTest.LargerMenuItem menuItem13 = new FlatMenusTest.LargerMenuItem(); @@ -222,6 +241,7 @@ public class FlatMenusTest JRadioButtonMenuItem radioButtonMenuItem11 = new JRadioButtonMenuItem(); JLabel popupMenuLabel = new JLabel(); JButton showPopupMenuButton = new JButton(); + showScrollingPopupMenuButton = new JButton(); armedCheckBox = new JCheckBox(); underlineCheckBox = new JCheckBox(); popupMenubackgroundCheckBox = new JCheckBox(); @@ -377,6 +397,51 @@ public class FlatMenusTest menuWithAccelerator1.add(menuItem39); } menuBar1.add(menuWithAccelerator1); + + //======== menu12 ======== + { + menu12.setText("icons"); + + //---- menuItem41 ---- + menuItem41.setText("selected icon"); + menuItem41.setIcon(new ImageIcon(getClass().getResource("/com/formdev/flatlaf/testing/disabled_icons_test/intellij-menu-cut.png"))); + menuItem41.setSelectedIcon(new ImageIcon(getClass().getResource("/com/formdev/flatlaf/testing/disabled_icons_test/intellij-show_dark.png"))); + menu12.add(menuItem41); + + //---- menuItem42 ---- + menuItem42.setText("disabled icon"); + menuItem42.setIcon(new ImageIcon(getClass().getResource("/com/formdev/flatlaf/testing/disabled_icons_test/intellij-menu-cut.png"))); + menuItem42.setDisabledIcon(new ImageIcon(getClass().getResource("/com/formdev/flatlaf/testing/disabled_icons_test/intellij-menu-paste.png"))); + menuItem42.setEnabled(false); + menu12.add(menuItem42); + menu12.addSeparator(); + + //---- menuItem43 ---- + menuItem43.setText("text"); + menuItem43.setIcon(new ImageIcon(getClass().getResource("/com/formdev/flatlaf/testing/test16.png"))); + menu12.add(menuItem43); + + //---- menuItem44 ---- + menuItem44.setText("text"); + menuItem44.setIcon(new ImageIcon(getClass().getResource("/com/formdev/flatlaf/testing/test24.png"))); + menu12.add(menuItem44); + + //---- menuItem45 ---- + menuItem45.setText("text"); + menuItem45.setIcon(new ImageIcon(getClass().getResource("/com/formdev/flatlaf/testing/test32.png"))); + menu12.add(menuItem45); + + //---- menuItem46 ---- + menuItem46.setText("text"); + menuItem46.setIcon(new ImageIcon(getClass().getResource("/com/formdev/flatlaf/testing/test48.png"))); + menu12.add(menuItem46); + + //---- menuItem47 ---- + menuItem47.setText("text"); + menuItem47.setIcon(new ImageIcon(getClass().getResource("/com/formdev/flatlaf/testing/test64.png"))); + menu12.add(menuItem47); + } + menuBar1.add(menu12); } add(menuBar1, "cell 1 0 2 1,growx"); @@ -786,9 +851,14 @@ public class FlatMenusTest //---- showPopupMenuButton ---- showPopupMenuButton.setText("show JPopupMenu"); - showPopupMenuButton.addActionListener(e -> showPopupMenuButtonActionPerformed(e)); + showPopupMenuButton.addActionListener(e -> showPopupMenuButton(e)); add(showPopupMenuButton, "cell 1 2"); + //---- showScrollingPopupMenuButton ---- + showScrollingPopupMenuButton.setText("show scrolling JPopupMenu"); + showScrollingPopupMenuButton.addActionListener(e -> showScrollingPopupMenu(e)); + add(showScrollingPopupMenuButton, "cell 2 2"); + //---- armedCheckBox ---- armedCheckBox.setText("armed"); armedCheckBox.setMnemonic('A'); @@ -831,6 +901,7 @@ public class FlatMenusTest private JMenuBar menuBar2; private JCheckBox largerCheckBox; private JCheckBox accelCheckBox; + private JButton showScrollingPopupMenuButton; private JCheckBox armedCheckBox; private JCheckBox underlineCheckBox; private JCheckBox popupMenubackgroundCheckBox; diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMenusTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMenusTest.jfd index 5be13f68..6897ecce 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMenusTest.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatMenusTest.jfd @@ -1,4 +1,4 @@ -JFDML JFormDesigner: "7.0.3.1.342" Java: "15" encoding: "UTF-8" +JFDML JFormDesigner: "7.0.5.0.404" Java: "16" encoding: "UTF-8" new FormModel { contentType: "form/swing" @@ -149,6 +149,51 @@ new FormModel { "accelerator": #KeyStroke0 } ) } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu12" + "text": "icons" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem41" + "text": "selected icon" + "icon": new com.jformdesigner.model.SwingIcon( 0, "/com/formdev/flatlaf/testing/disabled_icons_test/intellij-menu-cut.png" ) + "selectedIcon": new com.jformdesigner.model.SwingIcon( 0, "/com/formdev/flatlaf/testing/disabled_icons_test/intellij-show_dark.png" ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem42" + "text": "disabled icon" + "icon": new com.jformdesigner.model.SwingIcon( 0, "/com/formdev/flatlaf/testing/disabled_icons_test/intellij-menu-cut.png" ) + "disabledIcon": new com.jformdesigner.model.SwingIcon( 0, "/com/formdev/flatlaf/testing/disabled_icons_test/intellij-menu-paste.png" ) + "enabled": false + } ) + add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) { + name: "separator6" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem43" + "text": "text" + "icon": new com.jformdesigner.model.SwingIcon( 0, "/com/formdev/flatlaf/testing/test16.png" ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem44" + "text": "text" + "icon": new com.jformdesigner.model.SwingIcon( 0, "/com/formdev/flatlaf/testing/test24.png" ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem45" + "text": "text" + "icon": new com.jformdesigner.model.SwingIcon( 0, "/com/formdev/flatlaf/testing/test32.png" ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem46" + "text": "text" + "icon": new com.jformdesigner.model.SwingIcon( 0, "/com/formdev/flatlaf/testing/test48.png" ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem47" + "text": "text" + "icon": new com.jformdesigner.model.SwingIcon( 0, "/com/formdev/flatlaf/testing/test64.png" ) + } ) + } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 0 2 1,growx" } ) @@ -584,10 +629,20 @@ new FormModel { add( new FormComponent( "javax.swing.JButton" ) { name: "showPopupMenuButton" "text": "show JPopupMenu" - addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showPopupMenuButtonActionPerformed", true ) ) + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showPopupMenuButton", true ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 2" } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "showScrollingPopupMenuButton" + "text": "show scrolling JPopupMenu" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showScrollingPopupMenu", true ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 2" + } ) add( new FormComponent( "javax.swing.JCheckBox" ) { name: "armedCheckBox" "text": "armed" diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatOptionPaneTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatOptionPaneTest.java index 38b90638..4a832fcf 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatOptionPaneTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatOptionPaneTest.java @@ -33,6 +33,7 @@ public class FlatOptionPaneTest public static void main( String[] args ) { SwingUtilities.invokeLater( () -> { FlatTestFrame frame = FlatTestFrame.create( args, "FlatOptionPaneTest" ); + frame.setIconImage( new ImageIcon( FlatOptionPaneTest.class.getResource( "/com/formdev/flatlaf/testing/test16.png" ) ).getImage() ); frame.showFrame( FlatOptionPaneTest::new ); } ); } @@ -54,6 +55,10 @@ public class FlatOptionPaneTest } ); } + private void showTitleBarIcon() { + UIManager.put( "OptionPane.showIcon", showTitleBarIconCheckBox.isSelected() ); + } + private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents ScrollablePanel panel9 = new ScrollablePanel(); @@ -61,6 +66,7 @@ public class FlatOptionPaneTest JPanel panel1 = new JPanel(); JOptionPane plainOptionPane = new JOptionPane(); plainShowDialogLabel = new FlatOptionPaneTest.ShowDialogLinkLabel(); + showTitleBarIconCheckBox = new JCheckBox(); JLabel errorLabel = new JLabel(); JPanel panel2 = new JPanel(); JOptionPane errorOptionPane = new JOptionPane(); @@ -89,6 +95,10 @@ public class FlatOptionPaneTest JPanel panel6 = new JPanel(); customOptionPane = new JOptionPane(); FlatOptionPaneTest.ShowDialogLinkLabel customShowDialogLabel = new FlatOptionPaneTest.ShowDialogLinkLabel(); + JLabel rightToLeftLabel = new JLabel(); + JPanel panel10 = new JPanel(); + JOptionPane rightToLeftOptionPane = new JOptionPane(); + rightToLeftShowDialogLabel = new FlatOptionPaneTest.ShowDialogLinkLabel(); //======== this ======== setBorder(BorderFactory.createEmptyBorder()); @@ -96,7 +106,7 @@ public class FlatOptionPaneTest //======== panel9 ======== { panel9.setLayout(new MigLayout( - "flowy,ltr,insets dialog,hidemode 3", + "ltr,insets dialog,hidemode 3", // columns "[]" + "[]" + @@ -109,6 +119,7 @@ public class FlatOptionPaneTest "[top]" + "[top]" + "[top]" + + "[top]" + "[top]")); //---- plainLabel ---- @@ -129,7 +140,12 @@ public class FlatOptionPaneTest //---- plainShowDialogLabel ---- plainShowDialogLabel.setOptionPane(plainOptionPane); plainShowDialogLabel.setTitleLabel(plainLabel); - panel9.add(plainShowDialogLabel, "cell 2 0"); + panel9.add(plainShowDialogLabel, "cell 1 0"); + + //---- showTitleBarIconCheckBox ---- + showTitleBarIconCheckBox.setText("Show window title bar icon"); + showTitleBarIconCheckBox.addActionListener(e -> showTitleBarIcon()); + panel9.add(showTitleBarIconCheckBox, "cell 2 0"); //---- errorLabel ---- errorLabel.setText("Error"); @@ -151,7 +167,7 @@ public class FlatOptionPaneTest //---- errorShowDialogLabel ---- errorShowDialogLabel.setTitleLabel(errorLabel); errorShowDialogLabel.setOptionPane(errorOptionPane); - panel9.add(errorShowDialogLabel, "cell 2 1"); + panel9.add(errorShowDialogLabel, "cell 1 1"); //---- informationLabel ---- informationLabel.setText("Information"); @@ -173,7 +189,7 @@ public class FlatOptionPaneTest //---- informationShowDialogLabel ---- informationShowDialogLabel.setOptionPane(informationOptionPane); informationShowDialogLabel.setTitleLabel(informationLabel); - panel9.add(informationShowDialogLabel, "cell 2 2"); + panel9.add(informationShowDialogLabel, "cell 1 2"); //---- questionLabel ---- questionLabel.setText("Question"); @@ -217,7 +233,7 @@ public class FlatOptionPaneTest //---- warningShowDialogLabel ---- warningShowDialogLabel.setOptionPane(warningOptionPane); warningShowDialogLabel.setTitleLabel(warningLabel); - panel9.add(warningShowDialogLabel, "cell 2 4"); + panel9.add(warningShowDialogLabel, "cell 1 4"); //---- inputLabel ---- inputLabel.setText("Input"); @@ -239,7 +255,7 @@ public class FlatOptionPaneTest //---- inputShowDialogLabel ---- inputShowDialogLabel.setOptionPane(inputOptionPane); inputShowDialogLabel.setTitleLabel(inputLabel); - panel9.add(inputShowDialogLabel, "cell 2 5"); + panel9.add(inputShowDialogLabel, "cell 1 5"); //---- inputIconLabel ---- inputIconLabel.setText("Input + icon"); @@ -262,7 +278,7 @@ public class FlatOptionPaneTest //---- inputIconShowDialogLabel ---- inputIconShowDialogLabel.setTitleLabel(inputIconLabel); inputIconShowDialogLabel.setOptionPane(inputIconOptionPane); - panel9.add(inputIconShowDialogLabel, "cell 2 6"); + panel9.add(inputIconShowDialogLabel, "cell 1 6"); //---- customLabel ---- customLabel.setText("Custom"); @@ -282,7 +298,29 @@ public class FlatOptionPaneTest //---- customShowDialogLabel ---- customShowDialogLabel.setOptionPane(customOptionPane); customShowDialogLabel.setTitleLabel(customLabel); - panel9.add(customShowDialogLabel, "cell 2 7"); + panel9.add(customShowDialogLabel, "cell 1 7"); + + //---- rightToLeftLabel ---- + rightToLeftLabel.setText("Right-to-left:"); + panel9.add(rightToLeftLabel, "cell 0 8"); + + //======== panel10 ======== + { + panel10.setBorder(LineBorder.createGrayLineBorder()); + panel10.setLayout(new BorderLayout()); + + //---- rightToLeftOptionPane ---- + rightToLeftOptionPane.setMessageType(JOptionPane.INFORMATION_MESSAGE); + rightToLeftOptionPane.setMessage("\u0627\u0644\u0645\u0627\u062f\u0629 1 \u064a\u0648\u0644\u062f \u062c\u0645\u064a\u0639 \u0627\u0644\u0646\u0627\u0633 \u0623\u062d\u0631\u0627\u0631\u064b\u0627 \u0645\u062a\u0633\u0627\u0648\u064a\u0646 \u0641\u064a \u0627\u0644\u0643\u0631\u0627\u0645\u0629 \u0648\u0627\u0644\u062d\u0642\u0648\u0642. \u0648\u0642\u062f \u0648\u0647\u0628\u0648\u0627 \u0639\u0642\u0644\u0627\u064b \u0648\u0636\u0645\u064a\u0631\u064b\u0627 \u0648\u0639\u0644\u064a\u0647\u0645 \u0623\u0646 \u064a\u0639\u0627\u0645\u0644 \u0628\u0639\u0636\u0647\u0645 \u0628\u0639\u0636\u064b\u0627 \u0628\u0631\u0648\u062d \u0627\u0644\u0625\u062e\u0627\u0621.\n\u0627\u0644\u0645\u0627\u062f\u0629 1 \u064a\u0648\u0644\u062f \u062c\u0645\u064a\u0639 \u0627\u0644\u0646\u0627\u0633 \u0623\u062d\u0631\u0627\u0631\u064b\u0627 \u0645\u062a\u0633\u0627\u0648\u064a\u0646 \u0641\u064a \u0627\u0644\u0643\u0631\u0627\u0645\u0629 \u0648\u0627\u0644\u062d\u0642\u0648\u0642. \u0648\u0642\u062f \u0648\u0647\u0628\u0648\u0627 \u0639\u0642\u0644\u0627\u064b \u0648\u0636\u0645\u064a\u0631\u064b\u0627 \u0648\u0639\u0644\u064a\u0647\u0645 \u0623\u0646 \u064a\u0639\u0627\u0645\u0644 \u0628\u0639\u0636\u0647\u0645 \u0628\u0639\u0636\u064b\u0627 \u0628\u0631\u0648\u062d \u0627\u0644\u0625\u062e\u0627\u0621.\n\n\u0627\u0644\u0645\u0627\u062f\u0629 1 \u064a\u0648\u0644\u062f \u062c\u0645\u064a\u0639 \u0627\u0644\u0646\u0627\u0633 \u0623\u062d\u0631\u0627\u0631\u064b\u0627 \u0645\u062a\u0633\u0627\u0648\u064a\u0646 \u0641\u064a \u0627\u0644\u0643\u0631\u0627\u0645\u0629 \n\u0648\u0627\u0644\u062d\u0642\u0648\u0642. \u0648\u0642\u062f \u0648\u0647\u0628\u0648\u0627 \u0639\u0642\u0644\u0627\u064b \u0648\u0636\u0645\u064a\u0631\u064b\u0627 \u0648\u0639\u0644\u064a\u0647\u0645 \u0623\u0646 \u064a\u0639\u0627\u0645\u0644 \u0628\u0639\u0636\u0647\u0645 \u0628\u0639\u0636\u064b\u0627 \u0628\u0631\u0648\u062d \u0627\u0644\u0625\u062e\u0627\u0621."); + rightToLeftOptionPane.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT); + panel10.add(rightToLeftOptionPane, BorderLayout.CENTER); + } + panel9.add(panel10, "cell 1 8"); + + //---- rightToLeftShowDialogLabel ---- + rightToLeftShowDialogLabel.setOptionPane(rightToLeftOptionPane); + rightToLeftShowDialogLabel.setTitleLabel(rightToLeftLabel); + panel9.add(rightToLeftShowDialogLabel, "cell 2 8"); } setViewportView(panel9); // JFormDesigner - End of component initialization //GEN-END:initComponents @@ -290,9 +328,11 @@ public class FlatOptionPaneTest // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables private FlatOptionPaneTest.ShowDialogLinkLabel plainShowDialogLabel; + private JCheckBox showTitleBarIconCheckBox; private FlatOptionPaneTest.ShowDialogLinkLabel errorShowDialogLabel; private FlatOptionPaneTest.ShowDialogLinkLabel informationShowDialogLabel; private JOptionPane customOptionPane; + private FlatOptionPaneTest.ShowDialogLinkLabel rightToLeftShowDialogLabel; // JFormDesigner - End of variables declaration //GEN-END:variables //---- class ShowDialogLinkLabel ------------------------------------------ @@ -305,6 +345,7 @@ public class FlatOptionPaneTest ShowDialogLinkLabel() { setText( "Show dialog" ); + setCursor( Cursor.getPredefinedCursor( Cursor.HAND_CURSOR ) ); addMouseListener( new MouseAdapter() { @Override @@ -315,9 +356,15 @@ public class FlatOptionPaneTest } private void showDialog() { + Component parent = SwingUtilities.windowForComponent( this ); + + // use optionPane as parent if component orientation is different + if( parent.getComponentOrientation().isLeftToRight() != optionPane.getComponentOrientation().isLeftToRight() ) + parent = optionPane; + if( optionPane.getWantsInput() ) { JOptionPane.showInputDialog( - getParent(), + parent, optionPane.getMessage(), titleLabel.getText() + " Title", optionPane.getMessageType(), @@ -326,7 +373,7 @@ public class FlatOptionPaneTest null ); } else { JOptionPane.showOptionDialog( - getParent(), + parent, optionPane.getMessage(), titleLabel.getText() + " Title", optionPane.getOptionType(), diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatOptionPaneTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatOptionPaneTest.jfd index ff83c766..26deae19 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatOptionPaneTest.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatOptionPaneTest.jfd @@ -1,4 +1,4 @@ -JFDML JFormDesigner: "7.0.1.0.272" Java: "13.0.2" encoding: "UTF-8" +JFDML JFormDesigner: "7.0.4.0.360" Java: "16" encoding: "UTF-8" new FormModel { contentType: "form/swing" @@ -10,9 +10,9 @@ new FormModel { name: "this" "border": new javax.swing.border.EmptyBorder( 0, 0, 0, 0 ) add( new FormContainer( "com.formdev.flatlaf.demo.ScrollablePanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { - "$layoutConstraints": "flowy,ltr,insets dialog,hidemode 3" + "$layoutConstraints": "ltr,insets dialog,hidemode 3" "$columnConstraints": "[][][fill]" - "$rowConstraints": "[top][top][top][top][top][top][top][top]" + "$rowConstraints": "[top][top][top][top][top][top][top][top][top]" } ) { name: "panel9" add( new FormComponent( "javax.swing.JLabel" ) { @@ -40,6 +40,16 @@ new FormModel { auxiliary() { "JavaCodeGenerator.variableLocal": false } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 0" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "showTitleBarIconCheckBox" + "text": "Show window title bar icon" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showTitleBarIcon", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 2 0" } ) @@ -71,7 +81,7 @@ new FormModel { "JavaCodeGenerator.variableLocal": false } }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 1" + "value": "cell 1 1" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "informationLabel" @@ -101,7 +111,7 @@ new FormModel { "JavaCodeGenerator.variableLocal": false } }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 2" + "value": "cell 1 2" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "questionLabel" @@ -155,7 +165,7 @@ new FormModel { "optionPane": new FormReference( "warningOptionPane" ) "titleLabel": new FormReference( "warningLabel" ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 4" + "value": "cell 1 4" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "inputLabel" @@ -182,7 +192,7 @@ new FormModel { "optionPane": new FormReference( "inputOptionPane" ) "titleLabel": new FormReference( "inputLabel" ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 5" + "value": "cell 1 5" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "inputIconLabel" @@ -210,7 +220,7 @@ new FormModel { "titleLabel": new FormReference( "inputIconLabel" ) "optionPane": new FormReference( "inputIconOptionPane" ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 6" + "value": "cell 1 6" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "customLabel" @@ -238,12 +248,42 @@ new FormModel { "optionPane": new FormReference( "customOptionPane" ) "titleLabel": new FormReference( "customLabel" ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 7" + "value": "cell 1 7" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "rightToLeftLabel" + "text": "Right-to-left:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 8" + } ) + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) { + name: "panel10" + "border": #LineBorder0 + add( new FormComponent( "javax.swing.JOptionPane" ) { + name: "rightToLeftOptionPane" + "messageType": 1 + "message": "المادة 1 يولد جميع الناس أحرارًا متساوين في الكرامة والحقوق. وقد وهبوا عقلاً وضميرًا وعليهم أن يعامل بعضهم بعضًا بروح الإخاء.\nالمادة 1 يولد جميع الناس أحرارًا متساوين في الكرامة والحقوق. وقد وهبوا عقلاً وضميرًا وعليهم أن يعامل بعضهم بعضًا بروح الإخاء.\n\nالمادة 1 يولد جميع الناس أحرارًا متساوين في الكرامة \nوالحقوق. وقد وهبوا عقلاً وضميرًا وعليهم أن يعامل بعضهم بعضًا بروح الإخاء." + "componentOrientation": sfield java.awt.ComponentOrientation RIGHT_TO_LEFT + }, new FormLayoutConstraints( class java.lang.String ) { + "value": "Center" + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatOptionPaneTest$ShowDialogLinkLabel" ) { + name: "rightToLeftShowDialogLabel" + "optionPane": new FormReference( "rightToLeftOptionPane" ) + "titleLabel": new FormReference( "rightToLeftLabel" ) + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 8" } ) } ) }, new FormLayoutConstraints( null ) { "location": new java.awt.Point( 0, 0 ) - "size": new java.awt.Dimension( 840, 900 ) + "size": new java.awt.Dimension( 995, 1080 ) } ) } } diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingTest.java index d0cb244f..e1de4a2b 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingTest.java @@ -22,6 +22,7 @@ import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; +import java.util.Hashtable; import javax.swing.*; import javax.swing.border.*; import com.formdev.flatlaf.ui.FlatArrowButton; @@ -45,6 +46,11 @@ public class FlatPaintingTest FlatPaintingTest() { initComponents(); + + Hashtable labels = new Hashtable<>(); + for( int i = 0; i <= 5; i++ ) + labels.put( i * 10, new JLabel( Integer.toString( i ) ) ); + focusInnerWidthSlider.setLabelTable( labels ); } @Override @@ -55,6 +61,39 @@ public class FlatPaintingTest getVerticalScrollBar().setUnitIncrement( UIScale.scale( 25 ) ); } + private void focusWidthFractionChanged() { + float focusWidthFraction = focusWidthFractionSlider.getValue() / 100f; + + FlatTestFrame.updateComponentsRecur( (Container) getViewport().getView(), (c, type) -> { + if( c instanceof BorderPainter ) + ((BorderPainter)c).focusWidthFraction = focusWidthFraction; + } ); + + repaint(); + } + + private void focusInnerWidthChanged() { + float focusInnerWidth = focusInnerWidthSlider.getValue() / 10f; + + FlatTestFrame.updateComponentsRecur( (Container) getViewport().getView(), (c, type) -> { + if( c instanceof BorderPainter ) + ((BorderPainter)c).focusInnerWidth = focusInnerWidth; + } ); + + repaint(); + } + + private void translucentChanged() { + boolean translucent = translucentCheckBox.isSelected(); + + FlatTestFrame.updateComponentsRecur( (Container) getViewport().getView(), (c, type) -> { + if( c instanceof BorderPainter ) + ((BorderPainter)c).translucent = translucent; + } ); + + repaint(); + } + private void arrowSizeChanged() { int width = (int) arrowWidthSpinner.getValue(); int height = (int) arrowHeightSpinner.getValue(); @@ -73,6 +112,25 @@ public class FlatPaintingTest repaint(); } + private void offsetChanged() { + float offset = (float) offsetSpinner.getValue(); + System.out.println( offset ); + + arrowPainter5.setYOffset( offset ); + arrowPainter6.setYOffset( -offset ); + + arrowPainter7.setXOffset( offset ); + arrowPainter8.setXOffset( -offset ); + + arrowPainter13.setYOffset( offset ); + arrowPainter14.setYOffset( -offset ); + + arrowPainter15.setXOffset( offset ); + arrowPainter16.setXOffset( -offset ); + + repaint(); + } + private void vectorChanged() { boolean vector = vectorCheckBox.isSelected(); @@ -84,7 +142,7 @@ public class FlatPaintingTest repaint(); } - private void checkBox1ActionPerformed() { + private void arrowButtonChanged() { boolean button = buttonCheckBox.isSelected(); FlatTestFrame.updateComponentsRecur( (Container) getViewport().getView(), (c, type) -> { @@ -143,30 +201,39 @@ public class FlatPaintingTest FlatPaintingTest.ArrowPainter arrowPainter3 = new FlatPaintingTest.ArrowPainter(); FlatPaintingTest.ArrowPainter arrowPainter4 = new FlatPaintingTest.ArrowPainter(); JPanel panel1 = new JPanel(); - FlatPaintingTest.ArrowPainter arrowPainter5 = new FlatPaintingTest.ArrowPainter(); - FlatPaintingTest.ArrowPainter arrowPainter6 = new FlatPaintingTest.ArrowPainter(); + arrowPainter5 = new FlatPaintingTest.ArrowPainter(); + arrowPainter6 = new FlatPaintingTest.ArrowPainter(); JPanel panel2 = new JPanel(); - FlatPaintingTest.ArrowPainter arrowPainter7 = new FlatPaintingTest.ArrowPainter(); - FlatPaintingTest.ArrowPainter arrowPainter8 = new FlatPaintingTest.ArrowPainter(); + arrowPainter7 = new FlatPaintingTest.ArrowPainter(); + arrowPainter8 = new FlatPaintingTest.ArrowPainter(); + JPanel panel6 = new JPanel(); + JPanel panel7 = new JPanel(); + JLabel focusWidthFractionLabel = new JLabel(); + focusWidthFractionSlider = new JSlider(); + JLabel focusInnerWidthLabel = new JLabel(); + focusInnerWidthSlider = new JSlider(); + translucentCheckBox = new JCheckBox(); JPanel panel5 = new JPanel(); JLabel arrowWidthLabel = new JLabel(); arrowWidthSpinner = new JSpinner(); + vectorCheckBox = new JCheckBox(); JLabel arrowHeightLabel = new JLabel(); arrowHeightSpinner = new JSpinner(); + buttonCheckBox = new JCheckBox(); JLabel arrowSizeLabel = new JLabel(); arrowSizeSpinner = new JSpinner(); - vectorCheckBox = new JCheckBox(); - buttonCheckBox = new JCheckBox(); + JLabel offsetLabel = new JLabel(); + offsetSpinner = new JSpinner(); FlatPaintingTest.ArrowPainter arrowPainter9 = new FlatPaintingTest.ArrowPainter(); FlatPaintingTest.ArrowPainter arrowPainter10 = new FlatPaintingTest.ArrowPainter(); FlatPaintingTest.ArrowPainter arrowPainter11 = new FlatPaintingTest.ArrowPainter(); FlatPaintingTest.ArrowPainter arrowPainter12 = new FlatPaintingTest.ArrowPainter(); JPanel panel3 = new JPanel(); - FlatPaintingTest.ArrowPainter arrowPainter13 = new FlatPaintingTest.ArrowPainter(); - FlatPaintingTest.ArrowPainter arrowPainter14 = new FlatPaintingTest.ArrowPainter(); + arrowPainter13 = new FlatPaintingTest.ArrowPainter(); + arrowPainter14 = new FlatPaintingTest.ArrowPainter(); JPanel panel4 = new JPanel(); - FlatPaintingTest.ArrowPainter arrowPainter15 = new FlatPaintingTest.ArrowPainter(); - FlatPaintingTest.ArrowPainter arrowPainter16 = new FlatPaintingTest.ArrowPainter(); + arrowPainter15 = new FlatPaintingTest.ArrowPainter(); + arrowPainter16 = new FlatPaintingTest.ArrowPainter(); //======== this ======== setBorder(null); @@ -506,59 +573,122 @@ public class FlatPaintingTest } flatTestPanel1.add(panel2, "cell 5 5,align left top,grow 0 0"); - //======== panel5 ======== + //======== panel6 ======== { - panel5.setBorder(new TitledBorder("Arrow Control")); - panel5.setLayout(new MigLayout( - "hidemode 3", + panel6.setLayout(new MigLayout( + "insets 0,hidemode 3", // columns - "[fill]" + - "[fill]", + "[grow,fill]", // rows - "[]" + - "[]" + - "[]" + - "[]" + + "[]unrel" + "[]")); - //---- arrowWidthLabel ---- - arrowWidthLabel.setText("Width:"); - panel5.add(arrowWidthLabel, "cell 0 0"); + //======== panel7 ======== + { + panel7.setBorder(new TitledBorder("Outlined Component Control")); + panel7.setLayout(new MigLayout( + "hidemode 3", + // columns + "[fill]" + + "[fill]", + // rows + "[]" + + "[]" + + "[]")); - //---- arrowWidthSpinner ---- - arrowWidthSpinner.setModel(new SpinnerNumberModel(20, 0, null, 1)); - arrowWidthSpinner.addChangeListener(e -> arrowSizeChanged()); - panel5.add(arrowWidthSpinner, "cell 1 0"); + //---- focusWidthFractionLabel ---- + focusWidthFractionLabel.setText("Focus width fraction:"); + panel7.add(focusWidthFractionLabel, "cell 0 0"); - //---- arrowHeightLabel ---- - arrowHeightLabel.setText("Height:"); - panel5.add(arrowHeightLabel, "cell 0 1"); + //---- focusWidthFractionSlider ---- + focusWidthFractionSlider.setValue(100); + focusWidthFractionSlider.setMajorTickSpacing(25); + focusWidthFractionSlider.setPaintLabels(true); + focusWidthFractionSlider.addChangeListener(e -> focusWidthFractionChanged()); + panel7.add(focusWidthFractionSlider, "cell 1 0"); - //---- arrowHeightSpinner ---- - arrowHeightSpinner.setModel(new SpinnerNumberModel(20, 0, null, 1)); - arrowHeightSpinner.addChangeListener(e -> arrowSizeChanged()); - panel5.add(arrowHeightSpinner, "cell 1 1"); + //---- focusInnerWidthLabel ---- + focusInnerWidthLabel.setText("Focus inner width:"); + panel7.add(focusInnerWidthLabel, "cell 0 1"); - //---- arrowSizeLabel ---- - arrowSizeLabel.setText("Arrow Size:"); - panel5.add(arrowSizeLabel, "cell 0 2"); + //---- focusInnerWidthSlider ---- + focusInnerWidthSlider.setPaintLabels(true); + focusInnerWidthSlider.setValue(10); + focusInnerWidthSlider.setMaximum(50); + focusInnerWidthSlider.addChangeListener(e -> focusInnerWidthChanged()); + panel7.add(focusInnerWidthSlider, "cell 1 1"); - //---- arrowSizeSpinner ---- - arrowSizeSpinner.setModel(new SpinnerNumberModel(8, 2, null, 1)); - arrowSizeSpinner.addChangeListener(e -> arrowSizeChanged()); - panel5.add(arrowSizeSpinner, "cell 1 2"); + //---- translucentCheckBox ---- + translucentCheckBox.setText("translucent"); + translucentCheckBox.addActionListener(e -> translucentChanged()); + panel7.add(translucentCheckBox, "cell 0 2 2 1,alignx left,growx 0"); + } + panel6.add(panel7, "cell 0 0"); - //---- vectorCheckBox ---- - vectorCheckBox.setText("vector"); - vectorCheckBox.addActionListener(e -> vectorChanged()); - panel5.add(vectorCheckBox, "cell 0 3 2 1,alignx left,growx 0"); + //======== panel5 ======== + { + panel5.setBorder(new TitledBorder("Arrow Control")); + panel5.setLayout(new MigLayout( + "hidemode 3", + // columns + "[fill]" + + "[fill]" + + "[fill]", + // rows + "[]" + + "[]" + + "[]" + + "[]")); - //---- buttonCheckBox ---- - buttonCheckBox.setText("FlatArrowButton"); - buttonCheckBox.addActionListener(e -> checkBox1ActionPerformed()); - panel5.add(buttonCheckBox, "cell 0 4 2 1,alignx left,growx 0"); + //---- arrowWidthLabel ---- + arrowWidthLabel.setText("Width:"); + panel5.add(arrowWidthLabel, "cell 0 0"); + + //---- arrowWidthSpinner ---- + arrowWidthSpinner.setModel(new SpinnerNumberModel(20, 0, null, 1)); + arrowWidthSpinner.addChangeListener(e -> arrowSizeChanged()); + panel5.add(arrowWidthSpinner, "cell 1 0"); + + //---- vectorCheckBox ---- + vectorCheckBox.setText("vector"); + vectorCheckBox.addActionListener(e -> vectorChanged()); + panel5.add(vectorCheckBox, "cell 2 0,alignx left,growx 0"); + + //---- arrowHeightLabel ---- + arrowHeightLabel.setText("Height:"); + panel5.add(arrowHeightLabel, "cell 0 1"); + + //---- arrowHeightSpinner ---- + arrowHeightSpinner.setModel(new SpinnerNumberModel(20, 0, null, 1)); + arrowHeightSpinner.addChangeListener(e -> arrowSizeChanged()); + panel5.add(arrowHeightSpinner, "cell 1 1"); + + //---- buttonCheckBox ---- + buttonCheckBox.setText("FlatArrowButton"); + buttonCheckBox.addActionListener(e -> arrowButtonChanged()); + panel5.add(buttonCheckBox, "cell 2 1,alignx left,growx 0"); + + //---- arrowSizeLabel ---- + arrowSizeLabel.setText("Arrow Size:"); + panel5.add(arrowSizeLabel, "cell 0 2"); + + //---- arrowSizeSpinner ---- + arrowSizeSpinner.setModel(new SpinnerNumberModel(9, 2, null, 1)); + arrowSizeSpinner.addChangeListener(e -> arrowSizeChanged()); + panel5.add(arrowSizeSpinner, "cell 1 2"); + + //---- offsetLabel ---- + offsetLabel.setText("Offset:"); + panel5.add(offsetLabel, "cell 0 3"); + + //---- offsetSpinner ---- + offsetSpinner.setModel(new SpinnerNumberModel(1.0F, null, null, 0.05F)); + offsetSpinner.addChangeListener(e -> offsetChanged()); + panel5.add(offsetSpinner, "cell 1 3"); + } + panel6.add(panel5, "cell 0 1"); } - flatTestPanel1.add(panel5, "cell 6 5,aligny top,growy 0"); + flatTestPanel1.add(panel6, "cell 6 5 3 2,aligny top,growy 0"); //---- arrowPainter9 ---- arrowPainter9.setScale(8.0F); @@ -635,11 +765,23 @@ public class FlatPaintingTest } // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + private FlatPaintingTest.ArrowPainter arrowPainter5; + private FlatPaintingTest.ArrowPainter arrowPainter6; + private FlatPaintingTest.ArrowPainter arrowPainter7; + private FlatPaintingTest.ArrowPainter arrowPainter8; + private JSlider focusWidthFractionSlider; + private JSlider focusInnerWidthSlider; + private JCheckBox translucentCheckBox; private JSpinner arrowWidthSpinner; - private JSpinner arrowHeightSpinner; - private JSpinner arrowSizeSpinner; private JCheckBox vectorCheckBox; + private JSpinner arrowHeightSpinner; private JCheckBox buttonCheckBox; + private JSpinner arrowSizeSpinner; + private JSpinner offsetSpinner; + private FlatPaintingTest.ArrowPainter arrowPainter13; + private FlatPaintingTest.ArrowPainter arrowPainter14; + private FlatPaintingTest.ArrowPainter arrowPainter15; + private FlatPaintingTest.ArrowPainter arrowPainter16; // JFormDesigner - End of variables declaration //GEN-END:variables //---- class BorderPainter ------------------------------------------------ @@ -647,6 +789,9 @@ public class FlatPaintingTest public static class BorderPainter extends JComponent { + private static final Color TRANSLUCENT_BLUE = new Color( 0x880000ff, true ); + private static final Color TRANSLUCENT_RED = new Color( 0x88ff0000, true ); + private int w = 20; private int h = 20; private int focusWidth = 2; @@ -657,6 +802,10 @@ public class FlatPaintingTest private boolean paintBorder = true; private boolean paintFocus = true; + float focusWidthFraction = 1; + float focusInnerWidth = 1; + boolean translucent; + public BorderPainter() { } @@ -753,23 +902,17 @@ public class FlatPaintingTest int width = UIScale.scale( w ); int height = UIScale.scale( h ); float focusWidth = UIScale.scale( (float) this.focusWidth ); + float focusInnerWidth = UIScale.scale( this.focusInnerWidth ); float lineWidth = UIScale.scale( (float) this.lineWidth ); float arc = UIScale.scale( (float) this.arc ); - if( paintBackground ) { - g.setColor( Color.green ); - FlatUIUtils.paintComponentBackground( g2, 0, 0, width, height, focusWidth, arc ); - } + Color background = paintBackground ? Color.green : null; + Color focusColor = paintFocus ? (translucent ? TRANSLUCENT_BLUE : Color.blue) : null; + Color borderColor = paintBorder ? (translucent ? TRANSLUCENT_RED : Color.red) : null; - if( paintFocus ) { - g.setColor( Color.blue ); - FlatUIUtils.paintComponentOuterBorder( g2, 0, 0, width, height, focusWidth, lineWidth, arc ); - } - - if( paintBorder ) { - g.setColor( Color.red ); - FlatUIUtils.paintComponentBorder( g2, 0, 0, width, height, focusWidth, lineWidth, arc ); - } + FlatUIUtils.paintOutlinedComponent( g2, 0, 0, width, height, + focusWidth, focusWidthFraction, focusInnerWidth, lineWidth, arc, + focusColor, borderColor, background ); HiDPIUtils.paintAtScale1x( g2, 0, 0, width, height, (g2d, x2, y2, width2, height2, scaleFactor) -> { @@ -792,8 +935,8 @@ public class FlatPaintingTest private int direction = SwingConstants.SOUTH; private boolean chevron = true; private int arrowSize = FlatArrowButton.DEFAULT_ARROW_WIDTH; - private int xOffset = 0; - private int yOffset = 0; + private float xOffset = 0; + private float yOffset = 0; private float scale = 1; private boolean halfWidth; private boolean halfHeight; @@ -845,19 +988,19 @@ public class FlatPaintingTest this.arrowSize = arrowSize; } - public int getXOffset() { + public float getXOffset() { return xOffset; } - public void setXOffset( int xOffset ) { + public void setXOffset( float xOffset ) { this.xOffset = xOffset; } - public int getYOffset() { + public float getYOffset() { return yOffset; } - public void setYOffset( int yOffset ) { + public void setYOffset( float yOffset ) { this.yOffset = yOffset; } diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingTest.jfd index 0d6c21c2..bc82ee18 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingTest.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPaintingTest.jfd @@ -1,4 +1,4 @@ -JFDML JFormDesigner: "7.0.3.1.342" Java: "15" encoding: "UTF-8" +JFDML JFormDesigner: "7.0.4.0.360" Java: "16" encoding: "UTF-8" new FormModel { contentType: "form/swing" @@ -383,6 +383,9 @@ new FormModel { "h": 10 "halfHeight": true "YOffset": 1 + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } } ) add( new FormComponent( "com.formdev.flatlaf.testing.FlatPaintingTest$ArrowPainter" ) { name: "arrowPainter6" @@ -390,6 +393,9 @@ new FormModel { "h": 10 "halfHeight": true "YOffset": -1 + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 4 5,align left top,grow 0 0" @@ -403,6 +409,9 @@ new FormModel { "w": 10 "halfWidth": true "XOffset": 1 + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } } ) add( new FormComponent( "com.formdev.flatlaf.testing.FlatPaintingTest$ArrowPainter" ) { name: "arrowPainter8" @@ -411,96 +420,183 @@ new FormModel { "w": 10 "halfWidth": true "XOffset": -1 + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 5 5,align left top,grow 0 0" } ) add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { - "$layoutConstraints": "hidemode 3" - "$columnConstraints": "[fill][fill]" - "$rowConstraints": "[][][][][]" + "$columnConstraints": "[grow,fill]" + "$rowConstraints": "[]unrel[]" + "$layoutConstraints": "insets 0,hidemode 3" } ) { - name: "panel5" - "border": new javax.swing.border.TitledBorder( "Arrow Control" ) - add( new FormComponent( "javax.swing.JLabel" ) { - name: "arrowWidthLabel" - "text": "Width:" + name: "panel6" + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "hidemode 3" + "$columnConstraints": "[fill][fill]" + "$rowConstraints": "[][][]" + } ) { + name: "panel7" + "border": new javax.swing.border.TitledBorder( "Outlined Component Control" ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "focusWidthFractionLabel" + "text": "Focus width fraction:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0" + } ) + add( new FormComponent( "javax.swing.JSlider" ) { + name: "focusWidthFractionSlider" + "value": 100 + "majorTickSpacing": 25 + "paintLabels": true + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "focusWidthFractionChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "focusInnerWidthLabel" + "text": "Focus inner width:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 1" + } ) + add( new FormComponent( "javax.swing.JSlider" ) { + name: "focusInnerWidthSlider" + "paintLabels": true + "value": 10 + "maximum": 50 + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "focusInnerWidthChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 1" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "translucentCheckBox" + "text": "translucent" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "translucentChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 2 2 1,alignx left,growx 0" + } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 0" } ) - add( new FormComponent( "javax.swing.JSpinner" ) { - name: "arrowWidthSpinner" - "model": new javax.swing.SpinnerNumberModel { - minimum: 0 - value: 20 - } - auxiliary() { - "JavaCodeGenerator.variableLocal": false - } - addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "arrowSizeChanged", false ) ) - }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 0" - } ) - add( new FormComponent( "javax.swing.JLabel" ) { - name: "arrowHeightLabel" - "text": "Height:" + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "hidemode 3" + "$columnConstraints": "[fill][fill][fill]" + "$rowConstraints": "[][][][]" + } ) { + name: "panel5" + "border": new javax.swing.border.TitledBorder( "Arrow Control" ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "arrowWidthLabel" + "text": "Width:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0" + } ) + add( new FormComponent( "javax.swing.JSpinner" ) { + name: "arrowWidthSpinner" + "model": new javax.swing.SpinnerNumberModel { + minimum: 0 + value: 20 + } + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "arrowSizeChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 0" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "vectorCheckBox" + "text": "vector" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "vectorChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 0,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "arrowHeightLabel" + "text": "Height:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 1" + } ) + add( new FormComponent( "javax.swing.JSpinner" ) { + name: "arrowHeightSpinner" + "model": new javax.swing.SpinnerNumberModel { + minimum: 0 + value: 20 + } + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "arrowSizeChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 1" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "buttonCheckBox" + "text": "FlatArrowButton" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "arrowButtonChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 1,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "arrowSizeLabel" + "text": "Arrow Size:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 2" + } ) + add( new FormComponent( "javax.swing.JSpinner" ) { + name: "arrowSizeSpinner" + "model": new javax.swing.SpinnerNumberModel { + minimum: 2 + value: 9 + } + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "arrowSizeChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 2" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "offsetLabel" + "text": "Offset:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 3" + } ) + add( new FormComponent( "javax.swing.JSpinner" ) { + name: "offsetSpinner" + "model": new javax.swing.SpinnerNumberModel { + stepSize: 0.05f + value: 1.0f + } + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "offsetChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 3" + } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 1" } ) - add( new FormComponent( "javax.swing.JSpinner" ) { - name: "arrowHeightSpinner" - "model": new javax.swing.SpinnerNumberModel { - minimum: 0 - value: 20 - } - auxiliary() { - "JavaCodeGenerator.variableLocal": false - } - addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "arrowSizeChanged", false ) ) - }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 1" - } ) - add( new FormComponent( "javax.swing.JLabel" ) { - name: "arrowSizeLabel" - "text": "Arrow Size:" - }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 0 2" - } ) - add( new FormComponent( "javax.swing.JSpinner" ) { - name: "arrowSizeSpinner" - "model": new javax.swing.SpinnerNumberModel { - minimum: 2 - value: 8 - } - auxiliary() { - "JavaCodeGenerator.variableLocal": false - } - addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "arrowSizeChanged", false ) ) - }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 2" - } ) - add( new FormComponent( "javax.swing.JCheckBox" ) { - name: "vectorCheckBox" - "text": "vector" - auxiliary() { - "JavaCodeGenerator.variableLocal": false - } - addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "vectorChanged", false ) ) - }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 0 3 2 1,alignx left,growx 0" - } ) - add( new FormComponent( "javax.swing.JCheckBox" ) { - name: "buttonCheckBox" - "text": "FlatArrowButton" - auxiliary() { - "JavaCodeGenerator.variableLocal": false - } - addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "checkBox1ActionPerformed", false ) ) - }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 0 4 2 1,alignx left,growx 0" - } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 6 5,aligny top,growy 0" + "value": "cell 6 5 3 2,aligny top,growy 0" } ) add( new FormComponent( "com.formdev.flatlaf.testing.FlatPaintingTest$ArrowPainter" ) { name: "arrowPainter9" @@ -545,6 +641,9 @@ new FormModel { "chevron": false "halfHeight": true "YOffset": 1 + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } } ) add( new FormComponent( "com.formdev.flatlaf.testing.FlatPaintingTest$ArrowPainter" ) { name: "arrowPainter14" @@ -553,6 +652,9 @@ new FormModel { "chevron": false "halfHeight": true "YOffset": -1 + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 4 6,align left top,grow 0 0" @@ -567,6 +669,9 @@ new FormModel { "chevron": false "halfWidth": true "XOffset": 1 + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } } ) add( new FormComponent( "com.formdev.flatlaf.testing.FlatPaintingTest$ArrowPainter" ) { name: "arrowPainter16" @@ -576,6 +681,9 @@ new FormModel { "chevron": false "halfWidth": true "XOffset": -1 + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 5 6,align left top,grow 0 0" diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPopupTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPopupTest.java new file mode 100644 index 00000000..05788bc9 --- /dev/null +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPopupTest.java @@ -0,0 +1,361 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.testing; + +import java.awt.*; +import java.awt.Point; +import javax.swing.*; +import com.formdev.flatlaf.util.Animator; +import net.miginfocom.swing.*; + +/** + * @author Karl Tauber + */ +public class FlatPopupTest + extends FlatTestPanel +{ + private Popup popup; + + public static void main( String[] args ) { + SwingUtilities.invokeLater( () -> { + FlatTestFrame frame = FlatTestFrame.create( args, "FlatPopupTest" ); + frame.showFrame( FlatPopupTest::new ); + } ); + } + + FlatPopupTest() { + initComponents(); + } + + private void showPopupMenu() { + popupMenu1.show( showPopupMenuButton, 0, showPopupMenuButton.getHeight() ); + } + + private void showLargePopupMenu() { + popupMenu2.show( showLargePopupMenuButton, 0, showLargePopupMenuButton.getHeight() ); + } + + private void showPopup() { + showPopup( 0, 0 ); + } + + private void showPopup( int xoffset, int yoffset ) { + hidePopup(); + + Point pt = showPopupButton.getLocationOnScreen(); + popup = PopupFactory.getSharedInstance().getPopup( showPopupButton, popupPanel, + pt.x + xoffset, pt.y + showPopupButton.getHeight() + yoffset ); + popup.show(); + } + + private void hidePopup() { + if( popup == null ) + return; + + popup.hide(); + popup = null; + } + + private void movePopupDown() { + movePopup( 0, 600 ); + } + + private void movePopupRight() { + movePopup( 600, 0 ); + } + + private void movePopup( int xoffset, int yoffset ) { + showPopup(); + + Animator animator = new Animator( 1000, fraction -> { + System.out.println(fraction); + showPopup( (int) (fraction * xoffset), (int) (fraction * yoffset) ); + } ); + animator.start(); + } + + private void initComponents() { + // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents + label1 = new JLabel(); + label2 = new JLabel(); + showPopupMenuButton = new JButton(); + showLargePopupMenuButton = new JButton(); + showPopupButton = new JButton(); + hidePopupButton = new JButton(); + movePopupDownButton = new JButton(); + movePopuprightButton = new JButton(); + label4 = new JLabel(); + popupMenu1 = new JPopupMenu(); + menuItem1 = new JMenuItem(); + menuItem2 = new JMenuItem(); + menu1 = new JMenu(); + menuItem3 = new JMenuItem(); + menuItem4 = new JMenuItem(); + popupPanel = new JPanel(); + label3 = new JLabel(); + popupMenu2 = new JPopupMenu(); + menuItem5 = new JMenuItem(); + menuItem6 = new JMenuItem(); + menuItem7 = new JMenuItem(); + menuItem8 = new JMenuItem(); + menuItem9 = new JMenuItem(); + menuItem10 = new JMenuItem(); + menuItem11 = new JMenuItem(); + menuItem12 = new JMenuItem(); + menuItem13 = new JMenuItem(); + menuItem14 = new JMenuItem(); + menuItem15 = new JMenuItem(); + menuItem16 = new JMenuItem(); + menuItem17 = new JMenuItem(); + menuItem18 = new JMenuItem(); + menuItem19 = new JMenuItem(); + menuItem20 = new JMenuItem(); + menuItem21 = new JMenuItem(); + menu2 = new JMenu(); + menuItem22 = new JMenuItem(); + menuItem23 = new JMenuItem(); + + //======== this ======== + setLayout(new MigLayout( + "ltr,insets dialog,hidemode 3", + // columns + "[fill]" + + "[fill]" + + "[fill]" + + "[fill]", + // rows + "[]" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]")); + + //---- label1 ---- + label1.setText("Label with light-weight tooltip"); + label1.setToolTipText("some tip"); + add(label1, "cell 0 0"); + + //---- label2 ---- + label2.setText("Label with heavy-weight tooltip"); + label2.setToolTipText("some tip\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25"); + add(label2, "cell 0 1"); + + //---- showPopupMenuButton ---- + showPopupMenuButton.setText("show light-weight JPopupMenu"); + showPopupMenuButton.addActionListener(e -> showPopupMenu()); + add(showPopupMenuButton, "cell 0 2"); + + //---- showLargePopupMenuButton ---- + showLargePopupMenuButton.setText("show heavy-weight JPopupMenu"); + showLargePopupMenuButton.addActionListener(e -> showLargePopupMenu()); + add(showLargePopupMenuButton, "cell 0 3"); + + //---- showPopupButton ---- + showPopupButton.setText("show medium-weight popup"); + showPopupButton.addActionListener(e -> showPopup()); + add(showPopupButton, "cell 0 4"); + + //---- hidePopupButton ---- + hidePopupButton.setText("hide"); + hidePopupButton.addActionListener(e -> hidePopup()); + add(hidePopupButton, "cell 1 4"); + + //---- movePopupDownButton ---- + movePopupDownButton.setText("move down"); + movePopupDownButton.addActionListener(e -> movePopupDown()); + add(movePopupDownButton, "cell 2 4"); + + //---- movePopuprightButton ---- + movePopuprightButton.setText("move right"); + movePopuprightButton.addActionListener(e -> movePopupRight()); + add(movePopuprightButton, "cell 3 4"); + + //---- label4 ---- + label4.setText("(switches to heavy-weight when moving outside of window)"); + add(label4, "cell 0 5 4 1,alignx right,growx 0"); + + //======== popupMenu1 ======== + { + + //---- menuItem1 ---- + menuItem1.setText("text"); + popupMenu1.add(menuItem1); + + //---- menuItem2 ---- + menuItem2.setText("text"); + popupMenu1.add(menuItem2); + + //======== menu1 ======== + { + menu1.setText("text"); + + //---- menuItem3 ---- + menuItem3.setText("text"); + menu1.add(menuItem3); + + //---- menuItem4 ---- + menuItem4.setText("text"); + menu1.add(menuItem4); + } + popupMenu1.add(menu1); + } + + //======== popupPanel ======== + { + popupPanel.setBackground(new Color(153, 255, 153)); + popupPanel.setLayout(new MigLayout( + "hidemode 3", + // columns + "[fill]", + // rows + "[]")); + + //---- label3 ---- + label3.setText("popup"); + popupPanel.add(label3, "cell 0 0"); + } + + //======== popupMenu2 ======== + { + + //---- menuItem5 ---- + menuItem5.setText("text"); + popupMenu2.add(menuItem5); + + //---- menuItem6 ---- + menuItem6.setText("text"); + popupMenu2.add(menuItem6); + + //---- menuItem7 ---- + menuItem7.setText("text"); + popupMenu2.add(menuItem7); + + //---- menuItem8 ---- + menuItem8.setText("text"); + popupMenu2.add(menuItem8); + + //---- menuItem9 ---- + menuItem9.setText("text"); + popupMenu2.add(menuItem9); + + //---- menuItem10 ---- + menuItem10.setText("text"); + popupMenu2.add(menuItem10); + + //---- menuItem11 ---- + menuItem11.setText("text"); + popupMenu2.add(menuItem11); + + //---- menuItem12 ---- + menuItem12.setText("text"); + popupMenu2.add(menuItem12); + + //---- menuItem13 ---- + menuItem13.setText("text"); + popupMenu2.add(menuItem13); + + //---- menuItem14 ---- + menuItem14.setText("text"); + popupMenu2.add(menuItem14); + + //---- menuItem15 ---- + menuItem15.setText("text"); + popupMenu2.add(menuItem15); + + //---- menuItem16 ---- + menuItem16.setText("text"); + popupMenu2.add(menuItem16); + + //---- menuItem17 ---- + menuItem17.setText("text"); + popupMenu2.add(menuItem17); + + //---- menuItem18 ---- + menuItem18.setText("text"); + popupMenu2.add(menuItem18); + + //---- menuItem19 ---- + menuItem19.setText("text"); + popupMenu2.add(menuItem19); + + //---- menuItem20 ---- + menuItem20.setText("text"); + popupMenu2.add(menuItem20); + + //---- menuItem21 ---- + menuItem21.setText("text"); + popupMenu2.add(menuItem21); + + //======== menu2 ======== + { + menu2.setText("text"); + + //---- menuItem22 ---- + menuItem22.setText("text"); + menu2.add(menuItem22); + + //---- menuItem23 ---- + menuItem23.setText("text"); + menu2.add(menuItem23); + } + popupMenu2.add(menu2); + } + // JFormDesigner - End of component initialization //GEN-END:initComponents + } + + // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + private JLabel label1; + private JLabel label2; + private JButton showPopupMenuButton; + private JButton showLargePopupMenuButton; + private JButton showPopupButton; + private JButton hidePopupButton; + private JButton movePopupDownButton; + private JButton movePopuprightButton; + private JLabel label4; + private JPopupMenu popupMenu1; + private JMenuItem menuItem1; + private JMenuItem menuItem2; + private JMenu menu1; + private JMenuItem menuItem3; + private JMenuItem menuItem4; + private JPanel popupPanel; + private JLabel label3; + private JPopupMenu popupMenu2; + private JMenuItem menuItem5; + private JMenuItem menuItem6; + private JMenuItem menuItem7; + private JMenuItem menuItem8; + private JMenuItem menuItem9; + private JMenuItem menuItem10; + private JMenuItem menuItem11; + private JMenuItem menuItem12; + private JMenuItem menuItem13; + private JMenuItem menuItem14; + private JMenuItem menuItem15; + private JMenuItem menuItem16; + private JMenuItem menuItem17; + private JMenuItem menuItem18; + private JMenuItem menuItem19; + private JMenuItem menuItem20; + private JMenuItem menuItem21; + private JMenu menu2; + private JMenuItem menuItem22; + private JMenuItem menuItem23; + // JFormDesigner - End of variables declaration //GEN-END:variables +} diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPopupTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPopupTest.jfd new file mode 100644 index 00000000..9b225101 --- /dev/null +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatPopupTest.jfd @@ -0,0 +1,206 @@ +JFDML JFormDesigner: "7.0.4.0.360" Java: "16" encoding: "UTF-8" + +new FormModel { + contentType: "form/swing" + root: new FormRoot { + add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "ltr,insets dialog,hidemode 3" + "$columnConstraints": "[fill][fill][fill][fill]" + "$rowConstraints": "[][][][][][]" + } ) { + name: "this" + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label1" + "text": "Label with light-weight tooltip" + "toolTipText": "some tip" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label2" + "text": "Label with heavy-weight tooltip" + "toolTipText": "some tip\n1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 1" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "showPopupMenuButton" + "text": "show light-weight JPopupMenu" + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showPopupMenu", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 2" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "showLargePopupMenuButton" + "text": "show heavy-weight JPopupMenu" + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showLargePopupMenu", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 3" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "showPopupButton" + "text": "show medium-weight popup" + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showPopup", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 4" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "hidePopupButton" + "text": "hide" + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "hidePopup", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 4" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "movePopupDownButton" + "text": "move down" + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "movePopupDown", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 4" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "movePopuprightButton" + "text": "move right" + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "movePopupRight", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 4" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label4" + "text": "(switches to heavy-weight when moving outside of window)" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 5 4 1,alignx right,growx 0" + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 0, 0 ) + "size": new java.awt.Dimension( 490, 350 ) + } ) + add( new FormContainer( "javax.swing.JPopupMenu", new FormLayoutManager( class javax.swing.JPopupMenu ) ) { + name: "popupMenu1" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem1" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem2" + "text": "text" + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu1" + "text": "text" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem3" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem4" + "text": "text" + } ) + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 5, 395 ) + } ) + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "hidemode 3" + "$columnConstraints": "[fill]" + "$rowConstraints": "[]" + } ) { + name: "popupPanel" + "background": new java.awt.Color( 153, 255, 153, 255 ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label3" + "text": "popup" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0" + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 225, 395 ) + "size": new java.awt.Dimension( 200, 200 ) + } ) + add( new FormContainer( "javax.swing.JPopupMenu", new FormLayoutManager( class javax.swing.JPopupMenu ) ) { + name: "popupMenu2" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem5" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem6" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem7" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem8" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem9" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem10" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem11" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem12" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem13" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem14" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem15" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem16" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem17" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem18" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem19" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem20" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem21" + "text": "text" + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu2" + "text": "text" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem22" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem23" + "text": "text" + } ) + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 5, 505 ) + } ) + } +} diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatSingleComponentTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatSingleComponentTest.java new file mode 100644 index 00000000..050a15be --- /dev/null +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatSingleComponentTest.java @@ -0,0 +1,249 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.testing; + +import java.awt.ComponentOrientation; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.EventQueue; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.KeyStroke; +import javax.swing.UIManager; +import javax.swing.plaf.metal.MetalLookAndFeel; +import javax.swing.plaf.nimbus.NimbusLookAndFeel; +import com.formdev.flatlaf.FlatDarculaLaf; +import com.formdev.flatlaf.FlatDarkLaf; +import com.formdev.flatlaf.FlatIntelliJLaf; +import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.FlatLightLaf; +import com.formdev.flatlaf.FlatSystemProperties; +import com.formdev.flatlaf.demo.DemoPrefs; +import com.formdev.flatlaf.extras.FlatInspector; +import com.formdev.flatlaf.extras.FlatUIDefaultsInspector; +import com.formdev.flatlaf.util.SystemInfo; +import com.formdev.flatlaf.util.UIScale; +import net.miginfocom.swing.MigLayout; + +/** + * @author Karl Tauber + */ +public class FlatSingleComponentTest + extends JFrame +{ + private static final String PREFS_ROOT_PATH = "/flatlaf-test-single"; + private static final String KEY_SCALE_FACTOR = "scaleFactor"; + + private final JLabel infoLabel; + + private JComponent createSingleComponent() { + return new JButton( "hello" ); + } + + public static void main( String[] args ) { + DemoPrefs.init( PREFS_ROOT_PATH ); + + // set scale factor + if( System.getProperty( FlatSystemProperties.UI_SCALE ) == null ) { + String scaleFactor = DemoPrefs.getState().get( KEY_SCALE_FACTOR, null ); + if( scaleFactor != null ) + System.setProperty( FlatSystemProperties.UI_SCALE, scaleFactor ); + } + + // install inspectors + FlatInspector.install( "ctrl shift alt X" ); + FlatUIDefaultsInspector.install( "ctrl shift alt Y" ); + + // disable animated Laf change + System.setProperty( "flatlaf.animatedLafChange", "false" ); + + // test loading custom defaults from package + FlatLaf.registerCustomDefaultsSource( "com.formdev.flatlaf.testing.customdefaults" ); + + // set look and feel + DemoPrefs.setupLaf( args ); + + // create and show frame + new FlatSingleComponentTest(); + } + + private FlatSingleComponentTest() { + super( "FlatSingleComponentTest" ); + setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); + + JComponent c = createSingleComponent(); + + Container contentPane = getContentPane(); + contentPane.setLayout( new MigLayout( null, null, "[][grow]") ); + contentPane.add( c ); + + infoLabel = new JLabel(); + infoLabel.setEnabled( false ); + contentPane.add( infoLabel, "newline, aligny bottom,growy 0" ); + + // register F1, F2, ... keys to switch to Light, Dark or other LaFs + registerSwitchToLookAndFeel( "F1", FlatLightLaf.class.getName() ); + registerSwitchToLookAndFeel( "F2", FlatDarkLaf.class.getName() ); + registerSwitchToLookAndFeel( "F3", FlatIntelliJLaf.class.getName() ); + registerSwitchToLookAndFeel( "F4", FlatDarculaLaf.class.getName() ); + + registerSwitchToLookAndFeel( "F8", FlatTestLaf.class.getName() ); + + if( SystemInfo.isWindows ) + registerSwitchToLookAndFeel( "F9", "com.sun.java.swing.plaf.windows.WindowsLookAndFeel" ); + else if( SystemInfo.isMacOS ) + registerSwitchToLookAndFeel( "F9", "com.apple.laf.AquaLookAndFeel" ); + else if( SystemInfo.isLinux ) + registerSwitchToLookAndFeel( "F9", "com.sun.java.swing.plaf.gtk.GTKLookAndFeel" ); + registerSwitchToLookAndFeel( "F12", MetalLookAndFeel.class.getName() ); + registerSwitchToLookAndFeel( "F11", NimbusLookAndFeel.class.getName() ); + + // register Alt+F1, F2, ... keys to change scale factor + registerScaleFactor( "alt F1", "1" ); + registerScaleFactor( "alt F2", "1.25" ); + registerScaleFactor( "alt F3", "1.5" ); + registerScaleFactor( "alt F4", "1.75" ); + registerScaleFactor( "alt F5", "2" ); + registerScaleFactor( "alt F6", "2.5" ); + registerScaleFactor( "alt F7", "3" ); + registerScaleFactor( "alt F8", "3.5" ); + registerScaleFactor( "alt F9", "4" ); + registerScaleFactor( "alt F10", "5" ); + registerScaleFactor( "alt F11", "6" ); + registerScaleFactor( "alt F12", null ); + + // register Alt+R key to toggle component orientation + ((JComponent)getContentPane()).registerKeyboardAction( + e -> { + applyComponentOrientation( getComponentOrientation().isLeftToRight() + ? ComponentOrientation.RIGHT_TO_LEFT + : ComponentOrientation.LEFT_TO_RIGHT ); + revalidate(); + repaint(); + }, + KeyStroke.getKeyStroke( "alt R" ), + JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT ); + + // register ESC key to close frame + ((JComponent)getContentPane()).registerKeyboardAction( + e -> { + dispose(); + }, + KeyStroke.getKeyStroke( KeyEvent.VK_ESCAPE, 0, false ), + JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT ); + + // update info + addWindowListener( new WindowAdapter() { + @Override + public void windowOpened( WindowEvent e ) { + updateInfo(); + } + } ); + + // update info when moved to another screen + addComponentListener( new ComponentAdapter() { + @Override + public void componentMoved( ComponentEvent e ) { + updateInfo(); + } + } ); + + UIManager.addPropertyChangeListener( e -> { + if( "lookAndFeel".equals( e.getPropertyName() ) ) { + EventQueue.invokeLater( () -> { + // update info because user scale factor may change + updateInfo(); + } ); + } + } ); + + UIScale.addPropertyChangeListener( e -> { + // update info because user scale factor may change + updateInfo(); + } ); + + setMinimumSize( UIScale.scale( new Dimension( 300, 150 ) ) ); + pack(); + setLocationRelativeTo( null ); + setVisible( true ); + } + + private void updateInfo() { + double systemScaleFactor = UIScale.getSystemScaleFactor( getGraphicsConfiguration() ); + float userScaleFactor = UIScale.getUserScaleFactor(); + infoLabel.setText( " (Java " + System.getProperty( "java.version" ) + + (systemScaleFactor != 1 ? ("; system scale factor " + systemScaleFactor) : "") + + (userScaleFactor != 1 ? ("; user scale factor " + userScaleFactor) : "") + + (systemScaleFactor == 1 && userScaleFactor == 1 ? "; no scaling" : "") + + ")" ); + } + + private void registerSwitchToLookAndFeel( String keyStrokeStr, String lafClassName ) { + KeyStroke keyStroke = KeyStroke.getKeyStroke( keyStrokeStr ); + if( keyStroke == null ) + throw new IllegalArgumentException( "Invalid key stroke '" + keyStrokeStr + "'" ); + + ((JComponent)getContentPane()).registerKeyboardAction( + e -> { + applyLookAndFeel( lafClassName ); + }, + keyStroke, + JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT ); + } + + private void applyLookAndFeel( String lafClassName ) { + try { + UIManager.setLookAndFeel( lafClassName ); + FlatLaf.updateUI(); + } catch( Exception ex ) { + ex.printStackTrace(); + } + } + + private void registerScaleFactor( String keyStrokeStr, String scaleFactor ) { + KeyStroke keyStroke = KeyStroke.getKeyStroke( keyStrokeStr ); + if( keyStroke == null ) + throw new IllegalArgumentException( "Invalid key stroke '" + keyStrokeStr + "'" ); + + ((JComponent)getContentPane()).registerKeyboardAction( + e -> { + applyScaleFactor( scaleFactor ); + }, + keyStroke, + JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT ); + } + + private void applyScaleFactor( String scaleFactor ) { + if( scaleFactor != null ) { + System.setProperty( FlatSystemProperties.UI_SCALE, scaleFactor ); + DemoPrefs.getState().put( KEY_SCALE_FACTOR, scaleFactor ); + } else { + System.clearProperty( FlatSystemProperties.UI_SCALE ); + DemoPrefs.getState().remove( KEY_SCALE_FACTOR ); + } + + applyLookAndFeel( UIManager.getLookAndFeel().getClass().getName() ); + pack(); + } +} diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatStressTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatStressTest.java new file mode 100644 index 00000000..f2993e52 --- /dev/null +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatStressTest.java @@ -0,0 +1,141 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.testing; + +import java.awt.Container; +import java.awt.FlowLayout; +import java.util.Random; +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JLabel; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.FlatLightLaf; +import com.formdev.flatlaf.extras.FlatSVGIcon; + +/** + * @author Karl Tauber + */ +public class FlatStressTest +{ + public static void main( String[] args ) { + SwingUtilities.invokeLater( () -> { + FlatLightLaf.setup(); + new FlatStressTest(); + } ); + } + + protected FlatStressTest() { + JFrame frame = new JFrame( "FlatStressTest" ); + frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); + + Container contentPane = frame.getContentPane(); + contentPane.setLayout( new FlowLayout() ); + + contentPane.add( createStressTest() ); + + frame.setSize( 800, 600 ); + frame.setLocationRelativeTo( null ); + frame.setVisible( true ); + } + + private JComponent createStressTest() { + return createComboBoxStressTest(); +// return createGetFontStressTest(); +// return createSVGIconTest(); + } + + // for https://github.com/JFormDesigner/FlatLaf/issues/432 + // simulates StackOverflowError in FlatComboBoxUI when doing stuff in various threads + // + // requires adding `Thread.sleep( 1 );` to `FlatComboBoxUI.CellPaddingBorder.install()` + // after invocation of `uninstall()` + private JComponent createComboBoxStressTest() { + Random random = new Random(); + + JComboBox comboBox = new JComboBox<>(); + comboBox.putClientProperty( FlatClientProperties.MINIMUM_WIDTH, 0 ); + for( int i = 0; i < 100; i++ ) + comboBox.addItem( Integer.toString( random.nextInt() ) ); + + Thread thread = new Thread( () -> { + for(;;) { + comboBox.setSelectedIndex( random.nextInt( comboBox.getItemCount() ) ); + comboBox.putClientProperty( FlatClientProperties.MINIMUM_WIDTH, random.nextInt( 500 ) ); + } + }); + thread.setDaemon( true ); + thread.start(); + + return comboBox; + } + + // for https://github.com/JFormDesigner/FlatLaf/issues/456 + @SuppressWarnings( "unused" ) + private JComponent createGetFontStressTest() { + JLabel label = new JLabel( "test" ); + + Runnable runnable = () -> { + for(;;) { + UIManager.getFont( "Label.font" ); + } + }; + + Thread thread1 = new Thread( runnable); + thread1.setDaemon( true ); + thread1.start(); + + Thread thread2 = new Thread( runnable); + thread2.setDaemon( true ); + thread2.start(); + + Thread thread3 = new Thread( runnable); + thread3.setDaemon( true ); + thread3.start(); + + return label; + } + + // for https://github.com/JFormDesigner/FlatLaf/issues/459 + @SuppressWarnings( "unused" ) + private JComponent createSVGIconTest() { + JLabel label = new JLabel( "test" ); + + Runnable runnable = () -> { + for(;;) { + FlatSVGIcon icon = new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/back.svg" ); + icon.getIconHeight(); + } + }; + + Thread thread1 = new Thread( runnable); + thread1.setDaemon( true ); + thread1.start(); + + Thread thread2 = new Thread( runnable); + thread2.setDaemon( true ); + thread2.start(); + + Thread thread3 = new Thread( runnable); + thread3.setDaemon( true ); + thread3.start(); + + return label; + } +} diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatSubMenusTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatSubMenusTest.java new file mode 100644 index 00000000..2016b53f --- /dev/null +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatSubMenusTest.java @@ -0,0 +1,622 @@ +/* + * Copyright 2022 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.testing; + +import java.awt.Component; +import java.awt.event.*; +import javax.swing.*; +import net.miginfocom.swing.*; + +/** + * @author Karl Tauber + */ +public class FlatSubMenusTest + extends FlatTestPanel +{ + public static void main( String[] args ) { + SwingUtilities.invokeLater( () -> { + FlatTestFrame frame = FlatTestFrame.create( args, "FlatSubMenusTest" ); + UIManager.put( "FlatLaf.debug.menu.showSafeTriangle", true ); + frame.applyComponentOrientationToFrame = true; + frame.showFrame( FlatSubMenusTest::new, panel -> ((FlatSubMenusTest)panel).menuBar ); + } ); + } + + FlatSubMenusTest() { + initComponents(); + } + + private void showPopupMenuButtonActionPerformed(ActionEvent e) { + Component invoker = (Component) e.getSource(); + PopupMenu popupMenu = new PopupMenu(); + popupMenu.applyComponentOrientation( getComponentOrientation() ); + popupMenu.show( invoker, 0, invoker.getHeight() ); + } + + private void initComponents() { + // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents + JButton showPopupMenuButton = new JButton(); + menuBar = new JMenuBar(); + JMenu menu3 = new JMenu(); + JMenuItem menuItem1 = new JMenuItem(); + JMenuItem menuItem50 = new JMenuItem(); + JMenu menu4 = new JMenu(); + JMenuItem menuItem9 = new JMenuItem(); + JMenuItem menuItem10 = new JMenuItem(); + JMenuItem menuItem11 = new JMenuItem(); + JMenu menu8 = new JMenu(); + JMenu menu21 = new JMenu(); + JMenuItem menuItem81 = new JMenuItem(); + JMenuItem menuItem82 = new JMenuItem(); + JMenuItem menuItem83 = new JMenuItem(); + JMenuItem menuItem41 = new JMenuItem(); + JMenuItem menuItem42 = new JMenuItem(); + JMenuItem menuItem43 = new JMenuItem(); + JMenuItem menuItem44 = new JMenuItem(); + JMenuItem menuItem45 = new JMenuItem(); + JMenuItem menuItem46 = new JMenuItem(); + JMenuItem menuItem12 = new JMenuItem(); + JMenuItem menuItem13 = new JMenuItem(); + JMenuItem menuItem14 = new JMenuItem(); + JMenuItem menuItem2 = new JMenuItem(); + JMenu menu5 = new JMenu(); + JMenuItem menuItem15 = new JMenuItem(); + JMenuItem menuItem16 = new JMenuItem(); + JMenuItem menuItem17 = new JMenuItem(); + JMenuItem menuItem18 = new JMenuItem(); + JMenuItem menuItem19 = new JMenuItem(); + JMenuItem menuItem20 = new JMenuItem(); + JMenuItem menuItem21 = new JMenuItem(); + JMenuItem menuItem22 = new JMenuItem(); + JMenuItem menuItem23 = new JMenuItem(); + JMenuItem menuItem24 = new JMenuItem(); + JMenuItem menuItem25 = new JMenuItem(); + JMenuItem menuItem26 = new JMenuItem(); + JMenuItem menuItem27 = new JMenuItem(); + JMenuItem menuItem28 = new JMenuItem(); + JMenuItem menuItem29 = new JMenuItem(); + JMenu menu6 = new JMenu(); + JMenuItem menuItem30 = new JMenuItem(); + JMenuItem menuItem31 = new JMenuItem(); + JMenuItem menuItem32 = new JMenuItem(); + JMenu menu9 = new JMenu(); + JMenuItem menuItem47 = new JMenuItem(); + JMenuItem menuItem48 = new JMenuItem(); + JMenuItem menuItem49 = new JMenuItem(); + JMenuItem menuItem33 = new JMenuItem(); + JMenuItem menuItem34 = new JMenuItem(); + JMenuItem menuItem3 = new JMenuItem(); + JMenuItem menuItem4 = new JMenuItem(); + JMenuItem menuItem5 = new JMenuItem(); + JMenuItem menuItem6 = new JMenuItem(); + JMenuItem menuItem7 = new JMenuItem(); + JMenuItem menuItem8 = new JMenuItem(); + JMenu menu7 = new JMenu(); + JMenuItem menuItem35 = new JMenuItem(); + JMenuItem menuItem37 = new JMenuItem(); + JMenuItem menuItem36 = new JMenuItem(); + JMenuItem menuItem38 = new JMenuItem(); + JMenuItem menuItem39 = new JMenuItem(); + JMenuItem menuItem40 = new JMenuItem(); + + //======== this ======== + setLayout(new MigLayout( + "ltr,insets dialog,hidemode 3", + // columns + "[]", + // rows + "[]")); + + //---- showPopupMenuButton ---- + showPopupMenuButton.setText("show JPopupMenu"); + showPopupMenuButton.addActionListener(e -> showPopupMenuButtonActionPerformed(e)); + add(showPopupMenuButton, "cell 0 0"); + + //======== menuBar ======== + { + + //======== menu3 ======== + { + menu3.setText("main menu"); + + //---- menuItem1 ---- + menuItem1.setText("text"); + menu3.add(menuItem1); + + //---- menuItem50 ---- + menuItem50.setText("text"); + menu3.add(menuItem50); + + //======== menu4 ======== + { + menu4.setText("text"); + + //---- menuItem9 ---- + menuItem9.setText("text"); + menu4.add(menuItem9); + + //---- menuItem10 ---- + menuItem10.setText("text text"); + menu4.add(menuItem10); + + //---- menuItem11 ---- + menuItem11.setText("text"); + menu4.add(menuItem11); + + //======== menu8 ======== + { + menu8.setText("text"); + + //======== menu21 ======== + { + menu21.setText("text"); + + //---- menuItem81 ---- + menuItem81.setText("text"); + menu21.add(menuItem81); + + //---- menuItem82 ---- + menuItem82.setText("text"); + menu21.add(menuItem82); + + //---- menuItem83 ---- + menuItem83.setText("text"); + menu21.add(menuItem83); + } + menu8.add(menu21); + + //---- menuItem41 ---- + menuItem41.setText("text"); + menu8.add(menuItem41); + + //---- menuItem42 ---- + menuItem42.setText("text"); + menu8.add(menuItem42); + + //---- menuItem43 ---- + menuItem43.setText("text"); + menu8.add(menuItem43); + + //---- menuItem44 ---- + menuItem44.setText("text"); + menu8.add(menuItem44); + + //---- menuItem45 ---- + menuItem45.setText("text"); + menu8.add(menuItem45); + + //---- menuItem46 ---- + menuItem46.setText("text"); + menu8.add(menuItem46); + } + menu4.add(menu8); + + //---- menuItem12 ---- + menuItem12.setText("text"); + menu4.add(menuItem12); + + //---- menuItem13 ---- + menuItem13.setText("text"); + menu4.add(menuItem13); + + //---- menuItem14 ---- + menuItem14.setText("text"); + menu4.add(menuItem14); + } + menu3.add(menu4); + + //---- menuItem2 ---- + menuItem2.setText("text"); + menu3.add(menuItem2); + + //======== menu5 ======== + { + menu5.setText("text"); + + //---- menuItem15 ---- + menuItem15.setText("text bla bla"); + menu5.add(menuItem15); + + //---- menuItem16 ---- + menuItem16.setText("text"); + menu5.add(menuItem16); + + //---- menuItem17 ---- + menuItem17.setText("text"); + menu5.add(menuItem17); + + //---- menuItem18 ---- + menuItem18.setText("text"); + menu5.add(menuItem18); + + //---- menuItem19 ---- + menuItem19.setText("text"); + menu5.add(menuItem19); + + //---- menuItem20 ---- + menuItem20.setText("text"); + menu5.add(menuItem20); + + //---- menuItem21 ---- + menuItem21.setText("text"); + menu5.add(menuItem21); + + //---- menuItem22 ---- + menuItem22.setText("text"); + menu5.add(menuItem22); + + //---- menuItem23 ---- + menuItem23.setText("text"); + menu5.add(menuItem23); + + //---- menuItem24 ---- + menuItem24.setText("text"); + menu5.add(menuItem24); + + //---- menuItem25 ---- + menuItem25.setText("text"); + menu5.add(menuItem25); + + //---- menuItem26 ---- + menuItem26.setText("text"); + menu5.add(menuItem26); + + //---- menuItem27 ---- + menuItem27.setText("text"); + menu5.add(menuItem27); + + //---- menuItem28 ---- + menuItem28.setText("text"); + menu5.add(menuItem28); + + //---- menuItem29 ---- + menuItem29.setText("text"); + menu5.add(menuItem29); + } + menu3.add(menu5); + + //======== menu6 ======== + { + menu6.setText("text"); + + //---- menuItem30 ---- + menuItem30.setText("text o text"); + menu6.add(menuItem30); + + //---- menuItem31 ---- + menuItem31.setText("text"); + menu6.add(menuItem31); + + //---- menuItem32 ---- + menuItem32.setText("text"); + menu6.add(menuItem32); + + //======== menu9 ======== + { + menu9.setText("text"); + + //---- menuItem47 ---- + menuItem47.setText("text"); + menu9.add(menuItem47); + + //---- menuItem48 ---- + menuItem48.setText("text"); + menu9.add(menuItem48); + + //---- menuItem49 ---- + menuItem49.setText("text"); + menu9.add(menuItem49); + } + menu6.add(menu9); + + //---- menuItem33 ---- + menuItem33.setText("text"); + menu6.add(menuItem33); + + //---- menuItem34 ---- + menuItem34.setText("text"); + menu6.add(menuItem34); + } + menu3.add(menu6); + + //---- menuItem3 ---- + menuItem3.setText("text"); + menu3.add(menuItem3); + + //---- menuItem4 ---- + menuItem4.setText("longer text"); + menu3.add(menuItem4); + + //---- menuItem5 ---- + menuItem5.setText("text"); + menu3.add(menuItem5); + + //---- menuItem6 ---- + menuItem6.setText("text"); + menu3.add(menuItem6); + + //---- menuItem7 ---- + menuItem7.setText("text"); + menu3.add(menuItem7); + + //---- menuItem8 ---- + menuItem8.setText("text"); + menu3.add(menuItem8); + + //======== menu7 ======== + { + menu7.setText("text"); + + //---- menuItem35 ---- + menuItem35.setText("text abc"); + menu7.add(menuItem35); + + //---- menuItem37 ---- + menuItem37.setText("text"); + menu7.add(menuItem37); + + //---- menuItem36 ---- + menuItem36.setText("text"); + menu7.add(menuItem36); + + //---- menuItem38 ---- + menuItem38.setText("text"); + menu7.add(menuItem38); + + //---- menuItem39 ---- + menuItem39.setText("text"); + menu7.add(menuItem39); + + //---- menuItem40 ---- + menuItem40.setText("text"); + menu7.add(menuItem40); + } + menu3.add(menu7); + } + menuBar.add(menu3); + } + // JFormDesigner - End of component initialization //GEN-END:initComponents + } + + // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + private JMenuBar menuBar; + // JFormDesigner - End of variables declaration //GEN-END:variables + + //---- class PopupMenu ---------------------------------------------------- + + private class PopupMenu extends JPopupMenu { + private PopupMenu() { + initComponents(); + } + + private void initComponents() { + // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents + JMenuItem menuItem54 = new JMenuItem(); + JMenuItem menuItem51 = new JMenuItem(); + JMenu menu10 = new JMenu(); + JMenuItem menuItem57 = new JMenuItem(); + JMenuItem menuItem58 = new JMenuItem(); + JMenu menu14 = new JMenu(); + JMenu menu18 = new JMenu(); + JMenu menu19 = new JMenu(); + JMenuItem menuItem76 = new JMenuItem(); + JMenuItem menuItem77 = new JMenuItem(); + JMenuItem menuItem78 = new JMenuItem(); + JMenu menu20 = new JMenu(); + JMenuItem menuItem73 = new JMenuItem(); + JMenuItem menuItem74 = new JMenuItem(); + JMenuItem menuItem75 = new JMenuItem(); + JMenuItem menuItem79 = new JMenuItem(); + JMenuItem menuItem80 = new JMenuItem(); + JMenuItem menuItem70 = new JMenuItem(); + JMenuItem menuItem71 = new JMenuItem(); + JMenuItem menuItem72 = new JMenuItem(); + JMenuItem menuItem59 = new JMenuItem(); + JMenuItem menuItem60 = new JMenuItem(); + JMenuItem menuItem52 = new JMenuItem(); + JMenu menu11 = new JMenu(); + JMenuItem menuItem61 = new JMenuItem(); + JMenuItem menuItem62 = new JMenuItem(); + JMenuItem menuItem63 = new JMenuItem(); + JMenu menu12 = new JMenu(); + JMenuItem menuItem64 = new JMenuItem(); + JMenuItem menuItem65 = new JMenuItem(); + JMenuItem menuItem66 = new JMenuItem(); + JMenuItem menuItem53 = new JMenuItem(); + JMenuItem menuItem55 = new JMenuItem(); + JMenuItem menuItem56 = new JMenuItem(); + JMenu menu13 = new JMenu(); + JMenuItem menuItem67 = new JMenuItem(); + JMenuItem menuItem68 = new JMenuItem(); + JMenuItem menuItem69 = new JMenuItem(); + + //======== this ======== + + //---- menuItem54 ---- + menuItem54.setText("text"); + add(menuItem54); + + //---- menuItem51 ---- + menuItem51.setText("text text"); + add(menuItem51); + + //======== menu10 ======== + { + menu10.setText("text"); + + //---- menuItem57 ---- + menuItem57.setText("text"); + menu10.add(menuItem57); + + //---- menuItem58 ---- + menuItem58.setText("text"); + menu10.add(menuItem58); + + //======== menu14 ======== + { + menu14.setText("text"); + + //======== menu18 ======== + { + menu18.setText("text"); + + //======== menu19 ======== + { + menu19.setText("text"); + + //---- menuItem76 ---- + menuItem76.setText("text"); + menu19.add(menuItem76); + + //---- menuItem77 ---- + menuItem77.setText("text"); + menu19.add(menuItem77); + + //---- menuItem78 ---- + menuItem78.setText("text"); + menu19.add(menuItem78); + } + menu18.add(menu19); + + //======== menu20 ======== + { + menu20.setText("text"); + + //---- menuItem73 ---- + menuItem73.setText("text"); + menu20.add(menuItem73); + + //---- menuItem74 ---- + menuItem74.setText("text"); + menu20.add(menuItem74); + + //---- menuItem75 ---- + menuItem75.setText("text"); + menu20.add(menuItem75); + } + menu18.add(menu20); + + //---- menuItem79 ---- + menuItem79.setText("text"); + menu18.add(menuItem79); + + //---- menuItem80 ---- + menuItem80.setText("text"); + menu18.add(menuItem80); + } + menu14.add(menu18); + + //---- menuItem70 ---- + menuItem70.setText("text"); + menu14.add(menuItem70); + + //---- menuItem71 ---- + menuItem71.setText("text"); + menu14.add(menuItem71); + + //---- menuItem72 ---- + menuItem72.setText("text"); + menu14.add(menuItem72); + } + menu10.add(menu14); + + //---- menuItem59 ---- + menuItem59.setText("text"); + menu10.add(menuItem59); + + //---- menuItem60 ---- + menuItem60.setText("text"); + menu10.add(menuItem60); + } + add(menu10); + + //---- menuItem52 ---- + menuItem52.setText("text"); + add(menuItem52); + + //======== menu11 ======== + { + menu11.setText("text"); + + //---- menuItem61 ---- + menuItem61.setText("text"); + menu11.add(menuItem61); + + //---- menuItem62 ---- + menuItem62.setText("text"); + menu11.add(menuItem62); + + //---- menuItem63 ---- + menuItem63.setText("text"); + menu11.add(menuItem63); + } + add(menu11); + + //======== menu12 ======== + { + menu12.setText("text"); + + //---- menuItem64 ---- + menuItem64.setText("text"); + menu12.add(menuItem64); + + //---- menuItem65 ---- + menuItem65.setText("text"); + menu12.add(menuItem65); + + //---- menuItem66 ---- + menuItem66.setText("text"); + menu12.add(menuItem66); + } + add(menu12); + + //---- menuItem53 ---- + menuItem53.setText("text"); + add(menuItem53); + + //---- menuItem55 ---- + menuItem55.setText("text"); + add(menuItem55); + + //---- menuItem56 ---- + menuItem56.setText("text"); + add(menuItem56); + + //======== menu13 ======== + { + menu13.setText("text"); + + //---- menuItem67 ---- + menuItem67.setText("text"); + menu13.add(menuItem67); + + //---- menuItem68 ---- + menuItem68.setText("text"); + menu13.add(menuItem68); + + //---- menuItem69 ---- + menuItem69.setText("text"); + menu13.add(menuItem69); + } + add(menu13); + // JFormDesigner - End of component initialization //GEN-END:initComponents + } + + // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + // JFormDesigner - End of variables declaration //GEN-END:variables + } +} diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatSubMenusTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatSubMenusTest.jfd new file mode 100644 index 00000000..d2e4189a --- /dev/null +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatSubMenusTest.jfd @@ -0,0 +1,439 @@ +JFDML JFormDesigner: "7.0.5.0.404" Java: "17" encoding: "UTF-8" + +new FormModel { + contentType: "form/swing" + root: new FormRoot { + auxiliary() { + "JavaCodeGenerator.defaultVariableLocal": true + } + add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "ltr,insets dialog,hidemode 3" + "$columnConstraints": "[]" + "$rowConstraints": "[]" + } ) { + name: "this" + add( new FormComponent( "javax.swing.JButton" ) { + name: "showPopupMenuButton" + "text": "show JPopupMenu" + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showPopupMenuButtonActionPerformed", true ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0" + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 0, 0 ) + "size": new java.awt.Dimension( 390, 130 ) + } ) + add( new FormContainer( "javax.swing.JMenuBar", new FormLayoutManager( class javax.swing.JMenuBar ) ) { + name: "menuBar" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu3" + "text": "main menu" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem1" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem50" + "text": "text" + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu4" + "text": "text" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem9" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem10" + "text": "text text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem11" + "text": "text" + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu8" + "text": "text" + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu21" + "text": "text" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem81" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem82" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem83" + "text": "text" + } ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem41" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem42" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem43" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem44" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem45" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem46" + "text": "text" + } ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem12" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem13" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem14" + "text": "text" + } ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem2" + "text": "text" + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu5" + "text": "text" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem15" + "text": "text bla bla" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem16" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem17" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem18" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem19" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem20" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem21" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem22" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem23" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem24" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem25" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem26" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem27" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem28" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem29" + "text": "text" + } ) + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu6" + "text": "text" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem30" + "text": "text o text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem31" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem32" + "text": "text" + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu9" + "text": "text" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem47" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem48" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem49" + "text": "text" + } ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem33" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem34" + "text": "text" + } ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem3" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem4" + "text": "longer text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem5" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem6" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem7" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem8" + "text": "text" + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu7" + "text": "text" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem35" + "text": "text abc" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem37" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem36" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem38" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem39" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem40" + "text": "text" + } ) + } ) + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 0, 175 ) + } ) + add( new FormContainer( "javax.swing.JPopupMenu", new FormLayoutManager( class javax.swing.JPopupMenu ) ) { + name: "popupMenu1" + auxiliary() { + "JavaCodeGenerator.className": "PopupMenu" + } + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem54" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem51" + "text": "text text" + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu10" + "text": "text" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem57" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem58" + "text": "text" + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu14" + "text": "text" + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu18" + "text": "text" + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu19" + "text": "text" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem76" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem77" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem78" + "text": "text" + } ) + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu20" + "text": "text" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem73" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem74" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem75" + "text": "text" + } ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem79" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem80" + "text": "text" + } ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem70" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem71" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem72" + "text": "text" + } ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem59" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem60" + "text": "text" + } ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem52" + "text": "text" + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu11" + "text": "text" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem61" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem62" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem63" + "text": "text" + } ) + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu12" + "text": "text" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem64" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem65" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem66" + "text": "text" + } ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem53" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem55" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem56" + "text": "text" + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu13" + "text": "text" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem67" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem68" + "text": "text" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem69" + "text": "text" + } ) + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 275, 175 ) + } ) + } +} diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTestFrame.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTestFrame.java index 1d5cb38a..d0f66b87 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTestFrame.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTestFrame.java @@ -23,6 +23,7 @@ import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -110,11 +111,11 @@ public class FlatTestFrame // initialize look and feels combo box DefaultComboBoxModel lafModel = new DefaultComboBoxModel<>(); - lafModel.addElement( new LookAndFeelInfo( "Flat Light (F1)", FlatLightLaf.class.getName() ) ); - lafModel.addElement( new LookAndFeelInfo( "Flat Dark (F2)", FlatDarkLaf.class.getName() ) ); - lafModel.addElement( new LookAndFeelInfo( "Flat IntelliJ (F3)", FlatIntelliJLaf.class.getName() ) ); - lafModel.addElement( new LookAndFeelInfo( "Flat Darcula (F4)", FlatDarculaLaf.class.getName() ) ); - lafModel.addElement( new LookAndFeelInfo( "Flat Test (F8)", FlatTestLaf.class.getName() ) ); + lafModel.addElement( new LookAndFeelInfo( "FlatLaf Light (F1)", FlatLightLaf.class.getName() ) ); + lafModel.addElement( new LookAndFeelInfo( "FlatLaf Dark (F2)", FlatDarkLaf.class.getName() ) ); + lafModel.addElement( new LookAndFeelInfo( "FlatLaf IntelliJ (F3)", FlatIntelliJLaf.class.getName() ) ); + lafModel.addElement( new LookAndFeelInfo( "FlatLaf Darcula (F4)", FlatDarculaLaf.class.getName() ) ); + lafModel.addElement( new LookAndFeelInfo( "FlatLaf Test (F8)", FlatTestLaf.class.getName() ) ); UIManager.LookAndFeelInfo[] lookAndFeels = UIManager.getInstalledLookAndFeels(); for( UIManager.LookAndFeelInfo lookAndFeel : lookAndFeels ) { @@ -284,6 +285,8 @@ public class FlatTestFrame Properties properties = new Properties(); try( InputStream in = new FileInputStream( "lafs.properties" ) ) { properties.load( in ); + } catch( FileNotFoundException ex ) { + // ignore } catch( IOException ex ) { ex.printStackTrace(); } diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTestLaf.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTestLaf.java index d35d51e0..6fb84ab3 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTestLaf.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTestLaf.java @@ -32,12 +32,12 @@ public class FlatTestLaf { @Override public String getName() { - return "Flat Test"; + return "FlatLaf Test"; } @Override public String getDescription() { - return "Flat Test Look and Feel"; + return "FlatLaf Test Look and Feel"; } @Override diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTextComponentsTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTextComponentsTest.java index 80b68989..5d809559 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTextComponentsTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTextComponentsTest.java @@ -16,8 +16,17 @@ package com.formdev.flatlaf.testing; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.Insets; +import java.util.function.Supplier; import javax.swing.*; +import javax.swing.border.*; import javax.swing.text.DefaultEditorKit; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.util.UIScale; import net.miginfocom.swing.*; /** @@ -41,16 +50,139 @@ public class FlatTextComponentsTest textField1.setText( "new text" ); } + private void paddingChanged() { + Insets padding = new Insets( + (int) topPaddingField.getValue(), + (int) leftPaddingField.getValue(), + (int) bottomPaddingField.getValue(), + (int) rightPaddingField.getValue() ); + if( padding.equals( new Insets( 0, 0, 0, 0 ) ) ) + padding = null; + + putTextFieldClientProperty( FlatClientProperties.TEXT_FIELD_PADDING, padding ); + } + + private void leadingIcon() { + putTextFieldClientProperty( FlatClientProperties.TEXT_FIELD_LEADING_ICON, leadingIconCheckBox.isSelected() + ? new TestIcon( 8, 16, Color.blue ) : null ); + } + + private void trailingIcon() { + putTextFieldClientProperty( FlatClientProperties.TEXT_FIELD_TRAILING_ICON, trailingIconCheckBox.isSelected() + ? new TestIcon( 24, 12, Color.magenta ) : null ); + } + + private void leadingComponent() { + putTextFieldClientProperty( FlatClientProperties.TEXT_FIELD_LEADING_COMPONENT, () -> { + if( !leadingComponentCheckBox.isSelected() ) + return null; + + JLabel l = new JLabel( "lead" ); + l.setOpaque( true ); + l.setBackground( Color.green ); + l.setVisible( leadingComponentVisibleCheckBox.isSelected() ); + return l; + } ); + } + + private void trailingComponent() { + putTextFieldClientProperty( FlatClientProperties.TEXT_FIELD_TRAILING_COMPONENT, () -> { + if( !trailingComponentCheckBox.isSelected() ) + return null; + + JLabel l = new JLabel( "tr" ); + l.setOpaque( true ); + l.setBackground( Color.magenta ); + l.setVisible( trailingComponentVisibleCheckBox.isSelected() ); + return l; + } ); + } + + private void leadingComponentVisible() { + setLeadingTrailingComponentVisible( FlatClientProperties.TEXT_FIELD_LEADING_COMPONENT, + leadingComponentVisibleCheckBox.isSelected() ); + } + + private void trailingComponentVisible() { + setLeadingTrailingComponentVisible( FlatClientProperties.TEXT_FIELD_TRAILING_COMPONENT, + trailingComponentVisibleCheckBox.isSelected() ); + } + + private void setLeadingTrailingComponentVisible( String key, boolean visible ) { + for( Component c : getComponents() ) { + if( c instanceof JTextField ) { + Object value = ((JTextField)c).getClientProperty( key ); + if( value instanceof JComponent ) { + ((JComponent)value).setVisible( visible ); + c.revalidate(); + c.repaint(); + } + } + } + } + + private void showClearButton() { + putTextFieldClientProperty( FlatClientProperties.TEXT_FIELD_SHOW_CLEAR_BUTTON, + showClearButtonCheckBox.isSelected() ); + } + + private void showRevealButton() { + for( Component c : getComponents() ) { + if( c instanceof JPasswordField ) + ((JPasswordField)c).putClientProperty(FlatClientProperties.STYLE, + showRevealButtonCheckBox.isSelected() ? "showRevealButton: true" : null ); + } + } + + private void putTextFieldClientProperty( String key, Object value ) { + for( Component c : getComponents() ) { + if( c instanceof JTextField ) + ((JTextField)c).putClientProperty( key, value ); + } + } + + private void putTextFieldClientProperty( String key, Supplier value ) { + for( Component c : getComponents() ) { + if( c instanceof JTextField ) + ((JTextField)c).putClientProperty( key, value.get() ); + } + } + + private void dragEnabledChanged() { + boolean dragEnabled = dragEnabledCheckBox.isSelected(); + textField.setDragEnabled( dragEnabled ); + textArea.setDragEnabled( dragEnabled ); + textPane.setDragEnabled( dragEnabled ); + editorPane.setDragEnabled( dragEnabled ); + } + private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents JLabel textFieldLabel = new JLabel(); textField1 = new JTextField(); JTextField textField3 = new JTextField(); JTextField textField2 = new JTextField(); - JButton button1 = new JButton(); JLabel formattedTextFieldLabel = new JLabel(); JFormattedTextField formattedTextField1 = new JFormattedTextField(); JFormattedTextField formattedTextField3 = new JFormattedTextField(); + JPanel panel1 = new JPanel(); + JButton button1 = new JButton(); + JLabel leftPaddingLabel = new JLabel(); + leftPaddingField = new JSpinner(); + JLabel rightPaddingLabel = new JLabel(); + rightPaddingField = new JSpinner(); + JLabel topPaddingLabel = new JLabel(); + topPaddingField = new JSpinner(); + JLabel bottomPaddingLabel = new JLabel(); + bottomPaddingField = new JSpinner(); + leadingIconCheckBox = new JCheckBox(); + trailingIconCheckBox = new JCheckBox(); + leadingComponentCheckBox = new JCheckBox(); + trailingComponentCheckBox = new JCheckBox(); + leadingComponentVisibleCheckBox = new JCheckBox(); + trailingComponentVisibleCheckBox = new JCheckBox(); + showClearButtonCheckBox = new JCheckBox(); + showRevealButtonCheckBox = new JCheckBox(); JLabel passwordFieldLabel = new JLabel(); JPasswordField passwordField1 = new JPasswordField(); JPasswordField passwordField3 = new JPasswordField(); @@ -74,17 +206,34 @@ public class FlatTextComponentsTest JComboBox comboBox3 = new JComboBox<>(); JLabel spinnerLabel = new JLabel(); JSpinner spinner1 = new JSpinner(); - JSpinner spinner2 = new JSpinner(); - JSpinner spinner3 = new JSpinner(); + JLabel label2 = new JLabel(); JComboBox comboBox2 = new JComboBox<>(); + JSpinner spinner2 = new JSpinner(); + JLabel label1 = new JLabel(); + JComboBox comboBox5 = new JComboBox<>(); + JSpinner spinner4 = new JSpinner(); + JLabel label3 = new JLabel(); JComboBox comboBox4 = new JComboBox<>(); + JSpinner spinner3 = new JSpinner(); + JLabel label4 = new JLabel(); + JComboBox comboBox6 = new JComboBox<>(); + JSpinner spinner5 = new JSpinner(); + JLabel label5 = new JLabel(); + textField = new JTextField(); + dragEnabledCheckBox = new JCheckBox(); + JLabel label6 = new JLabel(); + JScrollPane scrollPane2 = new JScrollPane(); + textArea = new JTextArea(); + JScrollPane scrollPane4 = new JScrollPane(); + textPane = new JTextPane(); + JScrollPane scrollPane6 = new JScrollPane(); + editorPane = new JEditorPane(); JPopupMenu popupMenu1 = new JPopupMenu(); JMenuItem cutMenuItem = new JMenuItem(); JMenuItem copyMenuItem = new JMenuItem(); JMenuItem pasteMenuItem = new JMenuItem(); //======== this ======== - setName("this"); setLayout(new MigLayout( "ltr,insets dialog,hidemode 3", // columns @@ -102,28 +251,33 @@ public class FlatTextComponentsTest "[50,fill]" + "[]" + "[]para" + + "[40]" + + "[40]" + "[]" + "[]" + + "[::14]" + + "[::14]" + "[]" + - "[]")); + "[]para" + + "[]" + + "[90,fill]")); //---- textFieldLabel ---- textFieldLabel.setText("JTextField:"); textFieldLabel.setDisplayedMnemonic('T'); textFieldLabel.setLabelFor(textField1); - textFieldLabel.setName("textFieldLabel"); add(textFieldLabel, "cell 0 0"); //---- textField1 ---- textField1.setText("editable"); textField1.setComponentPopupMenu(popupMenu1); - textField1.setName("textField1"); + textField1.putClientProperty("JTextField.placeholderText", "place"); add(textField1, "cell 1 0,growx"); //---- textField3 ---- textField3.setText("longer text for testing horizontal scrolling"); textField3.setComponentPopupMenu(popupMenu1); - textField3.setName("textField3"); + textField3.putClientProperty("JTextField.placeholderText", "place"); add(textField3, "cell 2 0,growx"); //---- textField2 ---- @@ -131,80 +285,171 @@ public class FlatTextComponentsTest textField2.setSelectionStart(1); textField2.setSelectionEnd(4); textField2.setComponentPopupMenu(popupMenu1); - textField2.setName("textField2"); + textField2.putClientProperty("JTextField.placeholderText", "place"); add(textField2, "cell 3 0"); - //---- button1 ---- - button1.setText("change text"); - button1.setName("button1"); - button1.addActionListener(e -> changeText()); - add(button1, "cell 4 0"); - //---- formattedTextFieldLabel ---- formattedTextFieldLabel.setText("JFormattedTextField:"); formattedTextFieldLabel.setDisplayedMnemonic('F'); formattedTextFieldLabel.setLabelFor(formattedTextField1); - formattedTextFieldLabel.setName("formattedTextFieldLabel"); add(formattedTextFieldLabel, "cell 0 1"); //---- formattedTextField1 ---- formattedTextField1.setText("editable"); formattedTextField1.setComponentPopupMenu(popupMenu1); - formattedTextField1.setName("formattedTextField1"); + formattedTextField1.putClientProperty("JTextField.placeholderText", "place"); add(formattedTextField1, "cell 1 1,growx"); //---- formattedTextField3 ---- formattedTextField3.setText("longer text for testing horizontal scrolling"); formattedTextField3.setComponentPopupMenu(popupMenu1); - formattedTextField3.setName("formattedTextField3"); + formattedTextField3.putClientProperty("JTextField.placeholderText", "place"); add(formattedTextField3, "cell 2 1,growx"); + //======== panel1 ======== + { + panel1.setBorder(new TitledBorder("Control")); + panel1.setLayout(new MigLayout( + "hidemode 3", + // columns + "[fill]" + + "[fill]", + // rows + "[]" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]0" + + "[]" + + "[]0" + + "[]" + + "[]0" + + "[]" + + "[]" + + "[]")); + + //---- button1 ---- + button1.setText("change text"); + button1.addActionListener(e -> changeText()); + panel1.add(button1, "cell 0 0 2 1,alignx left,growx 0"); + + //---- leftPaddingLabel ---- + leftPaddingLabel.setText("Left padding:"); + panel1.add(leftPaddingLabel, "cell 0 1"); + + //---- leftPaddingField ---- + leftPaddingField.addChangeListener(e -> paddingChanged()); + panel1.add(leftPaddingField, "cell 1 1"); + + //---- rightPaddingLabel ---- + rightPaddingLabel.setText("Right padding:"); + panel1.add(rightPaddingLabel, "cell 0 2"); + + //---- rightPaddingField ---- + rightPaddingField.addChangeListener(e -> paddingChanged()); + panel1.add(rightPaddingField, "cell 1 2"); + + //---- topPaddingLabel ---- + topPaddingLabel.setText("Top padding:"); + panel1.add(topPaddingLabel, "cell 0 3"); + + //---- topPaddingField ---- + topPaddingField.addChangeListener(e -> paddingChanged()); + panel1.add(topPaddingField, "cell 1 3"); + + //---- bottomPaddingLabel ---- + bottomPaddingLabel.setText("Bottom padding:"); + panel1.add(bottomPaddingLabel, "cell 0 4"); + + //---- bottomPaddingField ---- + bottomPaddingField.addChangeListener(e -> paddingChanged()); + panel1.add(bottomPaddingField, "cell 1 4"); + + //---- leadingIconCheckBox ---- + leadingIconCheckBox.setText("leading icon"); + leadingIconCheckBox.addActionListener(e -> leadingIcon()); + panel1.add(leadingIconCheckBox, "cell 0 5 2 1,alignx left,growx 0"); + + //---- trailingIconCheckBox ---- + trailingIconCheckBox.setText("trailing icon"); + trailingIconCheckBox.addActionListener(e -> trailingIcon()); + panel1.add(trailingIconCheckBox, "cell 0 6 2 1,alignx left,growx 0"); + + //---- leadingComponentCheckBox ---- + leadingComponentCheckBox.setText("leading component"); + leadingComponentCheckBox.addActionListener(e -> leadingComponent()); + panel1.add(leadingComponentCheckBox, "cell 0 7 2 1,alignx left,growx 0"); + + //---- trailingComponentCheckBox ---- + trailingComponentCheckBox.setText("trailing component"); + trailingComponentCheckBox.addActionListener(e -> trailingComponent()); + panel1.add(trailingComponentCheckBox, "cell 0 8 2 1,alignx left,growx 0"); + + //---- leadingComponentVisibleCheckBox ---- + leadingComponentVisibleCheckBox.setText("leading component visible"); + leadingComponentVisibleCheckBox.setSelected(true); + leadingComponentVisibleCheckBox.addActionListener(e -> leadingComponentVisible()); + panel1.add(leadingComponentVisibleCheckBox, "cell 0 9 2 1,alignx left,growx 0"); + + //---- trailingComponentVisibleCheckBox ---- + trailingComponentVisibleCheckBox.setText("trailing component visible"); + trailingComponentVisibleCheckBox.setSelected(true); + trailingComponentVisibleCheckBox.addActionListener(e -> trailingComponentVisible()); + panel1.add(trailingComponentVisibleCheckBox, "cell 0 10 2 1,alignx left,growx 0"); + + //---- showClearButtonCheckBox ---- + showClearButtonCheckBox.setText("clear button"); + showClearButtonCheckBox.addActionListener(e -> showClearButton()); + panel1.add(showClearButtonCheckBox, "cell 0 11 2 1,alignx left,growx 0"); + + //---- showRevealButtonCheckBox ---- + showRevealButtonCheckBox.setText("password reveal button"); + showRevealButtonCheckBox.addActionListener(e -> showRevealButton()); + panel1.add(showRevealButtonCheckBox, "cell 0 12 2 1,alignx left,growx 0"); + } + add(panel1, "cell 4 0 1 10,aligny top,growy 0"); + //---- passwordFieldLabel ---- passwordFieldLabel.setText("JPasswordField:"); passwordFieldLabel.setDisplayedMnemonic('P'); passwordFieldLabel.setLabelFor(passwordField1); - passwordFieldLabel.setName("passwordFieldLabel"); add(passwordFieldLabel, "cell 0 2"); //---- passwordField1 ---- passwordField1.setText("editable"); passwordField1.setComponentPopupMenu(popupMenu1); - passwordField1.setName("passwordField1"); + passwordField1.putClientProperty("JTextField.placeholderText", "place"); add(passwordField1, "cell 1 2,growx"); //---- passwordField3 ---- passwordField3.setText("longer text for testing horizontal scrolling"); passwordField3.setComponentPopupMenu(popupMenu1); - passwordField3.setName("passwordField3"); + passwordField3.putClientProperty("JTextField.placeholderText", "place"); add(passwordField3, "cell 2 2,growx"); //---- textAreaLabel ---- textAreaLabel.setText("JTextArea:"); textAreaLabel.setDisplayedMnemonic('A'); textAreaLabel.setLabelFor(textArea1); - textAreaLabel.setName("textAreaLabel"); add(textAreaLabel, "cell 0 3"); //======== scrollPane1 ======== { - scrollPane1.setName("scrollPane1"); //---- textArea1 ---- textArea1.setText("editable"); textArea1.setComponentPopupMenu(popupMenu1); - textArea1.setName("textArea1"); scrollPane1.setViewportView(textArea1); } add(scrollPane1, "cell 1 3,growx"); //======== scrollPane3 ======== { - scrollPane3.setName("scrollPane3"); //---- textArea3 ---- textArea3.setText("longer text for testing horizontal scrolling"); textArea3.setComponentPopupMenu(popupMenu1); - textArea3.setName("textArea3"); scrollPane3.setViewportView(textArea3); } add(scrollPane3, "cell 2 3,growx"); @@ -213,29 +458,24 @@ public class FlatTextComponentsTest editorPaneLabel.setText("JEditorPane"); editorPaneLabel.setDisplayedMnemonic('J'); editorPaneLabel.setLabelFor(editorPane1); - editorPaneLabel.setName("editorPaneLabel"); add(editorPaneLabel, "cell 0 4"); //======== scrollPane5 ======== { - scrollPane5.setName("scrollPane5"); //---- editorPane1 ---- editorPane1.setText("editable"); editorPane1.setComponentPopupMenu(popupMenu1); - editorPane1.setName("editorPane1"); scrollPane5.setViewportView(editorPane1); } add(scrollPane5, "cell 1 4,growx"); //======== scrollPane7 ======== { - scrollPane7.setName("scrollPane7"); //---- editorPane3 ---- editorPane3.setText("longer text for testing horizontal scrolling"); editorPane3.setComponentPopupMenu(popupMenu1); - editorPane3.setName("editorPane3"); scrollPane7.setViewportView(editorPane3); } add(scrollPane7, "cell 2 4,growx"); @@ -244,29 +484,24 @@ public class FlatTextComponentsTest textPaneLabel.setText("JTextPane:"); textPaneLabel.setDisplayedMnemonic('N'); textPaneLabel.setLabelFor(textPane1); - textPaneLabel.setName("textPaneLabel"); add(textPaneLabel, "cell 0 5"); //======== scrollPane9 ======== { - scrollPane9.setName("scrollPane9"); //---- textPane1 ---- textPane1.setText("editable"); textPane1.setComponentPopupMenu(popupMenu1); - textPane1.setName("textPane1"); scrollPane9.setViewportView(textPane1); } add(scrollPane9, "cell 1 5,growx"); //======== scrollPane11 ======== { - scrollPane11.setName("scrollPane11"); //---- textPane3 ---- textPane3.setText("longer text for testing horizontal scrolling"); textPane3.setComponentPopupMenu(popupMenu1); - textPane3.setName("textPane3"); scrollPane11.setViewportView(textPane3); } add(scrollPane11, "cell 2 5,growx"); @@ -275,7 +510,6 @@ public class FlatTextComponentsTest comboBoxLabel.setText("JComboBox:"); comboBoxLabel.setDisplayedMnemonic('C'); comboBoxLabel.setLabelFor(comboBox1); - comboBoxLabel.setName("comboBoxLabel"); add(comboBoxLabel, "cell 0 6"); //---- comboBox1 ---- @@ -287,7 +521,6 @@ public class FlatTextComponentsTest "ccc" })); comboBox1.setComponentPopupMenu(popupMenu1); - comboBox1.setName("comboBox1"); add(comboBox1, "cell 1 6,growx"); //---- comboBox3 ---- @@ -300,56 +533,121 @@ public class FlatTextComponentsTest comboBox3.setEditable(true); comboBox3.setPrototypeDisplayValue("12345"); comboBox3.setComponentPopupMenu(popupMenu1); - comboBox3.setName("comboBox3"); - add(comboBox3, "cell 2 6,growx"); + add(comboBox3, "cell 2 6,growx,wmin 50"); //---- spinnerLabel ---- spinnerLabel.setText("JSpinner:"); spinnerLabel.setDisplayedMnemonic('S'); spinnerLabel.setLabelFor(spinner1); - spinnerLabel.setName("spinnerLabel"); add(spinnerLabel, "cell 0 7"); //---- spinner1 ---- spinner1.setComponentPopupMenu(popupMenu1); - spinner1.setName("spinner1"); add(spinner1, "cell 1 7,growx"); - //---- spinner2 ---- - spinner2.setName("spinner2"); - add(spinner2, "cell 1 8,growx,height 40"); - - //---- spinner3 ---- - spinner3.setName("spinner3"); - add(spinner3, "cell 1 9,growx,hmax 14"); + //---- label2 ---- + label2.setText("Large row height:
(default pref height)"); + add(label2, "cell 0 8,aligny top,growy 0"); //---- comboBox2 ---- comboBox2.setEditable(true); - comboBox2.setName("comboBox2"); - add(comboBox2, "cell 1 10,growx,height 40"); + add(comboBox2, "cell 1 8,grow"); + add(spinner2, "cell 1 9,grow"); + + //---- label1 ---- + label1.setText("Large pref height:"); + add(label1, "cell 0 10,aligny top,growy 0"); + + //---- comboBox5 ---- + comboBox5.setPreferredSize(new Dimension(60, 40)); + comboBox5.setEditable(true); + add(comboBox5, "cell 1 10,growx"); + + //---- spinner4 ---- + spinner4.setPreferredSize(new Dimension(60, 40)); + add(spinner4, "cell 1 11,growx"); + + //---- label3 ---- + label3.setText("Small row height:
(default pref height)"); + add(label3, "cell 0 12 1 2,aligny top,growy 0"); //---- comboBox4 ---- comboBox4.setEditable(true); - comboBox4.setName("comboBox4"); - add(comboBox4, "cell 1 11,growx,hmax 14"); + add(comboBox4, "cell 1 12,growx"); + add(spinner3, "cell 1 13,growx"); + + //---- label4 ---- + label4.setText("Small pref height:"); + add(label4, "cell 0 14 1 2,aligny top,growy 0"); + + //---- comboBox6 ---- + comboBox6.setEditable(true); + comboBox6.setPreferredSize(new Dimension(60, 14)); + comboBox6.setMinimumSize(new Dimension(60, 14)); + add(comboBox6, "cell 1 14,growx"); + + //---- spinner5 ---- + spinner5.setMinimumSize(new Dimension(60, 14)); + spinner5.setPreferredSize(new Dimension(60, 14)); + add(spinner5, "cell 1 15,growx,hmax 14"); + + //---- label5 ---- + label5.setText("Double-click-and-drag:"); + add(label5, "cell 0 16"); + + //---- textField ---- + textField.setText("123 456 789 abc def"); + add(textField, "cell 1 16 2 1,growx"); + + //---- dragEnabledCheckBox ---- + dragEnabledCheckBox.setText("Drag enabled"); + dragEnabledCheckBox.addActionListener(e -> dragEnabledChanged()); + add(dragEnabledCheckBox, "cell 3 16 2 1,alignx left,growx 0"); + + //---- label6 ---- + label6.setText("JTextArea
JTextPane
JEditorPane"); + add(label6, "cell 0 17,align right top,grow 0 0"); + + //======== scrollPane2 ======== + { + + //---- textArea ---- + textArea.setText("1 123 456 789 abc def\n2 123 456 789 abc def\n3 123 456 789 abc def\n4 123 456 789 abc def\n5 123 456 789 abc def\n6 123 456 789 abc def\n7 123 456 789 abc def\n8 123 456 789 abc def"); + scrollPane2.setViewportView(textArea); + } + add(scrollPane2, "cell 1 17 4 1,growx"); + + //======== scrollPane4 ======== + { + + //---- textPane ---- + textPane.setText("1 123 456 789 abc def\n2 123 456 789 abc def\n3 123 456 789 abc def\n4 123 456 789 abc def\n5 123 456 789 abc def\n6 123 456 789 abc def\n7 123 456 789 abc def\n8 123 456 789 abc def"); + scrollPane4.setViewportView(textPane); + } + add(scrollPane4, "cell 1 17 4 1,growx"); + + //======== scrollPane6 ======== + { + + //---- editorPane ---- + editorPane.setText("1 123 456 789 abc def\n2 123 456 789 abc def\n3 123 456 789 abc def\n4 123 456 789 abc def\n5 123 456 789 abc def\n6 123 456 789 abc def\n7 123 456 789 abc def\n8 123 456 789 abc def"); + scrollPane6.setViewportView(editorPane); + } + add(scrollPane6, "cell 1 17 4 1,growx"); //======== popupMenu1 ======== { - popupMenu1.setName("popupMenu1"); //---- cutMenuItem ---- cutMenuItem.setText("Cut"); - cutMenuItem.setName("cutMenuItem"); popupMenu1.add(cutMenuItem); //---- copyMenuItem ---- copyMenuItem.setText("Copy"); - copyMenuItem.setName("copyMenuItem"); popupMenu1.add(copyMenuItem); //---- pasteMenuItem ---- pasteMenuItem.setText("Paste"); - pasteMenuItem.setName("pasteMenuItem"); popupMenu1.add(pasteMenuItem); } // JFormDesigner - End of component initialization //GEN-END:initComponents @@ -361,5 +659,54 @@ public class FlatTextComponentsTest // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables private JTextField textField1; + private JSpinner leftPaddingField; + private JSpinner rightPaddingField; + private JSpinner topPaddingField; + private JSpinner bottomPaddingField; + private JCheckBox leadingIconCheckBox; + private JCheckBox trailingIconCheckBox; + private JCheckBox leadingComponentCheckBox; + private JCheckBox trailingComponentCheckBox; + private JCheckBox leadingComponentVisibleCheckBox; + private JCheckBox trailingComponentVisibleCheckBox; + private JCheckBox showClearButtonCheckBox; + private JCheckBox showRevealButtonCheckBox; + private JTextField textField; + private JCheckBox dragEnabledCheckBox; + private JTextArea textArea; + private JTextPane textPane; + private JEditorPane editorPane; // JFormDesigner - End of variables declaration //GEN-END:variables + + //---- TestIcon ----------------------------------------------------------- + + private static class TestIcon + implements Icon + { + private final int width; + private final int height; + private final Color color; + + TestIcon( int width, int height, Color color ) { + this.width = width; + this.height = height; + this.color = color; + } + + @Override + public void paintIcon( Component c, Graphics g, int x, int y ) { + g.setColor( color ); + g.drawRect( x, y, getIconWidth() - 1, getIconHeight() - 1 ); + } + + @Override + public int getIconWidth() { + return UIScale.scale( width ); + } + + @Override + public int getIconHeight() { + return UIScale.scale( height ); + } + } } diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTextComponentsTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTextComponentsTest.jfd index aa4526b3..da06a916 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTextComponentsTest.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTextComponentsTest.jfd @@ -1,16 +1,15 @@ -JFDML JFormDesigner: "7.0.3.1.342" Java: "16" encoding: "UTF-8" +JFDML JFormDesigner: "7.0.5.0.404" Java: "17" encoding: "UTF-8" new FormModel { contentType: "form/swing" root: new FormRoot { - "$setComponentNames": true auxiliary() { "JavaCodeGenerator.defaultVariableLocal": true } add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { "$layoutConstraints": "ltr,insets dialog,hidemode 3" "$columnConstraints": "[][][::100][100,fill][fill]" - "$rowConstraints": "[][][][50,fill][50,fill][50,fill][][]para[][][][]" + "$rowConstraints": "[][][][50,fill][50,fill][50,fill][][]para[40][40][][][::14][::14][][]para[][90,fill]" } ) { name: "this" add( new FormComponent( "javax.swing.JLabel" ) { @@ -25,6 +24,7 @@ new FormModel { name: "textField1" "text": "editable" "componentPopupMenu": &FormReference0 new FormReference( "popupMenu1" ) + "$client.JTextField.placeholderText": "place" auxiliary() { "JavaCodeGenerator.variableLocal": false } @@ -35,6 +35,7 @@ new FormModel { name: "textField3" "text": "longer text for testing horizontal scrolling" "componentPopupMenu": #FormReference0 + "$client.JTextField.placeholderText": "place" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 2 0,growx" } ) @@ -44,16 +45,10 @@ new FormModel { "selectionStart": 1 "selectionEnd": 4 "componentPopupMenu": #FormReference0 + "$client.JTextField.placeholderText": "place" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 3 0" } ) - add( new FormComponent( "javax.swing.JButton" ) { - name: "button1" - "text": "change text" - addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "changeText", false ) ) - }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 4 0" - } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "formattedTextFieldLabel" "text": "JFormattedTextField:" @@ -66,6 +61,7 @@ new FormModel { name: "formattedTextField1" "text": "editable" "componentPopupMenu": #FormReference0 + "$client.JTextField.placeholderText": "place" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 1,growx" } ) @@ -73,9 +69,169 @@ new FormModel { name: "formattedTextField3" "text": "longer text for testing horizontal scrolling" "componentPopupMenu": #FormReference0 + "$client.JTextField.placeholderText": "place" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 2 1,growx" } ) + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "hidemode 3" + "$columnConstraints": "[fill][fill]" + "$rowConstraints": "[][][][][][]0[][]0[][]0[][][]" + } ) { + name: "panel1" + "border": new javax.swing.border.TitledBorder( "Control" ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button1" + "text": "change text" + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "changeText", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0 2 1,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "leftPaddingLabel" + "text": "Left padding:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 1" + } ) + add( new FormComponent( "javax.swing.JSpinner" ) { + name: "leftPaddingField" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "paddingChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "rightPaddingLabel" + "text": "Right padding:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 2" + } ) + add( new FormComponent( "javax.swing.JSpinner" ) { + name: "rightPaddingField" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "paddingChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 2" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "topPaddingLabel" + "text": "Top padding:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 3" + } ) + add( new FormComponent( "javax.swing.JSpinner" ) { + name: "topPaddingField" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "paddingChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 3" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "bottomPaddingLabel" + "text": "Bottom padding:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 4" + } ) + add( new FormComponent( "javax.swing.JSpinner" ) { + name: "bottomPaddingField" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "paddingChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 4" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "leadingIconCheckBox" + "text": "leading icon" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "leadingIcon", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 5 2 1,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "trailingIconCheckBox" + "text": "trailing icon" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "trailingIcon", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 6 2 1,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "leadingComponentCheckBox" + "text": "leading component" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "leadingComponent", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 7 2 1,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "trailingComponentCheckBox" + "text": "trailing component" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "trailingComponent", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 8 2 1,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "leadingComponentVisibleCheckBox" + "text": "leading component visible" + "selected": true + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "leadingComponentVisible", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 9 2 1,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "trailingComponentVisibleCheckBox" + "text": "trailing component visible" + "selected": true + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "trailingComponentVisible", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 10 2 1,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "showClearButtonCheckBox" + "text": "clear button" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showClearButton", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 11 2 1,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "showRevealButtonCheckBox" + "text": "password reveal button" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showRevealButton", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 12 2 1,alignx left,growx 0" + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 0 1 10,aligny top,growy 0" + } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "passwordFieldLabel" "text": "JPasswordField:" @@ -88,6 +244,7 @@ new FormModel { name: "passwordField1" "text": "editable" "componentPopupMenu": #FormReference0 + "$client.JTextField.placeholderText": "place" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 2,growx" } ) @@ -95,6 +252,7 @@ new FormModel { name: "passwordField3" "text": "longer text for testing horizontal scrolling" "componentPopupMenu": #FormReference0 + "$client.JTextField.placeholderText": "place" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 2 2,growx" } ) @@ -217,7 +375,7 @@ new FormModel { "prototypeDisplayValue": "12345" "componentPopupMenu": #FormReference0 }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 2 6,growx" + "value": "cell 2 6,growx,wmin 50" } ) add( new FormComponent( "javax.swing.JLabel" ) { name: "spinnerLabel" @@ -233,15 +391,11 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 7,growx" } ) - add( new FormComponent( "javax.swing.JSpinner" ) { - name: "spinner2" + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label2" + "text": "Large row height:
(default pref height)" }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 8,growx,height 40" - } ) - add( new FormComponent( "javax.swing.JSpinner" ) { - name: "spinner3" - }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 9,growx,hmax 14" + "value": "cell 0 8,aligny top,growy 0" } ) add( new FormComponent( "javax.swing.JComboBox" ) { name: "comboBox2" @@ -250,7 +404,40 @@ new FormModel { "JavaCodeGenerator.typeParameters": "String" } }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 10,growx,height 40" + "value": "cell 1 8,grow" + } ) + add( new FormComponent( "javax.swing.JSpinner" ) { + name: "spinner2" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 9,grow" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label1" + "text": "Large pref height:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 10,aligny top,growy 0" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox5" + "preferredSize": new java.awt.Dimension( 60, 40 ) + "editable": true + auxiliary() { + "JavaCodeGenerator.typeParameters": "String" + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 10,growx" + } ) + add( new FormComponent( "javax.swing.JSpinner" ) { + name: "spinner4" + "preferredSize": new java.awt.Dimension( 60, 40 ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 11,growx" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label3" + "text": "Small row height:
(default pref height)" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 12 1 2,aligny top,growy 0" } ) add( new FormComponent( "javax.swing.JComboBox" ) { name: "comboBox4" @@ -259,11 +446,107 @@ new FormModel { "JavaCodeGenerator.typeParameters": "String" } }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { - "value": "cell 1 11,growx,hmax 14" + "value": "cell 1 12,growx" + } ) + add( new FormComponent( "javax.swing.JSpinner" ) { + name: "spinner3" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 13,growx" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label4" + "text": "Small pref height:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 14 1 2,aligny top,growy 0" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox6" + "editable": true + "preferredSize": new java.awt.Dimension( 60, 14 ) + "minimumSize": new java.awt.Dimension( 60, 14 ) + auxiliary() { + "JavaCodeGenerator.typeParameters": "String" + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 14,growx" + } ) + add( new FormComponent( "javax.swing.JSpinner" ) { + name: "spinner5" + "minimumSize": new java.awt.Dimension( 60, 14 ) + "preferredSize": new java.awt.Dimension( 60, 14 ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 15,growx,hmax 14" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label5" + "text": "Double-click-and-drag:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 16" + } ) + add( new FormComponent( "javax.swing.JTextField" ) { + name: "textField" + "text": "123 456 789 abc def" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 16 2 1,growx" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "dragEnabledCheckBox" + "text": "Drag enabled" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "dragEnabledChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 16 2 1,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label6" + "text": "JTextArea
JTextPane
JEditorPane" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 17,align right top,grow 0 0" + } ) + add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { + name: "scrollPane2" + add( new FormComponent( "javax.swing.JTextArea" ) { + name: "textArea" + "text": "1 123 456 789 abc def\n2 123 456 789 abc def\n3 123 456 789 abc def\n4 123 456 789 abc def\n5 123 456 789 abc def\n6 123 456 789 abc def\n7 123 456 789 abc def\n8 123 456 789 abc def" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 17 4 1,growx" + } ) + add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { + name: "scrollPane4" + add( new FormComponent( "javax.swing.JTextPane" ) { + name: "textPane" + "text": "1 123 456 789 abc def\n2 123 456 789 abc def\n3 123 456 789 abc def\n4 123 456 789 abc def\n5 123 456 789 abc def\n6 123 456 789 abc def\n7 123 456 789 abc def\n8 123 456 789 abc def" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 17 4 1,growx" + } ) + add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { + name: "scrollPane6" + add( new FormComponent( "javax.swing.JEditorPane" ) { + name: "editorPane" + "text": "1 123 456 789 abc def\n2 123 456 789 abc def\n3 123 456 789 abc def\n4 123 456 789 abc def\n5 123 456 789 abc def\n6 123 456 789 abc def\n7 123 456 789 abc def\n8 123 456 789 abc def" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 17 4 1,growx" } ) }, new FormLayoutConstraints( null ) { "location": new java.awt.Point( 0, 0 ) - "size": new java.awt.Dimension( 530, 580 ) + "size": new java.awt.Dimension( 640, 725 ) } ) add( new FormContainer( "javax.swing.JPopupMenu", new FormLayoutManager( class javax.swing.JPopupMenu ) ) { name: "popupMenu1" @@ -280,7 +563,7 @@ new FormModel { "text": "Paste" } ) }, new FormLayoutConstraints( null ) { - "location": new java.awt.Point( 0, 680 ) + "location": new java.awt.Point( 0, 745 ) "size": new java.awt.Dimension( 91, 87 ) } ) } diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatToolBarTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatToolBarTest.java new file mode 100644 index 00000000..db3d1cb6 --- /dev/null +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatToolBarTest.java @@ -0,0 +1,553 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.testing; + +import javax.swing.*; +import com.formdev.flatlaf.FlatClientProperties; +import net.miginfocom.swing.*; + +/** + * @author Karl Tauber + */ +public class FlatToolBarTest + extends FlatTestPanel +{ + public static void main( String[] args ) { + SwingUtilities.invokeLater( () -> { + FlatTestFrame frame = FlatTestFrame.create( args, "FlatToolBarTest" ); + frame.showFrame( FlatToolBarTest::new ); + } ); + } + + FlatToolBarTest() { + initComponents(); + + String notFocusableStyle = "background: darken($Panel.background,3%); focusableButtons: false"; + String focusableStyle = "background: darken($Panel.background,3%); focusableButtons: true; arrowKeysOnlyNavigation:true"; + + toolBar1.putClientProperty( FlatClientProperties.STYLE, notFocusableStyle ); + toolBar2.putClientProperty( FlatClientProperties.STYLE, notFocusableStyle ); + toolBar3.putClientProperty( FlatClientProperties.STYLE, focusableStyle ); + toolBar4.putClientProperty( FlatClientProperties.STYLE, focusableStyle ); + toolBar5.putClientProperty( FlatClientProperties.STYLE, notFocusableStyle ); + toolBar6.putClientProperty( FlatClientProperties.STYLE, notFocusableStyle ); + toolBar7.putClientProperty( FlatClientProperties.STYLE, focusableStyle ); + toolBar8.putClientProperty( FlatClientProperties.STYLE, focusableStyle ); + } + + private void initComponents() { + // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents + JLabel label9 = new JLabel(); + JLabel label7 = new JLabel(); + JTextField textField1 = new JTextField(); + JLabel label1 = new JLabel(); + toolBar1 = new JToolBar(); + JButton button1 = new JButton(); + JButton button2 = new JButton(); + JLabel label11 = new JLabel(); + JButton button3 = new JButton(); + JButton button4 = new JButton(); + JLabel label3 = new JLabel(); + toolBar2 = new JToolBar(); + JButton button5 = new JButton(); + JButton button6 = new JButton(); + JButton button7 = new JButton(); + JButton button8 = new JButton(); + JLabel label2 = new JLabel(); + toolBar3 = new JToolBar(); + JButton button9 = new JButton(); + JButton button10 = new JButton(); + JLabel label10 = new JLabel(); + JButton button11 = new JButton(); + JButton button12 = new JButton(); + JLabel label4 = new JLabel(); + toolBar4 = new JToolBar(); + JButton button13 = new JButton(); + JButton button14 = new JButton(); + JButton button15 = new JButton(); + JButton button16 = new JButton(); + JLabel label8 = new JLabel(); + JTextField textField2 = new JTextField(); + JLabel label5 = new JLabel(); + toolBar5 = new JToolBar(); + JButton button17 = new JButton(); + JButton button18 = new JButton(); + JButton button19 = new JButton(); + JComboBox comboBox1 = new JComboBox<>(); + JButton button20 = new JButton(); + JButton button33 = new JButton(); + JButton button34 = new JButton(); + JComboBox comboBox8 = new JComboBox<>(); + JButton button41 = new JButton(); + JButton button42 = new JButton(); + JButton button43 = new JButton(); + toolBar6 = new JToolBar(); + JButton button21 = new JButton(); + JButton button22 = new JButton(); + JButton button23 = new JButton(); + JComboBox comboBox2 = new JComboBox<>(); + JComboBox comboBox3 = new JComboBox<>(); + JComboBox comboBox7 = new JComboBox<>(); + JButton button24 = new JButton(); + JComboBox comboBox10 = new JComboBox<>(); + JTextField textField3 = new JTextField(); + JButton button37 = new JButton(); + JButton button38 = new JButton(); + JButton button44 = new JButton(); + JButton button45 = new JButton(); + JButton button46 = new JButton(); + JLabel label6 = new JLabel(); + toolBar7 = new JToolBar(); + JButton button25 = new JButton(); + JButton button26 = new JButton(); + JButton button27 = new JButton(); + JComboBox comboBox4 = new JComboBox<>(); + JButton button28 = new JButton(); + JButton button35 = new JButton(); + JButton button36 = new JButton(); + JComboBox comboBox9 = new JComboBox<>(); + JButton button47 = new JButton(); + JButton button48 = new JButton(); + JButton button49 = new JButton(); + toolBar8 = new JToolBar(); + JButton button29 = new JButton(); + JButton button30 = new JButton(); + JButton button31 = new JButton(); + JComboBox comboBox5 = new JComboBox<>(); + JComboBox comboBox6 = new JComboBox<>(); + JComboBox comboBox13 = new JComboBox<>(); + JButton button32 = new JButton(); + JButton button39 = new JButton(); + JButton button40 = new JButton(); + JComboBox comboBox12 = new JComboBox<>(); + JTextField textField4 = new JTextField(); + JButton button50 = new JButton(); + JButton button51 = new JButton(); + JButton button52 = new JButton(); + + //======== this ======== + setLayout(new MigLayout( + "insets dialog,hidemode 3", + // columns + "[fill]" + + "[fill]para" + + "[fill]" + + "[fill]", + // rows + "[]para" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]")); + + //---- label9 ---- + label9.setText("Use to test focus traversal. Tab key skips buttons within one toolbar. Arrow keys focus next/previous button."); + add(label9, "cell 0 0 4 1"); + + //---- label7 ---- + label7.setText("Text field:"); + add(label7, "cell 0 1"); + add(textField1, "cell 1 1"); + + //---- label1 ---- + label1.setText("Only buttons / not focusable:"); + add(label1, "cell 0 2"); + + //======== toolBar1 ======== + { + + //---- button1 ---- + button1.setText("A"); + toolBar1.add(button1); + + //---- button2 ---- + button2.setText("B"); + toolBar1.add(button2); + + //---- label11 ---- + label11.setText("label"); + toolBar1.add(label11); + + //---- button3 ---- + button3.setText("C"); + toolBar1.add(button3); + + //---- button4 ---- + button4.setText("D"); + toolBar1.add(button4); + } + add(toolBar1, "cell 1 2"); + + //---- label3 ---- + label3.setText("2nd:"); + add(label3, "cell 2 2"); + + //======== toolBar2 ======== + { + + //---- button5 ---- + button5.setText("A"); + toolBar2.add(button5); + + //---- button6 ---- + button6.setText("B"); + toolBar2.add(button6); + toolBar2.addSeparator(); + + //---- button7 ---- + button7.setText("C"); + toolBar2.add(button7); + + //---- button8 ---- + button8.setText("D"); + toolBar2.add(button8); + } + add(toolBar2, "cell 3 2,alignx left,growx 0"); + + //---- label2 ---- + label2.setText("Only buttons / focusable:"); + add(label2, "cell 0 3"); + + //======== toolBar3 ======== + { + + //---- button9 ---- + button9.setText("A"); + toolBar3.add(button9); + + //---- button10 ---- + button10.setText("B"); + toolBar3.add(button10); + + //---- label10 ---- + label10.setText("label"); + toolBar3.add(label10); + + //---- button11 ---- + button11.setText("C"); + toolBar3.add(button11); + + //---- button12 ---- + button12.setText("D"); + toolBar3.add(button12); + } + add(toolBar3, "cell 1 3"); + + //---- label4 ---- + label4.setText("2nd:"); + add(label4, "cell 2 3"); + + //======== toolBar4 ======== + { + + //---- button13 ---- + button13.setText("A"); + toolBar4.add(button13); + + //---- button14 ---- + button14.setText("B"); + toolBar4.add(button14); + toolBar4.addSeparator(); + + //---- button15 ---- + button15.setText("C"); + toolBar4.add(button15); + + //---- button16 ---- + button16.setText("D"); + toolBar4.add(button16); + } + add(toolBar4, "cell 3 3,alignx left,growx 0"); + + //---- label8 ---- + label8.setText("Text field:"); + add(label8, "cell 0 4"); + add(textField2, "cell 1 4"); + + //---- label5 ---- + label5.setText("Combo boxes / not focusable:"); + add(label5, "cell 0 5"); + + //======== toolBar5 ======== + { + + //---- button17 ---- + button17.setText("A"); + toolBar5.add(button17); + + //---- button18 ---- + button18.setText("B"); + toolBar5.add(button18); + + //---- button19 ---- + button19.setText("C"); + toolBar5.add(button19); + + //---- comboBox1 ---- + comboBox1.setModel(new DefaultComboBoxModel<>(new String[] { + "read-only" + })); + toolBar5.add(comboBox1); + + //---- button20 ---- + button20.setText("D"); + toolBar5.add(button20); + + //---- button33 ---- + button33.setText("E"); + toolBar5.add(button33); + + //---- button34 ---- + button34.setText("F"); + toolBar5.add(button34); + + //---- comboBox8 ---- + comboBox8.setEditable(true); + comboBox8.setModel(new DefaultComboBoxModel<>(new String[] { + "editable" + })); + toolBar5.add(comboBox8); + + //---- button41 ---- + button41.setText("G"); + toolBar5.add(button41); + + //---- button42 ---- + button42.setText("H"); + toolBar5.add(button42); + + //---- button43 ---- + button43.setText("I"); + toolBar5.add(button43); + } + add(toolBar5, "cell 1 5 3 1,alignx left,growx 0"); + + //======== toolBar6 ======== + { + + //---- button21 ---- + button21.setText("A"); + toolBar6.add(button21); + + //---- button22 ---- + button22.setText("B"); + toolBar6.add(button22); + + //---- button23 ---- + button23.setText("C"); + toolBar6.add(button23); + + //---- comboBox2 ---- + comboBox2.setModel(new DefaultComboBoxModel<>(new String[] { + "read-only" + })); + toolBar6.add(comboBox2); + + //---- comboBox3 ---- + comboBox3.setModel(new DefaultComboBoxModel<>(new String[] { + "read-only" + })); + toolBar6.add(comboBox3); + + //---- comboBox7 ---- + comboBox7.setModel(new DefaultComboBoxModel<>(new String[] { + "read-only" + })); + toolBar6.add(comboBox7); + + //---- button24 ---- + button24.setText("D"); + toolBar6.add(button24); + + //---- comboBox10 ---- + comboBox10.setEditable(true); + comboBox10.setModel(new DefaultComboBoxModel<>(new String[] { + "editable" + })); + toolBar6.add(comboBox10); + + //---- textField3 ---- + textField3.setText("text field"); + toolBar6.add(textField3); + + //---- button37 ---- + button37.setText("E"); + toolBar6.add(button37); + + //---- button38 ---- + button38.setText("F"); + toolBar6.add(button38); + + //---- button44 ---- + button44.setText("G"); + toolBar6.add(button44); + + //---- button45 ---- + button45.setText("H"); + toolBar6.add(button45); + + //---- button46 ---- + button46.setText("I"); + toolBar6.add(button46); + } + add(toolBar6, "cell 1 6 3 1,alignx left,growx 0"); + + //---- label6 ---- + label6.setText("Combo boxes / focusable:"); + add(label6, "cell 0 7"); + + //======== toolBar7 ======== + { + + //---- button25 ---- + button25.setText("A"); + toolBar7.add(button25); + + //---- button26 ---- + button26.setText("B"); + toolBar7.add(button26); + + //---- button27 ---- + button27.setText("C"); + toolBar7.add(button27); + + //---- comboBox4 ---- + comboBox4.setModel(new DefaultComboBoxModel<>(new String[] { + "read-only" + })); + toolBar7.add(comboBox4); + + //---- button28 ---- + button28.setText("D"); + toolBar7.add(button28); + + //---- button35 ---- + button35.setText("E"); + toolBar7.add(button35); + + //---- button36 ---- + button36.setText("F"); + toolBar7.add(button36); + + //---- comboBox9 ---- + comboBox9.setEditable(true); + comboBox9.setModel(new DefaultComboBoxModel<>(new String[] { + "editable" + })); + toolBar7.add(comboBox9); + + //---- button47 ---- + button47.setText("G"); + toolBar7.add(button47); + + //---- button48 ---- + button48.setText("H"); + toolBar7.add(button48); + + //---- button49 ---- + button49.setText("I"); + toolBar7.add(button49); + } + add(toolBar7, "cell 1 7 3 1,alignx left,growx 0"); + + //======== toolBar8 ======== + { + + //---- button29 ---- + button29.setText("A"); + toolBar8.add(button29); + + //---- button30 ---- + button30.setText("B"); + toolBar8.add(button30); + + //---- button31 ---- + button31.setText("C"); + toolBar8.add(button31); + + //---- comboBox5 ---- + comboBox5.setModel(new DefaultComboBoxModel<>(new String[] { + "read-only" + })); + toolBar8.add(comboBox5); + + //---- comboBox6 ---- + comboBox6.setModel(new DefaultComboBoxModel<>(new String[] { + "read-only" + })); + toolBar8.add(comboBox6); + + //---- comboBox13 ---- + comboBox13.setModel(new DefaultComboBoxModel<>(new String[] { + "read-only" + })); + toolBar8.add(comboBox13); + + //---- button32 ---- + button32.setText("D"); + toolBar8.add(button32); + + //---- button39 ---- + button39.setText("E"); + toolBar8.add(button39); + + //---- button40 ---- + button40.setText("F"); + toolBar8.add(button40); + + //---- comboBox12 ---- + comboBox12.setEditable(true); + comboBox12.setModel(new DefaultComboBoxModel<>(new String[] { + "editable" + })); + toolBar8.add(comboBox12); + + //---- textField4 ---- + textField4.setText("text field"); + toolBar8.add(textField4); + + //---- button50 ---- + button50.setText("G"); + toolBar8.add(button50); + + //---- button51 ---- + button51.setText("H"); + toolBar8.add(button51); + + //---- button52 ---- + button52.setText("I"); + toolBar8.add(button52); + } + add(toolBar8, "cell 1 8 3 1,alignx left,growx 0"); + // JFormDesigner - End of component initialization //GEN-END:initComponents + } + + // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + private JToolBar toolBar1; + private JToolBar toolBar2; + private JToolBar toolBar3; + private JToolBar toolBar4; + private JToolBar toolBar5; + private JToolBar toolBar6; + private JToolBar toolBar7; + private JToolBar toolBar8; + // JFormDesigner - End of variables declaration //GEN-END:variables +} diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatToolBarTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatToolBarTest.jfd new file mode 100644 index 00000000..8fd030a3 --- /dev/null +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatToolBarTest.jfd @@ -0,0 +1,466 @@ +JFDML JFormDesigner: "7.0.5.0.382" Java: "16" encoding: "UTF-8" + +new FormModel { + contentType: "form/swing" + root: new FormRoot { + auxiliary() { + "JavaCodeGenerator.defaultVariableLocal": true + } + add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "insets dialog,hidemode 3" + "$columnConstraints": "[fill][fill]para[fill][fill]" + "$rowConstraints": "[]para[][][][][][][][]" + } ) { + name: "this" + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label9" + "text": "Use to test focus traversal. Tab key skips buttons within one toolbar. Arrow keys focus next/previous button." + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0 4 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label7" + "text": "Text field:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 1" + } ) + add( new FormComponent( "javax.swing.JTextField" ) { + name: "textField1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label1" + "text": "Only buttons / not focusable:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 2" + } ) + add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { + name: "toolBar1" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + add( new FormComponent( "javax.swing.JButton" ) { + name: "button1" + "text": "A" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button2" + "text": "B" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label11" + "text": "label" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button3" + "text": "C" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button4" + "text": "D" + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 2" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label3" + "text": "2nd:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 2" + } ) + add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { + name: "toolBar2" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + add( new FormComponent( "javax.swing.JButton" ) { + name: "button5" + "text": "A" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button6" + "text": "B" + } ) + add( new FormComponent( "javax.swing.JToolBar$Separator" ) { + name: "separator2" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button7" + "text": "C" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button8" + "text": "D" + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 2,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label2" + "text": "Only buttons / focusable:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 3" + } ) + add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { + name: "toolBar3" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + add( new FormComponent( "javax.swing.JButton" ) { + name: "button9" + "text": "A" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button10" + "text": "B" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label10" + "text": "label" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button11" + "text": "C" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button12" + "text": "D" + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 3" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label4" + "text": "2nd:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 3" + } ) + add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { + name: "toolBar4" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + add( new FormComponent( "javax.swing.JButton" ) { + name: "button13" + "text": "A" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button14" + "text": "B" + } ) + add( new FormComponent( "javax.swing.JToolBar$Separator" ) { + name: "separator1" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button15" + "text": "C" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button16" + "text": "D" + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 3,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label8" + "text": "Text field:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 4" + } ) + add( new FormComponent( "javax.swing.JTextField" ) { + name: "textField2" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 4" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label5" + "text": "Combo boxes / not focusable:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 5" + } ) + add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { + name: "toolBar5" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + add( new FormComponent( "javax.swing.JButton" ) { + name: "button17" + "text": "A" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button18" + "text": "B" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button19" + "text": "C" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox1" + "model": new javax.swing.DefaultComboBoxModel { + selectedItem: "read-only" + addElement( "read-only" ) + } + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button20" + "text": "D" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button33" + "text": "E" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button34" + "text": "F" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox8" + "editable": true + "model": new javax.swing.DefaultComboBoxModel { + selectedItem: "editable" + addElement( "editable" ) + } + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button41" + "text": "G" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button42" + "text": "H" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button43" + "text": "I" + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 5 3 1,alignx left,growx 0" + } ) + add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { + name: "toolBar6" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + add( new FormComponent( "javax.swing.JButton" ) { + name: "button21" + "text": "A" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button22" + "text": "B" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button23" + "text": "C" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox2" + "model": new javax.swing.DefaultComboBoxModel { + selectedItem: "read-only" + addElement( "read-only" ) + } + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox3" + "model": new javax.swing.DefaultComboBoxModel { + selectedItem: "read-only" + addElement( "read-only" ) + } + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox7" + "model": new javax.swing.DefaultComboBoxModel { + selectedItem: "read-only" + addElement( "read-only" ) + } + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button24" + "text": "D" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox10" + "editable": true + "model": new javax.swing.DefaultComboBoxModel { + selectedItem: "editable" + addElement( "editable" ) + } + } ) + add( new FormComponent( "javax.swing.JTextField" ) { + name: "textField3" + "text": "text field" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button37" + "text": "E" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button38" + "text": "F" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button44" + "text": "G" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button45" + "text": "H" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button46" + "text": "I" + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 6 3 1,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label6" + "text": "Combo boxes / focusable:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 7" + } ) + add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { + name: "toolBar7" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + add( new FormComponent( "javax.swing.JButton" ) { + name: "button25" + "text": "A" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button26" + "text": "B" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button27" + "text": "C" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox4" + "model": new javax.swing.DefaultComboBoxModel { + selectedItem: "read-only" + addElement( "read-only" ) + } + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button28" + "text": "D" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button35" + "text": "E" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button36" + "text": "F" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox9" + "editable": true + "model": new javax.swing.DefaultComboBoxModel { + selectedItem: "editable" + addElement( "editable" ) + } + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button47" + "text": "G" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button48" + "text": "H" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button49" + "text": "I" + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 7 3 1,alignx left,growx 0" + } ) + add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { + name: "toolBar8" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + add( new FormComponent( "javax.swing.JButton" ) { + name: "button29" + "text": "A" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button30" + "text": "B" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button31" + "text": "C" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox5" + "model": new javax.swing.DefaultComboBoxModel { + selectedItem: "read-only" + addElement( "read-only" ) + } + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox6" + "model": new javax.swing.DefaultComboBoxModel { + selectedItem: "read-only" + addElement( "read-only" ) + } + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox13" + "model": new javax.swing.DefaultComboBoxModel { + selectedItem: "read-only" + addElement( "read-only" ) + } + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button32" + "text": "D" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button39" + "text": "E" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button40" + "text": "F" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox12" + "editable": true + "model": new javax.swing.DefaultComboBoxModel { + selectedItem: "editable" + addElement( "editable" ) + } + } ) + add( new FormComponent( "javax.swing.JTextField" ) { + name: "textField4" + "text": "text field" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button50" + "text": "G" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button51" + "text": "H" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button52" + "text": "I" + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 8 3 1,alignx left,growx 0" + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 0, 0 ) + "size": new java.awt.Dimension( 780, 350 ) + } ) + } +} diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTypographyTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTypographyTest.java new file mode 100644 index 00000000..a528cf06 --- /dev/null +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTypographyTest.java @@ -0,0 +1,1162 @@ +/* +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.testing; + +import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import javax.swing.*; +import net.miginfocom.swing.*; + +/** + * @author Karl Tauber + */ +public class FlatTypographyTest + extends FlatTestPanel +{ + public static void main( String[] args ) { + SwingUtilities.invokeLater( () -> { + FlatTestFrame frame = FlatTestFrame.create( args, "FlatTypographyTest" ); + frame.showFrame( FlatTypographyTest::new ); + } ); + } + + public FlatTypographyTest() { + initComponents(); + } + + private void initComponents() { + // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents + JLabel label54 = new JLabel(); + JLabel label68 = new JLabel(); + JLabel label69 = new JLabel(); + JLabel label10 = new JLabel(); + JLabel label11 = new JLabel(); + JLabel label72 = new JLabel(); + JLabel label28 = new JLabel(); + JLabel label29 = new JLabel(); + JLabel label1 = new JLabel(); + JLabel label37 = new JLabel(); + JLabel label46 = new JLabel(); + FlatTypographyTest.LinkLabel linkLabel9 = new FlatTypographyTest.LinkLabel(); + FlatTypographyTest.LinkLabel linkLabel1 = new FlatTypographyTest.LinkLabel(); + FlatTypographyTest.LinkLabel linkLabel2 = new FlatTypographyTest.LinkLabel(); + FlatTypographyTest.LinkLabel linkLabel3 = new FlatTypographyTest.LinkLabel(); + JLabel label2 = new JLabel(); + FlatTypographyTest.LinkLabel linkLabel4 = new FlatTypographyTest.LinkLabel(); + FlatTypographyTest.LinkLabel linkLabel10 = new FlatTypographyTest.LinkLabel(); + FlatTypographyTest.LinkLabel linkLabel8 = new FlatTypographyTest.LinkLabel(); + FlatTypographyTest.LinkLabel linkLabel11 = new FlatTypographyTest.LinkLabel(); + FlatTypographyTest.LinkLabel linkLabel5 = new FlatTypographyTest.LinkLabel(); + FlatTypographyTest.LinkLabel linkLabel6 = new FlatTypographyTest.LinkLabel(); + FlatTypographyTest.LinkLabel linkLabel7 = new FlatTypographyTest.LinkLabel(); + FlatTypographyTest.FontPreview fontPreview69 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview93 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview40 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview35 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview85 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview70 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview36 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview51 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview1 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview11 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview19 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview27 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview41 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview86 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview71 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview37 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview47 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview54 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview62 = new FlatTypographyTest.FontPreview(); + JSeparator separator3 = new JSeparator(); + FlatTypographyTest.FontPreview fontPreview2 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview12 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview20 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview28 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview42 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview87 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview72 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview38 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview48 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview55 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview63 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview3 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview13 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview21 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview29 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview43 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview88 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview73 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview79 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview49 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview57 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview64 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview4 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview14 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview22 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview30 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview89 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview74 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview80 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview50 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview58 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview65 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview5 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview15 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview23 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview31 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview44 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview81 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview56 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview66 = new FlatTypographyTest.FontPreview(); + JSeparator separator1 = new JSeparator(); + FlatTypographyTest.FontPreview fontPreview7 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview6 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview16 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview24 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview32 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview45 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview90 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview98 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview75 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview82 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview95 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview52 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview59 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview67 = new FlatTypographyTest.FontPreview(); + JSeparator separator2 = new JSeparator(); + FlatTypographyTest.FontPreview fontPreview8 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview17 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview25 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview39 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview91 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview76 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview83 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview96 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview9 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview18 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview26 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview33 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview46 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview92 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview77 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview84 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview97 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview53 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview60 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview68 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview10 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview34 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview78 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview94 = new FlatTypographyTest.FontPreview(); + FlatTypographyTest.FontPreview fontPreview61 = new FlatTypographyTest.FontPreview(); + + //======== this ======== + setLayout(new MigLayout( + "ltr,insets dialog,hidemode 3", + // columns + "[left]unrel" + + "[left]unrel" + + "[left]unrel" + + "[left]unrel" + + "[left]unrel" + + "[left]unrel" + + "[left]unrel" + + "[fill]unrel" + + "[left]unrel" + + "[left]unrel" + + "[left]unrel", + // rows + "[top]" + + "[bottom]" + + "[bottom]" + + "[bottom]" + + "[bottom]" + + "[]" + + "[bottom]" + + "[bottom]" + + "[bottom]" + + "[bottom]" + + "[]" + + "[bottom]" + + "[]" + + "[bottom]" + + "[bottom]" + + "[bottom]")); + + //---- label54 ---- + label54.setText("FlatLaf
Windows"); + label54.putClientProperty("FlatLaf.styleClass", "h1"); + add(label54, "cell 0 0"); + + //---- label68 ---- + label68.setText("JetBrains
Windows"); + label68.putClientProperty("FlatLaf.styleClass", "h1"); + add(label68, "cell 1 0"); + + //---- label69 ---- + label69.setText("JetBrains
macOS"); + label69.putClientProperty("FlatLaf.styleClass", "h1"); + add(label69, "cell 2 0"); + + //---- label10 ---- + label10.setText("macOS"); + label10.putClientProperty("FlatLaf.styleClass", "h1"); + add(label10, "cell 3 0"); + + //---- label11 ---- + label11.setText("Windows 10/11"); + label11.putClientProperty("FlatLaf.styleClass", "h1"); + add(label11, "cell 4 0"); + + //---- label72 ---- + label72.setText("GitHub
Primer"); + label72.putClientProperty("FlatLaf.styleClass", "h1"); + add(label72, "cell 5 0"); + + //---- label28 ---- + label28.setText("Material"); + label28.putClientProperty("FlatLaf.styleClass", "h1"); + add(label28, "cell 6 0"); + + //---- label29 ---- + label29.setText("Material 3"); + label29.putClientProperty("FlatLaf.styleClass", "h1"); + add(label29, "cell 7 0"); + + //---- label1 ---- + label1.setText("SAP Fiori"); + label1.putClientProperty("FlatLaf.styleClass", "h1"); + add(label1, "cell 8 0"); + + //---- label37 ---- + label37.setText("Atlassian"); + label37.putClientProperty("FlatLaf.styleClass", "h1"); + add(label37, "cell 9 0"); + + //---- label46 ---- + label46.setText("Iris"); + label46.putClientProperty("FlatLaf.styleClass", "h1"); + add(label46, "cell 10 0"); + + //---- linkLabel9 ---- + linkLabel9.setLink("https://www.formdev.com/flatlaf/typography/"); + add(linkLabel9, "cell 0 1"); + + //---- linkLabel1 ---- + linkLabel1.setLink("https://jetbrains.design/intellij/principles/typography/"); + add(linkLabel1, "cell 1 1"); + + //---- linkLabel2 ---- + linkLabel2.setLink("https://developer.apple.com/design/human-interface-guidelines/macos/visual-design/typography/"); + add(linkLabel2, "cell 3 1"); + + //---- linkLabel3 ---- + linkLabel3.setLink("https://docs.microsoft.com/en-us/windows/apps/design/style/typography#type-ramp"); + add(linkLabel3, "cell 4 1"); + + //---- label2 ---- + label2.setText("/"); + add(label2, "cell 4 1"); + + //---- linkLabel4 ---- + linkLabel4.setLink("https://docs.microsoft.com/en-us/windows/apps/design/signature-experiences/typography#type-ramp"); + add(linkLabel4, "cell 4 1"); + + //---- linkLabel10 ---- + linkLabel10.setLink("https://primer.style/css/utilities/typography"); + add(linkLabel10, "cell 5 1"); + + //---- linkLabel8 ---- + linkLabel8.setLink("https://material.io/design/typography/the-type-system.html#type-scale"); + add(linkLabel8, "cell 6 1"); + + //---- linkLabel11 ---- + linkLabel11.setLink("https://m3.material.io/styles/typography/tokens"); + add(linkLabel11, "cell 7 1"); + + //---- linkLabel5 ---- + linkLabel5.setLink("https://experience.sap.com/fiori-design-web/typography/#headlines-and-font-styles-for-ui-controls"); + add(linkLabel5, "cell 8 1"); + + //---- linkLabel6 ---- + linkLabel6.setLink("https://atlassian.design/foundations/typography"); + add(linkLabel6, "cell 9 1"); + + //---- linkLabel7 ---- + linkLabel7.setLink("https://iris.alkamitech.com/foundations/typography.html"); + add(linkLabel7, "cell 10 1"); + + //---- fontPreview69 ---- + fontPreview69.setFontType("H1"); + fontPreview69.setFontSize(96); + fontPreview69.setBaseSize(16); + fontPreview69.setLight(true); + add(fontPreview69, "cell 6 2"); + + //---- fontPreview93 ---- + fontPreview93.setBaseSize(12); + fontPreview93.setFontType("H00"); + fontPreview93.setFontSize(36); + add(fontPreview93, "cell 0 3"); + + //---- fontPreview40 ---- + fontPreview40.setFontSize(68); + fontPreview40.setFontType("Disp"); + fontPreview40.setBaseSize(14); + fontPreview40.setSemibold(true); + add(fontPreview40, "cell 4 2 1 2"); + + //---- fontPreview35 ---- + fontPreview35.setFontType("Disp L"); + fontPreview35.setFontSize(57); + fontPreview35.setBaseSize(16); + add(fontPreview35, "cell 7 2"); + + //---- fontPreview85 ---- + fontPreview85.setFontSize(48); + fontPreview85.setFontType("H00"); + fontPreview85.setBaseSize(16); + fontPreview85.setSemibold(true); + add(fontPreview85, "cell 5 3"); + + //---- fontPreview70 ---- + fontPreview70.setFontSize(60); + fontPreview70.setFontType("H2"); + fontPreview70.setBaseSize(16); + fontPreview70.setLight(true); + add(fontPreview70, "cell 6 3"); + + //---- fontPreview36 ---- + fontPreview36.setFontSize(45); + fontPreview36.setFontType("Disp M"); + fontPreview36.setBaseSize(16); + add(fontPreview36, "cell 7 3"); + + //---- fontPreview51 ---- + fontPreview51.setFontType("h900"); + fontPreview51.setFontSize(35); + fontPreview51.setBaseSize(14); + fontPreview51.setSemibold(true); + add(fontPreview51, "cell 9 3"); + + //---- fontPreview1 ---- + fontPreview1.setBaseSize(12); + fontPreview1.setFontType("H0"); + fontPreview1.setFontSize(30); + add(fontPreview1, "cell 0 4"); + + //---- fontPreview11 ---- + fontPreview11.setFontType("H0"); + fontPreview11.setFontSize(24); + fontPreview11.setBold(true); + fontPreview11.setBaseSize(12); + fontPreview11.setShowPlain(true); + add(fontPreview11, "cell 1 4"); + + //---- fontPreview19 ---- + fontPreview19.setFontType("H0"); + fontPreview19.setFontSize(25); + fontPreview19.setBold(true); + fontPreview19.setBaseSize(13); + fontPreview19.setShowPlain(true); + add(fontPreview19, "cell 2 4"); + + //---- fontPreview27 ---- + fontPreview27.setFontType("Large Title"); + fontPreview27.setFontSize(26); + fontPreview27.setBaseSize(13); + add(fontPreview27, "cell 3 4"); + + //---- fontPreview41 ---- + fontPreview41.setFontType("Title L"); + fontPreview41.setFontSize(40); + fontPreview41.setBaseSize(14); + fontPreview41.setSemibold(true); + add(fontPreview41, "cell 4 4"); + + //---- fontPreview86 ---- + fontPreview86.setFontSize(40); + fontPreview86.setFontType("H0"); + fontPreview86.setBaseSize(16); + fontPreview86.setSemibold(true); + add(fontPreview86, "cell 5 4"); + + //---- fontPreview71 ---- + fontPreview71.setFontType("H3"); + fontPreview71.setFontSize(48); + fontPreview71.setBaseSize(16); + add(fontPreview71, "cell 6 4"); + + //---- fontPreview37 ---- + fontPreview37.setFontSize(36); + fontPreview37.setFontType("Display S"); + fontPreview37.setBaseSize(16); + add(fontPreview37, "cell 7 4"); + + //---- fontPreview47 ---- + fontPreview47.setFontType("Header 1"); + fontPreview47.setFontSize(36); + fontPreview47.setBaseSize(14); + add(fontPreview47, "cell 8 4"); + + //---- fontPreview54 ---- + fontPreview54.setBaseSize(14); + fontPreview54.setFontType("h800"); + fontPreview54.setFontSize(29); + fontPreview54.setSemibold(true); + add(fontPreview54, "cell 9 4"); + + //---- fontPreview62 ---- + fontPreview62.setBaseSize(16); + fontPreview62.setFontSize(44); + fontPreview62.setFontType("Hero"); + add(fontPreview62, "cell 10 4"); + add(separator3, "cell 0 5 11 1,growx"); + + //---- fontPreview2 ---- + fontPreview2.setBaseSize(12); + fontPreview2.setFontSize(24); + fontPreview2.setFontType("H1"); + fontPreview2.setSemibold(true); + fontPreview2.setShowPlain(true); + add(fontPreview2, "cell 0 6"); + + //---- fontPreview12 ---- + fontPreview12.setFontType("H1"); + fontPreview12.setFontSize(21); + fontPreview12.setBold(true); + fontPreview12.setBaseSize(12); + fontPreview12.setShowPlain(true); + add(fontPreview12, "cell 1 6"); + + //---- fontPreview20 ---- + fontPreview20.setFontType("H1"); + fontPreview20.setFontSize(22); + fontPreview20.setBold(true); + fontPreview20.setBaseSize(13); + fontPreview20.setShowPlain(true); + add(fontPreview20, "cell 2 6"); + + //---- fontPreview28 ---- + fontPreview28.setFontSize(22); + fontPreview28.setFontType("Title 1"); + fontPreview28.setBaseSize(13); + add(fontPreview28, "cell 3 6"); + + //---- fontPreview42 ---- + fontPreview42.setFontType("Title"); + fontPreview42.setFontSize(28); + fontPreview42.setBaseSize(14); + fontPreview42.setSemibold(true); + add(fontPreview42, "cell 4 6"); + + //---- fontPreview87 ---- + fontPreview87.setFontType("H1"); + fontPreview87.setFontSize(32); + fontPreview87.setBaseSize(16); + fontPreview87.setSemibold(true); + add(fontPreview87, "cell 5 6"); + + //---- fontPreview72 ---- + fontPreview72.setFontType("H4"); + fontPreview72.setFontSize(34); + fontPreview72.setBaseSize(16); + add(fontPreview72, "cell 6 6"); + + //---- fontPreview38 ---- + fontPreview38.setFontSize(32); + fontPreview38.setFontType("Headline L"); + fontPreview38.setBaseSize(16); + add(fontPreview38, "cell 7 6"); + + //---- fontPreview48 ---- + fontPreview48.setFontType("Header 2"); + fontPreview48.setFontSize(24); + fontPreview48.setBaseSize(14); + add(fontPreview48, "cell 8 6"); + + //---- fontPreview55 ---- + fontPreview55.setBaseSize(14); + fontPreview55.setFontType("h700"); + fontPreview55.setFontSize(24); + fontPreview55.setSemibold(true); + add(fontPreview55, "cell 9 6"); + + //---- fontPreview63 ---- + fontPreview63.setBaseSize(16); + fontPreview63.setFontSize(32); + fontPreview63.setFontType("H1"); + add(fontPreview63, "cell 10 6"); + + //---- fontPreview3 ---- + fontPreview3.setBaseSize(12); + fontPreview3.setFontSize(18); + fontPreview3.setFontType("H2"); + fontPreview3.setSemibold(true); + fontPreview3.setShowPlain(true); + add(fontPreview3, "cell 0 7"); + + //---- fontPreview13 ---- + fontPreview13.setFontType("H2"); + fontPreview13.setFontSize(17); + fontPreview13.setBold(true); + fontPreview13.setBaseSize(12); + fontPreview13.setShowPlain(true); + add(fontPreview13, "cell 1 7"); + + //---- fontPreview21 ---- + fontPreview21.setFontType("H2"); + fontPreview21.setFontSize(18); + fontPreview21.setBold(true); + fontPreview21.setBaseSize(13); + fontPreview21.setShowPlain(true); + add(fontPreview21, "cell 2 7"); + + //---- fontPreview29 ---- + fontPreview29.setFontSize(17); + fontPreview29.setFontType("Title 2"); + fontPreview29.setBaseSize(13); + add(fontPreview29, "cell 3 7"); + + //---- fontPreview43 ---- + fontPreview43.setFontType("Subtitle"); + fontPreview43.setFontSize(20); + fontPreview43.setBaseSize(14); + fontPreview43.setSemibold(true); + add(fontPreview43, "cell 4 7"); + + //---- fontPreview88 ---- + fontPreview88.setFontSize(24); + fontPreview88.setFontType("H2"); + fontPreview88.setBaseSize(16); + fontPreview88.setSemibold(true); + add(fontPreview88, "cell 5 7"); + + //---- fontPreview73 ---- + fontPreview73.setFontType("H5"); + fontPreview73.setFontSize(24); + fontPreview73.setBaseSize(16); + add(fontPreview73, "cell 6 7"); + + //---- fontPreview79 ---- + fontPreview79.setFontType("Headline M"); + fontPreview79.setFontSize(28); + fontPreview79.setBaseSize(16); + add(fontPreview79, "cell 7 7"); + + //---- fontPreview49 ---- + fontPreview49.setFontType("Header 3"); + fontPreview49.setFontSize(20); + fontPreview49.setBaseSize(14); + add(fontPreview49, "cell 8 7"); + + //---- fontPreview57 ---- + fontPreview57.setBaseSize(14); + fontPreview57.setFontType("h600"); + fontPreview57.setFontSize(20); + fontPreview57.setSemibold(true); + add(fontPreview57, "cell 9 7"); + + //---- fontPreview64 ---- + fontPreview64.setBaseSize(16); + fontPreview64.setFontType("H2"); + fontPreview64.setFontSize(24); + add(fontPreview64, "cell 10 7"); + + //---- fontPreview4 ---- + fontPreview4.setBaseSize(12); + fontPreview4.setFontSize(15); + fontPreview4.setFontType("H3"); + fontPreview4.setSemibold(true); + fontPreview4.setShowPlain(true); + add(fontPreview4, "cell 0 8"); + + //---- fontPreview14 ---- + fontPreview14.setFontType("H3"); + fontPreview14.setFontSize(15); + fontPreview14.setBold(true); + fontPreview14.setBaseSize(12); + fontPreview14.setShowPlain(true); + add(fontPreview14, "cell 1 8"); + + //---- fontPreview22 ---- + fontPreview22.setFontType("H3"); + fontPreview22.setFontSize(16); + fontPreview22.setBold(true); + fontPreview22.setBaseSize(13); + fontPreview22.setShowPlain(true); + add(fontPreview22, "cell 2 8"); + + //---- fontPreview30 ---- + fontPreview30.setFontType("Title 3"); + fontPreview30.setFontSize(15); + fontPreview30.setBaseSize(13); + add(fontPreview30, "cell 3 8"); + + //---- fontPreview89 ---- + fontPreview89.setFontType("H3"); + fontPreview89.setFontSize(20); + fontPreview89.setBaseSize(16); + fontPreview89.setSemibold(true); + add(fontPreview89, "cell 5 8"); + + //---- fontPreview74 ---- + fontPreview74.setFontType("H6"); + fontPreview74.setFontSize(20); + fontPreview74.setBaseSize(16); + fontPreview74.setSemibold(true); + add(fontPreview74, "cell 6 8"); + + //---- fontPreview80 ---- + fontPreview80.setFontType("Headline S"); + fontPreview80.setFontSize(24); + fontPreview80.setBaseSize(16); + add(fontPreview80, "cell 7 8"); + + //---- fontPreview50 ---- + fontPreview50.setFontType("Header 4"); + fontPreview50.setFontSize(18); + fontPreview50.setBaseSize(14); + add(fontPreview50, "cell 8 8"); + + //---- fontPreview58 ---- + fontPreview58.setBaseSize(14); + fontPreview58.setFontType("h500"); + fontPreview58.setFontSize(16); + fontPreview58.setSemibold(true); + add(fontPreview58, "cell 9 8"); + + //---- fontPreview65 ---- + fontPreview65.setBaseSize(16); + fontPreview65.setFontSize(20); + fontPreview65.setFontType("H3"); + add(fontPreview65, "cell 10 8"); + + //---- fontPreview5 ---- + fontPreview5.setBaseSize(12); + fontPreview5.setFontSize(14); + fontPreview5.setFontType("Large"); + add(fontPreview5, "cell 0 9"); + + //---- fontPreview15 ---- + fontPreview15.setFontType("H4"); + fontPreview15.setBold(true); + fontPreview15.setFontSize(12); + fontPreview15.setBaseSize(12); + add(fontPreview15, "cell 1 9"); + + //---- fontPreview23 ---- + fontPreview23.setFontType("H4"); + fontPreview23.setFontSize(13); + fontPreview23.setBold(true); + fontPreview23.setBaseSize(13); + add(fontPreview23, "cell 2 9"); + + //---- fontPreview31 ---- + fontPreview31.setFontType("Headline"); + fontPreview31.setFontSize(13); + fontPreview31.setBold(true); + fontPreview31.setBaseSize(13); + add(fontPreview31, "cell 3 9"); + + //---- fontPreview44 ---- + fontPreview44.setFontSize(18); + fontPreview44.setFontType("Body Large"); + fontPreview44.setBaseSize(14); + add(fontPreview44, "cell 4 9"); + + //---- fontPreview81 ---- + fontPreview81.setFontType("Title L"); + fontPreview81.setFontSize(22); + fontPreview81.setBaseSize(16); + fontPreview81.setSemibold(true); + add(fontPreview81, "cell 7 9"); + + //---- fontPreview56 ---- + fontPreview56.setFontType("Large Text / Header 5"); + fontPreview56.setFontSize(16); + fontPreview56.setBaseSize(14); + add(fontPreview56, "cell 8 9"); + + //---- fontPreview66 ---- + fontPreview66.setBaseSize(16); + fontPreview66.setFontType("H4"); + fontPreview66.setFontSize(18); + add(fontPreview66, "cell 10 9"); + add(separator1, "cell 0 10 11 1,growx"); + + //---- fontPreview7 ---- + fontPreview7.setFontType("Default"); + fontPreview7.setFontSize(12); + fontPreview7.setBaseSize(12); + add(fontPreview7, "cell 0 11"); + + //---- fontPreview6 ---- + fontPreview6.setFontSize(12); + fontPreview6.setBold(true); + fontPreview6.setFontType("H4"); + fontPreview6.setBaseSize(12); + add(fontPreview6, "cell 0 11"); + + //---- fontPreview16 ---- + fontPreview16.setFontType("Default"); + fontPreview16.setFontSize(12); + fontPreview16.setBaseSize(12); + add(fontPreview16, "cell 1 11"); + + //---- fontPreview24 ---- + fontPreview24.setFontType("Default"); + fontPreview24.setFontSize(13); + fontPreview24.setBaseSize(13); + add(fontPreview24, "cell 2 11"); + + //---- fontPreview32 ---- + fontPreview32.setFontType("Body"); + fontPreview32.setFontSize(13); + fontPreview32.setBaseSize(13); + add(fontPreview32, "cell 3 11"); + + //---- fontPreview45 ---- + fontPreview45.setFontType("Body"); + fontPreview45.setFontSize(14); + fontPreview45.setBaseSize(14); + add(fontPreview45, "cell 4 11"); + + //---- fontPreview90 ---- + fontPreview90.setFontSize(16); + fontPreview90.setFontType("Body /"); + fontPreview90.setBaseSize(16); + add(fontPreview90, "cell 5 11,alignx left,growx 0"); + + //---- fontPreview98 ---- + fontPreview98.setFontSize(16); + fontPreview98.setFontType("H4"); + fontPreview98.setBaseSize(16); + fontPreview98.setSemibold(true); + add(fontPreview98, "cell 5 11"); + + //---- fontPreview75 ---- + fontPreview75.setFontSize(16); + fontPreview75.setFontType("Body 1 / Subtitle 1"); + fontPreview75.setBaseSize(16); + add(fontPreview75, "cell 6 11"); + + //---- fontPreview82 ---- + fontPreview82.setFontSize(16); + fontPreview82.setFontType("Body L /"); + fontPreview82.setBaseSize(16); + add(fontPreview82, "cell 7 11,alignx left,growx 0"); + + //---- fontPreview95 ---- + fontPreview95.setFontSize(16); + fontPreview95.setFontType("Title M"); + fontPreview95.setBaseSize(16); + fontPreview95.setSemibold(true); + add(fontPreview95, "cell 7 11"); + + //---- fontPreview52 ---- + fontPreview52.setFontType("Medium Text / Header 6"); + fontPreview52.setFontSize(14); + fontPreview52.setBaseSize(14); + add(fontPreview52, "cell 8 11"); + + //---- fontPreview59 ---- + fontPreview59.setBaseSize(14); + fontPreview59.setFontSize(14); + fontPreview59.setFontType("h400"); + fontPreview59.setSemibold(true); + add(fontPreview59, "cell 9 11"); + + //---- fontPreview67 ---- + fontPreview67.setBaseSize(16); + fontPreview67.setFontSize(16); + fontPreview67.setFontType("Body"); + add(fontPreview67, "cell 10 11"); + add(separator2, "cell 0 12 11 1,growx"); + + //---- fontPreview8 ---- + fontPreview8.setFontType("Medium"); + fontPreview8.setFontSize(11); + fontPreview8.setBaseSize(12); + add(fontPreview8, "cell 0 13"); + + //---- fontPreview17 ---- + fontPreview17.setFontType("Medium"); + fontPreview17.setFontSize(12); + fontPreview17.setBaseSize(12); + add(fontPreview17, "cell 1 13"); + + //---- fontPreview25 ---- + fontPreview25.setFontType("Medium"); + fontPreview25.setFontSize(12); + fontPreview25.setBaseSize(13); + add(fontPreview25, "cell 2 13"); + + //---- fontPreview39 ---- + fontPreview39.setFontSize(12); + fontPreview39.setFontType("Callout"); + fontPreview39.setBaseSize(13); + add(fontPreview39, "cell 3 13"); + + //---- fontPreview91 ---- + fontPreview91.setFontType("H5"); + fontPreview91.setFontSize(14); + fontPreview91.setBaseSize(16); + fontPreview91.setSemibold(true); + add(fontPreview91, "cell 5 13"); + + //---- fontPreview76 ---- + fontPreview76.setFontType("Body 2 / Subtitle 2"); + fontPreview76.setFontSize(14); + fontPreview76.setBaseSize(16); + add(fontPreview76, "cell 6 13"); + + //---- fontPreview83 ---- + fontPreview83.setFontType("Body M /"); + fontPreview83.setFontSize(14); + fontPreview83.setBaseSize(16); + add(fontPreview83, "cell 7 13,alignx left,growx 0"); + + //---- fontPreview96 ---- + fontPreview96.setFontType("Title S / Label L"); + fontPreview96.setFontSize(14); + fontPreview96.setBaseSize(16); + fontPreview96.setSemibold(true); + add(fontPreview96, "cell 7 13"); + + //---- fontPreview9 ---- + fontPreview9.setFontType("Small"); + fontPreview9.setFontSize(10); + fontPreview9.setBaseSize(12); + add(fontPreview9, "cell 0 14"); + + //---- fontPreview18 ---- + fontPreview18.setFontType("Small"); + fontPreview18.setFontSize(12); + fontPreview18.setBaseSize(12); + add(fontPreview18, "cell 1 14"); + + //---- fontPreview26 ---- + fontPreview26.setFontType("Small"); + fontPreview26.setFontSize(11); + fontPreview26.setBaseSize(13); + add(fontPreview26, "cell 2 14"); + + //---- fontPreview33 ---- + fontPreview33.setFontType("Subheadline"); + fontPreview33.setFontSize(11); + fontPreview33.setBaseSize(13); + add(fontPreview33, "cell 3 14"); + + //---- fontPreview46 ---- + fontPreview46.setFontType("Caption"); + fontPreview46.setFontSize(12); + fontPreview46.setBaseSize(14); + add(fontPreview46, "cell 4 14"); + + //---- fontPreview92 ---- + fontPreview92.setFontSize(12); + fontPreview92.setFontType("H6"); + fontPreview92.setBaseSize(12); + fontPreview92.setSemibold(true); + add(fontPreview92, "cell 5 14"); + + //---- fontPreview77 ---- + fontPreview77.setFontSize(12); + fontPreview77.setFontType("Caption"); + fontPreview77.setBaseSize(16); + add(fontPreview77, "cell 6 14"); + + //---- fontPreview84 ---- + fontPreview84.setFontType("Body S /"); + fontPreview84.setFontSize(12); + fontPreview84.setBaseSize(16); + add(fontPreview84, "cell 7 14,alignx left,growx 0"); + + //---- fontPreview97 ---- + fontPreview97.setFontType("Label M"); + fontPreview97.setFontSize(12); + fontPreview97.setBaseSize(16); + fontPreview97.setSemibold(true); + add(fontPreview97, "cell 7 14"); + + //---- fontPreview53 ---- + fontPreview53.setFontType("Small Text"); + fontPreview53.setFontSize(12); + fontPreview53.setBaseSize(14); + add(fontPreview53, "cell 8 14"); + + //---- fontPreview60 ---- + fontPreview60.setBaseSize(14); + fontPreview60.setFontType("h300 / h200"); + fontPreview60.setFontSize(12); + fontPreview60.setSemibold(true); + add(fontPreview60, "cell 9 14"); + + //---- fontPreview68 ---- + fontPreview68.setBaseSize(16); + fontPreview68.setFontType("Small"); + fontPreview68.setFontSize(14); + add(fontPreview68, "cell 10 14"); + + //---- fontPreview10 ---- + fontPreview10.setFontType("Mini"); + fontPreview10.setFontSize(9); + fontPreview10.setBaseSize(12); + add(fontPreview10, "cell 0 15"); + + //---- fontPreview34 ---- + fontPreview34.setFontSize(10); + fontPreview34.setFontType("Footnote / Caption 1+2"); + fontPreview34.setBaseSize(13); + add(fontPreview34, "cell 3 15"); + + //---- fontPreview78 ---- + fontPreview78.setFontType("Overline"); + fontPreview78.setFontSize(10); + fontPreview78.setBaseSize(16); + add(fontPreview78, "cell 6 15"); + + //---- fontPreview94 ---- + fontPreview94.setFontSize(11); + fontPreview94.setFontType("Label S"); + fontPreview94.setBaseSize(16); + fontPreview94.setSemibold(true); + add(fontPreview94, "cell 7 15"); + + //---- fontPreview61 ---- + fontPreview61.setBaseSize(14); + fontPreview61.setFontSize(11); + fontPreview61.setFontType("h100"); + fontPreview61.setSemibold(true); + add(fontPreview61, "cell 9 15"); + // JFormDesigner - End of component initialization //GEN-END:initComponents + } + + // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + // JFormDesigner - End of variables declaration //GEN-END:variables + + //---- class LinkLabel ---------------------------------------------------- + + static class LinkLabel + extends JLabel + { + private String linkText; + private String link; + + public LinkLabel() { + setLinkText( "Details" ); + setCursor( Cursor.getPredefinedCursor( Cursor.HAND_CURSOR ) ); + addMouseListener( new MouseAdapter() { + @Override + public void mouseClicked( MouseEvent e ) { + try { + Desktop.getDesktop().browse( new URI( link ) ); + } catch( IOException | URISyntaxException ex ) { + JOptionPane.showMessageDialog( LinkLabel.this, + "Failed to open '" + link + "' in browser.", + "Browse", JOptionPane.PLAIN_MESSAGE ); + } + } + } ); + } + + public String getLink() { + return link; + } + + public void setLink( String link ) { + this.link = link; + } + + public String getLinkText() { + return linkText; + } + + public void setLinkText( String linkText ) { + this.linkText = linkText; + setText( "" + linkText + "" ); + } + } + + //---- class FontPreview -------------------------------------------------- + + static class FontPreview + extends JPanel + { + private String fontType; + private int fontSize; + private int baseSize; + private boolean light; + private boolean semibold; + private boolean bold; + private boolean showPlain; + + private FontPreview() { + initComponents(); + preview2Label.setVisible( false ); + } + + public String getFontType() { + return fontType; + } + + public void setFontType( String fontType ) { + this.fontType = fontType; + previewLabel.setText( fontType ); + preview2Label.setText( previewLabel.getText() ); + } + + public int getFontSize() { + return fontSize; + } + + public void setFontSize( int fontSize ) { + this.fontSize = fontSize; + updateFont(); + updateDescription(); + } + + public int getBaseSize() { + return baseSize; + } + + public void setBaseSize( int baseSize ) { + this.baseSize = baseSize; + updateDescription(); + } + + public boolean isLight() { + return light; + } + + public void setLight( boolean light ) { + this.light = light; + updateFont(); + updateDescription(); + } + + public boolean isSemibold() { + return semibold; + } + + public void setSemibold( boolean semibold ) { + this.semibold = semibold; + updateFont(); + updateDescription(); + } + + public boolean isBold() { + return bold; + } + + public void setBold( boolean bold ) { + this.bold = bold; + updateFont(); + updateDescription(); + } + + public boolean isShowPlain() { + return showPlain; + } + + public void setShowPlain( boolean showPlain ) { + this.showPlain = showPlain; + preview2Label.setVisible( showPlain ); + } + + private void updateFont() { + previewLabel.setFont( getBaseFont().deriveFont( bold ? Font.BOLD : Font.PLAIN, fontSize ) ); + preview2Label.setFont( getDefaultFont().deriveFont( (float) fontSize ) ); + } + + private void updateDescription() { + StringBuilder buf = new StringBuilder(); + buf.append( fontSize ); + if( baseSize > 0 && fontSize != baseSize ) { + buf.append( " " ).append( fontSize > baseSize ? "+" : "" ).append( fontSize - baseSize ); + buf.append( String.format( " %.2fx", (float) fontSize / baseSize ) ); + } + if( light ) + buf.append( " light" ); + if( semibold ) + buf.append( " semibold" ); + if( bold ) + buf.append( " bold" ); + descLabel.setText( buf.toString() ); + } + + private Font getBaseFont() { + Font font = null; + if( light ) + font = UIManager.getFont( "light.font" ); + else if( semibold ) + font = UIManager.getFont( "semibold.font" ); + + if( font == null ) + font = getDefaultFont(); + return font; + } + + private Font getDefaultFont() { + Font font = UIManager.getFont( "defaultFont" ); + if( font == null ) + font = UIManager.getFont( "Label.font" ); + return font; + } + + private void initComponents() { + // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents + previewLabel = new JLabel(); + preview2Label = new JLabel(); + descLabel = new JLabel(); + + //======== this ======== + setLayout(new MigLayout( + "insets 0,hidemode 3", + // columns + "[left]", + // rows + "[]0" + + "[]")); + + //---- previewLabel ---- + previewLabel.setText("preview"); + add(previewLabel, "cell 0 0"); + add(preview2Label, "cell 0 0"); + + //---- descLabel ---- + descLabel.setText("description"); + descLabel.putClientProperty("FlatLaf.styleClass", "small"); + descLabel.setEnabled(false); + add(descLabel, "cell 0 1"); + // JFormDesigner - End of component initialization //GEN-END:initComponents + } + + // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + private JLabel previewLabel; + private JLabel preview2Label; + private JLabel descLabel; + // JFormDesigner - End of variables declaration //GEN-END:variables + } +} diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTypographyTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTypographyTest.jfd new file mode 100644 index 00000000..f9780885 --- /dev/null +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatTypographyTest.jfd @@ -0,0 +1,1064 @@ +JFDML JFormDesigner: "7.0.5.0.382" Java: "16" encoding: "UTF-8" + +new FormModel { + contentType: "form/swing" + root: new FormRoot { + auxiliary() { + "JavaCodeGenerator.defaultVariableLocal": true + } + add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "ltr,insets dialog,hidemode 3" + "$columnConstraints": "[left]unrel[left]unrel[left]unrel[left]unrel[left]unrel[left]unrel[left]unrel[fill]unrel[left]unrel[left]unrel[left]unrel" + "$rowConstraints": "[top][bottom][bottom][bottom][bottom][][bottom][bottom][bottom][bottom][][bottom][][bottom][bottom][bottom]" + } ) { + name: "this" + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label54" + "text": "FlatLaf
Windows" + "$client.FlatLaf.styleClass": "h1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label68" + "text": "JetBrains
Windows" + "$client.FlatLaf.styleClass": "h1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label69" + "text": "JetBrains
macOS" + "$client.FlatLaf.styleClass": "h1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label10" + "text": "macOS" + "$client.FlatLaf.styleClass": "h1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label11" + "text": "Windows 10/11" + "$client.FlatLaf.styleClass": "h1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label72" + "text": "GitHub
Primer" + "$client.FlatLaf.styleClass": "h1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label28" + "text": "Material" + "$client.FlatLaf.styleClass": "h1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label29" + "text": "Material 3" + "$client.FlatLaf.styleClass": "h1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label1" + "text": "SAP Fiori" + "$client.FlatLaf.styleClass": "h1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 8 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label37" + "text": "Atlassian" + "$client.FlatLaf.styleClass": "h1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 9 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label46" + "text": "Iris" + "$client.FlatLaf.styleClass": "h1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 10 0" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$LinkLabel" ) { + name: "linkLabel9" + "link": "https://www.formdev.com/flatlaf/typography/" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 1" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$LinkLabel" ) { + name: "linkLabel1" + "link": "https://jetbrains.design/intellij/principles/typography/" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 1" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$LinkLabel" ) { + name: "linkLabel2" + "link": "https://developer.apple.com/design/human-interface-guidelines/macos/visual-design/typography/" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 1" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$LinkLabel" ) { + name: "linkLabel3" + "link": "https://docs.microsoft.com/en-us/windows/apps/design/style/typography#type-ramp" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label2" + "text": "/" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 1" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$LinkLabel" ) { + name: "linkLabel4" + "link": "https://docs.microsoft.com/en-us/windows/apps/design/signature-experiences/typography#type-ramp" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 1" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$LinkLabel" ) { + name: "linkLabel10" + "link": "https://primer.style/css/utilities/typography" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 1" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$LinkLabel" ) { + name: "linkLabel8" + "link": "https://material.io/design/typography/the-type-system.html#type-scale" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 1" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$LinkLabel" ) { + name: "linkLabel11" + "link": "https://m3.material.io/styles/typography/tokens" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 1" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$LinkLabel" ) { + name: "linkLabel5" + "link": "https://experience.sap.com/fiori-design-web/typography/#headlines-and-font-styles-for-ui-controls" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 8 1" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$LinkLabel" ) { + name: "linkLabel6" + "link": "https://atlassian.design/foundations/typography" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 9 1" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$LinkLabel" ) { + name: "linkLabel7" + "link": "https://iris.alkamitech.com/foundations/typography.html" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 10 1" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview69" + "fontType": "H1" + "fontSize": 96 + "baseSize": 16 + "light": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 2" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview93" + "baseSize": 12 + "fontType": "H00" + "fontSize": 36 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 3" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview40" + "fontSize": 68 + "fontType": "Disp" + "baseSize": 14 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 2 1 2" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview35" + "fontType": "Disp L" + "fontSize": 57 + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 2" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview85" + "fontSize": 48 + "fontType": "H00" + "baseSize": 16 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 3" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview70" + "fontSize": 60 + "fontType": "H2" + "baseSize": 16 + "light": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 3" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview36" + "fontSize": 45 + "fontType": "Disp M" + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 3" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview51" + "fontType": "h900" + "fontSize": 35 + "baseSize": 14 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 9 3" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview1" + "baseSize": 12 + "fontType": "H0" + "fontSize": 30 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview11" + "fontType": "H0" + "fontSize": 24 + "bold": true + "baseSize": 12 + "showPlain": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview19" + "fontType": "H0" + "fontSize": 25 + "bold": true + "baseSize": 13 + "showPlain": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview27" + "fontType": "Large Title" + "fontSize": 26 + "baseSize": 13 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview41" + "fontType": "Title L" + "fontSize": 40 + "baseSize": 14 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview86" + "fontSize": 40 + "fontType": "H0" + "baseSize": 16 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview71" + "fontType": "H3" + "fontSize": 48 + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview37" + "fontSize": 36 + "fontType": "Display S" + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview47" + "fontType": "Header 1" + "fontSize": 36 + "baseSize": 14 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 8 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview54" + "baseSize": 14 + "fontType": "h800" + "fontSize": 29 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 9 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview62" + "baseSize": 16 + "fontSize": 44 + "fontType": "Hero" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 10 4" + } ) + add( new FormComponent( "javax.swing.JSeparator" ) { + name: "separator3" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 5 11 1,growx" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview2" + "baseSize": 12 + "fontSize": 24 + "fontType": "H1" + "semibold": true + "showPlain": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview12" + "fontType": "H1" + "fontSize": 21 + "bold": true + "baseSize": 12 + "showPlain": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview20" + "fontType": "H1" + "fontSize": 22 + "bold": true + "baseSize": 13 + "showPlain": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview28" + "fontSize": 22 + "fontType": "Title 1" + "baseSize": 13 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview42" + "fontType": "Title" + "fontSize": 28 + "baseSize": 14 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview87" + "fontType": "H1" + "fontSize": 32 + "baseSize": 16 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview72" + "fontType": "H4" + "fontSize": 34 + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview38" + "fontSize": 32 + "fontType": "Headline L" + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview48" + "fontType": "Header 2" + "fontSize": 24 + "baseSize": 14 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 8 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview55" + "baseSize": 14 + "fontType": "h700" + "fontSize": 24 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 9 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview63" + "baseSize": 16 + "fontSize": 32 + "fontType": "H1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 10 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview3" + "baseSize": 12 + "fontSize": 18 + "fontType": "H2" + "semibold": true + "showPlain": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview13" + "fontType": "H2" + "fontSize": 17 + "bold": true + "baseSize": 12 + "showPlain": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview21" + "fontType": "H2" + "fontSize": 18 + "bold": true + "baseSize": 13 + "showPlain": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview29" + "fontSize": 17 + "fontType": "Title 2" + "baseSize": 13 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview43" + "fontType": "Subtitle" + "fontSize": 20 + "baseSize": 14 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview88" + "fontSize": 24 + "fontType": "H2" + "baseSize": 16 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview73" + "fontType": "H5" + "fontSize": 24 + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview79" + "fontType": "Headline M" + "fontSize": 28 + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview49" + "fontType": "Header 3" + "fontSize": 20 + "baseSize": 14 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 8 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview57" + "baseSize": 14 + "fontType": "h600" + "fontSize": 20 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 9 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview64" + "baseSize": 16 + "fontType": "H2" + "fontSize": 24 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 10 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview4" + "baseSize": 12 + "fontSize": 15 + "fontType": "H3" + "semibold": true + "showPlain": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview14" + "fontType": "H3" + "fontSize": 15 + "bold": true + "baseSize": 12 + "showPlain": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview22" + "fontType": "H3" + "fontSize": 16 + "bold": true + "baseSize": 13 + "showPlain": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview30" + "fontType": "Title 3" + "fontSize": 15 + "baseSize": 13 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview89" + "fontType": "H3" + "fontSize": 20 + "baseSize": 16 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview74" + "fontType": "H6" + "fontSize": 20 + "baseSize": 16 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview80" + "fontType": "Headline S" + "fontSize": 24 + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview50" + "fontType": "Header 4" + "fontSize": 18 + "baseSize": 14 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 8 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview58" + "baseSize": 14 + "fontType": "h500" + "fontSize": 16 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 9 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview65" + "baseSize": 16 + "fontSize": 20 + "fontType": "H3" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 10 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview5" + "baseSize": 12 + "fontSize": 14 + "fontType": "Large" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 9" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview15" + "fontType": "H4" + "bold": true + "fontSize": 12 + "baseSize": 12 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 9" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview23" + "fontType": "H4" + "fontSize": 13 + "bold": true + "baseSize": 13 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 9" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview31" + "fontType": "Headline" + "fontSize": 13 + "bold": true + "baseSize": 13 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 9" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview44" + "fontSize": 18 + "fontType": "Body Large" + "baseSize": 14 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 9" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview81" + "fontType": "Title L" + "fontSize": 22 + "baseSize": 16 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 9" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview56" + "fontType": "Large Text / Header 5" + "fontSize": 16 + "baseSize": 14 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 8 9" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview66" + "baseSize": 16 + "fontType": "H4" + "fontSize": 18 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 10 9" + } ) + add( new FormComponent( "javax.swing.JSeparator" ) { + name: "separator1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 10 11 1,growx" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview7" + "fontType": "Default" + "fontSize": 12 + "baseSize": 12 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 11" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview6" + "fontSize": 12 + "bold": true + "fontType": "H4" + "baseSize": 12 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 11" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview16" + "fontType": "Default" + "fontSize": 12 + "baseSize": 12 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 11" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview24" + "fontType": "Default" + "fontSize": 13 + "baseSize": 13 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 11" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview32" + "fontType": "Body" + "fontSize": 13 + "baseSize": 13 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 11" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview45" + "fontType": "Body" + "fontSize": 14 + "baseSize": 14 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 11" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview90" + "fontSize": 16 + "fontType": "Body /" + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 11,alignx left,growx 0" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview98" + "fontSize": 16 + "fontType": "H4" + "baseSize": 16 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 11" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview75" + "fontSize": 16 + "fontType": "Body 1 / Subtitle 1" + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 11" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview82" + "fontSize": 16 + "fontType": "Body L /" + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 11,alignx left,growx 0" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview95" + "fontSize": 16 + "fontType": "Title M" + "baseSize": 16 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 11" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview52" + "fontType": "Medium Text / Header 6" + "fontSize": 14 + "baseSize": 14 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 8 11" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview59" + "baseSize": 14 + "fontSize": 14 + "fontType": "h400" + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 9 11" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview67" + "baseSize": 16 + "fontSize": 16 + "fontType": "Body" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 10 11" + } ) + add( new FormComponent( "javax.swing.JSeparator" ) { + name: "separator2" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 12 11 1,growx" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview8" + "fontType": "Medium" + "fontSize": 11 + "baseSize": 12 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 13" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview17" + "fontType": "Medium" + "fontSize": 12 + "baseSize": 12 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 13" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview25" + "fontType": "Medium" + "fontSize": 12 + "baseSize": 13 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 13" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview39" + "fontSize": 12 + "fontType": "Callout" + "baseSize": 13 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 13" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview91" + "fontType": "H5" + "fontSize": 14 + "baseSize": 16 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 13" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview76" + "fontType": "Body 2 / Subtitle 2" + "fontSize": 14 + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 13" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview83" + "fontType": "Body M /" + "fontSize": 14 + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 13,alignx left,growx 0" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview96" + "fontType": "Title S / Label L" + "fontSize": 14 + "baseSize": 16 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 13" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview9" + "fontType": "Small" + "fontSize": 10 + "baseSize": 12 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview18" + "fontType": "Small" + "fontSize": 12 + "baseSize": 12 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview26" + "fontType": "Small" + "fontSize": 11 + "baseSize": 13 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview33" + "fontType": "Subheadline" + "fontSize": 11 + "baseSize": 13 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview46" + "fontType": "Caption" + "fontSize": 12 + "baseSize": 14 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview92" + "fontSize": 12 + "fontType": "H6" + "baseSize": 12 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview77" + "fontSize": 12 + "fontType": "Caption" + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview84" + "fontType": "Body S /" + "fontSize": 12 + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 14,alignx left,growx 0" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview97" + "fontType": "Label M" + "fontSize": 12 + "baseSize": 16 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview53" + "fontType": "Small Text" + "fontSize": 12 + "baseSize": 14 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 8 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview60" + "baseSize": 14 + "fontType": "h300 / h200" + "fontSize": 12 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 9 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview68" + "baseSize": 16 + "fontType": "Small" + "fontSize": 14 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 10 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview10" + "fontType": "Mini" + "fontSize": 9 + "baseSize": 12 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 15" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview34" + "fontSize": 10 + "fontType": "Footnote / Caption 1+2" + "baseSize": 13 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 15" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview78" + "fontType": "Overline" + "fontSize": 10 + "baseSize": 16 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 15" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview94" + "fontSize": 11 + "fontType": "Label S" + "baseSize": 16 + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 7 15" + } ) + add( new FormComponent( "com.formdev.flatlaf.testing.FlatTypographyTest$FontPreview" ) { + name: "fontPreview61" + "baseSize": 14 + "fontSize": 11 + "fontType": "h100" + "semibold": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 9 15" + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 5, 0 ) + "size": new java.awt.Dimension( 1500, 855 ) + } ) + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "insets 0,hidemode 3" + "$columnConstraints": "[left]" + "$rowConstraints": "[]0[]" + } ) { + name: "panel1" + auxiliary() { + "JavaCodeGenerator.className": "FontPreview" + "JavaCodeGenerator.variableName": "fontPreview" + } + add( new FormComponent( "javax.swing.JLabel" ) { + name: "previewLabel" + "text": "preview" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "preview2Label" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "descLabel" + "text": "description" + "$client.FlatLaf.styleClass": "small" + "enabled": false + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 1" + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 10, 925 ) + "size": new java.awt.Dimension( 105, 85 ) + } ) + } +} diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatWindowDecorationsTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatWindowDecorationsTest.java index 41e7f04a..c8f99783 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatWindowDecorationsTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatWindowDecorationsTest.java @@ -27,6 +27,7 @@ import java.util.List; import java.util.Random; import javax.swing.*; import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.extras.components.FlatTriStateCheckBox; import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.util.MultiResolutionImageSupport; import net.miginfocom.swing.*; @@ -73,6 +74,9 @@ public class FlatWindowDecorationsTest menuBarCheckBox.setSelected( window instanceof JFrame ); maximizedBoundsCheckBox.setEnabled( window instanceof Frame ); + menuBarEmbeddedCheckBox.setSelected( UIManager.getBoolean( "TitlePane.menuBarEmbedded" ) ); + unifiedBackgroundCheckBox.setSelected( UIManager.getBoolean( "TitlePane.unifiedBackground" ) ); + addMenuButton.setEnabled( menuBarCheckBox.isEnabled() ); addGlueButton.setEnabled( menuBarCheckBox.isEnabled() ); removeMenuButton.setEnabled( menuBarCheckBox.isEnabled() ); @@ -91,20 +95,35 @@ public class FlatWindowDecorationsTest JRootPane rootPane = getWindowRootPane(); if( rootPane != null ) { - int style = rootPane.getWindowDecorationStyle(); - if( style == JRootPane.NONE ) - styleNoneRadioButton.setSelected( true ); - else if( style == JRootPane.FRAME ) - styleFrameRadioButton.setSelected( true ); - else if( style == JRootPane.PLAIN_DIALOG ) - stylePlainRadioButton.setSelected( true ); - else if( style == JRootPane.INFORMATION_DIALOG ) - styleInfoRadioButton.setSelected( true ); - else - throw new RuntimeException(); // not used + updateDecorationStyleRadioButtons( rootPane ); + rootPane.addPropertyChangeListener( "windowDecorationStyle", e -> { + updateDecorationStyleRadioButtons( rootPane ); + } ); } } + private void updateDecorationStyleRadioButtons( JRootPane rootPane ) { + int style = rootPane.getWindowDecorationStyle(); + if( style == JRootPane.NONE ) + styleNoneRadioButton.setSelected( true ); + else if( style == JRootPane.FRAME ) + styleFrameRadioButton.setSelected( true ); + else if( style == JRootPane.PLAIN_DIALOG ) + stylePlainRadioButton.setSelected( true ); + else if( style == JRootPane.INFORMATION_DIALOG ) + styleInfoRadioButton.setSelected( true ); + else if( style == JRootPane.ERROR_DIALOG ) + styleErrorRadioButton.setSelected( true ); + else if( style == JRootPane.QUESTION_DIALOG ) + styleQuestionRadioButton.setSelected( true ); + else if( style == JRootPane.WARNING_DIALOG ) + styleWarningRadioButton.setSelected( true ); + else if( style == JRootPane.COLOR_CHOOSER_DIALOG ) + styleColorChooserRadioButton.setSelected( true ); + else if( style == JRootPane.FILE_CHOOSER_DIALOG ) + styleFileChooserRadioButton.setSelected( true ); + } + private void unifiedBackgroundChanged() { UIManager.put( "TitlePane.unifiedBackground", unifiedBackgroundCheckBox.isSelected() ); Window window = SwingUtilities.windowForComponent( this ); @@ -387,6 +406,12 @@ public class FlatWindowDecorationsTest } } + private void showIconChanged() { + JRootPane rootPane = getWindowRootPane(); + if( rootPane != null ) + rootPane.putClientProperty( FlatClientProperties.TITLE_BAR_SHOW_ICON, showIconCheckBox.getChecked() ); + } + private JRootPane getWindowRootPane() { Window window = SwingUtilities.windowForComponent( this ); if( window instanceof JFrame ) @@ -435,6 +460,7 @@ public class FlatWindowDecorationsTest iconTestRandomRadioButton = new JRadioButton(); iconTestMRIRadioButton = new JRadioButton(); iconTestDynMRIRadioButton = new JRadioButton(); + showIconCheckBox = new FlatTriStateCheckBox(); JButton openDialogButton = new JButton(); JButton openFrameButton = new JButton(); menuBar = new JMenuBar(); @@ -670,12 +696,13 @@ public class FlatWindowDecorationsTest panel2.setLayout(new MigLayout( "ltr,insets 0,hidemode 3,gap 0 0", // columns - "[fill]", + "[left]", // rows "[]" + "[]" + "[]" + "[]" + + "[]rel" + "[]")); //---- iconNoneRadioButton ---- @@ -703,6 +730,11 @@ public class FlatWindowDecorationsTest iconTestDynMRIRadioButton.setText("test dynamic multi-resolution (Java 9+)"); iconTestDynMRIRadioButton.addActionListener(e -> iconChanged()); panel2.add(iconTestDynMRIRadioButton, "cell 0 4"); + + //---- showIconCheckBox ---- + showIconCheckBox.setText("show icon"); + showIconCheckBox.addActionListener(e -> showIconChanged()); + panel2.add(showIconCheckBox, "cell 0 5"); } add(panel2, "cell 1 8"); @@ -940,6 +972,7 @@ public class FlatWindowDecorationsTest private JRadioButton iconTestRandomRadioButton; private JRadioButton iconTestMRIRadioButton; private JRadioButton iconTestDynMRIRadioButton; + private FlatTriStateCheckBox showIconCheckBox; private JMenuBar menuBar; // JFormDesigner - End of variables declaration //GEN-END:variables } diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatWindowDecorationsTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatWindowDecorationsTest.jfd index bc655f8e..c5aa442e 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatWindowDecorationsTest.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/FlatWindowDecorationsTest.jfd @@ -327,8 +327,8 @@ new FormModel { "value": "cell 0 8" } ) add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { - "$columnConstraints": "[fill]" - "$rowConstraints": "[][][][][]" + "$columnConstraints": "[left]" + "$rowConstraints": "[][][][][]rel[]" "$layoutConstraints": "ltr,insets 0,hidemode 3,gap 0 0" } ) { name: "panel2" @@ -388,6 +388,16 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 4" } ) + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatTriStateCheckBox" ) { + name: "showIconCheckBox" + "text": "show icon" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showIconChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 5" + } ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 8" } ) diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/screenshots/FlatScreenshotsBackground.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/screenshots/FlatScreenshotsBackground.java new file mode 100644 index 00000000..7ae792a3 --- /dev/null +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/screenshots/FlatScreenshotsBackground.java @@ -0,0 +1,80 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.testing.screenshots; + +import java.awt.Color; +import java.awt.event.KeyEvent; +import javax.swing.JCheckBox; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.KeyStroke; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.FlatDarkLaf; +import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.FlatLightLaf; + +/** + * Fills entire screen with white or black. + * Use as background when tacking screenshots to avoid that light/dark background + * shines through window border. + * + * @author Karl Tauber + */ +public class FlatScreenshotsBackground +{ + public static void main( String[] args ) { + SwingUtilities.invokeLater( () -> { + FlatLightLaf.setup(); + + JFrame frame = new JFrame( "FlatScreenshotsBackground" ); + frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); + + // register ESC key to close frame + ((JComponent)frame.getContentPane()).registerKeyboardAction( + e -> { + System.exit( 0 ); + }, + KeyStroke.getKeyStroke( KeyEvent.VK_ESCAPE, 0, false ), + JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT ); + + JCheckBox black = new JCheckBox( "black" ); + black.setOpaque( false ); + black.setVerticalAlignment( SwingConstants.TOP ); + black.addActionListener( e -> { + if( black.isSelected() ) + FlatDarkLaf.setup(); + else + FlatLightLaf.setup(); + FlatLaf.updateUI(); + + Color color = black.isSelected() ? Color.black : Color.white; + frame.getContentPane().setBackground( color ); + frame.getRootPane().putClientProperty( FlatClientProperties.TITLE_BAR_BACKGROUND, color ); + frame.repaint(); + } ); + frame.getContentPane().add( black ); + + frame.getContentPane().setBackground( Color.white ); + frame.getRootPane().putClientProperty( FlatClientProperties.TITLE_BAR_BACKGROUND, Color.white ); + + frame.setExtendedState( JFrame.MAXIMIZED_BOTH ); + frame.setVisible( true ); + } ); + } +} diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/swingx/FlatSwingXTest.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/swingx/FlatSwingXTest.java index 7b982cc5..cf7b3cbd 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/swingx/FlatSwingXTest.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/swingx/FlatSwingXTest.java @@ -62,6 +62,13 @@ public class FlatSwingXTest monthView1.setUnselectableDates( calendar.getTime() ); table.setDefaultEditor( Date.class, new DatePickerCellEditor() ); + + // status bar + statusBar1.add( new JLabel( "Ready" ), new JXStatusBar.Constraint( 100 ) ); + statusBar1.add( new JLabel( "0 files loaded" ), new JXStatusBar.Constraint( 100 ) ); + JProgressBar statusProgressBar = new JProgressBar(); + statusProgressBar.setValue( 50 ); + statusBar1.add( statusProgressBar, new JXStatusBar.Constraint( JXStatusBar.Constraint.ResizeBehavior.FILL ) ); } private void busyChanged() { @@ -124,6 +131,13 @@ public class FlatSwingXTest JTextField textField3 = new JTextField(); JLabel label10 = new JLabel(); JTextField textField4 = new JTextField(); + JLabel label11 = new JLabel(); + JXSearchField xSearchField1 = new JXSearchField(); + JXSearchField xSearchField2 = new JXSearchField(); + JXSearchField xSearchField3 = new JXSearchField(); + JXSearchField xSearchField4 = new JXSearchField(); + JLabel label12 = new JLabel(); + statusBar1 = new JXStatusBar(); JButton button1 = new JButton(); JButton button2 = new JButton(); @@ -146,6 +160,9 @@ public class FlatSwingXTest "[]" + "[]" + "[]" + + "[]" + + "[]" + + "[]" + "[37]")); //---- label1 ---- @@ -425,6 +442,35 @@ public class FlatSwingXTest } add(xTitledPanel2, "cell 3 8,grow"); + //---- label11 ---- + label11.setText("JXSearchField:"); + add(label11, "cell 0 9"); + + //---- xSearchField1 ---- + xSearchField1.setText("abc"); + add(xSearchField1, "cell 1 9,growx"); + + //---- xSearchField2 ---- + xSearchField2.setEnabled(false); + xSearchField2.setText("abc"); + add(xSearchField2, "cell 2 9,growx"); + + //---- xSearchField3 ---- + xSearchField3.setRecentSearchesSaveKey("flatlaf.swingx.search.recent"); + xSearchField3.setText("abc"); + add(xSearchField3, "cell 1 10,growx"); + + //---- xSearchField4 ---- + xSearchField4.setRecentSearchesSaveKey("flatlaf.swingx.search.recent"); + xSearchField4.setEnabled(false); + xSearchField4.setText("abc"); + add(xSearchField4, "cell 2 10,growx"); + + //---- label12 ---- + label12.setText("JXStatusBar:"); + add(label12, "cell 0 11"); + add(statusBar1, "cell 1 11 3 1,grow"); + //---- button1 ---- button1.setText("<"); @@ -445,5 +491,6 @@ public class FlatSwingXTest private JXBusyLabel xBusyLabel2; private JCheckBox busyCheckBox; private JTable table; + private JXStatusBar statusBar1; // JFormDesigner - End of variables declaration //GEN-END:variables } diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/swingx/FlatSwingXTest.jfd b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/swingx/FlatSwingXTest.jfd index 567d0e87..aacfbab7 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/swingx/FlatSwingXTest.jfd +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/swingx/FlatSwingXTest.jfd @@ -1,4 +1,4 @@ -JFDML JFormDesigner: "7.0.0.0.194" Java: "11.0.2" encoding: "UTF-8" +JFDML JFormDesigner: "7.0.5.0.404" Java: "17" encoding: "UTF-8" new FormModel { contentType: "form/swing" @@ -9,7 +9,7 @@ new FormModel { add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { "$layoutConstraints": "ltr,insets dialog,hidemode 3" "$columnConstraints": "[left][][][][fill]" - "$rowConstraints": "[]0[][]0[top][][][][][][37]" + "$rowConstraints": "[]0[][]0[top][][][][][][][][][37]" } ) { name: "this" add( new FormComponent( "javax.swing.JLabel" ) { @@ -354,9 +354,57 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 3 8,grow" } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label11" + "text": "JXSearchField:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 9" + } ) + add( new FormComponent( "org.jdesktop.swingx.JXSearchField" ) { + name: "xSearchField1" + "text": "abc" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 9,growx" + } ) + add( new FormComponent( "org.jdesktop.swingx.JXSearchField" ) { + name: "xSearchField2" + "enabled": false + "text": "abc" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 9,growx" + } ) + add( new FormComponent( "org.jdesktop.swingx.JXSearchField" ) { + name: "xSearchField3" + "recentSearchesSaveKey": "flatlaf.swingx.search.recent" + "text": "abc" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 10,growx" + } ) + add( new FormComponent( "org.jdesktop.swingx.JXSearchField" ) { + name: "xSearchField4" + "recentSearchesSaveKey": "flatlaf.swingx.search.recent" + "enabled": false + "text": "abc" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 10,growx" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label12" + "text": "JXStatusBar:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 11" + } ) + add( new FormComponent( "org.jdesktop.swingx.JXStatusBar" ) { + name: "statusBar1" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 11 3 1,grow" + } ) }, new FormLayoutConstraints( null ) { "location": new java.awt.Point( 0, 0 ) - "size": new java.awt.Dimension( 700, 600 ) + "size": new java.awt.Dimension( 795, 600 ) } ) add( new FormComponent( "javax.swing.JButton" ) { name: "button1" diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/uidefaults/UIDefaultsDump.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/uidefaults/UIDefaultsDump.java index 0042a763..12a0ea2c 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/uidefaults/UIDefaultsDump.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/uidefaults/UIDefaultsDump.java @@ -70,6 +70,7 @@ import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.util.ColorFunctions.ColorFunction; import com.jidesoft.plaf.LookAndFeelFactory; import com.formdev.flatlaf.util.DerivedColor; +import com.formdev.flatlaf.util.HSLColor; import com.formdev.flatlaf.util.StringUtils; import com.formdev.flatlaf.util.SystemInfo; @@ -84,6 +85,7 @@ public class UIDefaultsDump private final UIDefaults defaults; private final Properties derivedColorKeys; private final boolean isIntelliJTheme; + private final boolean dumpHSL; private String lastPrefix; private JComponent dummyComponent; @@ -197,6 +199,8 @@ public class UIDefaultsDump ? "-linux" : ""); String javaVersion = System.getProperty( "java.version" ); + if( javaVersion.startsWith( "1.8.0_" ) && lookAndFeel instanceof FlatLaf ) + javaVersion = "1.8.0"; File file = new File( dir, name + nameSuffix + "_" + javaVersion + osSuffix + ".txt" ); @@ -349,6 +353,7 @@ public class UIDefaultsDump derivedColorKeys = loadDerivedColorKeys(); isIntelliJTheme = (lookAndFeel instanceof IntelliJTheme.ThemeLaf); + dumpHSL = lookAndFeel instanceof FlatLaf; } private void dump( PrintWriter out, Predicate keyFilter ) { @@ -370,7 +375,7 @@ public class UIDefaultsDump Object value = entry.getValue(); String strKey = String.valueOf( key ); - if( !keyFilter.test( strKey ) ) + if( !keyFilter.test( strKey ) || strKey.startsWith( "FlatLaf.internal." ) ) return; String prefix = keyPrefix( strKey ); @@ -453,20 +458,22 @@ public class UIDefaultsDump } private void dumpColor( PrintWriter out, String key, Color color ) { - Color resolvedColor = resolveDerivedColor( key, color ); + Color[] retBaseColor = new Color[1]; + Color resolvedColor = resolveDerivedColor( key, color, retBaseColor ); if( resolvedColor != color && resolvedColor.getRGB() != color.getRGB() ) { if( !isIntelliJTheme ) { System.err.println( "Key '" + key + "': derived colors not equal" ); - System.err.println( " Default color: " + dumpColorHex( color ) ); - System.err.println( " Resolved color: " + dumpColorHex( resolvedColor ) ); + System.err.println( " Default color: " + dumpColorHexAndHSL( color ) ); + System.err.println( " Resolved color: " + dumpColorHexAndHSL( resolvedColor ) ); + System.err.println( " Base of resolved color: " + dumpColorHexAndHSL( retBaseColor[0] ) ); } out.printf( "%s / ", - dumpColorHex( resolvedColor ) ); + dumpColorHexAndHSL( resolvedColor ) ); } out.printf( "%s %s", - dumpColorHex( color ), + dumpColorHexAndHSL( color ), dumpClass( color ) ); if( color instanceof DerivedColor ) { @@ -479,6 +486,13 @@ public class UIDefaultsDump } } + private String dumpColorHexAndHSL( Color color ) { + String hex = dumpColorHex( color ); + return dumpHSL + ? hex + " " + dumpColorHSL( color ) + : hex; + } + private String dumpColorHex( Color color ) { boolean hasAlpha = (color.getAlpha() != 255); return hasAlpha @@ -486,6 +500,21 @@ public class UIDefaultsDump : String.format( "#%06x", color.getRGB() & 0xffffff ); } + private String dumpColorHSL( Color color ) { + HSLColor hslColor = new HSLColor( color ); + int hue = Math.round( hslColor.getHue() ); + int saturation = Math.round( hslColor.getSaturation() ); + int luminance = Math.round( hslColor.getLuminance() ); + if( color.getAlpha() == 255 ) { + return String.format( "HSL %3d %3d %3d", + hue, saturation, luminance ); + } else { + int alpha = Math.round( hslColor.getAlpha() * 100 ); + return String.format( "HSLA %3d %3d %3d %2d", + hue, saturation, luminance, alpha ); + } + } + private void dumpFont( PrintWriter out, Font font ) { String strStyle = font.isBold() ? font.isItalic() ? "bolditalic" : "bold" @@ -645,7 +674,7 @@ public class UIDefaultsDump return properties; } - private Color resolveDerivedColor( String key, Color color ) { + private Color resolveDerivedColor( String key, Color color, Color[] retBaseColor ) { if( !(color instanceof DerivedColor) ) return color; @@ -666,7 +695,9 @@ public class UIDefaultsDump throw new IllegalStateException( "Missing base color '" + baseKey + "' for key '" + key + "'." ); if( baseColor instanceof DerivedColor ) - baseColor = resolveDerivedColor( (String) baseKey, baseColor ); + baseColor = resolveDerivedColor( (String) baseKey, baseColor, retBaseColor ); + + retBaseColor[0] = baseColor; Color newColor = FlatUIUtils.deriveColor( color, baseColor ); diff --git a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/uidefaults/UIDefaultsKeysDump.java b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/uidefaults/UIDefaultsKeysDump.java index 93cc7147..335a90c9 100644 --- a/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/uidefaults/UIDefaultsKeysDump.java +++ b/flatlaf-testing/src/main/java/com/formdev/flatlaf/testing/uidefaults/UIDefaultsKeysDump.java @@ -29,6 +29,7 @@ import java.util.Locale; import javax.swing.UIDefaults; import javax.swing.UIManager; import com.formdev.flatlaf.*; +import com.formdev.flatlaf.testing.FlatTestLaf; /** * Collects all FlatLaf UI defaults keys and dumps them to a file. @@ -60,6 +61,7 @@ public class UIDefaultsKeysDump collectKeys( FlatDarkLaf.class.getName(), keys ); collectKeys( FlatIntelliJLaf.class.getName(), keys ); collectKeys( FlatDarculaLaf.class.getName(), keys ); + collectKeys( FlatTestLaf.class.getName(), keys ); // write key file try( Writer fileWriter = new BufferedWriter( new FileWriter( keysFile ) ) ) { @@ -85,8 +87,15 @@ public class UIDefaultsKeysDump UIDefaults defaults = UIManager.getLookAndFeel().getDefaults(); for( Object key : defaults.keySet() ) { - if( key instanceof String ) + if( key instanceof String && !ignoreKey( (String) key ) ) keys.add( (String) key ); } } + + private static boolean ignoreKey( String key ) { + return key.startsWith( "FlatLaf.internal." ) || + key.equals( "Menu.acceleratorFont" ) || + key.equals( "CheckBoxMenuItem.acceleratorFont" ) || + key.equals( "RadioButtonMenuItem.acceleratorFont" ); + } } diff --git a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/FlatTestLaf.properties b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/FlatTestLaf.properties index cc4d76a7..820d5436 100644 --- a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/FlatTestLaf.properties +++ b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/FlatTestLaf.properties @@ -16,22 +16,34 @@ #---- variables ---- +# general background and foreground (text color) @background = #cfc @foreground = #f00 +@disabledBackground = #e0e0e0 +@disabledForeground = #008 + +# component background +@componentBackground = #fff +@menuBackground = #fff + +# selection @selectionBackground = #0a0 @selectionForeground = #ff0 @selectionInactiveBackground = #888 @selectionInactiveForeground = #fff -@disabledText = #008 -@textComponentBackground = #fff -@menuBackground = #fff + +# menu @menuHoverBackground = darken(@menuBackground,10%) @menuCheckBackground = #ccf @menuAcceleratorForeground = #f88 @menuAcceleratorSelectionForeground = #fff + +# misc @cellFocusColor = #f00 @icon = #afafaf +@accentUnderlineColor = #f00 + # for buttons within components (e.g. combobox or spinner) @buttonArrowColor = #666 @buttonDisabledArrowColor = #ABABAB @@ -49,7 +61,6 @@ *.caretForeground = #00f *.inactiveBackground = #f0f0f0 *.inactiveForeground = #008 -*.disabledBackground = #e0e0e0 #---- system colors ---- @@ -99,6 +110,8 @@ Button.toolbar.selectedBackground = #ddd #---- CheckBox ---- +CheckBox.icon.disabledSelectedBorderWidth = 2 + # enabled CheckBox.icon.borderColor = #878787 CheckBox.icon.background = #fff @@ -109,19 +122,34 @@ CheckBox.icon.checkmarkColor = #fff # disabled CheckBox.icon.disabledBorderColor = #BDBDBD CheckBox.icon.disabledBackground = #F2F2F2 +CheckBox.icon.disabledSelectedBorderColor = #dbdbdb +CheckBox.icon.disabledSelectedBackground = #F2F2F2 CheckBox.icon.disabledCheckmarkColor = #ABABAB # focused CheckBox.icon.focusedBorderColor = #7B9FC7 CheckBox.icon.focusedBackground = #0ff -CheckBox.icon.selectedFocusedBorderColor = #ACCFF7 +CheckBox.icon.focusedSelectedBorderColor = #ACCFF7 # hover CheckBox.icon.hoverBorderColor = #f00 CheckBox.icon.hoverBackground = #ff0 +CheckBox.icon.hoverSelectedBorderColor = #00f +CheckBox.icon.hoverSelectedBackground = #f8f +CheckBox.icon.hoverCheckmarkColor = #0f0 # pressed -CheckBox.icon.pressedBackground = #FFC800 +CheckBox.icon.pressedBorderColor = #FFC800 +CheckBox.icon.pressedBackground = #ffe99e +CheckBox.icon.pressedSelectedBorderColor = #f00 +CheckBox.icon.pressedSelectedBackground = #8ff +CheckBox.icon.pressedCheckmarkColor = #00f + + +#---- CheckBoxMenuItem ---- + +CheckBoxMenuItem.icon.checkmarkColor = #4D89C9 +CheckBoxMenuItem.icon.disabledCheckmarkColor = #ABABAB #---- ComboBox ---- @@ -132,7 +160,7 @@ ComboBox.buttonEditableBackground = #ccc ComboBox.focusedBackground = #ff8 ComboBox.buttonFocusedBackground = #ff0 -ComboBox.popupFocusedBackground = #ffc +ComboBox.popupBackground = #ffc #---- Component ---- @@ -170,6 +198,7 @@ FormattedTextField.focusedBackground = #ff8 HelpButton.focusedBackground = #0ff HelpButton.questionMarkColor = #00f +HelpButton.disabledQuestionMarkColor = #88f #---- InternalFrame ---- @@ -216,15 +245,9 @@ MenuBar.borderColor = #44f MenuBar.hoverBackground = #fdd MenuBar.underlineSelectionBackground = #0f0 -MenuBar.underlineSelectionColor = #f00 +MenuBar.underlineSelectionColor = #ff0 MenuBar.underlineSelectionHeight = 5 -#---- MenuItemCheckBox ---- - -MenuItemCheckBox.icon.checkmarkColor = #4D89C9 -MenuItemCheckBox.icon.disabledCheckmarkColor = #ABABAB - - #---- OptionPane ---- OptionPane.background = #fdd @@ -240,6 +263,7 @@ OptionPane.icon.foreground = #fff #---- PasswordField ---- PasswordField.focusedBackground = #ff8 +PasswordField.revealIconColor = #00f #---- Popup ---- @@ -252,6 +276,8 @@ Popup.dropShadowInsets = -6,6,6,6 #---- PopupMenu ---- PopupMenu.borderColor = #00f +PopupMenu.scrollArrowColor = #00f +PopupMenu.hoverScrollArrowBackground = #0f0 #---- PopupMenuSeparator ---- @@ -291,8 +317,10 @@ Separator.stripeIndent = 5 Slider.trackColor = #8f8 Slider.thumbColor = #faa Slider.thumbBorderColor = #f00 +Slider.thumbBorderWidth = 1.5 Slider.tickColor = #f00 Slider.focusedColor = $Component.focusColor +Slider.focusedThumbBorderColor = #0f0 Slider.hoverThumbColor = #00f Slider.pressedThumbColor = #0f0 Slider.disabledTrackColor = #ff8 @@ -301,6 +329,7 @@ Slider.disabledThumbColor = #880 #---- Spinner ---- +Spinner.buttonBackground = #cccccc Spinner.focusedBackground = #ff8 @@ -329,9 +358,9 @@ TabbedPane.buttonPressedBackground = #FFC800 TabbedPane.closeSize = 16,16 TabbedPane.closeArc = 999 -TabbedPane.closeCrossPlainSize = {float}12 -TabbedPane.closeCrossFilledSize = {float}6.5 -TabbedPane.closeCrossLineWidth = {float}2 +TabbedPane.closeCrossPlainSize = 12 +TabbedPane.closeCrossFilledSize = 6.5 +TabbedPane.closeCrossLineWidth = 2 #TabbedPane.closeBackground = #faa TabbedPane.closeForeground = #f00 TabbedPane.closeHoverBackground = #a00 @@ -400,6 +429,11 @@ ToggleButton.pressedBackground = #FFC800 ToggleButton.toolbar.selectedBackground = #ddd +#---- ToolBar ---- + +ToolBar.focusableButtons = true + + #---- ToolTip ---- ToolTip.background = #eef @@ -412,3 +446,15 @@ Tree.paintLines = true Tree.hash = #f00 Tree.editorBorder = 1,1,1,1,#f00 Tree.editorBorderSelectionColor = #00f + + + +#---- Styles ------------------------------------------------------------------ + +#---- inTextField ---- +# for leading/trailing components in text fields + +[style]Button.inTextField = \ + focusable: false; \ + toolbar.margin: 1,1,1,1; \ + toolbar.spacingInsets: 1,1,1,1 diff --git a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/swingx/FlatTestLaf.properties b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/swingx/FlatTestLaf.properties index 60161ae4..e670e7f2 100644 --- a/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/swingx/FlatTestLaf.properties +++ b/flatlaf-testing/src/main/resources/com/formdev/flatlaf/testing/swingx/FlatTestLaf.properties @@ -37,7 +37,7 @@ Hyperlink.disabledText = #008 #---- MonthView ---- -JXMonthView.background = @textComponentBackground +JXMonthView.background = @componentBackground JXMonthView.monthStringBackground = #0f0 JXMonthView.monthStringForeground = #00f JXMonthView.daysOfTheWeekForeground = #0f0 diff --git a/flatlaf-theme-editor/README.md b/flatlaf-theme-editor/README.md index 049861c7..208d707d 100644 --- a/flatlaf-theme-editor/README.md +++ b/flatlaf-theme-editor/README.md @@ -1,4 +1,24 @@ FlatLaf Theme Editor ==================== -under development \ No newline at end of file +This sub-project contains the FlatLaf Theme Editor that supports editing FlatLaf +theme properties files. See +[Theme Editor documentation](https://www.formdev.com/flatlaf/theme-editor/) for +details and downloads. + +![Theme Editor](../images/theme-editor@1.5x.png) + + +Download +-------- + +[![Download Demo](https://download.formdev.com/flatlaf/images/download-theme-editor.svg)](https://download.formdev.com/flatlaf/flatlaf-theme-editor-latest.jar) + +Run with `java -jar flatlaf-theme-editor-.jar` (or double-click it). +Requires Java 8 or newer. + + +### Snapshot + +[![Download Demo](https://download.formdev.com/flatlaf/images/download-theme-editor-snapshot.svg)](https://download.formdev.com/flatlaf/snapshots/flatlaf-theme-editor-latest.jar) + diff --git a/flatlaf-theme-editor/build.gradle.kts b/flatlaf-theme-editor/build.gradle.kts index 8841a49f..129a7b64 100644 --- a/flatlaf-theme-editor/build.gradle.kts +++ b/flatlaf-theme-editor/build.gradle.kts @@ -23,9 +23,9 @@ dependencies { implementation( project( ":flatlaf-extras" ) ) implementation( "com.miglayout:miglayout-swing:5.3" ) - implementation( "com.fifesoft:rsyntaxtextarea:3.1.2" ) - implementation( "com.fifesoft:autocomplete:3.1.1" ) - implementation( "com.fifesoft:rstaui:3.1.1" ) + implementation( "com.fifesoft:rsyntaxtextarea:3.1.4" ) + implementation( "com.fifesoft:autocomplete:3.1.3" ) + implementation( "com.fifesoft:rstaui:3.1.3" ) } tasks { @@ -34,7 +34,7 @@ tasks { dependsOn( ":flatlaf-extras:jar" ) manifest { - attributes( "Main-Class" to "com.formdev.flatlaf.themeeditor.FlatThemeFileEditor" ) + attributes( "Main-Class" to "com.formdev.flatlaf.themeeditor.FlatLafThemeEditor" ) if( JavaVersion.current() >= JavaVersion.VERSION_1_9 ) attributes( "Multi-Release" to "true" ) diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/UIDefaultsLoaderAccessor.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/UIDefaultsLoaderAccessor.java index fb4698d1..af0ce531 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/UIDefaultsLoaderAccessor.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/UIDefaultsLoaderAccessor.java @@ -27,6 +27,8 @@ import com.formdev.flatlaf.UIDefaultsLoader.ValueType; */ public class UIDefaultsLoaderAccessor { + public static final String KEY_VARIABLES = UIDefaultsLoader.KEY_VARIABLES; + public static Object UNKNOWN = ValueType.UNKNOWN; public static Object STRING = ValueType.STRING; public static Object BOOLEAN = ValueType.BOOLEAN; @@ -56,7 +58,8 @@ public class UIDefaultsLoaderAccessor Function resolver ) { ValueType[] resultValueType2 = new ValueType[1]; - Object result = UIDefaultsLoader.parseValue( key, value, resultValueType2, resolver, Collections.emptyList() ); + Object result = UIDefaultsLoader.parseValue( key, value, null, + resultValueType2, resolver, Collections.emptyList() ); resultValueType[0] = resultValueType2[0]; return result; } diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatColorPipette.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatColorPipette.java new file mode 100644 index 00000000..25d8dd1a --- /dev/null +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatColorPipette.java @@ -0,0 +1,290 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.themeeditor; + +import java.awt.AWTException; +import java.awt.BasicStroke; +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Insets; +import java.awt.Rectangle; +import java.awt.Robot; +import java.awt.Window; +import java.awt.Dimension; +import java.awt.EventQueue; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; +import java.util.function.Consumer; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JWindow; +import javax.swing.SwingUtilities; +import com.formdev.flatlaf.icons.FlatAbstractIcon; +import com.formdev.flatlaf.ui.FlatEmptyBorder; +import com.formdev.flatlaf.ui.FlatLineBorder; +import com.formdev.flatlaf.util.HSLColor; +import com.formdev.flatlaf.util.SystemInfo; +import com.formdev.flatlaf.util.UIScale; + +/** + * @author Karl Tauber + */ +class FlatColorPipette +{ + /** + * + * + * @throws AWTException if platform does not allow using robot (e.g. if headless) + * @throws UnsupportedOperationException if platform does not support translucent window + */ + static void pick( Window owner, boolean modal, + Consumer hoverCallback, Consumer pickCallback ) + throws AWTException, UnsupportedOperationException + { + InvisiblePickWindow pickWindow = new InvisiblePickWindow( owner, modal, hoverCallback, pickCallback ); + pickWindow.setVisible( true ); + } + + //---- class InvisiblePickWindow ------------------------------------------ + + /** + * An invisible window used to receive mouse and keyboard events for the whole screen. + */ + private static class InvisiblePickWindow + extends JDialog + { + private final Consumer hoverCallback; + private final Consumer pickCallback; + + private final Robot robot; + private final Magnifier magnifier; + + private int lastX; + private int lastY; + private Color lastHoverColor; + + InvisiblePickWindow( Window owner, boolean modal, + Consumer hoverCallback, Consumer pickCallback ) + throws AWTException, UnsupportedOperationException + { + super( owner, modal ? ModalityType.APPLICATION_MODAL : ModalityType.MODELESS ); + this.hoverCallback = hoverCallback; + this.pickCallback = pickCallback; + + setAlwaysOnTop( true ); + setUndecorated( true ); + // macOS: windows with opacity smaller than 0.05 does not receive + // mouse clicked/pressed/released events (but mouse moved events) + setOpacity( SystemInfo.isMacOS ? 0.05f : 0.005f ); + setBounds( owner.getGraphicsConfiguration().getBounds() ); + + robot = new Robot( owner.getGraphicsConfiguration().getDevice() ); + magnifier = new Magnifier( this, robot ); + + MouseAdapter mouseListener = new MouseAdapter() { + @Override + public void mouseMoved( MouseEvent e ) { + lastX = e.getX(); + lastY = e.getY(); + + // get color at mouse location + // (temporary change opacity to zero to get correct color from robot) + float oldOpacity = getOpacity(); + setOpacity( 0 ); + if( SystemInfo.isMacOS ) + robot.delay( 20 ); // give macOS some time to update the opacity + Color color = robot.getPixelColor( lastX, lastY ); + setOpacity( oldOpacity ); + + hover( color ); + magnifier.update( lastX, lastY, color ); + } + + @Override + public void mouseClicked( MouseEvent e ) { + dispose(); + + Color color = null; + if( SwingUtilities.isLeftMouseButton( e ) ) { + // on macOS, robot not always returns correct color + // in mouse clicked event (sometimes black; sometimes + // includes opacity of disposed window) + // --> use last hover color on macOS + color = SystemInfo.isMacOS + ? lastHoverColor + : robot.getPixelColor( e.getX(), e.getY() ); + } + pick( color ); + } + }; + + KeyAdapter keyListener = new KeyAdapter() { + @Override + public void keyPressed( KeyEvent e ) { + switch( e.getKeyCode() ) { + case KeyEvent.VK_ESCAPE: dispose(); pick( null ); break; + + // move mouse one pixel using arrow keys + case KeyEvent.VK_LEFT: robot.mouseMove( lastX - 1, lastY ); break; + case KeyEvent.VK_RIGHT: robot.mouseMove( lastX + 1, lastY ); break; + case KeyEvent.VK_UP: robot.mouseMove( lastX, lastY - 1 ); break; + case KeyEvent.VK_DOWN: robot.mouseMove( lastX, lastY + 1 ); break; + } + } + }; + + addMouseListener( mouseListener ); + addMouseMotionListener( mouseListener ); + addKeyListener( keyListener ); + + magnifier.addMouseListener( mouseListener ); + magnifier.addMouseMotionListener( mouseListener ); + magnifier.addKeyListener( keyListener ); + + magnifier.pack(); + } + + private void hover( Color color ) { + if( hoverCallback == null || color == null || color.equals( lastHoverColor ) ) + return; + + lastHoverColor = color; + + EventQueue.invokeLater( () -> { + hoverCallback.accept( color ); + } ); + } + + private void pick( Color color ) { + EventQueue.invokeLater( () -> { + pickCallback.accept( color ); + } ); + } + } + + //---- class Magnifier ---------------------------------------------------- + + private static class Magnifier + extends JWindow + { + private final Window owner; + private final Robot robot; + + private final MagnifierView view; + private final JLabel infoLabel; + + private final int zoom; + private final int pixels = 16; + private Color colorAtMouse; + private BufferedImage image; + + public Magnifier( Window owner, Robot robot ) { + super( owner ); + this.owner = owner; + this.robot = robot; + + zoom = UIScale.scale( 16 ); + + getRootPane().setBorder( new FlatLineBorder( new Insets( 2, 2, 2, 2 ), Color.red, 2, 0 ) ); + + view = new MagnifierView(); + view.setPreferredSize( new Dimension( pixels * zoom, pixels * zoom ) ); + + infoLabel = new JLabel( "#" ); + infoLabel.setIcon( new ColorIcon() ); + infoLabel.setBorder( new FlatEmptyBorder( 4, 4, 4, 4 ) ); + + add( view, BorderLayout.CENTER ); + add( infoLabel, BorderLayout.SOUTH ); + } + + void update( int x, int y, Color colorAtXY ) { + colorAtMouse = colorAtXY; + + // capture screen at mouse location + image = robot.createScreenCapture( new Rectangle( x - (pixels / 2), y - (pixels / 2), pixels, pixels ) ); + + // update color in info label + HSLColor hslColor = new HSLColor( colorAtMouse ); + int hue = Math.round( hslColor.getHue() ); + int saturation = Math.round( hslColor.getSaturation() ); + int luminance = Math.round( hslColor.getLuminance() ); + infoLabel.setText( String.format( "#%06x HSL %d %d %d", + colorAtMouse.getRGB() & 0xffffff, hue, saturation, luminance ) ); + + // place bottom-right to mouse location + int mx = x + UIScale.scale( 32 ); + int my = y + UIScale.scale( 32 ); + + // make sure that it is within screen + if( mx + getWidth() > owner.getX() + owner.getWidth() ) + mx = x - getWidth() - UIScale.scale( 32 ); + if( my + getHeight() > owner.getY() + owner.getHeight() ) + my = y - getHeight() - UIScale.scale( 32 ); + + setLocation( mx, my ); + setVisible( true ); + repaint(); + } + + //---- class MagnifierView ---- + + private class MagnifierView + extends JComponent + { + @Override + public void paint( Graphics g ) { + int width = getWidth(); + int height = getHeight(); + + if( image != null ) + g.drawImage( image, 0, 0, width, height, null ); + + int xy = (pixels / 2) * zoom; + g.setColor( Color.red ); + ((Graphics2D)g).setStroke( new BasicStroke( 2 ) ); + g.drawRect( xy - 1, xy - 1, zoom + 2, zoom + 2 ); + } + } + + //---- class ColorIcon ---- + + private class ColorIcon + extends FlatAbstractIcon + { + private static final int WIDTH = 64; + private static final int HEIGHT = 16; + + public ColorIcon() { + super( WIDTH, HEIGHT, null ); + } + + @Override + protected void paintIcon( Component c, Graphics2D g ) { + g.setColor( colorAtMouse ); + g.fillRect( 0, 0, WIDTH, HEIGHT ); + } + } + } +} diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatCompletionProvider.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatCompletionProvider.java index c26f9bde..8d2f1b06 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatCompletionProvider.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatCompletionProvider.java @@ -21,10 +21,13 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.io.StringReader; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Objects; +import java.util.Properties; import java.util.Set; import javax.swing.text.BadLocationException; import javax.swing.text.JTextComponent; @@ -110,14 +113,13 @@ class FlatCompletionProvider switch( lineBeforeCaret.charAt( i ) ) { case '=': case '(': + case ',': return getValueProvider(); case '$': case '@': return getReferenceProvider(); - case ' ': - case '\t': case '#': // colors return null; } @@ -158,6 +160,9 @@ class FlatCompletionProvider { private static KeyCompletionProvider instance; + private final Set knownKeys; + private Set lastKeys; + static KeyCompletionProvider getInstance() { if( instance == null ) instance = new KeyCompletionProvider(); @@ -165,17 +170,17 @@ class FlatCompletionProvider } KeyCompletionProvider() { - setAutoActivationRules( true, "." ); + setAutoActivationRules( true, "@." ); - // load all keys - HashSet keys = new HashSet<>(); + knownKeys = new HashSet<>(); try { try( InputStream in = getClass().getResourceAsStream( "/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt" ) ) { if( in != null ) { try( BufferedReader reader = new BufferedReader( new InputStreamReader( in, "UTF-8" ) ) ) { String key; while( (key = reader.readLine()) != null ) { - keys.add( key ); + if( !isIgnored( key ) ) + knownKeys.add( key ); } } } @@ -184,27 +189,94 @@ class FlatCompletionProvider ex.printStackTrace(); // TODO } - // collect key parts + setCompletions( knownKeys ); + } + + private boolean isIgnored( String key ) { + return key.endsWith( "InputMap" ); + } + + private void setCompletions( Set keys ) { HashSet keyParts = new HashSet<>(); for( String key : keys ) { int delimIndex = key.length() + 1; - while( (delimIndex = key.lastIndexOf( '.', delimIndex - 1 )) >= 0 ) { - String part = key.substring( 0, delimIndex ); - if( !keys.contains( part ) ) - keyParts.add( part ); - } + while( (delimIndex = key.lastIndexOf( '.', delimIndex - 1 )) >= 0 ) + keyParts.add( key.substring( 0, delimIndex ) ); } + completions.clear(); + // add key parts - addWordCompletions( keyParts.toArray( new String[keyParts.size()] ) ); + for( String key : keyParts ) + completions.add( new BasicCompletion( this, key ) ); // add all keys - addWordCompletions( keys.toArray( new String[keys.size()] ) ); + for( String key : keys ) { + if( !keyParts.contains( key ) ) + completions.add( new BasicCompletion( this, key.concat( " = " ) ) ); + } + + Collections.sort( completions ); } @Override protected boolean isValidChar( char ch ) { - return super.isValidChar( ch ) || ch == '.'; + return super.isValidChar( ch ) || ch == '.' || ch == '@'; + } + + @Override + protected List getCompletionsImpl( JTextComponent comp ) { + updateCompletions( comp ); + return super.getCompletionsImpl( comp ); + } + + @Override + public List getCompletionsAt( JTextComponent comp, Point pt ) { + updateCompletions( comp ); + return super.getCompletionsAt( comp, pt ); + } + + @Override + public List getParameterizedCompletions( JTextComponent comp ) { + updateCompletions( comp ); + return super.getParameterizedCompletions( comp ); + } + + private void updateCompletions( JTextComponent comp ) { + FlatSyntaxTextArea fsta = (FlatSyntaxTextArea) comp; + Set keys = fsta.propertiesSupport.getAllKeys(); + if( Objects.equals( keys, lastKeys ) ) + return; + lastKeys = keys; + + // get key at current line + String keyAtCurrentLine = null; + try { + int caretPosition = fsta.getCaretPosition(); + int currentLine = fsta.getLineOfOffset( caretPosition ); + int lineStart = fsta.getLineStartOffset( currentLine ); + int lineEnd = fsta.getLineEndOffset( currentLine ); + String line = fsta.getText( lineStart, lineEnd - lineStart ); + Properties properties = new Properties(); + properties.load( new StringReader( line ) ); + if( !properties.isEmpty() ) + keyAtCurrentLine = (String) properties.keys().nextElement(); + } catch( BadLocationException | IOException ex ) { + ex.printStackTrace(); + } + + Set completionKeys = new HashSet<>( knownKeys ); + for( String key : keys ) { + if( key.startsWith( "*." ) || key.startsWith( "[" ) ) + continue; + + // ignore key at current line + if( key.equals( keyAtCurrentLine ) ) + continue; + + completionKeys.add( key ); + } + setCompletions( completionKeys ); } } @@ -281,13 +353,28 @@ class FlatCompletionProvider private void updateCompletions( JTextComponent comp ) { FlatSyntaxTextArea fsta = (FlatSyntaxTextArea) comp; Set keys = fsta.propertiesSupport.getAllKeys(); - if( keys == lastKeys ) + if( Objects.equals( keys, lastKeys ) ) return; + lastKeys = keys; completions.clear(); for( String key : keys ) { - if( key.startsWith( "*." ) || key.startsWith( "[" ) ) + if( key.startsWith( "[" ) ) { + // remove prefix + int closeIndex = key.indexOf( ']' ); + if( closeIndex < 0 ) + continue; + key = key.substring( closeIndex + 1 ); + } + + if( key.startsWith( "*." ) ) { + // resolve wildcard + for( String k : FlatThemePropertiesSupport.getKeysForWildcard( key ) ) { + if( !keys.contains( k ) ) + completions.add( new BasicCompletion( this, "$".concat( k ) ) ); + } continue; + } if( !key.startsWith( "@" ) ) key = "$".concat( key ); @@ -297,7 +384,7 @@ class FlatCompletionProvider completion.setRelevance( 1 ); completions.add( completion ); } - Collections.sort(completions); + Collections.sort( completions ); } } @@ -316,6 +403,13 @@ class FlatCompletionProvider setParameterizedCompletionParams( '(', ",", ')' ); setParameterChoicesProvider( this ); + addFunction( "if", + "condition", "evaluates to true if: is not \"null\" and is not \"false\" and is not an integer with zero value", + "trueValue", "used if condition is true", + "falseValue", "used if condition is false" ); + addFunction( "lazy", + "uiKey", "UI key (without leading '$')" ); + addFunction( "rgb", "red", "0-255 or 0-100%", "green", "0-255 or 0-100%", @@ -355,8 +449,39 @@ class FlatCompletionProvider "options", "(optional) [derived]" ); addFunction( "spin", "color", colorParamDesc, - "angle", "number of degrees to rotate", + "angle", "number of degrees to rotate (0-360)", "options", "(optional) [derived]" ); + + addFunction( "changeHue", + "color", colorParamDesc, + "angle", "number of degrees (0-360)", + "options", "(optional) [derived]" ); + String[] hslChangeParams = { + "color", colorParamDesc, + "value", "0-100%", + "options", "(optional) [derived]" + }; + addFunction( "changeSaturation", hslChangeParams ); + addFunction( "changeLightness", hslChangeParams ); + addFunction( "changeAlpha", hslChangeParams ); + + String weightParamDesc = "(optional) 0-100%, default is 50%"; + addFunction( "mix", + "color1", colorParamDesc, + "color2", colorParamDesc, + "weight", weightParamDesc ); + addFunction( "tint", + "color", colorParamDesc, + "weight", weightParamDesc ); + addFunction( "shade", + "color", colorParamDesc, + "weight", weightParamDesc ); + + addFunction( "contrast", + "color", colorParamDesc, + "dark", colorParamDesc, + "light", colorParamDesc, + "threshold", "(optional) 0-100%, default is 43%" ); } private void addFunction( String name, String... paramNamesAndDescs ) { diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatFindReplaceBar.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatFindReplaceBar.java index f906c9fe..820be31e 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatFindReplaceBar.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatFindReplaceBar.java @@ -19,12 +19,18 @@ package com.formdev.flatlaf.themeeditor; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; +import java.util.List; import java.util.function.Consumer; import javax.swing.*; +import javax.swing.border.MatteBorder; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; +import com.formdev.flatlaf.extras.components.*; import org.fife.rsta.ui.CollapsibleSectionPanel; +import org.fife.ui.rsyntaxtextarea.DocumentRange; import org.fife.ui.rsyntaxtextarea.RSyntaxTextArea; +import org.fife.ui.rsyntaxtextarea.RSyntaxUtilities; +import org.fife.ui.rtextarea.RTextAreaHighlighter; import org.fife.ui.rtextarea.SearchContext; import org.fife.ui.rtextarea.SearchEngine; import org.fife.ui.rtextarea.SearchResult; @@ -53,11 +59,13 @@ class FlatFindReplaceBar InputMap inputMap = getInputMap( JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT ); inputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_UP, 0 ), "findPrevious" ); inputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_DOWN, 0 ), "findNext" ); - inputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_F12, 0 ), "focusEditor" ); + inputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_PAGE_UP, 0 ), "editorPageUp" ); + inputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_PAGE_DOWN, 0 ), "editorPageDown" ); ActionMap actionMap = getActionMap(); actionMap.put( "findPrevious", new ConsumerAction( e -> findPrevious() ) ); actionMap.put( "findNext", new ConsumerAction( e -> findNext() ) ); - actionMap.put( "focusEditor", new ConsumerAction( e -> textArea.requestFocusInWindow() ) ); + actionMap.put( "editorPageUp", new ConsumerAction( e -> notifyEditorAction( "page-up" ) ) ); + actionMap.put( "editorPageDown", new ConsumerAction( e -> notifyEditorAction( "page-down" ) ) ); findPreviousButton.setIcon( new FlatSVGIcon( "com/formdev/flatlaf/themeeditor/icons/findAndShowPrevMatches.svg" ) ); findNextButton.setIcon( new FlatSVGIcon( "com/formdev/flatlaf/themeeditor/icons/findAndShowNextMatches.svg" ) ); @@ -71,6 +79,13 @@ class FlatFindReplaceBar setSearchContext( context ); } + @Override + public void updateUI() { + super.updateUI(); + + setBorder( new MatteBorder( 1, 0, 0, 0, UIManager.getColor( "Component.borderColor" ) ) ); + } + SearchContext getSearchContext() { return context; } @@ -126,7 +141,7 @@ class FlatFindReplaceBar findOrMarkAll( true ); } - private void markAll() { + void markAll() { findOrMarkAll( false ); } @@ -140,6 +155,10 @@ class FlatFindReplaceBar ? SearchEngine.find( textArea, context ) : SearchEngine.markAll( textArea, context ); + // select (and scroll to) match near caret + if( !find && result.getMarkedCount() > 0 ) + selectMatchNearCaret(); + // update matches info label updateMatchesLabel( result, false ); @@ -181,16 +200,57 @@ class FlatFindReplaceBar context.setSearchFor( findField.getText() ); context.setReplaceWith( replaceField.getText() ); + // make sure that search wrap is disabled because otherwise it is easy + // to have endeless loop when replacing e.g. "a" with "aa" + boolean oldSearchWrap = context.getSearchWrap(); + context.setSearchWrap( false ); + // replace all SearchResult result = SearchEngine.replaceAll( textArea, context ); + // restore search wrap + context.setSearchWrap( oldSearchWrap ); + // update matches info labels updateMatchesLabel( result, true ); } + private void selectMatchNearCaret() { + RTextAreaHighlighter highlighter = (RTextAreaHighlighter) textArea.getHighlighter(); + if( highlighter == null ) + return; + + List ranges = highlighter.getMarkAllHighlightRanges(); + if( ranges.isEmpty() ) + return; + + DocumentRange selectRange = null; + if( ranges.size() > 1 ) { + int selStart = textArea.getSelectionStart(); + for( DocumentRange range : ranges ) { + if( range.getEndOffset() >= selStart ) { + selectRange = range; + break; + } + } + } + if( selectRange == null ) + selectRange = ranges.get( 0 ); + + RSyntaxUtilities.selectAndPossiblyCenter( textArea, selectRange, true ); + } + private void updateMatchesLabel( SearchResult result, boolean replace ) { matchesLabel.setText( result.getMarkedCount() + " matches" ); replaceMatchesLabel.setText( replace ? result.getCount() + " matches replaced" : null ); + + findField.setOutline( result.getMarkedCount() > 0 ? null : "error" ); + } + + private void notifyEditorAction( String actionKey ) { + Action action = textArea.getActionMap().get( actionKey ); + if( action != null ) + action.actionPerformed( new ActionEvent( textArea, ActionEvent.ACTION_PERFORMED, null ) ); } private void close() { @@ -204,7 +264,7 @@ class FlatFindReplaceBar private void initComponents() { // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents findLabel = new JLabel(); - findField = new JTextField(); + findField = new FlatTextField(); findToolBar = new JToolBar(); findPreviousButton = new JButton(); findNextButton = new JButton(); @@ -215,7 +275,7 @@ class FlatFindReplaceBar closeToolBar = new JToolBar(); closeButton = new JButton(); replaceLabel = new JLabel(); - replaceField = new JTextField(); + replaceField = new FlatTextField(); toolBar1 = new JToolBar(); replaceButton = new JButton(); replaceAllButton = new JButton(); @@ -243,13 +303,15 @@ class FlatFindReplaceBar //---- findField ---- findField.setColumns(16); + findField.setSelectAllOnFocusPolicy(FlatTextField.SelectAllOnFocusPolicy.always); + findField.setShowClearButton(true); findField.addActionListener(e -> find()); add(findField, "cell 1 0"); //======== findToolBar ======== { findToolBar.setFloatable(false); - findToolBar.setBorder(null); + findToolBar.setBorder(BorderFactory.createEmptyBorder()); //---- findPreviousButton ---- findPreviousButton.setToolTipText("Previous Occurrence"); @@ -286,7 +348,7 @@ class FlatFindReplaceBar //======== closeToolBar ======== { closeToolBar.setFloatable(false); - closeToolBar.setBorder(null); + closeToolBar.setBorder(BorderFactory.createEmptyBorder()); //---- closeButton ---- closeButton.setToolTipText("Close"); @@ -303,12 +365,14 @@ class FlatFindReplaceBar //---- replaceField ---- replaceField.setColumns(16); + replaceField.setSelectAllOnFocusPolicy(FlatTextField.SelectAllOnFocusPolicy.always); + replaceField.setShowClearButton(true); add(replaceField, "cell 1 1"); //======== toolBar1 ======== { toolBar1.setFloatable(false); - toolBar1.setBorder(null); + toolBar1.setBorder(BorderFactory.createEmptyBorder()); //---- replaceButton ---- replaceButton.setText("Replace"); @@ -332,7 +396,7 @@ class FlatFindReplaceBar // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables private JLabel findLabel; - private JTextField findField; + private FlatTextField findField; private JToolBar findToolBar; private JButton findPreviousButton; private JButton findNextButton; @@ -343,7 +407,7 @@ class FlatFindReplaceBar private JToolBar closeToolBar; private JButton closeButton; private JLabel replaceLabel; - private JTextField replaceField; + private FlatTextField replaceField; private JToolBar toolBar1; private JButton replaceButton; private JButton replaceAllButton; diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatFindReplaceBar.jfd b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatFindReplaceBar.jfd index a5ed0622..4f1c399b 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatFindReplaceBar.jfd +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatFindReplaceBar.jfd @@ -1,4 +1,4 @@ -JFDML JFormDesigner: "7.0.3.1.342" Java: "15" encoding: "UTF-8" +JFDML JFormDesigner: "7.0.4.0.360" Java: "16" encoding: "UTF-8" new FormModel { contentType: "form/swing" @@ -18,9 +18,11 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 0" } ) - add( new FormComponent( "javax.swing.JTextField" ) { + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatTextField" ) { name: "findField" "columns": 16 + "selectAllOnFocusPolicy": enum com.formdev.flatlaf.extras.components.FlatTextField$SelectAllOnFocusPolicy always + "showClearButton": true addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "find", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 0" @@ -28,7 +30,7 @@ new FormModel { add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { name: "findToolBar" "floatable": false - "border": sfield com.jformdesigner.model.FormObject NULL_VALUE + "border": new javax.swing.border.EmptyBorder( 0, 0, 0, 0 ) add( new FormComponent( "javax.swing.JButton" ) { name: "findPreviousButton" "toolTipText": "Previous Occurrence" @@ -69,7 +71,7 @@ new FormModel { add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { name: "closeToolBar" "floatable": false - "border": sfield com.jformdesigner.model.FormObject NULL_VALUE + "border": new javax.swing.border.EmptyBorder( 0, 0, 0, 0 ) add( new FormComponent( "javax.swing.JButton" ) { name: "closeButton" "toolTipText": "Close" @@ -86,16 +88,18 @@ new FormModel { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 0 1" } ) - add( new FormComponent( "javax.swing.JTextField" ) { + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatTextField" ) { name: "replaceField" "columns": 16 + "selectAllOnFocusPolicy": enum com.formdev.flatlaf.extras.components.FlatTextField$SelectAllOnFocusPolicy always + "showClearButton": true }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { "value": "cell 1 1" } ) add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { name: "toolBar1" "floatable": false - "border": sfield com.jformdesigner.model.FormObject NULL_VALUE + "border": new javax.swing.border.EmptyBorder( 0, 0, 0, 0 ) add( new FormComponent( "javax.swing.JButton" ) { name: "replaceButton" "text": "Replace" diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatLafThemeEditor.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatLafThemeEditor.java new file mode 100644 index 00000000..41987d9e --- /dev/null +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatLafThemeEditor.java @@ -0,0 +1,49 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.themeeditor; + +import com.formdev.flatlaf.util.SystemInfo; + +/** + * FlatLaf Theme Editor + * + * @author Karl Tauber + */ +public class FlatLafThemeEditor +{ + public static void main( String[] args ) { + // macOS + if( SystemInfo.isMacOS ) { + // enable screen menu bar + // (moves menu bar from JFrame window to top of screen) + System.setProperty( "apple.laf.useScreenMenuBar", "true" ); + + // application name used in screen menu bar + // (in first menu after the "apple" menu) + System.setProperty( "apple.awt.application.name", "FlatLaf Theme Editor" ); + + // appearance of window title bars + // possible values: + // - "system": use current macOS appearance (light or dark) + // - "NSAppearanceNameAqua": use light appearance + // - "NSAppearanceNameDarkAqua": use dark appearance + System.setProperty( "apple.awt.application.appearance", "system" ); + } + + FlatThemeFileEditor.main( args ); + } +} diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatRSyntaxTextAreaUI.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatRSyntaxTextAreaUI.java new file mode 100644 index 00000000..3a5046af --- /dev/null +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatRSyntaxTextAreaUI.java @@ -0,0 +1,156 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.themeeditor; + +import java.awt.Graphics; +import java.awt.Rectangle; +import java.awt.event.ActionEvent; +import java.awt.event.MouseEvent; +import javax.swing.Action; +import javax.swing.ActionMap; +import javax.swing.JComponent; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.text.BadLocationException; +import javax.swing.text.Caret; +import javax.swing.text.DefaultEditorKit; +import javax.swing.text.JTextComponent; +import javax.swing.text.Utilities; +import org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaUI; +import org.fife.ui.rtextarea.ConfigurableCaret; + +/** + * @author Karl Tauber + */ +class FlatRSyntaxTextAreaUI + extends RSyntaxTextAreaUI +{ + FlatRSyntaxTextAreaUI( JComponent rSyntaxTextArea ) { + super( rSyntaxTextArea ); + } + + @Override + protected Caret createCaret() { + Caret caret = new FlatConfigurableCaret(); + caret.setBlinkRate( 500 ); + return caret; + } + + @Override + protected void paintCurrentLineHighlight( Graphics g, Rectangle visibleRect ) { + if( !textArea.getHighlightCurrentLine() ) + return; + + // paint current line highlight always in the line where the caret is + try { + int dot = textArea.getCaret().getDot(); + Rectangle dotRect = textArea.modelToView( dot ); + int height = textArea.getLineHeight(); + + g.setColor( textArea.getCurrentLineHighlightColor() ); + g.fillRect( visibleRect.x, dotRect.y, visibleRect.width, height ); + } catch( BadLocationException ex ) { + super.paintCurrentLineHighlight( g, visibleRect ); + } + } + + //---- class FlatConfigurableCaret ---------------------------------------- + + private static class FlatConfigurableCaret + extends ConfigurableCaret + { + private boolean isWordSelection; + private boolean isLineSelection; + private int dragSelectionStart; + private int dragSelectionEnd; + + @Override + public void mousePressed( MouseEvent e ) { + super.mousePressed( e ); + + JTextComponent c = getComponent(); + + // left double-click starts word selection + isWordSelection = e.getClickCount() == 2 && SwingUtilities.isLeftMouseButton( e ) && !e.isConsumed(); + + // left triple-click starts line selection + isLineSelection = e.getClickCount() == 3 && SwingUtilities.isLeftMouseButton( e ) && (!e.isConsumed() || c.getDragEnabled()); + + // select line + // (this is also done in DefaultCaret.mouseClicked(), but this event is + // sent when the mouse is released, which is too late for triple-click-and-drag) + if( isLineSelection ) { + ActionMap actionMap = c.getActionMap(); + Action selectLineAction = (actionMap != null) + ? actionMap.get( DefaultEditorKit.selectLineAction ) + : null; + if( selectLineAction != null ) { + selectLineAction.actionPerformed( new ActionEvent( c, + ActionEvent.ACTION_PERFORMED, null, e.getWhen(), e.getModifiers() ) ); + } + } + + // remember selection where word/line selection starts to keep it always selected while dragging + if( isWordSelection || isLineSelection ) { + int mark = getMark(); + int dot = getDot(); + dragSelectionStart = Math.min( dot, mark ); + dragSelectionEnd = Math.max( dot, mark ); + } + } + + @Override + public void mouseReleased( MouseEvent e ) { + isWordSelection = false; + isLineSelection = false; + super.mouseReleased( e ); + } + + @Override + public void mouseDragged( MouseEvent e ) { + if( (isWordSelection || isLineSelection) && + !e.isConsumed() && SwingUtilities.isLeftMouseButton( e ) ) + { + // fix Swing's double/triple-click-and-drag behavior so that dragging after + // a double/triple-click extends selection by whole words/lines + JTextComponent c = getComponent(); + int pos = c.viewToModel( e.getPoint() ); + if( pos < 0 ) + return; + + try { + if( pos > dragSelectionEnd ) + select( dragSelectionStart, isWordSelection ? Utilities.getWordEnd( c, pos ) : Utilities.getRowEnd( c, pos ) ); + else if( pos < dragSelectionStart ) + select( dragSelectionEnd, isWordSelection ? Utilities.getWordStart( c, pos ) : Utilities.getRowStart( c, pos ) ); + else + select( dragSelectionStart, dragSelectionEnd ); + } catch( BadLocationException ex ) { + UIManager.getLookAndFeel().provideErrorFeedback( c ); + } + } else + super.mouseDragged( e ); + } + + private void select( int mark, int dot ) { + if( mark != getMark() ) + setDot( mark ); + if( dot != getDot() ) + moveDot( dot ); + } + } +} diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatSyntaxTextArea.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatSyntaxTextArea.java index 05f7f8b3..c06a8791 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatSyntaxTextArea.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatSyntaxTextArea.java @@ -18,13 +18,27 @@ package com.formdev.flatlaf.themeeditor; import java.awt.Color; import java.awt.KeyboardFocusManager; +import java.awt.event.InputEvent; +import java.awt.event.KeyEvent; import java.util.Collections; import java.util.HashMap; import java.util.Map; +import javax.swing.ActionMap; +import javax.swing.InputMap; +import javax.swing.KeyStroke; +import javax.swing.UIManager; import javax.swing.text.BadLocationException; +import org.fife.ui.rsyntaxtextarea.RSyntaxTextAreaEditorKit; import org.fife.ui.rsyntaxtextarea.TextEditorPane; import org.fife.ui.rsyntaxtextarea.Token; +import org.fife.ui.rtextarea.RTextArea; +import org.fife.ui.rtextarea.RTextAreaUI; +import org.fife.ui.rtextarea.RUndoManager; import com.formdev.flatlaf.UIDefaultsLoaderAccessor; +import com.formdev.flatlaf.themeeditor.FlatSyntaxTextAreaActions.InsertColorAction; +import com.formdev.flatlaf.themeeditor.FlatSyntaxTextAreaActions.PickColorAction; +import com.formdev.flatlaf.themeeditor.FlatSyntaxTextAreaActions.DuplicateLinesAction; +import com.formdev.flatlaf.themeeditor.FlatSyntaxTextAreaActions.IncrementNumberAction; /** * A text area that supports editing FlatLaf themes. @@ -34,15 +48,59 @@ import com.formdev.flatlaf.UIDefaultsLoaderAccessor; class FlatSyntaxTextArea extends TextEditorPane { + private RUndoManager undoManager; private boolean useColorOfColorTokens; final FlatThemePropertiesSupport propertiesSupport = new FlatThemePropertiesSupport( this ); private final Map parsedColorsMap = new HashMap<>(); FlatSyntaxTextArea() { + // this is necessary because RTextAreaBase.init() always sets foreground to black + setForeground( UIManager.getColor( "TextArea.foreground" ) ); + // remove Ctrl+Tab and Ctrl+Shift+Tab focus traversal keys to allow tabbed pane to process them setFocusTraversalKeys( KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, Collections.emptySet() ); setFocusTraversalKeys( KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS, Collections.emptySet() ); + + // add editor actions + ActionMap actionMap = getActionMap(); + actionMap.put( FlatSyntaxTextAreaActions.duplicateLinesUpAction, new DuplicateLinesAction( FlatSyntaxTextAreaActions.duplicateLinesUpAction, true ) ); + actionMap.put( FlatSyntaxTextAreaActions.duplicateLinesDownAction, new DuplicateLinesAction( FlatSyntaxTextAreaActions.duplicateLinesDownAction, false ) ); + actionMap.put( FlatSyntaxTextAreaActions.incrementNumberAction, new IncrementNumberAction( FlatSyntaxTextAreaActions.incrementNumberAction, true ) ); + actionMap.put( FlatSyntaxTextAreaActions.decrementNumberAction, new IncrementNumberAction( FlatSyntaxTextAreaActions.decrementNumberAction, false ) ); + actionMap.put( FlatSyntaxTextAreaActions.insertColorAction, new InsertColorAction( FlatSyntaxTextAreaActions.insertColorAction ) ); + actionMap.put( FlatSyntaxTextAreaActions.pickColorAction, new PickColorAction( FlatSyntaxTextAreaActions.pickColorAction ) ); + + // add editor key strokes + InputMap inputMap = getInputMap(); + int defaultModifier = RTextArea.getDefaultModifier(); + int alt = InputEvent.ALT_DOWN_MASK; + inputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_UP, defaultModifier|alt), FlatSyntaxTextAreaActions.duplicateLinesUpAction ); + inputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_DOWN, defaultModifier|alt), FlatSyntaxTextAreaActions.duplicateLinesDownAction ); + inputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_UP, defaultModifier), FlatSyntaxTextAreaActions.incrementNumberAction ); + inputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_DOWN, defaultModifier), FlatSyntaxTextAreaActions.decrementNumberAction ); + // add Ctrl+7 for German keyboards where Ctrl+/ does not work + inputMap.put( KeyStroke.getKeyStroke( KeyEvent.VK_7, defaultModifier), RSyntaxTextAreaEditorKit.rstaToggleCommentAction ); + } + + @Override + protected RTextAreaUI createRTextAreaUI() { + return new FlatRSyntaxTextAreaUI( this ); + } + + @Override + protected RUndoManager createUndoManager() { + undoManager = super.createUndoManager(); + return undoManager; + } + + void runWithoutUndo( Runnable runnable ) { + getDocument().removeUndoableEditListener( undoManager ); + try { + runnable.run(); + } finally { + getDocument().addUndoableEditListener( undoManager ); + } } boolean isUseColorOfColorTokens() { diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatSyntaxTextAreaActions.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatSyntaxTextAreaActions.java new file mode 100644 index 00000000..2ce3829c --- /dev/null +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatSyntaxTextAreaActions.java @@ -0,0 +1,461 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.themeeditor; + +import java.awt.AWTException; +import java.awt.Color; +import java.awt.Component; +import java.awt.Point; +import java.awt.Window; +import java.awt.event.ActionEvent; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.prefs.Preferences; +import javax.swing.JColorChooser; +import javax.swing.JDialog; +import javax.swing.JTabbedPane; +import javax.swing.SwingUtilities; +import javax.swing.text.BadLocationException; +import org.fife.ui.rtextarea.RTextArea; +import org.fife.ui.rtextarea.RecordableTextAction; +import com.formdev.flatlaf.UIDefaultsLoaderAccessor; + +/** + * @author Karl Tauber + */ +class FlatSyntaxTextAreaActions +{ + static final String duplicateLinesUpAction = "FlatLaf.DuplicateLinesUpAction"; + static final String duplicateLinesDownAction = "FlatLaf.DuplicateLinesDownAction"; + static final String incrementNumberAction = "FlatLaf.IncrementNumberAction"; + static final String decrementNumberAction = "FlatLaf.DecrementNumberAction"; + static final String insertColorAction = "FlatLaf.InsertColorAction"; + static final String pickColorAction = "FlatLaf.PickColorAction"; + + static int[] findColorAt( RTextArea textArea, int position ) { + try { + int start = position; + int end = position; + + // find first '#' or hex digit + for( int i = position - 1; i >= 0; i-- ) { + char ch = textArea.getText( i, 1 ).charAt( 0 ); + if( ch != '#' && !isHexDigit( ch ) ) + break; + start = i; + } + + // find last hex digit + int length = textArea.getDocument().getLength(); + for( int i = position; i < length; i++ ) { + if( !isHexDigit( textArea.getText( i, 1 ).charAt( 0 ) ) ) + break; + end = i + 1; + } + + // check for valid length (#RGB, #RGBA, #RRGGBB or #RRGGBBAA) + int len = end - start; + if( len != 4 && len != 5 && len != 7 && len != 9 ) + return null; + + // check whether starts with '#' + if( textArea.getText( start, 1 ).charAt( 0 ) != '#' ) + return null; + + return new int[] { start, end - start }; + } catch( BadLocationException | IndexOutOfBoundsException | NumberFormatException ex ) { + ex.printStackTrace(); + return null; + } + } + + static boolean isHexDigit( char ch ) { + return Character.isDigit( ch ) || (ch >= 'a' && ch <= 'f') || (ch >= 'A' && ch <= 'F'); + } + + static String colorToString( Color color ) { + int rgb = color.getRGB(); + int alpha = color.getAlpha(); + String format; + if( (rgb & 0xf) == ((rgb >> 4) & 0xf) && + ((rgb >> 8) & 0xf) == ((rgb >> 12) & 0xf) && + ((rgb >> 16) & 0xf) == ((rgb >> 20) & 0xf) && + ((rgb >> 24) & 0xf) == ((rgb >> 28) & 0xf) ) + { + // short format (#RGB or #RGBA) + format = (alpha != 255) ? "#%03x%01x" : "#%03x"; + rgb = (rgb & 0xf) | ((rgb >> 4) & 0xf0) | ((rgb >> 8) & 0xf00); + alpha &= 0xf; + } else { + // long format (#RRGGBB or #RRGGBBAA) + format = (alpha != 255) ? "#%06x%02x" : "#%06x"; + rgb &= 0xffffff; + } + + return String.format( format, rgb, alpha ); + } + + //---- class DuplicateLinesAction ----------------------------------------- + + static class DuplicateLinesAction + extends RecordableTextAction + { + private final boolean up; + + public DuplicateLinesAction( String name, boolean up ) { + super( name ); + this.up = up; + } + + @Override + public void actionPerformedImpl( ActionEvent e, RTextArea textArea ) { + try { + int selStart = textArea.getSelectionStart(); + int selEnd = textArea.getSelectionEnd(); + + int selStartLine = textArea.getLineOfOffset( selStart ); + int selEndLine = textArea.getLineOfOffset( selEnd ); + + // check whether selection end is at the beginning of the next line + if( selEnd > selStart && textArea.getLineOfOffset( selEnd - 1 ) < selEndLine ) + selEndLine--; + + int linesStart = textArea.getLineStartOffset( selStartLine ); + int linesEnd = textArea.getLineEndOffset( selEndLine ); + + String linesText = textArea.getText( linesStart, linesEnd - linesStart ); + if( !linesText.endsWith( "\n" ) ) + linesText += "\n"; + + textArea.replaceRange( linesText, linesStart, linesStart ); + + if( up ) + textArea.select( linesStart, linesStart + linesText.length() - 1 ); + else { + int newSelStart = linesStart + linesText.length(); + int newSelEnd = newSelStart + linesText.length(); + if( linesText.endsWith( "\n" ) ) + newSelEnd--; + textArea.select( newSelStart, newSelEnd ); + } + } catch( BadLocationException ex ) { + ex.printStackTrace(); + } + } + + @Override + public String getMacroID() { + return getName(); + } + } + + //---- class IncrementNumberAction ---------------------------------------- + + static class IncrementNumberAction + extends RecordableTextAction + { + private final boolean increment; + + IncrementNumberAction( String name, boolean increment ) { + super( name ); + this.increment = increment; + } + + @Override + public void actionPerformedImpl( ActionEvent e, RTextArea textArea ) { + if( !incrementRGBColor( textArea ) ) + incrementNumber( textArea ); + } + + private void incrementNumber( RTextArea textArea ) { + try { + int caretPosition = textArea.getCaretPosition(); + int start = caretPosition; + int end = caretPosition; + + // find first digit + for( int i = caretPosition - 1; i >= 0; i-- ) { + if( !Character.isDigit( textArea.getText( i, 1 ).charAt( 0 ) ) ) + break; + start = i; + } + + // find last digit + int length = textArea.getDocument().getLength(); + for( int i = caretPosition; i < length; i++ ) { + if( !Character.isDigit( textArea.getText( i, 1 ).charAt( 0 ) ) ) + break; + end = i + 1; + } + + if( start == end ) + return; + + // parse number + String str = textArea.getText( start, end - start ); + long number = Long.parseLong( str ); + + // increment/decrement number + if( increment ) + number++; + else + number--; + + if( number < 0 ) + return; + + // update editor + textArea.replaceRange( Long.toString( number ), start, end ); + } catch( BadLocationException | IndexOutOfBoundsException | NumberFormatException ex ) { + ex.printStackTrace(); + } + } + + private boolean incrementRGBColor( RTextArea textArea ) { + try { + int caretPosition = textArea.getCaretPosition(); + int[] result = findColorAt( textArea, caretPosition ); + if( result == null ) + return false; + + int start = result[0]; + int len = result[1]; + + // find start of color part that should be changed (red, green, blue or alpha) + int start2; + int hexDigitCount = (len == 4 || len == 5) ? 1 : 2; + if( hexDigitCount == 1 ) { + // #RGB or #RGBA + start2 = caretPosition - 1; + } else { + // #RRGGBB or #RRGGBBAA + int offset = caretPosition - (start + 1); + offset += (offset % 2); + start2 = start + 1 + offset - 2; + } + start2 = Math.max( start2, start + 1 ); + + // parse number + String str = textArea.getText( start2, hexDigitCount ); + int number = Integer.parseInt( str, 16 ); + + // increment/decrement number + if( increment ) + number++; + else + number--; + + // wrap numbers if less than zero or too large + int maxNumber = (hexDigitCount == 1) ? 15 : 255; + if( number < 0 ) + number = maxNumber; + else if( number > maxNumber ) + number = 0; + + // update editor + String newStr = String.format( hexDigitCount == 1 ? "%1x" : "%02x", number ); + textArea.replaceRange( newStr, start2, start2 + hexDigitCount ); + return true; + } catch( BadLocationException | IndexOutOfBoundsException | NumberFormatException ex ) { + ex.printStackTrace(); + return false; + } + } + + @Override + public String getMacroID() { + return getName(); + } + } + + //---- class InsertColorAction -------------------------------------------- + + static class InsertColorAction + extends RecordableTextAction + { + private static final String KEY_SELECTED_TAB = "colorchooser.selectedTab"; + + private static Point lastLocation; + + InsertColorAction( String name ) { + super( name ); + } + + @Override + public void actionPerformedImpl( ActionEvent e, RTextArea textArea ) { + try { + // find current color at caret + Color currentColor = Color.white; + int caretPosition = textArea.getCaretPosition(); + int start; + int len = 0; + String oldStr; + int[] result = findColorAt( textArea, caretPosition ); + if( result != null ) { + start = result[0]; + len = result[1]; + + oldStr = textArea.getText( start, len ); + int rgb = UIDefaultsLoaderAccessor.parseColorRGBA( oldStr ); + currentColor = new Color( rgb, true ); + } else { + start = caretPosition; + oldStr = ""; + } + + // create color chooser + JColorChooser chooser = new JColorChooser( currentColor ); + Component tabbedPane = chooser.getComponent( 0 ); + Preferences state = Preferences.userRoot().node( FlatThemeFileEditor.PREFS_ROOT_PATH ); + int selectedTab = state.getInt( KEY_SELECTED_TAB, -1 ); + if( tabbedPane instanceof JTabbedPane && selectedTab >= 0 && selectedTab < ((JTabbedPane)tabbedPane).getTabCount() ) + ((JTabbedPane)tabbedPane).setSelectedIndex( selectedTab ); + + // update editor immediately for live preview + AtomicInteger length = new AtomicInteger( len ); + AtomicBoolean changed = new AtomicBoolean(); + chooser.getSelectionModel().addChangeListener( e2 -> { + String str = colorToString( chooser.getColor() ); + ((FlatSyntaxTextArea)textArea).runWithoutUndo( () -> { + textArea.replaceRange( str, start, start + length.get() ); + } ); + length.set( str.length() ); + changed.set( true ); + } ); + Runnable restore = () -> { + if( changed.get() ) { + ((FlatSyntaxTextArea)textArea).runWithoutUndo( () -> { + textArea.replaceRange( oldStr, start, start + length.get() ); + } ); + length.set( oldStr.length() ); + } + }; + + // show color chooser dialog + Window window = SwingUtilities.windowForComponent( textArea ); + JDialog dialog = JColorChooser.createDialog( window, "Insert Color", true, chooser, + // okListener + e2 -> { + // restore original string + restore.run(); + + // update editor + String newStr = colorToString( chooser.getColor() ); + try { + if( !newStr.equals( textArea.getText( start, length.get() ) ) ) + textArea.replaceRange( newStr, start, start + length.get() ); + } catch( BadLocationException ex ) { + ex.printStackTrace(); + } + + // remember selected tab + if( tabbedPane instanceof JTabbedPane ) + state.putInt( KEY_SELECTED_TAB, ((JTabbedPane)tabbedPane).getSelectedIndex() ); + }, + // cancelListener + e2 -> { + // restore original string + restore.run(); + } ); + if( lastLocation != null ) + dialog.setLocation( lastLocation ); + dialog.setVisible( true ); + + lastLocation = dialog.getLocation(); + } catch( BadLocationException | IndexOutOfBoundsException | NumberFormatException ex ) { + ex.printStackTrace(); + } + } + + @Override + public String getMacroID() { + return getName(); + } + } + + //---- class PickColorAction ---------------------------------------------- + + static class PickColorAction + extends RecordableTextAction + { + PickColorAction( String name ) { + super( name ); + } + + @Override + public void actionPerformedImpl( ActionEvent e, RTextArea textArea ) { + try { + // find current color at caret + int caretPosition = textArea.getCaretPosition(); + int start; + int len = 0; + String oldStr; + int[] result = findColorAt( textArea, caretPosition ); + if( result != null ) { + start = result[0]; + len = result[1]; + + oldStr = textArea.getText( start, len ); + } else { + start = caretPosition; + oldStr = ""; + } + + AtomicInteger length = new AtomicInteger( len ); + AtomicBoolean changed = new AtomicBoolean(); + + // show pipette color picker + Window window = SwingUtilities.windowForComponent( textArea ); + FlatColorPipette.pick( window, true, + color -> { + // update editor immediately for live preview + String str = colorToString( color ); + ((FlatSyntaxTextArea)textArea).runWithoutUndo( () -> { + textArea.replaceRange( str, start, start + length.get() ); + } ); + length.set( str.length() ); + changed.set( true ); + }, + color -> { + // restore original string + ((FlatSyntaxTextArea)textArea).runWithoutUndo( () -> { + textArea.replaceRange( oldStr, start, start + length.get() ); + } ); + length.set( oldStr.length() ); + + // update editor + if( color != null ) { + String newStr = colorToString( color ); + try { + if( !newStr.equals( textArea.getText( start, length.get() ) ) ) + textArea.replaceRange( newStr, start, start + length.get() ); + } catch( BadLocationException ex ) { + ex.printStackTrace(); + } + } + } ); + } catch( BadLocationException | IndexOutOfBoundsException | NumberFormatException | UnsupportedOperationException | AWTException ex ) { + ex.printStackTrace(); + } + } + + @Override + public String getMacroID() { + return getName(); + } + } +} diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeEditorOverlay.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeEditorOverlay.java index 987e4f4d..f3584a5f 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeEditorOverlay.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeEditorOverlay.java @@ -24,11 +24,14 @@ import java.awt.Point; import java.awt.Rectangle; import javax.swing.JComponent; import javax.swing.JLayer; +import javax.swing.UIDefaults.LazyValue; import javax.swing.plaf.LayerUI; import javax.swing.text.BadLocationException; import org.fife.ui.rsyntaxtextarea.Token; +import com.formdev.flatlaf.FlatLaf; import com.formdev.flatlaf.UIDefaultsLoaderAccessor; import com.formdev.flatlaf.ui.FlatUIUtils; +import com.formdev.flatlaf.util.ColorFunctions; import com.formdev.flatlaf.util.HSLColor; import com.formdev.flatlaf.util.UIScale; @@ -42,6 +45,10 @@ class FlatThemeEditorOverlay { private static final int COLOR_PREVIEW_WIDTH = 100; + static boolean showHSL = true; + static boolean showRGB; + static boolean showLuma; + private Font font; private Font baseFont; @@ -75,15 +82,24 @@ class FlatThemeEditorOverlay } FontMetrics fm = c.getFontMetrics( font ); - int maxTextWidth = fm.stringWidth( "HSL 360 100 100" ); + int space = fm.stringWidth( " " ); + int maxTextWidth = 0; + if( showHSL ) + maxTextWidth += fm.stringWidth( "HSL 360 100 100" ) + space; + if( showRGB ) + maxTextWidth += fm.stringWidth( "#ffffff" ) + space; + if( showLuma ) + maxTextWidth += fm.stringWidth( "100" ) + space; + maxTextWidth = Math.max( maxTextWidth - space, 0 ); int textHeight = fm.getAscent() - fm.getLeading(); int width = c.getWidth(); int previewWidth = UIScale.scale( COLOR_PREVIEW_WIDTH ); int gap = UIScale.scale( 4 ); + int textGap = (showHSL || showRGB || showLuma) ? UIScale.scale( 6 ) : 0; // check whether preview is outside of clip bounds - if( clipBounds.x + clipBounds.width < width - previewWidth - maxTextWidth - gap ) + if( clipBounds.x + clipBounds.width < width - previewWidth - maxTextWidth - gap - textGap ) return; g.setFont( font ); @@ -111,14 +127,41 @@ class FlatThemeEditorOverlay } // paint text - int textX = px - maxTextWidth; - if( textX > r.x + gap) { - float[] hsl = HSLColor.fromRGB( color ); - String hslStr = String.format( "HSL %3d %2d %2d", - Math.round( hsl[0] ), Math.round( hsl[1] ), Math.round( hsl[2] ) ); - g.setColor( textArea.getForeground() ); - FlatUIUtils.drawString( textArea, g, hslStr, textX, - r.y + ((r.height - textHeight) / 2) + textHeight ); + if( showHSL || showRGB || showLuma ) { + int textX = px - textGap - maxTextWidth; + if( textX > r.x + gap) { + String colorStr = null; + if( showHSL ) { + float[] hsl = HSLColor.fromRGB( color ); + colorStr = String.format( (alpha != 255) ? "HSLA %3d %3d %3d %3d" : "HSL %3d %3d %3d", + Math.round( hsl[0] ), Math.round( hsl[1] ), Math.round( hsl[2] ), + Math.round( alpha / 255f * 100 ) ); + } + if( showRGB ) { + String rgbStr = String.format( (alpha != 255) ? "#%06x%02x" : "#%06x", + color.getRGB() & 0xffffff, alpha ); + if( colorStr != null ) + colorStr += " " + rgbStr; + else + colorStr = rgbStr; + } + if( showLuma ) { + String lumaStr = String.format( "%3d", + Math.round( ColorFunctions.luma( color ) * 100 ) ); + if( colorStr != null ) + colorStr += " " + lumaStr; + else + colorStr = lumaStr; + } + + int textWidth = fm.stringWidth( colorStr ); + if( textWidth > maxTextWidth ) + textX -= (textWidth - maxTextWidth); + + g.setColor( textArea.getForeground() ); + FlatUIUtils.drawString( textArea, g, colorStr, textX, + r.y + ((r.height - textHeight) / 2) + textHeight ); + } } } catch( BadLocationException ex ) { // ignore @@ -128,6 +171,20 @@ class FlatThemeEditorOverlay private Color getColorInLine( FlatSyntaxTextArea textArea, int line ) { Object value = textArea.propertiesSupport.getParsedValueAtLine( line ); + + // resolve lazy value + if( value instanceof LazyValue ) { + Object[] pValue = new Object[] { value }; + FlatLaf.runWithUIDefaultsGetter( key -> { + return (key instanceof String) + ? textArea.propertiesSupport.getParsedProperty( (String) key ) + : null; + }, () -> { + pValue[0] = ((LazyValue)pValue[0]).createValue( null ); + } ); + value = pValue[0]; + } + if( value instanceof Color ) return (Color) value; diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeEditorPane.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeEditorPane.java index d09b4c4f..e6ee4133 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeEditorPane.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeEditorPane.java @@ -20,28 +20,33 @@ import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.Window; +import java.awt.event.ActionEvent; import java.io.File; import java.io.IOException; -import java.io.InputStream; -import java.nio.charset.StandardCharsets; -import java.util.List; +import javax.swing.Action; +import javax.swing.BorderFactory; +import javax.swing.InputMap; +import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLayer; import javax.swing.JOptionPane; import javax.swing.JPanel; +import javax.swing.KeyStroke; import javax.swing.SwingUtilities; import javax.swing.UIManager; -import javax.swing.border.MatteBorder; import org.fife.rsta.ui.CollapsibleSectionPanel; import org.fife.ui.autocomplete.AutoCompletion; import org.fife.ui.autocomplete.CompletionProvider; import org.fife.ui.rsyntaxtextarea.AbstractTokenMakerFactory; import org.fife.ui.rsyntaxtextarea.ErrorStrip; import org.fife.ui.rsyntaxtextarea.FileLocation; +import org.fife.ui.rsyntaxtextarea.Style; import org.fife.ui.rsyntaxtextarea.SyntaxScheme; import org.fife.ui.rsyntaxtextarea.TextEditorPane; -import org.fife.ui.rsyntaxtextarea.Theme; import org.fife.ui.rsyntaxtextarea.TokenMakerFactory; +import org.fife.ui.rsyntaxtextarea.TokenTypes; +import org.fife.ui.rtextarea.Gutter; +import org.fife.ui.rtextarea.RTextArea; import org.fife.ui.rtextarea.RTextScrollPane; import com.formdev.flatlaf.util.UIScale; @@ -60,7 +65,9 @@ class FlatThemeEditorPane private final CollapsibleSectionPanel collapsiblePanel; private final RTextScrollPane scrollPane; private final FlatSyntaxTextArea textArea; + private final ErrorStrip errorStrip; private FlatFindReplaceBar findReplaceBar; + private FlatThemePreview preview; private File file; @@ -82,20 +89,6 @@ class FlatThemeEditorPane firePropertyChange( DIRTY_PROPERTY, e.getOldValue(), e.getNewValue() ); } ); - // theme - try( InputStream in = getClass().getResourceAsStream( "light.xml" ) ) { - Theme theme = Theme.load( in ); - theme.apply( textArea ); - } catch( IOException ex ) { - ex.printStackTrace(); - } - - // use semitransparent token background because token background - // is painted over mark occurrences background - SyntaxScheme scheme = textArea.getSyntaxScheme(); - scheme.getStyle( FlatThemeTokenMaker.TOKEN_COLOR ).background = new Color( 0x0a000000, true ); - scheme.getStyle( FlatThemeTokenMaker.TOKEN_VARIABLE ).background = new Color( 0x1800cc00, true ); - // autocomplete CompletionProvider provider = new FlatCompletionProvider(); AutoCompletion ac = new AutoCompletion( provider ); @@ -111,29 +104,71 @@ class FlatThemeEditorPane // create scroll pane scrollPane = new RTextScrollPane( overlay ); - scrollPane.setBorder( null ); + scrollPane.setBorder( BorderFactory.createEmptyBorder() ); scrollPane.setLineNumbersEnabled( true ); - // scale fonts - if( UIScale.getUserScaleFactor() != 1 ) - textArea.setFont( scaleFont( textArea.getFont() ) ); - - // use same font for line numbers as in editor - scrollPane.getGutter().setLineNumberFont( textArea.getFont() ); + // map Ctrl+PageUp/Down to a not-existing action to avoid that the scrollpane catches them + InputMap inputMap = scrollPane.getInputMap( JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT ); + inputMap.put( KeyStroke.getKeyStroke( "ctrl PAGE_UP" ), "__dummy__" ); + inputMap.put( KeyStroke.getKeyStroke( "ctrl PAGE_DOWN" ), "__dummy__" ); // create error strip - ErrorStrip errorStrip = new ErrorStrip( textArea ); + errorStrip = new ErrorStrip( textArea ); // create collapsible panel collapsiblePanel = new CollapsibleSectionPanel(); collapsiblePanel.add( scrollPane ); collapsiblePanel.add( errorStrip, BorderLayout.LINE_END ); add( collapsiblePanel, BorderLayout.CENTER ); + + updateTheme(); } - private static Font scaleFont( Font font ) { - int newFontSize = UIScale.scale( font.getSize() ); - return font.deriveFont( (float) newFontSize ); + void updateTheme() { + Font defaultFont = RTextArea.getDefaultFont(); + Font font = defaultFont.deriveFont( (float) UIManager.getFont( "defaultFont" ).getSize() ); + + textArea.setFont( font ); + textArea.setBackground( UIManager.getColor( "FlatThemeEditorPane.background" ) ); + textArea.setCaretColor( UIManager.getColor( "FlatThemeEditorPane.caretColor" ) ); + textArea.setSelectionColor( UIManager.getColor( "FlatThemeEditorPane.selectionBackground" ) ); + textArea.setCurrentLineHighlightColor( UIManager.getColor( "FlatThemeEditorPane.currentLineHighlight" ) ); + textArea.setMarkAllHighlightColor( UIManager.getColor( "FlatThemeEditorPane.markAllHighlightColor" ) ); + textArea.setMarkOccurrencesColor( UIManager.getColor( "FlatThemeEditorPane.markOccurrencesColor" ) ); + textArea.setMatchedBracketBGColor( UIManager.getColor( "FlatThemeEditorPane.matchedBracketBackground" ) ); + textArea.setMatchedBracketBorderColor( UIManager.getColor( "FlatThemeEditorPane.matchedBracketBorderColor" ) ); + textArea.setPaintMatchedBracketPair( true ); + textArea.setAnimateBracketMatching( false ); + + // syntax + textArea.setSyntaxScheme( new FlatSyntaxScheme( font ) ); + + // gutter + Gutter gutter = scrollPane.getGutter(); + gutter.setBackground( UIManager.getColor( "FlatThemeEditorPane.gutter.background" ) ); + gutter.setBorderColor( UIManager.getColor( "FlatThemeEditorPane.gutter.borderColor" ) ); + gutter.setLineNumberColor( UIManager.getColor( "FlatThemeEditorPane.gutter.lineNumberColor" ) ); + gutter.setLineNumberFont( font ); + + // error strip + errorStrip.setCaretMarkerColor( UIManager.getColor( "FlatThemeEditorPane.errorstrip.caretMarkerColor" ) ); + + if( preview != null ) + preview.updateLater(); + } + + void updateFontSize( int sizeIncr ) { + Font defaultFont = RTextArea.getDefaultFont(); + Font font = defaultFont.deriveFont( (float) UIManager.getFont( "defaultFont" ).getSize() + sizeIncr ); + + textArea.setFont( font ); + textArea.setSyntaxScheme( new FlatSyntaxScheme( font ) ); + scrollPane.getGutter().setLineNumberFont( font ); + } + + void windowActivated() { + if( preview != null ) + preview.repaint(); } @Override @@ -141,8 +176,8 @@ class FlatThemeEditorPane return textArea.requestFocusInWindow(); } - void setBaseFiles( List baseFiles ) { - textArea.propertiesSupport.setBaseFiles( baseFiles ); + void initBasePropertyProvider( FlatThemePropertiesBaseManager propertiesBaseManager ) { + textArea.propertiesSupport.setBasePropertyProvider( propertiesBaseManager.create( file, textArea.propertiesSupport ) ); } File getFile() { @@ -152,7 +187,7 @@ class FlatThemeEditorPane void load( File file ) throws IOException { this.file = file; - textArea.load( FileLocation.create( file ), StandardCharsets.ISO_8859_1 ); + textArea.load( FileLocation.create( file ), "UTF-8" ); } boolean reloadIfNecessary() { @@ -191,6 +226,9 @@ class FlatThemeEditorPane textArea.reload(); textArea.select( selectionStart, selectionEnd ); + + if( findReplaceBar != null && findReplaceBar.isShowing() ) + findReplaceBar.markAll(); } catch( IOException ex ) { JOptionPane.showMessageDialog( this, "Failed to reload '" + textArea.getFileName() + "'\n\nReason: " + ex.getMessage(), @@ -226,11 +264,72 @@ class FlatThemeEditorPane void showFindReplaceBar() { if( findReplaceBar == null ) { findReplaceBar = new FlatFindReplaceBar( textArea ); - findReplaceBar.setBorder( new MatteBorder( 1, 0, 0, 0, - UIManager.getColor( "Component.borderColor" ) ) ); collapsiblePanel.addBottomComponent( findReplaceBar ); } collapsiblePanel.showBottomComponent( findReplaceBar ); } + + void showPreview( boolean show ) { + if( show ) { + if( preview != null ) + return; + + preview = new FlatThemePreview( textArea ); + add( preview, BorderLayout.LINE_END ); + } else { + if( preview == null ) + return; + + remove( preview ); + preview = null; + } + + revalidate(); + } + + void notifyTextAreaAction( String actionKey ) { + Action action = textArea.getActionMap().get( actionKey ); + if( action != null && action.isEnabled() ) + action.actionPerformed( new ActionEvent( textArea, ActionEvent.ACTION_PERFORMED, null ) ); + } + + //---- class FlatSyntaxScheme --------------------------------------------- + + private static class FlatSyntaxScheme + extends SyntaxScheme + { + FlatSyntaxScheme( Font baseFont ) { + super( false ); + + Style[] styles = getStyles(); + for( int i = 0; i < styles.length; i++ ) + styles[i] = new Style( Color.red ); + + init( "property", FlatThemeTokenMaker.TOKEN_PROPERTY, baseFont ); + init( "variable", FlatThemeTokenMaker.TOKEN_VARIABLE, baseFont ); + init( "number", FlatThemeTokenMaker.TOKEN_NUMBER, baseFont ); + init( "color", FlatThemeTokenMaker.TOKEN_COLOR, baseFont ); + init( "string", FlatThemeTokenMaker.TOKEN_STRING, baseFont ); + init( "function", FlatThemeTokenMaker.TOKEN_FUNCTION, baseFont ); + init( "type", FlatThemeTokenMaker.TOKEN_TYPE, baseFont ); + init( "reservedWord", TokenTypes.RESERVED_WORD, baseFont ); + init( "literalBoolean", TokenTypes.LITERAL_BOOLEAN, baseFont ); + init( "operator", TokenTypes.OPERATOR, baseFont ); + init( "separator", TokenTypes.SEPARATOR, baseFont ); + init( "whitespace", TokenTypes.WHITESPACE, baseFont ); + init( "comment", TokenTypes.COMMENT_EOL, baseFont ); + } + + private void init( String key, int token, Font baseFont ) { + String prefix = "FlatThemeEditorPane.style."; + Color fg = UIManager.getColor( prefix + key ); + Color bg = UIManager.getColor( prefix + key + ".background" ); + boolean italic = UIManager.getBoolean( prefix + key + ".italic" ); + Font font = Style.DEFAULT_FONT; + if( italic ) + font = baseFont.deriveFont( Font.ITALIC ); + getStyles()[token] = new Style( fg, bg, font ); + } + } } diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java index f2e74feb..87d5a289 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.java @@ -16,34 +16,57 @@ package com.formdev.flatlaf.themeeditor; +import java.awt.AWTEvent; import java.awt.BorderLayout; +import java.awt.Color; import java.awt.Component; import java.awt.Container; +import java.awt.Cursor; +import java.awt.Desktop; import java.awt.Dimension; +import java.awt.EventQueue; +import java.awt.Graphics; import java.awt.GraphicsConfiguration; import java.awt.Insets; import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.event.*; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.net.URI; +import java.net.URISyntaxException; +import java.time.Year; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.HashSet; import java.util.List; +import java.util.Locale; import java.util.Objects; import java.util.function.Supplier; import java.util.prefs.Preferences; +import javax.lang.model.SourceVersion; import javax.swing.*; import net.miginfocom.swing.*; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.FlatDarculaLaf; +import com.formdev.flatlaf.FlatDarkLaf; +import com.formdev.flatlaf.FlatIntelliJLaf; +import com.formdev.flatlaf.FlatLaf; import com.formdev.flatlaf.FlatLightLaf; +import com.formdev.flatlaf.extras.FlatDesktop; import com.formdev.flatlaf.extras.FlatInspector; import com.formdev.flatlaf.extras.FlatSVGIcon; +import com.formdev.flatlaf.extras.FlatSVGUtils; import com.formdev.flatlaf.extras.FlatUIDefaultsInspector; import com.formdev.flatlaf.extras.components.*; +import com.formdev.flatlaf.icons.FlatClearIcon; import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.util.StringUtils; +import com.formdev.flatlaf.util.SystemInfo; import com.formdev.flatlaf.util.UIScale; /** @@ -51,26 +74,46 @@ import com.formdev.flatlaf.util.UIScale; * * @author Karl Tauber */ -public class FlatThemeFileEditor +class FlatThemeFileEditor extends JFrame { - private static final String PREFS_ROOT_PATH = "/flatlaf-theme-editor"; + static final String PREFS_ROOT_PATH = "/flatlaf-theme-editor"; private static final String KEY_DIRECTORIES = "directories"; private static final String KEY_RECENT_DIRECTORY = "recentDirectory"; private static final String KEY_RECENT_FILE = "recentFile"; private static final String KEY_WINDOW_BOUNDS = "windowBounds"; + private static final String KEY_PREVIEW = "preview"; + private static final String KEY_LAF = "laf"; + private static final String KEY_FONT_SIZE_INCR = "fontSizeIncr"; + private static final String KEY_SHOW_HSL_COLORS = "showHslColors"; + private static final String KEY_SHOW_RGB_COLORS = "showRgbColors"; + private static final String KEY_SHOW_COLOR_LUMA = "showColorLuma"; private File dir; private Preferences state; private boolean inLoadDirectory; - public static void main( String[] args ) { + private final FlatThemePropertiesBaseManager propertiesBaseManager = new FlatThemePropertiesBaseManager(); + private final JButton newButton; + + static void main( String[] args ) { File dir = (args.length > 0) ? new File( args[0] ) : null; + Locale.setDefault( Locale.ENGLISH ); + System.setProperty( "user.language", "en" ); + SwingUtilities.invokeLater( () -> { - FlatLightLaf.setup(); + FlatLaf.registerCustomDefaultsSource( "com.formdev.flatlaf.themeeditor" ); + + try { + String laf = Preferences.userRoot().node( PREFS_ROOT_PATH ).get( KEY_LAF, FlatLightLaf.class.getName() ); + UIManager.setLookAndFeel( laf ); + } catch( Exception ex ) { + FlatLightLaf.setup(); + } + FlatInspector.install( "ctrl alt shift X" ); FlatUIDefaultsInspector.install( "ctrl shift alt Y" ); @@ -80,13 +123,41 @@ public class FlatThemeFileEditor } private FlatThemeFileEditor( File dir ) { + setIconImages( FlatSVGUtils.createWindowIconImages( "/com/formdev/flatlaf/themeeditor/FlatLaf.svg" ) ); + initComponents(); + directoryField.setRenderer( new DirectoryRenderer( directoryField ) ); + openDirectoryButton.setIcon( new FlatSVGIcon( "com/formdev/flatlaf/themeeditor/icons/menu-open.svg" ) ); + if( UIManager.getLookAndFeel() instanceof FlatDarkLaf ) + darkLafMenuItem.setSelected( true ); + + // highlight selected tab + tabbedPane.setStyle( + "[light]selectedBackground: lighten($TabbedPane.background,5%);" + + " [dark]selectedBackground: darken($TabbedPane.background,5%)" ); + + // add "+" button to tabbed pane + newButton = new JButton( new FlatSVGIcon( "com/formdev/flatlaf/themeeditor/icons/add.svg" ) ); + newButton.setToolTipText( "New Properties File" ); + newButton.addActionListener( e -> newPropertiesFile() ); + JToolBar trailingToolBar = new JToolBar(); + trailingToolBar.setFloatable( false ); + trailingToolBar.add( newButton ); + tabbedPane.setTrailingComponent( trailingToolBar ); restoreState(); restoreWindowBounds(); + addWindowListener( new WindowAdapter() { + @Override + public void windowActivated( WindowEvent e ) { + for( FlatThemeEditorPane themeEditorPane : getThemeEditorPanes() ) + themeEditorPane.windowActivated(); + } + } ); + // load directory if( dir == null ) { String recentDirectory = state.get( KEY_RECENT_DIRECTORY, null ); @@ -97,6 +168,28 @@ public class FlatThemeFileEditor dir = null; if( dir != null ) loadDirectory( dir ); + else if( directoryField.getSelectedItem() != null ) + loadDirectory( (File) directoryField.getSelectedItem() ); + + enableDisableActions(); + + // hide some menu items on macOS + if( SystemInfo.isMacOS ) { + exitMenuItem.setVisible( false ); + aboutMenuItem.setVisible( false ); + } + + // integrate into macOS screen menu + FlatDesktop.setAboutHandler( this::about ); + FlatDesktop.setQuitHandler( response -> { + if( !saveAll() ) { + response.cancelQuit(); + return; + } + + saveWindowBounds(); + response.performQuit(); + } ); } private void openDirectory() { @@ -135,9 +228,37 @@ public class FlatThemeFileEditor } if( getPropertiesFiles( dir ).length == 0 ) { - JOptionPane.showMessageDialog( parentComponent, - "Directory '" + dir + "' does not contain properties files.", - getTitle(), JOptionPane.INFORMATION_MESSAGE ); + UIManager.put( "OptionPane.sameSizeButtons", false ); + int result = JOptionPane.showOptionDialog( parentComponent, + "Directory '" + dir + "' does not contain properties files.\n\n" + + "Do you want create a new theme in this directory?\n\n" + + "Or do you want modify/extend core themes and create empty" + + " 'FlatLightLaf.properties' and 'FlatDarkLaf.properties' files in this directory?", + getTitle(), JOptionPane.DEFAULT_OPTION, JOptionPane.INFORMATION_MESSAGE, null, + new Object[] { "New Theme", "Modify Core Themes", "Cancel" }, null ); + UIManager.put( "OptionPane.sameSizeButtons", null ); + + if( result == 0 ) + return newPropertiesFile( dir ); + else if( result == 1 ) { + try { + String content = + "# To use this in your application, make sure that this properties file\n" + + "# is included in your application JAR (e.g. in package `com.myapp.themes`)\n" + + "# and invoke `FlatLaf.registerCustomDefaultsSource( \"com.myapp.themes\" );`\n" + + "# before setting the look and feel.\n" + + "# https://www.formdev.com/flatlaf/how-to-customize/#application_properties\n" + + "\n"; + writeFile( new File( dir, "FlatLightLaf.properties" ), content ); + writeFile( new File( dir, "FlatDarkLaf.properties" ), content ); + return true; + } catch( IOException ex ) { + ex.printStackTrace(); + + JOptionPane.showMessageDialog( parentComponent, + "Failed to create 'FlatLightLaf.properties' or 'FlatDarkLaf.properties'." ); + } + } return false; } @@ -148,16 +269,15 @@ public class FlatThemeFileEditor if( inLoadDirectory ) return; - Object selectedItem = directoryField.getSelectedItem(); - if( selectedItem == null ) + File dir = (File) directoryField.getSelectedItem(); + if( dir == null ) return; - File dir = new File( (String) selectedItem ); if( checkDirectory( this, dir ) ) loadDirectory( dir ); else { // remove from directories history - directoryField.removeItem( selectedItem ); + directoryField.removeItem( dir ); directoryField.setSelectedItem( this.dir.getAbsolutePath() ); saveState(); } @@ -173,6 +293,7 @@ public class FlatThemeFileEditor return; this.dir = dir; + propertiesBaseManager.clear(); inLoadDirectory = true; @@ -182,23 +303,22 @@ public class FlatThemeFileEditor tabbedPane.removeTabAt( i ); // update directory field - DefaultComboBoxModel model = (DefaultComboBoxModel) directoryField.getModel(); - String dirStr = dir.getAbsolutePath(); - int indexOf = model.getIndexOf( dirStr ); + DefaultComboBoxModel model = (DefaultComboBoxModel) directoryField.getModel(); + int indexOf = model.getIndexOf( dir ); if( indexOf < 0 ) - model.addElement( dirStr ); - directoryField.setSelectedItem( dirStr ); + model.addElement( dir ); + directoryField.setSelectedItem( dir ); // open all properties files in directory String recentFile = state.get( KEY_RECENT_FILE, null ); for( File file : getPropertiesFiles( dir ) ) openFile( file, file.getName().equals( recentFile ) ); - FlatThemeEditorPane themeEditorPane = (FlatThemeEditorPane) tabbedPane.getSelectedComponent(); - if( themeEditorPane != null ) - themeEditorPane.requestFocusInWindow(); - + SwingUtilities.invokeLater( () -> { + activateEditor(); + } ); saveState(); + enableDisableActions(); inLoadDirectory = false; } @@ -240,18 +360,36 @@ public class FlatThemeFileEditor File[] propertiesFiles = dir.listFiles( (d, name) -> { return name.endsWith( ".properties" ); } ); - Arrays.sort( propertiesFiles ); + Arrays.sort( propertiesFiles, (f1, f2) -> { + String n1 = toSortName( f1.getName() ); + String n2 = toSortName( f2.getName() ); + return n1.compareToIgnoreCase( n2 ); + } ); return propertiesFiles; } + private String toSortName( String name ) { + switch( name ) { + case "FlatLaf.properties": return "\0\0"; + case "FlatLightLaf.properties": return "\0\1"; + case "FlatDarkLaf.properties": return "\0\2"; + case "FlatIntelliJLaf.properties": return "\0\3"; + case "FlatDarculaLaf.properties": return "\0\4"; + default: return name; + } + } + private void openFile( File file, boolean select ) { FlatThemeEditorPane themeEditorPane = new FlatThemeEditorPane(); + themeEditorPane.updateFontSize( getFontSizeIncr() ); try { themeEditorPane.load( file ); } catch( IOException ex ) { ex.printStackTrace(); // TODO } + themeEditorPane.initBasePropertyProvider( propertiesBaseManager ); + Supplier titleFun = () -> { return (themeEditorPane.isDirty() ? "* " : "") + StringUtils.removeTrailing( themeEditorPane.getFile().getName(), ".properties" ); @@ -262,6 +400,9 @@ public class FlatThemeFileEditor tabbedPane.setTitleAt( index, titleFun.get() ); } ); + if( state.getBoolean( KEY_PREVIEW, true ) ) + themeEditorPane.showPreview( true ); + tabbedPane.addTab( titleFun.get(), null, themeEditorPane, file.getAbsolutePath() ); if( select ) @@ -272,11 +413,204 @@ public class FlatThemeFileEditor if( inLoadDirectory ) return; + enableDisableActions(); + FlatThemeEditorPane themeEditorPane = (FlatThemeEditorPane) tabbedPane.getSelectedComponent(); String filename = (themeEditorPane != null) ? themeEditorPane.getFile().getName() : null; putPrefsString( state, KEY_RECENT_FILE, filename ); } + private void enableDisableActions() { + boolean dirOpen = (directoryField.getSelectedItem() != null); + boolean editorOpen = (dirOpen &&tabbedPane.getSelectedIndex() >= 0); + + // enable/disable buttons + newButton.setEnabled( dirOpen ); + + // enable/disable menu items + newPropertiesFileMenuItem.setEnabled( dirOpen ); + saveAllMenuItem.setEnabled( editorOpen ); + findMenuItem.setEnabled( editorOpen ); + insertColorMenuItem.setEnabled( editorOpen ); + activateEditorMenuItem.setEnabled( editorOpen ); + nextEditorMenuItem.setEnabled( editorOpen ); + previousEditorMenuItem.setEnabled( editorOpen ); + } + + private boolean newPropertiesFile() { + return newPropertiesFile( dir ); + } + + private boolean newPropertiesFile( File dir ) { + String title = "New Properties File"; + JTextField themeNameField = new JTextField(); + JComboBox baseThemeField = new JComboBox<>( new String[] { + FlatLightLaf.NAME, + FlatDarkLaf.NAME, + FlatIntelliJLaf.NAME, + FlatDarculaLaf.NAME, + } ); + + JOptionPane optionPane = new JOptionPane( new Object[] { + new JLabel( "Theme name:" ), + themeNameField, + new JLabel( "Base Theme:" ), + baseThemeField, + }, JOptionPane.PLAIN_MESSAGE, JOptionPane.OK_CANCEL_OPTION ) { + @Override + public void selectInitialValue() { + super.selectInitialValue(); + themeNameField.requestFocusInWindow(); + } + + @Override + public void setValue( Object newValue ) { + if( Objects.equals( newValue, JOptionPane.OK_OPTION ) ) { + String themeName = themeNameField.getText().trim(); + if( themeName.isEmpty() ) + return; + + if( !SourceVersion.isIdentifier( themeName ) ) { + JOptionPane.showMessageDialog( this, + "'" + themeName + "' is not a valid Java identifier.", + title, JOptionPane.INFORMATION_MESSAGE ); + return; + } + + File file = new File( dir, themeName + ".properties" ); + if( file.exists() ) { + JOptionPane.showMessageDialog( this, "Theme '" + themeName + "' already exists.", title, JOptionPane.INFORMATION_MESSAGE ); + return; + } + + try { + String baseTheme = (String) baseThemeField.getSelectedItem(); + createTheme( file, baseTheme ); + createThemeClass( dir, themeName, baseTheme ); + openFile( file, true ); + } catch( IOException ex ) { + ex.printStackTrace(); + + JOptionPane.showMessageDialog( this, + "Failed to create '" + file + "'." ); + return; + } + } + + super.setValue( newValue ); + } + }; + + JDialog dialog = optionPane.createDialog( this, title ); + dialog.setVisible( true ); + + return Objects.equals( optionPane.getValue(), JOptionPane.OK_OPTION ); + } + + private void createTheme( File file, String baseTheme ) + throws IOException + { + StringBuilder buf = new StringBuilder(); + buf.append( "# base theme (light, dark, intellij or darcula); only used by theme editor\n" ); + switch( baseTheme ) { + case FlatLightLaf.NAME: buf.append( "@baseTheme = light\n" ); break; + case FlatDarkLaf.NAME: buf.append( "@baseTheme = dark\n" ); break; + case FlatIntelliJLaf.NAME: buf.append( "@baseTheme = intellij\n" ); break; + case FlatDarculaLaf.NAME: buf.append( "@baseTheme = darcula\n" ); break; + } + + writeFile( file, buf.toString() ); + } + + private void createThemeClass( File dir, String themeName, String baseTheme ) + throws IOException + { + // search for "resources" parent directory that has "java" directory at same level + File classDir = dir; + String subPath = null; + String pkg = null; + for( File d = dir; d != null; d = d.getParentFile() ) { + String name = d.getName(); + if( name.equals( "resources" ) ) { + File javaDir = new File( d.getParentFile(), "java" ); + if( javaDir.isDirectory() ) { + classDir = new File( javaDir, subPath ); + classDir.mkdirs(); + pkg = subPath.replace( '/', '.' ); + } + break; + } + subPath = (subPath != null) ? (name + '/' + subPath) : name; + } + + // search for "java" or "src" parent directories for package statement + if( pkg == null ) { + String pkg2 = null; + for( File d = dir; d != null; d = d.getParentFile() ) { + String name = d.getName(); + if( name.equals( "java" ) || name.equals( "src" )) { + pkg = pkg2; + break; + } + pkg2 = (pkg2 != null) ? (name + '.' + pkg2) : name; + } + } + + // do not overwrite exiting class + File file = new File( classDir, themeName + ".java" ); + if( file.exists() ) + return; + + String themeBaseClass; + switch( baseTheme ) { + default: + case FlatLightLaf.NAME: themeBaseClass = "FlatLightLaf"; break; + case FlatDarkLaf.NAME: themeBaseClass = "FlatDarkLaf"; break; + case FlatIntelliJLaf.NAME: themeBaseClass = "FlatIntelliJLaf"; break; + case FlatDarculaLaf.NAME: themeBaseClass = "FlatDarculaLaf"; break; + } + + String pkgStmt = (pkg != null) ? "package " + pkg + ";\n\n" : ""; + String classBody = CLASS_TEMPLATE + .replace( "${themeClass}", themeName ) + .replace( "${themeBaseClass}", themeBaseClass ); + + writeFile( file, pkgStmt + classBody ); + } + + private static final String CLASS_TEMPLATE = + "import com.formdev.flatlaf.${themeBaseClass};\n" + + "\n" + + "public class ${themeClass}\n" + + " extends ${themeBaseClass}\n" + + "{\n" + + " public static final String NAME = \"${themeClass}\";\n" + + "\n" + + " public static boolean setup() {\n" + + " return setup( new ${themeClass}() );\n" + + " }\n" + + "\n" + + " public static void installLafInfo() {\n" + + " installLafInfo( NAME, ${themeClass}.class );\n" + + " }\n" + + "\n" + + " @Override\n" + + " public String getName() {\n" + + " return NAME;\n" + + " }\n" + + "}\n"; + + private static void writeFile( File file, String content ) + throws IOException + { + try( + FileOutputStream out = new FileOutputStream( file ); + Writer writer = new OutputStreamWriter( out, "UTF-8" ); + ) { + writer.write( content ); + } + } + private boolean saveAll() { for( FlatThemeEditorPane themeEditorPane : getThemeEditorPanes() ) { if( !themeEditorPane.saveIfDirty() ) @@ -312,24 +646,23 @@ public class FlatThemeFileEditor return result; } - private void nextEditor() { - if( tabbedPane.getTabCount() == 0 ) - return; + private void activateEditor() { + FlatThemeEditorPane themeEditorPane = (FlatThemeEditorPane) tabbedPane.getSelectedComponent(); + if( themeEditorPane != null ) + themeEditorPane.requestFocusInWindow(); + } - int index = tabbedPane.getSelectedIndex() + 1; - if( index >= tabbedPane.getTabCount() ) - index = 0; - tabbedPane.setSelectedIndex( index ); + private void nextEditor() { + notifyTabbedPaneAction( tabbedPane.getActionMap().get( "navigatePageDown" ) ); } private void previousEditor() { - if( tabbedPane.getTabCount() == 0 ) - return; + notifyTabbedPaneAction( tabbedPane.getActionMap().get( "navigatePageUp" ) ); + } - int index = tabbedPane.getSelectedIndex() - 1; - if( index < 0 ) - index = tabbedPane.getTabCount() - 1; - tabbedPane.setSelectedIndex( index ); + private void notifyTabbedPaneAction( Action action ) { + if( action != null && action.isEnabled() ) + action.actionPerformed( new ActionEvent( tabbedPane, ActionEvent.ACTION_PERFORMED, null ) ); } private void find() { @@ -338,21 +671,150 @@ public class FlatThemeFileEditor themeEditorPane.showFindReplaceBar(); } + private void insertColor() { + FlatThemeEditorPane themeEditorPane = (FlatThemeEditorPane) tabbedPane.getSelectedComponent(); + if( themeEditorPane != null ) + themeEditorPane.notifyTextAreaAction( FlatSyntaxTextAreaActions.insertColorAction ); + } + + private void pickColor() { + FlatThemeEditorPane themeEditorPane = (FlatThemeEditorPane) tabbedPane.getSelectedComponent(); + if( themeEditorPane != null ) + themeEditorPane.notifyTextAreaAction( FlatSyntaxTextAreaActions.pickColorAction ); + } + + private void showHidePreview() { + boolean show = previewMenuItem.isSelected(); + for( FlatThemeEditorPane themeEditorPane : getThemeEditorPanes() ) + themeEditorPane.showPreview( show ); + putPrefsBoolean( state, KEY_PREVIEW, show, true ); + } + + private void lightLaf() { + applyLookAndFeel( FlatLightLaf.class.getName() ); + } + + private void darkLaf() { + applyLookAndFeel( FlatDarkLaf.class.getName() ); + } + + private void applyLookAndFeel( String lafClassName ) { + if( UIManager.getLookAndFeel().getClass().getName().equals( lafClassName ) ) + return; + + try { + UIManager.setLookAndFeel( lafClassName ); + FlatLaf.updateUI(); + for( FlatThemeEditorPane themeEditorPane : getThemeEditorPanes() ) + themeEditorPane.updateTheme(); + state.put( KEY_LAF, lafClassName ); + } catch( Exception ex ) { + ex.printStackTrace(); + } + } + + private void incrFontSize() { + applyFontSizeIncr( getFontSizeIncr() + 1 ); + } + + private void decrFontSize() { + applyFontSizeIncr( getFontSizeIncr() - 1 ); + } + + private void resetFontSize() { + applyFontSizeIncr( 0 ); + } + + private void applyFontSizeIncr( int sizeIncr ) { + if( sizeIncr < -5 ) + sizeIncr = -5; + if( sizeIncr == getFontSizeIncr() ) + return; + + for( FlatThemeEditorPane themeEditorPane : getThemeEditorPanes() ) + themeEditorPane.updateFontSize( sizeIncr ); + state.putInt( KEY_FONT_SIZE_INCR, sizeIncr ); + } + + private int getFontSizeIncr() { + return state.getInt( KEY_FONT_SIZE_INCR, 0 ); + } + + private void colorModelChanged() { + FlatThemeEditorOverlay.showHSL = showHSLColorsMenuItem.isSelected(); + FlatThemeEditorOverlay.showRGB = showRGBColorsMenuItem.isSelected(); + FlatThemeEditorOverlay.showLuma = showColorLumaMenuItem.isSelected(); + + putPrefsBoolean( state, KEY_SHOW_HSL_COLORS, FlatThemeEditorOverlay.showHSL, true ); + putPrefsBoolean( state, KEY_SHOW_RGB_COLORS, FlatThemeEditorOverlay.showRGB, false ); + putPrefsBoolean( state, KEY_SHOW_COLOR_LUMA, FlatThemeEditorOverlay.showLuma, false ); + + repaint(); + } + + private void about() { + JLabel titleLabel = new JLabel( "FlatLaf Theme Editor" ); + titleLabel.putClientProperty( FlatClientProperties.STYLE_CLASS, "h1" ); + + String link = "https://www.formdev.com/flatlaf/"; + JLabel linkLabel = new JLabel( "" + link + "" ); + linkLabel.setCursor( Cursor.getPredefinedCursor( Cursor.HAND_CURSOR ) ); + linkLabel.addMouseListener( new MouseAdapter() { + @Override + public void mouseClicked( MouseEvent e ) { + try { + Desktop.getDesktop().browse( new URI( link ) ); + } catch( IOException | URISyntaxException ex ) { + JOptionPane.showMessageDialog( linkLabel, + "Failed to open '" + link + "' in browser.", + "About", JOptionPane.PLAIN_MESSAGE ); + } + } + } ); + + + JOptionPane.showMessageDialog( this, + new Object[] { + titleLabel, + "Edits FlatLaf Swing look and feel theme files", + " ", + "Copyright 2019-" + Year.now() + " FormDev Software GmbH", + linkLabel, + }, + "About", JOptionPane.PLAIN_MESSAGE ); + } + private void restoreState() { state = Preferences.userRoot().node( PREFS_ROOT_PATH ); // restore directories history String[] directories = getPrefsStrings( state, KEY_DIRECTORIES ); - SortedComboBoxModel model = new SortedComboBoxModel<>( directories ); + SortedComboBoxModel model = new SortedComboBoxModel<>( new File[0] ); + for( String dirStr : directories ) { + File dir = new File( dirStr ); + if( dir.isDirectory() ) + model.addElement( dir ); + } directoryField.setModel( model ); + + // restore overlay color models + FlatThemeEditorOverlay.showHSL = state.getBoolean( KEY_SHOW_HSL_COLORS, true ); + FlatThemeEditorOverlay.showRGB = state.getBoolean( KEY_SHOW_RGB_COLORS, false ); + FlatThemeEditorOverlay.showLuma = state.getBoolean( KEY_SHOW_COLOR_LUMA, false ); + + // restore menu item selection + previewMenuItem.setSelected( state.getBoolean( KEY_PREVIEW, true ) ); + showHSLColorsMenuItem.setSelected( FlatThemeEditorOverlay.showHSL ); + showRGBColorsMenuItem.setSelected( FlatThemeEditorOverlay.showRGB ); + showColorLumaMenuItem.setSelected( FlatThemeEditorOverlay.showLuma ); } private void saveState() { // save directories history - ComboBoxModel model = directoryField.getModel(); + ComboBoxModel model = directoryField.getModel(); String[] directories = new String[model.getSize()]; for( int i = 0; i < directories.length; i++ ) - directories[i] = model.getElementAt( i ); + directories[i] = model.getElementAt( i ).getAbsolutePath(); putPrefsStrings( state, KEY_DIRECTORIES, directories ); // save recent directory @@ -365,10 +827,10 @@ public class FlatThemeFileEditor List list = StringUtils.split( windowBoundsStr, ',' ); if( list.size() >= 4 ) { try { - int x = Integer.parseInt( list.get( 0 ) ); - int y = Integer.parseInt( list.get( 1 ) ); - int w = Integer.parseInt( list.get( 2 ) ); - int h = Integer.parseInt( list.get( 3 ) ); + int x = UIScale.scale( Integer.parseInt( list.get( 0 ) ) ); + int y = UIScale.scale( Integer.parseInt( list.get( 1 ) ) ); + int w = UIScale.scale( Integer.parseInt( list.get( 2 ) ) ); + int h = UIScale.scale( Integer.parseInt( list.get( 3 ) ) ); // limit to screen size GraphicsConfiguration gc = getGraphicsConfiguration(); @@ -400,10 +862,21 @@ public class FlatThemeFileEditor private void saveWindowBounds() { Rectangle r = getBounds(); - state.put( KEY_WINDOW_BOUNDS, r.x + "," + r.y + ',' + r.width + ',' + r.height ); + int x = UIScale.unscale( r.x ); + int y = UIScale.unscale( r.y ); + int width = UIScale.unscale( r.width ); + int height = UIScale.unscale( r.height ); + state.put( KEY_WINDOW_BOUNDS, x + "," + y + ',' + width + ',' + height ); } - private static void putPrefsString( Preferences prefs, String key, String value ) { + static void putPrefsBoolean( Preferences prefs, String key, boolean value, boolean defaultValue ) { + if( value != defaultValue ) + prefs.putBoolean( key, value ); + else + prefs.remove( key ); + } + + static void putPrefsString( Preferences prefs, String key, String value ) { if( !StringUtils.isEmpty( value ) ) prefs.put( key, value ); else @@ -434,16 +907,32 @@ public class FlatThemeFileEditor menuBar = new JMenuBar(); fileMenu = new JMenu(); openDirectoryMenuItem = new JMenuItem(); + newPropertiesFileMenuItem = new JMenuItem(); saveAllMenuItem = new JMenuItem(); exitMenuItem = new JMenuItem(); editMenu = new JMenu(); findMenuItem = new JMenuItem(); + insertColorMenuItem = new JMenuItem(); + pickColorMenuItem = new JMenuItem(); + viewMenu = new JMenu(); + previewMenuItem = new JCheckBoxMenuItem(); + lightLafMenuItem = new JRadioButtonMenuItem(); + darkLafMenuItem = new JRadioButtonMenuItem(); + incrFontSizeMenuItem = new JMenuItem(); + decrFontSizeMenuItem = new JMenuItem(); + resetFontSizeMenuItem = new JMenuItem(); + showHSLColorsMenuItem = new JCheckBoxMenuItem(); + showRGBColorsMenuItem = new JCheckBoxMenuItem(); + showColorLumaMenuItem = new JCheckBoxMenuItem(); windowMenu = new JMenu(); + activateEditorMenuItem = new JMenuItem(); nextEditorMenuItem = new JMenuItem(); previousEditorMenuItem = new JMenuItem(); + helpMenu = new JMenu(); + aboutMenuItem = new JMenuItem(); controlPanel = new JPanel(); directoryLabel = new JLabel(); - directoryField = new JComboBox<>(); + directoryField = new FlatThemeFileEditor.DirectoryComboBox(); openDirectoryButton = new JButton(); tabbedPane = new FlatTabbedPane(); @@ -481,6 +970,13 @@ public class FlatThemeFileEditor openDirectoryMenuItem.addActionListener(e -> openDirectory()); fileMenu.add(openDirectoryMenuItem); + //---- newPropertiesFileMenuItem ---- + newPropertiesFileMenuItem.setText("New Properties File..."); + newPropertiesFileMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); + newPropertiesFileMenuItem.setMnemonic('N'); + newPropertiesFileMenuItem.addActionListener(e -> newPropertiesFile()); + fileMenu.add(newPropertiesFileMenuItem); + //---- saveAllMenuItem ---- saveAllMenuItem.setText("Save All"); saveAllMenuItem.setMnemonic('S'); @@ -504,22 +1000,106 @@ public class FlatThemeFileEditor editMenu.setMnemonic('E'); //---- findMenuItem ---- - findMenuItem.setText("Find/Replace..."); + findMenuItem.setText("Find/Replace"); findMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); findMenuItem.setMnemonic('F'); findMenuItem.addActionListener(e -> find()); editMenu.add(findMenuItem); + editMenu.addSeparator(); + + //---- insertColorMenuItem ---- + insertColorMenuItem.setText("Insert Color"); + insertColorMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); + insertColorMenuItem.addActionListener(e -> insertColor()); + editMenu.add(insertColorMenuItem); + + //---- pickColorMenuItem ---- + pickColorMenuItem.setText("Pick Color from Screen"); + pickColorMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_G, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()|KeyEvent.SHIFT_DOWN_MASK)); + pickColorMenuItem.addActionListener(e -> pickColor()); + editMenu.add(pickColorMenuItem); } menuBar.add(editMenu); + //======== viewMenu ======== + { + viewMenu.setText("View"); + viewMenu.setMnemonic('V'); + + //---- previewMenuItem ---- + previewMenuItem.setText("Preview"); + previewMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); + previewMenuItem.addActionListener(e -> showHidePreview()); + viewMenu.add(previewMenuItem); + viewMenu.addSeparator(); + + //---- lightLafMenuItem ---- + lightLafMenuItem.setText("Light Laf"); + lightLafMenuItem.setMnemonic('L'); + lightLafMenuItem.setSelected(true); + lightLafMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, KeyEvent.ALT_DOWN_MASK)); + lightLafMenuItem.addActionListener(e -> lightLaf()); + viewMenu.add(lightLafMenuItem); + + //---- darkLafMenuItem ---- + darkLafMenuItem.setText("Dark Laf"); + darkLafMenuItem.setMnemonic('D'); + darkLafMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F2, KeyEvent.ALT_DOWN_MASK)); + darkLafMenuItem.addActionListener(e -> darkLaf()); + viewMenu.add(darkLafMenuItem); + viewMenu.addSeparator(); + + //---- incrFontSizeMenuItem ---- + incrFontSizeMenuItem.setText("Increase Font Size"); + incrFontSizeMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PLUS, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); + incrFontSizeMenuItem.addActionListener(e -> incrFontSize()); + viewMenu.add(incrFontSizeMenuItem); + + //---- decrFontSizeMenuItem ---- + decrFontSizeMenuItem.setText("Decrease Font Size"); + decrFontSizeMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_MINUS, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); + decrFontSizeMenuItem.addActionListener(e -> decrFontSize()); + viewMenu.add(decrFontSizeMenuItem); + + //---- resetFontSizeMenuItem ---- + resetFontSizeMenuItem.setText("Reset Font Size"); + resetFontSizeMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_0, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); + resetFontSizeMenuItem.addActionListener(e -> resetFontSize()); + viewMenu.add(resetFontSizeMenuItem); + viewMenu.addSeparator(); + + //---- showHSLColorsMenuItem ---- + showHSLColorsMenuItem.setText("Show HSL colors"); + showHSLColorsMenuItem.addActionListener(e -> colorModelChanged()); + viewMenu.add(showHSLColorsMenuItem); + + //---- showRGBColorsMenuItem ---- + showRGBColorsMenuItem.setText("Show RGB colors (hex)"); + showRGBColorsMenuItem.addActionListener(e -> colorModelChanged()); + viewMenu.add(showRGBColorsMenuItem); + + //---- showColorLumaMenuItem ---- + showColorLumaMenuItem.setText("Show color luma"); + showColorLumaMenuItem.addActionListener(e -> colorModelChanged()); + viewMenu.add(showColorLumaMenuItem); + } + menuBar.add(viewMenu); + //======== windowMenu ======== { windowMenu.setText("Window"); windowMenu.setMnemonic('W'); + //---- activateEditorMenuItem ---- + activateEditorMenuItem.setText("Activate Editor"); + activateEditorMenuItem.setMnemonic('A'); + activateEditorMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F12, 0)); + activateEditorMenuItem.addActionListener(e -> activateEditor()); + windowMenu.add(activateEditorMenuItem); + //---- nextEditorMenuItem ---- nextEditorMenuItem.setText("Next Editor"); - nextEditorMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); + nextEditorMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_DOWN, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); nextEditorMenuItem.setMnemonic('N'); nextEditorMenuItem.addActionListener(e -> nextEditor()); windowMenu.add(nextEditorMenuItem); @@ -527,11 +1107,24 @@ public class FlatThemeFileEditor //---- previousEditorMenuItem ---- previousEditorMenuItem.setText("Previous Editor"); previousEditorMenuItem.setMnemonic('P'); - previousEditorMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_TAB, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()|KeyEvent.SHIFT_DOWN_MASK)); + previousEditorMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_PAGE_UP, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask())); previousEditorMenuItem.addActionListener(e -> previousEditor()); windowMenu.add(previousEditorMenuItem); } menuBar.add(windowMenu); + + //======== helpMenu ======== + { + helpMenu.setText("Help"); + helpMenu.setMnemonic('H'); + + //---- aboutMenuItem ---- + aboutMenuItem.setText("About"); + aboutMenuItem.setMnemonic('A'); + aboutMenuItem.addActionListener(e -> about()); + helpMenu.add(aboutMenuItem); + } + menuBar.add(helpMenu); } setJMenuBar(menuBar); @@ -553,6 +1146,7 @@ public class FlatThemeFileEditor //---- directoryField ---- directoryField.setEditable(false); directoryField.setFocusable(false); + directoryField.setMaximumRowCount(30); directoryField.addActionListener(e -> directoryChanged()); controlPanel.add(directoryField, "cell 1 0"); @@ -570,6 +1164,11 @@ public class FlatThemeFileEditor tabbedPane.addChangeListener(e -> selectedTabChanged()); } contentPane.add(tabbedPane, BorderLayout.CENTER); + + //---- lafButtonGroup ---- + ButtonGroup lafButtonGroup = new ButtonGroup(); + lafButtonGroup.add(lightLafMenuItem); + lafButtonGroup.add(darkLafMenuItem); // JFormDesigner - End of component initialization //GEN-END:initComponents } @@ -577,16 +1176,32 @@ public class FlatThemeFileEditor private JMenuBar menuBar; private JMenu fileMenu; private JMenuItem openDirectoryMenuItem; + private JMenuItem newPropertiesFileMenuItem; private JMenuItem saveAllMenuItem; private JMenuItem exitMenuItem; private JMenu editMenu; private JMenuItem findMenuItem; + private JMenuItem insertColorMenuItem; + private JMenuItem pickColorMenuItem; + private JMenu viewMenu; + private JCheckBoxMenuItem previewMenuItem; + private JRadioButtonMenuItem lightLafMenuItem; + private JRadioButtonMenuItem darkLafMenuItem; + private JMenuItem incrFontSizeMenuItem; + private JMenuItem decrFontSizeMenuItem; + private JMenuItem resetFontSizeMenuItem; + private JCheckBoxMenuItem showHSLColorsMenuItem; + private JCheckBoxMenuItem showRGBColorsMenuItem; + private JCheckBoxMenuItem showColorLumaMenuItem; private JMenu windowMenu; + private JMenuItem activateEditorMenuItem; private JMenuItem nextEditorMenuItem; private JMenuItem previousEditorMenuItem; + private JMenu helpMenu; + private JMenuItem aboutMenuItem; private JPanel controlPanel; private JLabel directoryLabel; - private JComboBox directoryField; + private JComboBox directoryField; private JButton openDirectoryButton; private FlatTabbedPane tabbedPane; // JFormDesigner - End of variables declaration //GEN-END:variables @@ -644,9 +1259,139 @@ public class FlatThemeFileEditor else if( cmp > 0 ) high = mid - 1; else - return mid; // key found + return mid; // found } - return -(low + 1); // key not found. + + // not found + return -(low + 1); } } + + //---- class DirectoryComboBox -------------------------------------------- + + private class DirectoryComboBox + extends JComboBox + { + static final int CLEAR_WIDTH = 24; + + @Override + public void setSelectedIndex( int index ) { + if( isClearHit() ) { + removeItemAt( index ); + saveState(); + return; + } + + super.setSelectedIndex( index ); + } + + @Override + public void setPopupVisible( boolean v ) { + if( isClearHit() ) + return; + + super.setPopupVisible( v ); + } + + private boolean isClearHit() { + AWTEvent currentEvent = EventQueue.getCurrentEvent(); + if( currentEvent instanceof MouseEvent && currentEvent.getSource() instanceof JList ) { + MouseEvent e = (MouseEvent) currentEvent; + JList list = (JList) currentEvent.getSource(); + if( e.getX() >= list.getWidth() - UIScale.scale( CLEAR_WIDTH ) ) + return true; + } + return false; + } + } + + //---- class DirectoryRenderer -------------------------------------------- + + private static class DirectoryRenderer + extends DefaultListCellRenderer + { + private static class MyClearIcon + extends FlatClearIcon + { + void setClearIconColor( Color color ) { + clearIconColor = color; + } + } + + private final JComboBox comboBox; + private final MyClearIcon clearIcon = new MyClearIcon(); + private boolean paintClearIcon; + private Color highlightColor; + + DirectoryRenderer( JComboBox comboBox ) { + this.comboBox = comboBox; + } + + @Override + public Component getListCellRendererComponent( JList list, Object value, + int index, boolean isSelected, boolean cellHasFocus ) + { + if( index > 0 && !isSelected ) { + File dir = (File) value; + File previousDir = (File) list.getModel().getElementAt( index - 1 ); + String path = dir.getAbsolutePath(); + String previousPath = previousDir.getAbsolutePath(); + for( File d = dir.getParentFile(); d != null; d = d.getParentFile() ) { + String p = d.getAbsolutePath(); + if( previousPath.startsWith( p ) && d.getParent() != null ) { + value = "" + toDimmedText( p ) + path.substring( p.length() ) + ""; + break; + } + } + } + + super.getListCellRendererComponent( list, value, index, isSelected, cellHasFocus ); + + highlightColor =(index >= 0 && index == comboBox.getSelectedIndex()) + ? list.getSelectionBackground() + : null; + + paintClearIcon = isSelected; + if( paintClearIcon ) + clearIcon.setClearIconColor( getForeground() ); + + return this; + } + + private static String toDimmedText( String text ) { + Color color = UIManager.getColor( "Label.disabledForeground" ); + if( color == null ) + color = UIManager.getColor( "Label.disabledText" ); + if( color == null ) + color = Color.GRAY; + return String.format( "%s", + color.getRGB() & 0xffffff, text ); + } + + @Override + protected void paintComponent( Graphics g ) { + super.paintComponent( g ); + + if( highlightColor != null ) { + g.setColor( new Color( 0x33000000 | (highlightColor.getRGB() & 0xffffff), true ) ); + g.fillRect( 0, 0, getWidth(), getHeight() ); + } + + if( paintClearIcon ) { + int width = UIScale.scale( DirectoryComboBox.CLEAR_WIDTH ); + int height = getHeight(); + int x = getWidth() - width; + int y = 0; + + // make clear button area brighter + g.setColor( new Color( 0x33ffffff, true ) ); + g.fillRect( x, y, width, height ); + + // paint clear icon + int ix = x + ((width - clearIcon.getIconWidth()) / 2); + int iy = y + ((height - clearIcon.getIconHeight()) / 2); + clearIcon.paintIcon( this, g, ix, iy ); + } + } + } } diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.jfd b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.jfd index b8d961e0..3eb1808b 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.jfd +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeFileEditor.jfd @@ -1,4 +1,4 @@ -JFDML JFormDesigner: "7.0.3.1.342" Java: "15" encoding: "UTF-8" +JFDML JFormDesigner: "7.0.5.0.382" Java: "16" encoding: "UTF-8" new FormModel { contentType: "form/swing" @@ -28,8 +28,10 @@ new FormModel { name: "directoryField" "editable": false "focusable": false + "maximumRowCount": 30 auxiliary() { - "JavaCodeGenerator.typeParameters": "String" + "JavaCodeGenerator.typeParameters": "File" + "JavaCodeGenerator.customCreateCode": "new FlatThemeFileEditor.DirectoryComboBox();" } addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "directoryChanged", false ) ) }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { @@ -65,6 +67,13 @@ new FormModel { "accelerator": static javax.swing.KeyStroke getKeyStroke( 79, 4226, false ) addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "openDirectory", false ) ) } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "newPropertiesFileMenuItem" + "text": "New Properties File..." + "accelerator": static javax.swing.KeyStroke getKeyStroke( 78, 4356, false ) + "mnemonic": 78 + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "newPropertiesFile", false ) ) + } ) add( new FormComponent( "javax.swing.JMenuItem" ) { name: "saveAllMenuItem" "text": "Save All" @@ -89,20 +98,112 @@ new FormModel { "mnemonic": 69 add( new FormComponent( "javax.swing.JMenuItem" ) { name: "findMenuItem" - "text": "Find/Replace..." + "text": "Find/Replace" "accelerator": static javax.swing.KeyStroke getKeyStroke( 70, 4226, false ) "mnemonic": 70 addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "find", false ) ) } ) + add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) { + name: "separator5" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "insertColorMenuItem" + "text": "Insert Color" + "accelerator": static javax.swing.KeyStroke getKeyStroke( 71, 4356, false ) + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "insertColor", false ) ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "pickColorMenuItem" + "text": "Pick Color from Screen" + "accelerator": static javax.swing.KeyStroke getKeyStroke( 71, 4421, false ) + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "pickColor", false ) ) + } ) + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "viewMenu" + "text": "View" + "mnemonic": 86 + add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) { + name: "previewMenuItem" + "text": "Preview" + "accelerator": static javax.swing.KeyStroke getKeyStroke( 80, 4356, false ) + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showHidePreview", false ) ) + } ) + add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) { + name: "separator3" + } ) + add( new FormComponent( "javax.swing.JRadioButtonMenuItem" ) { + name: "lightLafMenuItem" + "text": "Light Laf" + "$buttonGroup": new FormReference( "lafButtonGroup" ) + "mnemonic": 76 + "selected": true + "accelerator": static javax.swing.KeyStroke getKeyStroke( 112, 520, false ) + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "lightLaf", false ) ) + } ) + add( new FormComponent( "javax.swing.JRadioButtonMenuItem" ) { + name: "darkLafMenuItem" + "text": "Dark Laf" + "$buttonGroup": new FormReference( "lafButtonGroup" ) + "mnemonic": 68 + "accelerator": static javax.swing.KeyStroke getKeyStroke( 113, 520, false ) + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "darkLaf", false ) ) + } ) + add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) { + name: "separator2" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "incrFontSizeMenuItem" + "text": "Increase Font Size" + "accelerator": static javax.swing.KeyStroke getKeyStroke( 521, 4226, false ) + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "incrFontSize", false ) ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "decrFontSizeMenuItem" + "text": "Decrease Font Size" + "accelerator": static javax.swing.KeyStroke getKeyStroke( 45, 4226, false ) + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "decrFontSize", false ) ) + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "resetFontSizeMenuItem" + "text": "Reset Font Size" + "accelerator": static javax.swing.KeyStroke getKeyStroke( 48, 4226, false ) + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "resetFontSize", false ) ) + } ) + add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) { + name: "separator4" + } ) + add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) { + name: "showHSLColorsMenuItem" + "text": "Show HSL colors" + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "colorModelChanged", false ) ) + } ) + add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) { + name: "showRGBColorsMenuItem" + "text": "Show RGB colors (hex)" + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "colorModelChanged", false ) ) + } ) + add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) { + name: "showColorLumaMenuItem" + "text": "Show color luma" + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "colorModelChanged", false ) ) + } ) } ) add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { name: "windowMenu" "text": "Window" "mnemonic": 87 + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "activateEditorMenuItem" + "text": "Activate Editor" + "mnemonic": 65 + "accelerator": static javax.swing.KeyStroke getKeyStroke( 123, 0, false ) + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "activateEditor", false ) ) + } ) add( new FormComponent( "javax.swing.JMenuItem" ) { name: "nextEditorMenuItem" "text": "Next Editor" - "accelerator": static javax.swing.KeyStroke getKeyStroke( 9, 4226, false ) + "accelerator": static javax.swing.KeyStroke getKeyStroke( 34, 4226, false ) "mnemonic": 78 addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "nextEditor", false ) ) } ) @@ -110,14 +211,30 @@ new FormModel { name: "previousEditorMenuItem" "text": "Previous Editor" "mnemonic": 80 - "accelerator": static javax.swing.KeyStroke getKeyStroke( 9, 4291, false ) + "accelerator": static javax.swing.KeyStroke getKeyStroke( 33, 4226, false ) addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "previousEditor", false ) ) } ) } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "helpMenu" + "text": "Help" + "mnemonic": 72 + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "aboutMenuItem" + "text": "About" + "mnemonic": 65 + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "about", false ) ) + } ) + } ) } }, new FormLayoutConstraints( null ) { "location": new java.awt.Point( 0, 0 ) "size": new java.awt.Dimension( 535, 300 ) } ) + add( new FormNonVisual( "javax.swing.ButtonGroup" ) { + name: "lafButtonGroup" + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 0, 310 ) + } ) } } diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreview.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreview.java new file mode 100644 index 00000000..ca004201 --- /dev/null +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreview.java @@ -0,0 +1,388 @@ +/* +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.themeeditor; + +import java.awt.*; +import java.awt.event.HierarchyEvent; +import java.util.HashMap; +import java.util.Map; +import java.util.WeakHashMap; +import java.util.prefs.Preferences; +import javax.swing.*; +import javax.swing.UIDefaults.ActiveValue; +import javax.swing.UIDefaults.LazyValue; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.UIDefaultsLoaderAccessor; +import com.formdev.flatlaf.extras.components.*; + +/** + * @author Karl Tauber + */ +class FlatThemePreview + extends JPanel + implements DocumentListener +{ + private static final String KEY_SELECTED_TAB = "preview.selectedTab"; + + private final FlatSyntaxTextArea textArea; + private final Timer timer; + final Preferences state; + + private final FlatThemePreviewAll allTab; + private final FlatThemePreviewButtons buttonsTab; + private final FlatThemePreviewSwitches switchesTab; + private final FlatThemePreviewFonts fontsTab; + + private final Map lazyValueCache = new WeakHashMap<>(); + private int runWithUIDefaultsGetterLevel; + private boolean inGetDefaultFont; + private boolean inGetVariables; + + FlatThemePreview( FlatSyntaxTextArea textArea ) { + this.textArea = textArea; + state = Preferences.userRoot().node( FlatThemeFileEditor.PREFS_ROOT_PATH ); + + initComponents(); + + // add tabs + allTab = new FlatThemePreviewAll( this ); + buttonsTab = new FlatThemePreviewButtons( this ); + switchesTab = new FlatThemePreviewSwitches( this ); + fontsTab = new FlatThemePreviewFonts(); + tabbedPane.addTab( "All", createPreviewTab( allTab ) ); + tabbedPane.addTab( "Buttons", createPreviewTab( buttonsTab ) ); + tabbedPane.addTab( "Switches", createPreviewTab( switchesTab ) ); + tabbedPane.addTab( "Fonts", createPreviewTab( fontsTab ) ); + selectRecentTab(); + tabbedPane.addChangeListener( e -> selectedTabChanged() ); + + // timer used for delayed preview updates + timer = new Timer( 300, e -> update() ); + timer.setRepeats( false ); + + // listen to changes in text area to automatically update preview + textArea.getDocument().addDocumentListener( this ); + + // update when showing preview (e.g. activating tab) + addHierarchyListener( e -> { + if( (e.getChangeFlags() & HierarchyEvent.SHOWING_CHANGED) != 0 && isShowing() ) + selectRecentTab(); + updateLater(); + } ); + } + + private JScrollPane createPreviewTab( JComponent c ) { + JScrollPane scrollPane = new JScrollPane( new PreviewPanel( c ) ); + scrollPane.setHorizontalScrollBarPolicy( JScrollPane.HORIZONTAL_SCROLLBAR_NEVER ); + scrollPane.setBorder( BorderFactory.createEmptyBorder() ); + scrollPane.getVerticalScrollBar().setUnitIncrement( 20 ); + scrollPane.getHorizontalScrollBar().setUnitIncrement( 20 ); + return scrollPane; + } + + private void selectRecentTab() { + int selectedTab = state.getInt( KEY_SELECTED_TAB, -1 ); + if( selectedTab >= 0 && selectedTab < tabbedPane.getTabCount() ) { + tabbedPane.setSelectedIndex( selectedTab ); + + switch( selectedTab ) { + case 0: allTab.activated(); break; + case 1: buttonsTab.activated(); break; + case 2: switchesTab.activated(); break; + } + } + } + + private void selectedTabChanged() { + update(); + state.putInt( KEY_SELECTED_TAB, tabbedPane.getSelectedIndex() ); + } + + @Override + public void insertUpdate( DocumentEvent e ) { + timer.restart(); + } + + @Override + public void removeUpdate( DocumentEvent e ) { + timer.restart(); + } + + @Override + public void changedUpdate( DocumentEvent e ) { + } + + void updateLater() { + EventQueue.invokeLater( this::update ); + } + + private void update() { + if( !isShowing() ) + return; + + runWithUIDefaultsGetter( this::updateComponentTreeUI ); + } + + private void updateComponentTreeUI() { + try { + Component selComp = tabbedPane.getSelectedComponent(); + if( selComp != null ) { + if( selComp instanceof JScrollPane ) + selComp = ((JScrollPane)selComp).getViewport().getView(); + SwingUtilities.updateComponentTreeUI( selComp ); + } + } catch( Exception ex ) { + ex.printStackTrace(); + } + } + + void runWithUIDefaultsGetter( Runnable runnable ) { + try { + runWithUIDefaultsGetterLevel++; + if( runWithUIDefaultsGetterLevel == 1 ) + FlatLaf.runWithUIDefaultsGetter( this::getUIDefaultProperty, runnable ); + else + runnable.run(); + } finally { + runWithUIDefaultsGetterLevel--; + } + } + + @SuppressWarnings( "unchecked" ) + Object getUIDefaultProperty( Object key ) { + // avoid StackOverflowError because "defaultFont" value is an active value + // that itself uses UIManager.getFont( "defaultFont" ) to get base font + if( inGetDefaultFont ) + return null; + + if( !(key instanceof String) ) + return null; + + // ignore custom UI delegates for preview because those classes + // are not available in theme editor + if( ((String)key).endsWith( "UI" ) ) + return null; + + // handle access to variables map, which is used in styles + if( UIDefaultsLoaderAccessor.KEY_VARIABLES.equals( key ) ) { + if( inGetVariables ) + return null; + + inGetVariables = true; + try { + return new VariablesDelegateMap( (Map) UIManager.get( UIDefaultsLoaderAccessor.KEY_VARIABLES ) ); + } finally { + inGetVariables = false; + } + } + + Object value = textArea.propertiesSupport.getParsedProperty( (String) key ); + + boolean isDefaultFont = "defaultFont".equals( key ); + inGetDefaultFont = isDefaultFont; + try { + if( value instanceof LazyValue ) { + value = lazyValueCache.computeIfAbsent( (LazyValue) value, k -> { + return k.createValue( null ); + } ); + } else if( value instanceof ActiveValue ) + value = ((ActiveValue)value).createValue( null ); + } finally { + inGetDefaultFont = false; + } + +// System.out.println( key + " = " + value ); + + // for "defaultFont" never return a value that is not a font + // (e.g. a color for "defaultFont = #fff") to avoid StackOverflowError + // in Active.createValue() + if( isDefaultFont && !(value instanceof Font) ) + return null; + + // If value is null and is a property that is defined in a core theme, + // then force the value to null. + // This is necessary for cases where the current application Laf defines a property + // but the edited theme does not (or has set the value explicitly to null). + // E.g. FlatLightLaf defines Button.focusedBackground, but in FlatDarkLaf + // it is not defined. Without this code, the preview for FlatDarkLaf would use + // Button.focusedBackground from FlatLightLaf if FlatLightLaf is the current application Laf. + if( value == null && FlatThemePropertiesBaseManager.getDefindedCoreKeys().contains( key ) && !isDefaultFont ) + return FlatLaf.NULL_VALUE; + + return value; + } + + private void initComponents() { + // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents + tabbedPane = new FlatTabbedPane(); + previewSeparator = new JSeparator(); + previewLabel = new JLabel(); + + //======== this ======== + setLayout(new BorderLayout()); + + //======== tabbedPane ======== + { + tabbedPane.setLeadingComponent(previewLabel); + tabbedPane.setTabAreaAlignment(FlatTabbedPane.TabAreaAlignment.trailing); + tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT); + } + add(tabbedPane, BorderLayout.CENTER); + + //---- previewSeparator ---- + previewSeparator.setOrientation(SwingConstants.VERTICAL); + add(previewSeparator, BorderLayout.LINE_START); + + //---- previewLabel ---- + previewLabel.setText(" Preview "); + previewLabel.putClientProperty("FlatLaf.styleClass", "h2"); + // JFormDesigner - End of component initialization //GEN-END:initComponents + } + + // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + private FlatTabbedPane tabbedPane; + private JSeparator previewSeparator; + private JLabel previewLabel; + // JFormDesigner - End of variables declaration //GEN-END:variables + + //---- class PreviewPanel ------------------------------------------------- + + private class PreviewPanel + extends JPanel + { + PreviewPanel( JComponent c ) { + super( new BorderLayout() ); + add( c ); + } + + @SuppressWarnings( "deprecation" ) + @Override + public void layout() { + try { + runWithUIDefaultsGetter( () -> { + super.layout(); + } ); + } catch( Exception ex ) { + ex.printStackTrace(); + } + } + + @Override + protected void validateTree() { + try { + runWithUIDefaultsGetter( () -> { + super.validateTree(); + } ); + } catch( Exception ex ) { + ex.printStackTrace(); + } + } + + @Override + public Dimension getPreferredSize() { + try { + return super.getPreferredSize(); + } catch( Exception ex ) { + ex.printStackTrace(); + return new Dimension( 100, 100 ); + } + } + + @Override + public Dimension getMinimumSize() { + try { + return super.getMinimumSize(); + } catch( Exception ex ) { + ex.printStackTrace(); + return new Dimension( 100, 100 ); + } + } + + @Override + public Dimension getMaximumSize() { + try { + return super.getMaximumSize(); + } catch( Exception ex ) { + ex.printStackTrace(); + return new Dimension( Short.MAX_VALUE, Short.MAX_VALUE ); + } + } + + @Override + public void paint( Graphics g ) { + try { + runWithUIDefaultsGetter( () -> { + super.paint( g ); + } ); + } catch( Exception ex ) { + ex.printStackTrace(); + } + } + + @Override + protected void paintComponent( Graphics g ) { + try { + runWithUIDefaultsGetter( () -> { + super.paintComponent( g ); + } ); + } catch( Exception ex ) { + ex.printStackTrace(); + } + } + + @Override + protected void paintChildren( Graphics g ) { + try { + runWithUIDefaultsGetter( () -> { + super.paintChildren( g ); + } ); + } catch( Exception ex ) { + ex.printStackTrace(); + } + } + } + + //---- class VariablesDelegateMap ----------------------------------------- + + private class VariablesDelegateMap + extends HashMap + { + private final Map variables; + + public VariablesDelegateMap( Map variables ) { + this.variables = variables; + } + + @Override + public String get( Object key ) { + String value = textArea.propertiesSupport.getProperty( (String) key ); + if( value != null ) + return value; + + if( variables != null ) { + value = variables.get( key ); + if( value != null ) + return value; + } + + return super.get( key ); + } + } +} diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreview.jfd b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreview.jfd new file mode 100644 index 00000000..fa580f61 --- /dev/null +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreview.jfd @@ -0,0 +1,35 @@ +JFDML JFormDesigner: "7.0.4.0.360" Java: "16" encoding: "UTF-8" + +new FormModel { + contentType: "form/swing" + root: new FormRoot { + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.BorderLayout ) ) { + name: "this" + add( new FormContainer( "com.formdev.flatlaf.extras.components.FlatTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) { + name: "tabbedPane" + "leadingComponent": new FormReference( "previewLabel" ) + "tabAreaAlignment": enum com.formdev.flatlaf.extras.components.FlatTabbedPane$TabAreaAlignment trailing + "tabLayoutPolicy": 1 + }, new FormLayoutConstraints( class java.lang.String ) { + "value": "Center" + } ) + add( new FormComponent( "javax.swing.JSeparator" ) { + name: "previewSeparator" + "orientation": 1 + }, new FormLayoutConstraints( class java.lang.String ) { + "value": "Before" + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 0, 0 ) + "size": new java.awt.Dimension( 320, 200 ) + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "previewLabel" + "text": " Preview " + "$client.FlatLaf.styleClass": "h2" + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 0, 235 ) + "size": new java.awt.Dimension( 176, 24 ) + } ) + } +} diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.java new file mode 100644 index 00000000..5e1cddeb --- /dev/null +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.java @@ -0,0 +1,1059 @@ +/* +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.themeeditor; + +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; +import java.beans.Beans; +import java.beans.PropertyVetoException; +import java.util.function.Function; +import java.util.function.Predicate; +import javax.swing.*; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableRowSorter; +import javax.swing.tree.DefaultMutableTreeNode; +import javax.swing.tree.DefaultTreeModel; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.extras.FlatSVGIcon; +import com.formdev.flatlaf.extras.components.*; +import com.formdev.flatlaf.icons.FlatSearchWithHistoryIcon; +import com.formdev.flatlaf.ui.FlatTabbedPaneUI; +import net.miginfocom.swing.*; + +/** + * @author Karl Tauber + */ +class FlatThemePreviewAll + extends JPanel +{ + private static final String KEY_ENABLED = "preview.enabled"; + private static final String KEY_EDITABLE = "preview.editable"; + private static final String KEY_FOCUSED = "preview.focused"; + private static final String KEY_MENU_UNDERLINE_SELECTION = "preview.menuUnderlineSelection"; + + private final FlatThemePreview preview; + + FlatThemePreviewAll( FlatThemePreview preview ) { + this.preview = preview; + + initComponents(); + + textField2.setLeadingComponent( new JButton( new FlatSearchWithHistoryIcon( true ) ) ); + + // whole words button + JToggleButton wordsButton = new JToggleButton( new FlatSVGIcon( "com/formdev/flatlaf/themeeditor/icons/preview/words.svg" ) ); + wordsButton.setRolloverIcon( new FlatSVGIcon( "com/formdev/flatlaf/themeeditor/icons/preview/wordsHovered.svg" ) ); + wordsButton.setSelectedIcon( new FlatSVGIcon( "com/formdev/flatlaf/themeeditor/icons/preview/wordsSelected.svg" ) ); + wordsButton.setToolTipText( "Whole Words" ); + + // regex button + JToggleButton regexButton = new JToggleButton( new FlatSVGIcon( "com/formdev/flatlaf/themeeditor/icons/preview/regex.svg" ) ); + regexButton.setRolloverIcon( new FlatSVGIcon( "com/formdev/flatlaf/themeeditor/icons/preview/regexHovered.svg" ) ); + regexButton.setSelectedIcon( new FlatSVGIcon( "com/formdev/flatlaf/themeeditor/icons/preview/regexSelected.svg" ) ); + regexButton.setSelected( true ); + regexButton.setToolTipText( "Regular Expression" ); + + // search toolbar + JToolBar searchToolbar = new JToolBar(); + searchToolbar.add( wordsButton ); + searchToolbar.addSeparator(); + searchToolbar.add( regexButton ); + textField2.setTrailingComponent( searchToolbar ); + + tabbedPane1.uiDefaultsGetter = preview::getUIDefaultProperty; + tabbedPane1.setTabLayoutPolicy( JTabbedPane.SCROLL_TAB_LAYOUT ); + tabbedPane1.addTab( "Tab 1", null ); + tabbedPane1.addTab( "Tab 2", null ); + tabbedPane1.addTab( "Tab 3", null ); + tabbedPane1.addTab( "Tab 4", null ); + tabbedPane1.addTab( "Tab 5", null ); + tabbedPane1.addTab( "Tab 6", null ); + tabbedPane1.addTab( "Tab 7", null ); + tabbedPane1.addTab( "Tab 8", null ); + + list1.setSelectedIndex( 1 ); + tree1.setSelectionRow( 1 ); + table1.setRowSorter( new TableRowSorter<>( table1.getModel() ) ); + table1.getRowSorter().toggleSortOrder( 0 ); + table1.setRowSelectionInterval( 1, 1 ); + table1.uiDefaultsGetter = preview::getUIDefaultProperty; + + EventQueue.invokeLater( () -> { + int width = desktopPane1.getWidth(); + int height = desktopPane1.getHeight() / 2; + internalFrame1.setBounds( 0, 0, width, height ); + internalFrame2.setBounds( 0, height, width, height ); + + try { + internalFrame1.setSelected( true ); + } catch( PropertyVetoException ex ) { + // ignore + } + } ); + } + + void activated() { + boolean enabled = preview.state.getBoolean( KEY_ENABLED, true ); + boolean editable = preview.state.getBoolean( KEY_EDITABLE, true ); + boolean focused = preview.state.getBoolean( KEY_FOCUSED, false ); + boolean menuUnderlineSelection = preview.state.getBoolean( KEY_MENU_UNDERLINE_SELECTION, false ); + + if( enabled != enabledCheckBox.isSelected() ) { + enabledCheckBox.setSelected( enabled ); + enabledChanged(); + } + + if( editable != editableCheckBox.isSelected() ) { + editableCheckBox.setSelected( editable ); + editableChanged(); + } + + if( focused != focusedCheckBox.isSelected() ) { + focusedCheckBox.setSelected( focused ); + focusedChanged(); + } + + if( menuUnderlineSelection != menuUnderlineSelectionButton.isSelected() ) { + menuUnderlineSelectionButton.setSelected( menuUnderlineSelection ); + menuUnderlineSelectionChanged(); + } + } + + private void enabledChanged() { + boolean enabled = enabledCheckBox.isSelected(); + + // disable "focused" checkbox because disabled components are not focusable + focusedCheckBox.setEnabled( enabled ); + if( focusedCheckBox.isSelected() ) + focusedChanged(); + + preview.runWithUIDefaultsGetter( () -> { + enableDisable( this, enabled ); + } ); + + FlatThemeFileEditor.putPrefsBoolean( preview.state, KEY_ENABLED, enabled, true ); + } + + private void enableDisable( Component comp, boolean enabled ) { + if( comp instanceof JScrollPane ) + comp = ((JScrollPane)comp).getViewport().getView(); + + if( comp == null || (comp instanceof JLabel && comp != label1) ) + return; + + // enable/disable component + if( !isControlComponent( comp ) && comp != menu2 ) + comp.setEnabled( enabled ); + + // enable/disable children + if( comp instanceof JPanel || comp instanceof JToolBar || comp instanceof JMenuBar ) { + for( Component c : ((Container)comp).getComponents() ) + enableDisable( c, enabled ); + } else if( comp instanceof JSplitPane ) { + JSplitPane splitPane = (JSplitPane) comp; + enableDisable( splitPane.getLeftComponent(), enabled ); + enableDisable( splitPane.getRightComponent(), enabled ); + } else if( comp instanceof JMenu ) { + JMenu menu = (JMenu) comp; + int count = menu.getMenuComponentCount(); + for( int i = 0; i < count; i++ ) + enableDisable( menu.getMenuComponent( i ), enabled ); + } + } + + private void editableChanged() { + boolean editable = editableCheckBox.isSelected(); + + preview.runWithUIDefaultsGetter( () -> { + textField1.setEditable( editable ); + textField2.setEditable( editable ); + formattedTextField1.setEditable( editable ); + passwordField1.setEditable( editable ); + textArea1.setEditable( editable ); + editorPane1.setEditable( editable ); + textPane1.setEditable( editable ); + } ); + + FlatThemeFileEditor.putPrefsBoolean( preview.state, KEY_EDITABLE, editable, true ); + } + + private void focusedChanged() { + boolean focused = focusedCheckBox.isSelected(); + + Predicate value = focused && enabledCheckBox.isSelected() + ? value = c -> true + : null; + focusComponent( this, value ); + repaint(); + + FlatThemeFileEditor.putPrefsBoolean( preview.state, KEY_FOCUSED, focused,false ); + } + + private void focusComponent( Component comp, Object value ) { + if( comp instanceof JScrollPane ) + comp = ((JScrollPane)comp).getViewport().getView(); + + if( comp == null ) + return; + + // focus component + if( !isControlComponent( comp ) && comp instanceof JComponent ) + ((JComponent)comp).putClientProperty( FlatClientProperties.COMPONENT_FOCUS_OWNER, value ); + + // focus children + if( comp instanceof JPanel || comp instanceof JToolBar ) { + for( Component c : ((Container)comp).getComponents() ) + focusComponent( c, value ); + } else if( comp instanceof JSplitPane ) { + JSplitPane splitPane = (JSplitPane) comp; + focusComponent( splitPane.getLeftComponent(), value ); + focusComponent( splitPane.getRightComponent(), value ); + } + } + + private boolean isControlComponent( Component c ) { + return c == enabledCheckBox || + c == editableCheckBox || + c == focusedCheckBox || + c == menuUnderlineSelectionButton; + } + + private void menuUnderlineSelectionChanged() { + boolean menuUnderlineSelection = menuUnderlineSelectionButton.isSelected(); + UIManager.put( "MenuItem.selectionType", menuUnderlineSelection ? "underline" : null ); + + FlatThemeFileEditor.putPrefsBoolean( preview.state, KEY_MENU_UNDERLINE_SELECTION, menuUnderlineSelection, false ); + } + + private void changeProgress() { + int value = slider3.getValue(); + progressBar1.setValue( value ); + progressBar2.setValue( value ); + } + + private Object toolbarCons; + + @Override + protected void addImpl( Component comp, Object constraints, int index ) { + // if floating toolbar window is closed, then place toolbar at original location + if( comp == toolBar1 ) { + if( toolbarCons == null ) + toolbarCons = constraints; + else if( comp.getParent() == null && toolbarCons != null ) + constraints = toolbarCons; + } + + super.addImpl( comp, constraints, index ); + } + + private void initComponents() { + // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents + JPanel hSpacer1 = new JPanel(null); + enabledCheckBox = new JCheckBox(); + editableCheckBox = new JCheckBox(); + focusedCheckBox = new JCheckBox(); + JLabel labelLabel = new JLabel(); + label1 = new JLabel(); + FlatButton flatButton1 = new FlatButton(); + JLabel buttonLabel = new JLabel(); + JButton button1 = new JButton(); + FlatThemePreviewAll.PreviewDefaultButton testDefaultButton1 = new FlatThemePreviewAll.PreviewDefaultButton(); + JLabel toggleButtonLabel = new JLabel(); + JToggleButton toggleButton1 = new JToggleButton(); + JToggleButton toggleButton3 = new JToggleButton(); + JLabel checkBoxLabel = new JLabel(); + JCheckBox checkBox1 = new JCheckBox(); + JCheckBox checkBox3 = new JCheckBox(); + JLabel radioButtonLabel = new JLabel(); + JRadioButton radioButton1 = new JRadioButton(); + JRadioButton radioButton3 = new JRadioButton(); + JLabel comboBoxLabel = new JLabel(); + FlatComboBox comboBox1 = new FlatComboBox<>(); + JComboBox comboBox3 = new JComboBox<>(); + JLabel spinnerLabel = new JLabel(); + JSpinner spinner1 = new JSpinner(); + JLabel textFieldLabel = new JLabel(); + textField1 = new FlatTextField(); + textField2 = new FlatTextField(); + formattedTextField1 = new FlatFormattedTextField(); + passwordField1 = new FlatPasswordField(); + JLabel textAreaLabel = new JLabel(); + JScrollPane scrollPane1 = new JScrollPane(); + textArea1 = new JTextArea(); + JScrollPane scrollPane5 = new JScrollPane(); + editorPane1 = new JEditorPane(); + JScrollPane scrollPane9 = new JScrollPane(); + textPane1 = new JTextPane(); + JLabel menuBarLabel = new JLabel(); + menuUnderlineSelectionButton = new FlatToggleButton(); + JMenuBar menuBar1 = new JMenuBar(); + menu2 = new JMenu(); + JMenuItem menuItem3 = new JMenuItem(); + JMenuItem menuItem4 = new JMenuItem(); + JCheckBoxMenuItem checkBoxMenuItem2 = new JCheckBoxMenuItem(); + JCheckBoxMenuItem checkBoxMenuItem3 = new JCheckBoxMenuItem(); + JRadioButtonMenuItem radioButtonMenuItem4 = new JRadioButtonMenuItem(); + JRadioButtonMenuItem radioButtonMenuItem5 = new JRadioButtonMenuItem(); + JMenu menu4 = new JMenu(); + JMenuItem menuItem6 = new JMenuItem(); + JMenu menu5 = new JMenu(); + JMenuItem menuItem7 = new JMenuItem(); + JMenu menu3 = new JMenu(); + JMenuItem menuItem5 = new JMenuItem(); + JMenuItem menuItem8 = new JMenuItem(); + JMenuItem menuItem9 = new JMenuItem(); + JLabel scrollBarLabel = new JLabel(); + JScrollBar scrollBar1 = new JScrollBar(); + FlatScrollBar scrollBar5 = new FlatScrollBar(); + JLabel separatorLabel = new JLabel(); + JSeparator separator1 = new JSeparator(); + JLabel sliderLabel = new JLabel(); + slider1 = new JSlider(); + slider3 = new JSlider(); + JLabel progressBarLabel = new JLabel(); + progressBar1 = new FlatProgressBar(); + progressBar2 = new FlatProgressBar(); + JLabel toolTipLabel = new JLabel(); + JToolTip toolTip1 = new JToolTip(); + JLabel toolBarLabel = new JLabel(); + toolBar1 = new JToolBar(); + JButton button4 = new JButton(); + JButton button6 = new JButton(); + JToggleButton button7 = new JToggleButton(); + JToggleButton button8 = new JToggleButton(); + JToggleButton button9 = new JToggleButton(); + JLabel tabbedPaneLabel = new JLabel(); + tabbedPane1 = new FlatThemePreviewAll.PreviewTabbedPane(); + JLabel listTreeLabel = new JLabel(); + JSplitPane splitPane1 = new JSplitPane(); + JScrollPane scrollPane2 = new JScrollPane(); + list1 = new JList<>(); + JScrollPane scrollPane3 = new JScrollPane(); + tree1 = new JTree(); + JLabel tableLabel = new JLabel(); + JScrollPane scrollPane4 = new JScrollPane(); + table1 = new FlatThemePreviewAll.PreviewTable(); + JLabel internalFrameLabel = new JLabel(); + desktopPane1 = new JDesktopPane(); + internalFrame1 = new JInternalFrame(); + internalFrame2 = new JInternalFrame(); + + //======== this ======== + setLayout(new MigLayout( + "insets dialog,hidemode 3", + // columns + "[fill]" + + "[60,sizegroup 1,fill]" + + "[60,sizegroup 1,fill]", + // rows + "[]para" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]" + + "[fill]" + + "[]" + + "[]4" + + "[]" + + "[]" + + "[]0" + + "[]" + + "[]0" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]" + + "[100,fill]" + + "[grow]")); + add(hSpacer1, "cell 0 0 3 1,growx"); + + //---- enabledCheckBox ---- + enabledCheckBox.setText("Enabled"); + enabledCheckBox.setSelected(true); + enabledCheckBox.addActionListener(e -> enabledChanged()); + add(enabledCheckBox, "cell 0 0 3 1"); + + //---- editableCheckBox ---- + editableCheckBox.setText("Editable"); + editableCheckBox.setSelected(true); + editableCheckBox.addActionListener(e -> editableChanged()); + add(editableCheckBox, "cell 0 0 3 1"); + + //---- focusedCheckBox ---- + focusedCheckBox.setText("Focused"); + focusedCheckBox.addActionListener(e -> focusedChanged()); + add(focusedCheckBox, "cell 0 0 3 1"); + + //---- labelLabel ---- + labelLabel.setText("JLabel:"); + add(labelLabel, "cell 0 1"); + + //---- label1 ---- + label1.setText("Some Text"); + label1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-label"); + add(label1, "cell 1 1 2 1"); + + //---- flatButton1 ---- + flatButton1.setText("Help"); + flatButton1.setButtonType(FlatButton.ButtonType.help); + flatButton1.setVisible(false); + add(flatButton1, "cell 1 1,alignx right,growx 0"); + + //---- buttonLabel ---- + buttonLabel.setText("JButton:"); + add(buttonLabel, "cell 0 2"); + + //---- button1 ---- + button1.setText("OK"); + button1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-button"); + add(button1, "cell 1 2"); + + //---- testDefaultButton1 ---- + testDefaultButton1.setText("Default"); + testDefaultButton1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-button"); + add(testDefaultButton1, "cell 2 2"); + + //---- toggleButtonLabel ---- + toggleButtonLabel.setText("JToggleButton:"); + add(toggleButtonLabel, "cell 0 3"); + + //---- toggleButton1 ---- + toggleButton1.setText("Unselected"); + toggleButton1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-togglebutton"); + add(toggleButton1, "cell 1 3"); + + //---- toggleButton3 ---- + toggleButton3.setText("Selected"); + toggleButton3.setSelected(true); + toggleButton3.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-togglebutton"); + add(toggleButton3, "cell 2 3"); + + //---- checkBoxLabel ---- + checkBoxLabel.setText("JCheckBox"); + add(checkBoxLabel, "cell 0 4"); + + //---- checkBox1 ---- + checkBox1.setText("Unselected"); + checkBox1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-checkbox"); + add(checkBox1, "cell 1 4,alignx left,growx 0"); + + //---- checkBox3 ---- + checkBox3.setText("Selected"); + checkBox3.setSelected(true); + checkBox3.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-checkbox"); + add(checkBox3, "cell 2 4,alignx left,growx 0"); + + //---- radioButtonLabel ---- + radioButtonLabel.setText("JRadioButton:"); + add(radioButtonLabel, "cell 0 5"); + + //---- radioButton1 ---- + radioButton1.setText("Unselected"); + radioButton1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-radiobutton"); + add(radioButton1, "cell 1 5,alignx left,growx 0"); + + //---- radioButton3 ---- + radioButton3.setText("Selected"); + radioButton3.setSelected(true); + radioButton3.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-radiobutton"); + add(radioButton3, "cell 2 5,alignx left,growx 0"); + + //---- comboBoxLabel ---- + comboBoxLabel.setText("JComboBox:"); + add(comboBoxLabel, "cell 0 6"); + + //---- comboBox1 ---- + comboBox1.setEditable(true); + comboBox1.setModel(new DefaultComboBoxModel<>(new String[] { + "Editable", + "a", + "bb", + "ccc", + "dd", + "e", + "ff", + "ggg", + "hh", + "i", + "jj", + "kkk" + })); + comboBox1.setMaximumRowCount(6); + comboBox1.setPlaceholderText("placeholder text"); + comboBox1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-combobox"); + add(comboBox1, "cell 1 6"); + + //---- comboBox3 ---- + comboBox3.setModel(new DefaultComboBoxModel<>(new String[] { + "Not edit", + "a", + "bb", + "ccc", + "dd", + "e", + "ff", + "ggg", + "hh", + "i", + "jj", + "kkk" + })); + comboBox3.setMaximumRowCount(6); + comboBox3.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-combobox"); + add(comboBox3, "cell 2 6"); + + //---- spinnerLabel ---- + spinnerLabel.setText("JSpinner:"); + add(spinnerLabel, "cell 0 7"); + + //---- spinner1 ---- + spinner1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-spinner"); + add(spinner1, "cell 1 7 2 1"); + + //---- textFieldLabel ---- + textFieldLabel.setText("JTextField:
JFormattedTextF.:
JPasswordField:"); + add(textFieldLabel, "cell 0 8 1 2"); + + //---- textField1 ---- + textField1.setText("Some Text"); + textField1.setPlaceholderText("placeholder text"); + textField1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-textfield"); + add(textField1, "cell 1 8"); + + //---- textField2 ---- + textField2.setText("Txt"); + textField2.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-textfield"); + add(textField2, "cell 2 8"); + + //---- formattedTextField1 ---- + formattedTextField1.setText("Some Text"); + formattedTextField1.setPlaceholderText("placeholder text"); + formattedTextField1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-formattedtextfield"); + add(formattedTextField1, "cell 1 9"); + + //---- passwordField1 ---- + passwordField1.setText("Some Text"); + passwordField1.setPlaceholderText("placeholder text"); + passwordField1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-passwordfield"); + passwordField1.setShowClearButton(true); + add(passwordField1, "cell 2 9"); + + //---- textAreaLabel ---- + textAreaLabel.setText("JTextArea:
JEditorPane:
JTextPane:"); + add(textAreaLabel, "cell 0 10"); + + //======== scrollPane1 ======== + { + scrollPane1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); + scrollPane1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + + //---- textArea1 ---- + textArea1.setText("Text"); + textArea1.setRows(2); + textArea1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-textarea"); + scrollPane1.setViewportView(textArea1); + } + add(scrollPane1, "cell 1 10 2 1,width 40"); + + //======== scrollPane5 ======== + { + scrollPane5.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); + scrollPane5.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + + //---- editorPane1 ---- + editorPane1.setText("Text"); + editorPane1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-editorpane"); + scrollPane5.setViewportView(editorPane1); + } + add(scrollPane5, "cell 1 10 2 1,width 40"); + + //======== scrollPane9 ======== + { + scrollPane9.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); + scrollPane9.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + + //---- textPane1 ---- + textPane1.setText("Text"); + textPane1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-textpane"); + scrollPane9.setViewportView(textPane1); + } + add(scrollPane9, "cell 1 10 2 1,width 40"); + + //---- menuBarLabel ---- + menuBarLabel.setText("JMenuBar:"); + add(menuBarLabel, "cell 0 11"); + + //---- menuUnderlineSelectionButton ---- + menuUnderlineSelectionButton.setText("_"); + menuUnderlineSelectionButton.setButtonType(FlatButton.ButtonType.toolBarButton); + menuUnderlineSelectionButton.setToolTipText("menu underline selection"); + menuUnderlineSelectionButton.setFocusable(false); + menuUnderlineSelectionButton.putClientProperty("FlatLaf.styleClass", "small"); + menuUnderlineSelectionButton.addActionListener(e -> menuUnderlineSelectionChanged()); + add(menuUnderlineSelectionButton, "cell 0 11"); + + //======== menuBar1 ======== + { + menuBar1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-menubar"); + + //======== menu2 ======== + { + menu2.setText("JMenu"); + menu2.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-menu"); + + //---- menuItem3 ---- + menuItem3.setText("JMenuItem"); + menuItem3.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-menuitem"); + menu2.add(menuItem3); + + //---- menuItem4 ---- + menuItem4.setText("JMenuItem"); + menuItem4.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-menuitem"); + menu2.add(menuItem4); + menu2.addSeparator(); + + //---- checkBoxMenuItem2 ---- + checkBoxMenuItem2.setText("JCheckBoxMenuItem"); + checkBoxMenuItem2.setSelected(true); + checkBoxMenuItem2.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-checkboxmenuitem"); + menu2.add(checkBoxMenuItem2); + + //---- checkBoxMenuItem3 ---- + checkBoxMenuItem3.setText("JCheckBoxMenuItem"); + checkBoxMenuItem3.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-checkboxmenuitem"); + menu2.add(checkBoxMenuItem3); + menu2.addSeparator(); + + //---- radioButtonMenuItem4 ---- + radioButtonMenuItem4.setText("JRadioButtonMenuItem"); + radioButtonMenuItem4.setSelected(true); + radioButtonMenuItem4.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-radiobuttonmenuitem"); + menu2.add(radioButtonMenuItem4); + + //---- radioButtonMenuItem5 ---- + radioButtonMenuItem5.setText("JRadioButtonMenuItem"); + radioButtonMenuItem5.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-radiobuttonmenuitem"); + menu2.add(radioButtonMenuItem5); + menu2.addSeparator(); + + //======== menu4 ======== + { + menu4.setText("JMenu"); + menu4.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-menu"); + + //---- menuItem6 ---- + menuItem6.setText("JMenuItem"); + menuItem6.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-menuitem"); + menu4.add(menuItem6); + } + menu2.add(menu4); + + //======== menu5 ======== + { + menu5.setText("JMenu"); + menu5.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-menu"); + + //---- menuItem7 ---- + menuItem7.setText("JMenuItem"); + menuItem7.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-menuitem"); + menu5.add(menuItem7); + } + menu2.add(menu5); + } + menuBar1.add(menu2); + + //======== menu3 ======== + { + menu3.setText("JMenu"); + menu3.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-menu"); + + //---- menuItem5 ---- + menuItem5.setText("JMenuItem"); + menuItem5.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P, KeyEvent.CTRL_DOWN_MASK|KeyEvent.ALT_DOWN_MASK|KeyEvent.SHIFT_DOWN_MASK)); + menuItem5.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-menuitem"); + menu3.add(menuItem5); + + //---- menuItem8 ---- + menuItem8.setText("JMenuItem"); + menuItem8.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-menuitem"); + menu3.add(menuItem8); + + //---- menuItem9 ---- + menuItem9.setText("JMenuItem"); + menuItem9.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-menuitem"); + menu3.add(menuItem9); + } + menuBar1.add(menu3); + } + add(menuBar1, "cell 1 11 2 1"); + + //---- scrollBarLabel ---- + scrollBarLabel.setText("JScrollBar:"); + add(scrollBarLabel, "cell 0 12 1 2,aligny top,growy 0"); + + //---- scrollBar1 ---- + scrollBar1.setOrientation(Adjustable.HORIZONTAL); + scrollBar1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-scrollbar"); + scrollBar1.setVisibleAmount(50); + add(scrollBar1, "cell 1 12 2 1"); + + //---- scrollBar5 ---- + scrollBar5.setOrientation(Adjustable.HORIZONTAL); + scrollBar5.setShowButtons(true); + scrollBar5.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-scrollbar"); + scrollBar5.setVisibleAmount(50); + add(scrollBar5, "cell 1 13 2 1"); + + //---- separatorLabel ---- + separatorLabel.setText("JSeparator:"); + add(separatorLabel, "cell 0 14"); + + //---- separator1 ---- + separator1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-separator"); + add(separator1, "cell 1 14 2 1"); + + //---- sliderLabel ---- + sliderLabel.setText("JSlider:"); + add(sliderLabel, "cell 0 15"); + + //---- slider1 ---- + slider1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-slider"); + add(slider1, "cell 1 15 2 1,width 100"); + + //---- slider3 ---- + slider3.setMinorTickSpacing(10); + slider3.setPaintTicks(true); + slider3.setMajorTickSpacing(50); + slider3.setPaintLabels(true); + slider3.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-slider"); + slider3.addChangeListener(e -> changeProgress()); + add(slider3, "cell 1 16 2 1,width 100"); + + //---- progressBarLabel ---- + progressBarLabel.setText("JProgressBar:"); + add(progressBarLabel, "cell 0 17"); + + //---- progressBar1 ---- + progressBar1.setValue(50); + progressBar1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-progressbar"); + add(progressBar1, "cell 1 17 2 1"); + + //---- progressBar2 ---- + progressBar2.setValue(50); + progressBar2.setStringPainted(true); + progressBar2.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-progressbar"); + add(progressBar2, "cell 1 18 2 1"); + + //---- toolTipLabel ---- + toolTipLabel.setText("JToolTip:"); + add(toolTipLabel, "cell 0 19"); + + //---- toolTip1 ---- + toolTip1.setTipText("Some text in tool tip."); + toolTip1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-tooltip"); + add(toolTip1, "cell 1 19 2 1,alignx left,growx 0"); + + //---- toolBarLabel ---- + toolBarLabel.setText("JToolBar:"); + add(toolBarLabel, "cell 0 20"); + + //======== toolBar1 ======== + { + toolBar1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-toolbar"); + + //---- button4 ---- + button4.setIcon(UIManager.getIcon("Tree.closedIcon")); + button4.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-toolbar-button"); + toolBar1.add(button4); + + //---- button6 ---- + button6.setIcon(UIManager.getIcon("Tree.openIcon")); + button6.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-toolbar-button"); + toolBar1.add(button6); + toolBar1.addSeparator(); + + //---- button7 ---- + button7.setIcon(UIManager.getIcon("Tree.leafIcon")); + button7.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-toolbar-togglebutton"); + toolBar1.add(button7); + + //---- button8 ---- + button8.setIcon(UIManager.getIcon("Tree.leafIcon")); + button8.setSelected(true); + button8.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-toolbar-togglebutton"); + toolBar1.add(button8); + + //---- button9 ---- + button9.setIcon(UIManager.getIcon("Tree.leafIcon")); + button9.setSelected(true); + button9.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-toolbar-togglebutton"); + toolBar1.add(button9); + } + add(toolBar1, "cell 1 20 2 1"); + + //---- tabbedPaneLabel ---- + tabbedPaneLabel.setText("JTabbedPane:"); + add(tabbedPaneLabel, "cell 0 21"); + + //======== tabbedPane1 ======== + { + tabbedPane1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-tabbedpane"); + } + add(tabbedPane1, "cell 1 21 2 1"); + + //---- listTreeLabel ---- + listTreeLabel.setText("JList / JTree:
JSplitPane:"); + add(listTreeLabel, "cell 0 22,aligny top,growy 0"); + + //======== splitPane1 ======== + { + splitPane1.setResizeWeight(0.5); + splitPane1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-splitpane"); + + //======== scrollPane2 ======== + { + scrollPane2.setPreferredSize(new Dimension(50, 50)); + + //---- list1 ---- + list1.setModel(new AbstractListModel() { + String[] values = { + "Item 1", + "Item 2", + "Item 3" + }; + @Override + public int getSize() { return values.length; } + @Override + public String getElementAt(int i) { return values[i]; } + }); + list1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-list"); + scrollPane2.setViewportView(list1); + } + splitPane1.setLeftComponent(scrollPane2); + + //======== scrollPane3 ======== + { + scrollPane3.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + scrollPane3.setPreferredSize(new Dimension(50, 50)); + + //---- tree1 ---- + tree1.setModel(new DefaultTreeModel( + new DefaultMutableTreeNode("Item 1") { + { + add(new DefaultMutableTreeNode("Item 2")); + DefaultMutableTreeNode node1 = new DefaultMutableTreeNode("Item 3"); + node1.add(new DefaultMutableTreeNode("Item 4")); + node1.add(new DefaultMutableTreeNode("Item 5")); + add(node1); + } + })); + tree1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-tree"); + scrollPane3.setViewportView(tree1); + } + splitPane1.setRightComponent(scrollPane3); + } + add(splitPane1, "cell 1 22 2 1,height 50"); + + //---- tableLabel ---- + tableLabel.setText("JTable:"); + add(tableLabel, "cell 0 23"); + + //======== scrollPane4 ======== + { + + //---- table1 ---- + table1.setModel(new DefaultTableModel( + new Object[][] { + {"Item 1a", "Item 2a"}, + {"Item 1b", "Item 2b"}, + }, + new String[] { + "Column 1", "Column 2" + } + )); + table1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-table"); + scrollPane4.setViewportView(table1); + } + add(scrollPane4, "cell 1 23 2 1,width 100,height 70"); + + //---- internalFrameLabel ---- + internalFrameLabel.setText("JDesktopPane:
JInternalFrame:"); + add(internalFrameLabel, "cell 0 24,aligny top,growy 0"); + + //======== desktopPane1 ======== + { + desktopPane1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-desktoppane"); + + //======== internalFrame1 ======== + { + internalFrame1.setVisible(true); + internalFrame1.setTitle("Active"); + internalFrame1.setClosable(true); + internalFrame1.setMaximizable(true); + internalFrame1.setIconifiable(true); + internalFrame1.setResizable(true); + internalFrame1.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-internalframe"); + Container internalFrame1ContentPane = internalFrame1.getContentPane(); + internalFrame1ContentPane.setLayout(new BorderLayout()); + } + desktopPane1.add(internalFrame1, JLayeredPane.DEFAULT_LAYER); + internalFrame1.setBounds(new Rectangle(new Point(5, 5), internalFrame1.getPreferredSize())); + + //======== internalFrame2 ======== + { + internalFrame2.setVisible(true); + internalFrame2.setClosable(true); + internalFrame2.setIconifiable(true); + internalFrame2.setMaximizable(true); + internalFrame2.setResizable(true); + internalFrame2.setTitle("Inactive"); + internalFrame2.putClientProperty("FlatLaf.styleClass", "flatlaf-preview-internalframe"); + Container internalFrame2ContentPane = internalFrame2.getContentPane(); + internalFrame2ContentPane.setLayout(new BorderLayout()); + } + desktopPane1.add(internalFrame2, JLayeredPane.DEFAULT_LAYER); + internalFrame2.setBounds(new Rectangle(new Point(5, 50), internalFrame2.getPreferredSize())); + } + add(desktopPane1, "cell 1 24 2 1"); + + //---- buttonGroup1 ---- + ButtonGroup buttonGroup1 = new ButtonGroup(); + buttonGroup1.add(radioButton1); + buttonGroup1.add(radioButton3); + + //---- buttonGroup2 ---- + ButtonGroup buttonGroup2 = new ButtonGroup(); + buttonGroup2.add(radioButtonMenuItem4); + buttonGroup2.add(radioButtonMenuItem5); + // JFormDesigner - End of component initialization //GEN-END:initComponents + } + + // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + private JCheckBox enabledCheckBox; + private JCheckBox editableCheckBox; + private JCheckBox focusedCheckBox; + private JLabel label1; + private FlatTextField textField1; + private FlatTextField textField2; + private FlatFormattedTextField formattedTextField1; + private FlatPasswordField passwordField1; + private JTextArea textArea1; + private JEditorPane editorPane1; + private JTextPane textPane1; + private FlatToggleButton menuUnderlineSelectionButton; + private JMenu menu2; + private JSlider slider1; + private JSlider slider3; + private FlatProgressBar progressBar1; + private FlatProgressBar progressBar2; + private JToolBar toolBar1; + private FlatThemePreviewAll.PreviewTabbedPane tabbedPane1; + private JList list1; + private JTree tree1; + private FlatThemePreviewAll.PreviewTable table1; + private JDesktopPane desktopPane1; + private JInternalFrame internalFrame1; + private JInternalFrame internalFrame2; + // JFormDesigner - End of variables declaration //GEN-END:variables + + //---- class PreviewDefaultButton ----------------------------------------- + + private static class PreviewDefaultButton + extends JButton + { + @Override + public boolean isDefaultButton() { + return true; + } + } + + //---- class PreviewTabbedPane -------------------------------------------- + + private static class PreviewTabbedPane + extends JTabbedPane + { + Function uiDefaultsGetter; + + @Override + public void updateUI() { + if( !Beans.isDesignTime() ) + setUI( new PreviewFlatTabbedPaneUI( uiDefaultsGetter ) ); + else + super.updateUI(); + } + } + + //---- class PreviewFlatTabbedPaneUI -------------------------------------- + + private static class PreviewFlatTabbedPaneUI + extends FlatTabbedPaneUI + { + private final Function uiDefaultsGetter; + + PreviewFlatTabbedPaneUI( Function uiDefaultsGetter ) { + this.uiDefaultsGetter = uiDefaultsGetter; + } + + @Override + protected JButton createMoreTabsButton() { + return new PreviewFlatMoreTabsButton(); + } + + //---- class PreviewFlatMoreTabsButton -------------------------------- + + protected class PreviewFlatMoreTabsButton + extends FlatMoreTabsButton + { + @Override + public void actionPerformed( ActionEvent e ) { + // needed for "more tabs" popup creation + FlatLaf.runWithUIDefaultsGetter( uiDefaultsGetter, () -> { + super.actionPerformed( e ); + } ); + } + } + } + + //---- class PreviewTable ------------------------------------------------- + + private static class PreviewTable + extends JTable + { + Function uiDefaultsGetter; + + @Override + public void paint( Graphics g ) { + if( !Beans.isDesignTime() ) { + // needed for DefaultTableCellRenderer + FlatLaf.runWithUIDefaultsGetter( uiDefaultsGetter, () -> { + super.paint( g ); + } ); + } else + super.paint( g ); + } + } +} diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.jfd b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.jfd new file mode 100644 index 00000000..b3598d78 --- /dev/null +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.jfd @@ -0,0 +1,774 @@ +JFDML JFormDesigner: "7.0.5.0.404" Java: "17" encoding: "UTF-8" + +new FormModel { + contentType: "form/swing" + root: new FormRoot { + auxiliary() { + "JavaCodeGenerator.defaultVariableLocal": true + } + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "insets dialog,hidemode 3" + "$columnConstraints": "[fill][60,sizegroup 1,fill][60,sizegroup 1,fill]" + "$rowConstraints": "[]para[][][][][][][][][][fill][][]4[][][]0[][]0[][][][][][][100,fill][grow]" + } ) { + name: "this" + add( new FormComponent( "com.jformdesigner.designer.wrapper.HSpacer" ) { + name: "hSpacer1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0 3 1,growx" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "enabledCheckBox" + "text": "Enabled" + "selected": true + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "enabledChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0 3 1" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "editableCheckBox" + "text": "Editable" + "selected": true + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "editableChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0 3 1" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "focusedCheckBox" + "text": "Focused" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "focusedChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0 3 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "labelLabel" + "text": "JLabel:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label1" + "text": "Some Text" + "$client.FlatLaf.styleClass": "flatlaf-preview-label" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 1 2 1" + } ) + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatButton" ) { + name: "flatButton1" + "text": "Help" + "buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType help + "visible": false + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 1,alignx right,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "buttonLabel" + "text": "JButton:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 2" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button1" + "text": "OK" + "$client.FlatLaf.styleClass": "flatlaf-preview-button" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 2" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewAll$PreviewDefaultButton" ) { + name: "testDefaultButton1" + "text": "Default" + "$client.FlatLaf.styleClass": "flatlaf-preview-button" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 2" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "toggleButtonLabel" + "text": "JToggleButton:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 3" + } ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "toggleButton1" + "text": "Unselected" + "$client.FlatLaf.styleClass": "flatlaf-preview-togglebutton" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 3" + } ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "toggleButton3" + "text": "Selected" + "selected": true + "$client.FlatLaf.styleClass": "flatlaf-preview-togglebutton" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 3" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "checkBoxLabel" + "text": "JCheckBox" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 4" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "checkBox1" + "text": "Unselected" + "$client.FlatLaf.styleClass": "flatlaf-preview-checkbox" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 4,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JCheckBox" ) { + name: "checkBox3" + "text": "Selected" + "selected": true + "$client.FlatLaf.styleClass": "flatlaf-preview-checkbox" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 4,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "radioButtonLabel" + "text": "JRadioButton:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 5" + } ) + add( new FormComponent( "javax.swing.JRadioButton" ) { + name: "radioButton1" + "text": "Unselected" + "$buttonGroup": new FormReference( "buttonGroup1" ) + "$client.FlatLaf.styleClass": "flatlaf-preview-radiobutton" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 5,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JRadioButton" ) { + name: "radioButton3" + "text": "Selected" + "selected": true + "$buttonGroup": new FormReference( "buttonGroup1" ) + "$client.FlatLaf.styleClass": "flatlaf-preview-radiobutton" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 5,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "comboBoxLabel" + "text": "JComboBox:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatComboBox" ) { + name: "comboBox1" + "editable": true + "model": new javax.swing.DefaultComboBoxModel { + selectedItem: "Editable" + addElement( "Editable" ) + addElement( "a" ) + addElement( "bb" ) + addElement( "ccc" ) + addElement( "dd" ) + addElement( "e" ) + addElement( "ff" ) + addElement( "ggg" ) + addElement( "hh" ) + addElement( "i" ) + addElement( "jj" ) + addElement( "kkk" ) + } + "maximumRowCount": 6 + "placeholderText": "placeholder text" + "$client.FlatLaf.styleClass": "flatlaf-preview-combobox" + auxiliary() { + "JavaCodeGenerator.typeParameters": "String" + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 6" + } ) + add( new FormComponent( "javax.swing.JComboBox" ) { + name: "comboBox3" + "model": new javax.swing.DefaultComboBoxModel { + selectedItem: "Not edit" + addElement( "Not edit" ) + addElement( "a" ) + addElement( "bb" ) + addElement( "ccc" ) + addElement( "dd" ) + addElement( "e" ) + addElement( "ff" ) + addElement( "ggg" ) + addElement( "hh" ) + addElement( "i" ) + addElement( "jj" ) + addElement( "kkk" ) + } + "maximumRowCount": 6 + "$client.FlatLaf.styleClass": "flatlaf-preview-combobox" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 6" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "spinnerLabel" + "text": "JSpinner:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 7" + } ) + add( new FormComponent( "javax.swing.JSpinner" ) { + name: "spinner1" + "$client.FlatLaf.styleClass": "flatlaf-preview-spinner" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 7 2 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "textFieldLabel" + "text": "JTextField:
JFormattedTextF.:
JPasswordField:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 8 1 2" + } ) + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatTextField" ) { + name: "textField1" + "text": "Some Text" + "placeholderText": "placeholder text" + "$client.FlatLaf.styleClass": "flatlaf-preview-textfield" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatTextField" ) { + name: "textField2" + "text": "Txt" + "$client.FlatLaf.styleClass": "flatlaf-preview-textfield" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatFormattedTextField" ) { + name: "formattedTextField1" + "text": "Some Text" + "placeholderText": "placeholder text" + "$client.FlatLaf.styleClass": "flatlaf-preview-formattedtextfield" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 9" + } ) + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatPasswordField" ) { + name: "passwordField1" + "text": "Some Text" + "placeholderText": "placeholder text" + "$client.FlatLaf.styleClass": "flatlaf-preview-passwordfield" + "showClearButton": true + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 9" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "textAreaLabel" + "text": "JTextArea:
JEditorPane:
JTextPane:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 10" + } ) + add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { + name: "scrollPane1" + "verticalScrollBarPolicy": 21 + "horizontalScrollBarPolicy": 31 + add( new FormComponent( "javax.swing.JTextArea" ) { + name: "textArea1" + "text": "Text" + "rows": 2 + "$client.FlatLaf.styleClass": "flatlaf-preview-textarea" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 10 2 1,width 40" + } ) + add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { + name: "scrollPane5" + "verticalScrollBarPolicy": 21 + "horizontalScrollBarPolicy": 31 + add( new FormComponent( "javax.swing.JEditorPane" ) { + name: "editorPane1" + "text": "Text" + "$client.FlatLaf.styleClass": "flatlaf-preview-editorpane" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 10 2 1,width 40" + } ) + add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { + name: "scrollPane9" + "verticalScrollBarPolicy": 21 + "horizontalScrollBarPolicy": 31 + add( new FormComponent( "javax.swing.JTextPane" ) { + name: "textPane1" + "text": "Text" + "$client.FlatLaf.styleClass": "flatlaf-preview-textpane" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 10 2 1,width 40" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "menuBarLabel" + "text": "JMenuBar:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 11" + } ) + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatToggleButton" ) { + name: "menuUnderlineSelectionButton" + "text": "_" + "buttonType": enum com.formdev.flatlaf.extras.components.FlatButton$ButtonType toolBarButton + "toolTipText": "menu underline selection" + "focusable": false + "$client.FlatLaf.styleClass": "small" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuUnderlineSelectionChanged", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 11" + } ) + add( new FormContainer( "javax.swing.JMenuBar", new FormLayoutManager( class javax.swing.JMenuBar ) ) { + name: "menuBar1" + "$client.FlatLaf.styleClass": "flatlaf-preview-menubar" + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu2" + "text": "JMenu" + "$client.FlatLaf.styleClass": "flatlaf-preview-menu" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem3" + "text": "JMenuItem" + "$client.FlatLaf.styleClass": "flatlaf-preview-menuitem" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem4" + "text": "JMenuItem" + "$client.FlatLaf.styleClass": "flatlaf-preview-menuitem" + } ) + add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) { + name: "separator7" + } ) + add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) { + name: "checkBoxMenuItem2" + "text": "JCheckBoxMenuItem" + "selected": true + "$client.FlatLaf.styleClass": "flatlaf-preview-checkboxmenuitem" + } ) + add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) { + name: "checkBoxMenuItem3" + "text": "JCheckBoxMenuItem" + "$client.FlatLaf.styleClass": "flatlaf-preview-checkboxmenuitem" + } ) + add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) { + name: "separator9" + } ) + add( new FormComponent( "javax.swing.JRadioButtonMenuItem" ) { + name: "radioButtonMenuItem4" + "text": "JRadioButtonMenuItem" + "$buttonGroup": new FormReference( "buttonGroup2" ) + "selected": true + "$client.FlatLaf.styleClass": "flatlaf-preview-radiobuttonmenuitem" + } ) + add( new FormComponent( "javax.swing.JRadioButtonMenuItem" ) { + name: "radioButtonMenuItem5" + "text": "JRadioButtonMenuItem" + "$buttonGroup": new FormReference( "buttonGroup2" ) + "$client.FlatLaf.styleClass": "flatlaf-preview-radiobuttonmenuitem" + } ) + add( new FormComponent( "javax.swing.JPopupMenu$Separator" ) { + name: "separator3" + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu4" + "text": "JMenu" + "$client.FlatLaf.styleClass": "flatlaf-preview-menu" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem6" + "text": "JMenuItem" + "$client.FlatLaf.styleClass": "flatlaf-preview-menuitem" + } ) + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu5" + "text": "JMenu" + "$client.FlatLaf.styleClass": "flatlaf-preview-menu" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem7" + "text": "JMenuItem" + "$client.FlatLaf.styleClass": "flatlaf-preview-menuitem" + } ) + } ) + } ) + add( new FormContainer( "javax.swing.JMenu", new FormLayoutManager( class javax.swing.JMenu ) ) { + name: "menu3" + "text": "JMenu" + "$client.FlatLaf.styleClass": "flatlaf-preview-menu" + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem5" + "text": "JMenuItem" + "accelerator": static javax.swing.KeyStroke getKeyStroke( 80, 715, false ) + "$client.FlatLaf.styleClass": "flatlaf-preview-menuitem" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem8" + "text": "JMenuItem" + "$client.FlatLaf.styleClass": "flatlaf-preview-menuitem" + } ) + add( new FormComponent( "javax.swing.JMenuItem" ) { + name: "menuItem9" + "text": "JMenuItem" + "$client.FlatLaf.styleClass": "flatlaf-preview-menuitem" + } ) + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 11 2 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "scrollBarLabel" + "text": "JScrollBar:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 12 1 2,aligny top,growy 0" + } ) + add( new FormComponent( "javax.swing.JScrollBar" ) { + name: "scrollBar1" + "orientation": 0 + "$client.FlatLaf.styleClass": "flatlaf-preview-scrollbar" + "visibleAmount": 50 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 12 2 1" + } ) + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatScrollBar" ) { + name: "scrollBar5" + "orientation": 0 + "showButtons": true + "$client.FlatLaf.styleClass": "flatlaf-preview-scrollbar" + "visibleAmount": 50 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 13 2 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "separatorLabel" + "text": "JSeparator:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 14" + } ) + add( new FormComponent( "javax.swing.JSeparator" ) { + name: "separator1" + "$client.FlatLaf.styleClass": "flatlaf-preview-separator" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 14 2 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "sliderLabel" + "text": "JSlider:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 15" + } ) + add( new FormComponent( "javax.swing.JSlider" ) { + name: "slider1" + "$client.FlatLaf.styleClass": "flatlaf-preview-slider" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 15 2 1,width 100" + } ) + add( new FormComponent( "javax.swing.JSlider" ) { + name: "slider3" + "minorTickSpacing": 10 + "paintTicks": true + "majorTickSpacing": 50 + "paintLabels": true + "$client.FlatLaf.styleClass": "flatlaf-preview-slider" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "changeProgress", false ) ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 16 2 1,width 100" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "progressBarLabel" + "text": "JProgressBar:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 17" + } ) + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatProgressBar" ) { + name: "progressBar1" + "value": 50 + "$client.FlatLaf.styleClass": "flatlaf-preview-progressbar" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 17 2 1" + } ) + add( new FormComponent( "com.formdev.flatlaf.extras.components.FlatProgressBar" ) { + name: "progressBar2" + "value": 50 + "stringPainted": true + "$client.FlatLaf.styleClass": "flatlaf-preview-progressbar" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 18 2 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "toolTipLabel" + "text": "JToolTip:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 19" + } ) + add( new FormComponent( "javax.swing.JToolTip" ) { + name: "toolTip1" + "tipText": "Some text in tool tip." + "$client.FlatLaf.styleClass": "flatlaf-preview-tooltip" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 19 2 1,alignx left,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "toolBarLabel" + "text": "JToolBar:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 20" + } ) + add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { + name: "toolBar1" + "$client.FlatLaf.styleClass": "flatlaf-preview-toolbar" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + add( new FormComponent( "javax.swing.JButton" ) { + name: "button4" + "icon": new com.jformdesigner.model.SwingIcon( 2, "Tree.closedIcon" ) + "$client.FlatLaf.styleClass": "flatlaf-preview-toolbar-button" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button6" + "icon": new com.jformdesigner.model.SwingIcon( 2, "Tree.openIcon" ) + "$client.FlatLaf.styleClass": "flatlaf-preview-toolbar-button" + } ) + add( new FormComponent( "javax.swing.JToolBar$Separator" ) { + name: "separator4" + } ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "button7" + "icon": &SwingIcon0 new com.jformdesigner.model.SwingIcon( 2, "Tree.leafIcon" ) + "$client.FlatLaf.styleClass": "flatlaf-preview-toolbar-togglebutton" + } ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "button8" + "icon": #SwingIcon0 + "selected": true + "$client.FlatLaf.styleClass": "flatlaf-preview-toolbar-togglebutton" + } ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "button9" + "icon": #SwingIcon0 + "selected": true + "$client.FlatLaf.styleClass": "flatlaf-preview-toolbar-togglebutton" + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 20 2 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "tabbedPaneLabel" + "text": "JTabbedPane:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 21" + } ) + add( new FormContainer( "com.formdev.flatlaf.themeeditor.FlatThemePreviewAll$PreviewTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) { + name: "tabbedPane1" + "$client.FlatLaf.styleClass": "flatlaf-preview-tabbedpane" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 21 2 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "listTreeLabel" + "text": "JList / JTree:
JSplitPane:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 22,aligny top,growy 0" + } ) + add( new FormContainer( "javax.swing.JSplitPane", new FormLayoutManager( class javax.swing.JSplitPane ) ) { + name: "splitPane1" + "resizeWeight": 0.5 + "$client.FlatLaf.styleClass": "flatlaf-preview-splitpane" + add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { + name: "scrollPane2" + "preferredSize": new java.awt.Dimension( 50, 50 ) + add( new FormComponent( "javax.swing.JList" ) { + name: "list1" + "model": new javax.swing.DefaultListModel { + addElement( "Item 1" ) + addElement( "Item 2" ) + addElement( "Item 3" ) + } + "$client.FlatLaf.styleClass": "flatlaf-preview-list" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + } ) + }, new FormLayoutConstraints( class java.lang.String ) { + "value": "left" + } ) + add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { + name: "scrollPane3" + "horizontalScrollBarPolicy": 31 + "preferredSize": new java.awt.Dimension( 50, 50 ) + add( new FormComponent( "javax.swing.JTree" ) { + name: "tree1" + "model": new javax.swing.tree.DefaultTreeModel( new javax.swing.tree.DefaultMutableTreeNode { + userObject: "Item 1" + add( new javax.swing.tree.DefaultMutableTreeNode { + userObject: "Item 2" + } ) + add( new javax.swing.tree.DefaultMutableTreeNode { + userObject: "Item 3" + add( new javax.swing.tree.DefaultMutableTreeNode { + userObject: "Item 4" + } ) + add( new javax.swing.tree.DefaultMutableTreeNode { + userObject: "Item 5" + } ) + } ) + } ) + "$client.FlatLaf.styleClass": "flatlaf-preview-tree" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + } ) + }, new FormLayoutConstraints( class java.lang.String ) { + "value": "right" + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 22 2 1,height 50" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "tableLabel" + "text": "JTable:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 23" + } ) + add( new FormContainer( "javax.swing.JScrollPane", new FormLayoutManager( class javax.swing.JScrollPane ) ) { + name: "scrollPane4" + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewAll$PreviewTable" ) { + name: "table1" + "model": new com.jformdesigner.model.SwingTableModel( new java.util.Vector { + add( new java.util.Vector { + add( "Item 1a" ) + add( "Item 2a" ) + } ) + add( new java.util.Vector { + add( "Item 1b" ) + add( "Item 2b" ) + } ) + }, new java.util.Vector { + add( "Column 1" ) + add( "Column 2" ) + }, new java.util.Vector { + add( null ) + add( null ) + }, new java.util.Vector { + add( null ) + add( null ) + }, new java.util.Vector { + add( null ) + add( null ) + } ) + "$client.FlatLaf.styleClass": "flatlaf-preview-table" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 23 2 1,width 100,height 70" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "internalFrameLabel" + "text": "JDesktopPane:
JInternalFrame:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 24,aligny top,growy 0" + } ) + add( new FormContainer( "javax.swing.JDesktopPane", new FormLayoutManager( class javax.swing.JDesktopPane ) ) { + name: "desktopPane1" + "$client.FlatLaf.styleClass": "flatlaf-preview-desktoppane" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + add( new FormContainer( "javax.swing.JInternalFrame", new FormLayoutManager( class java.awt.BorderLayout ) ) { + name: "internalFrame1" + "visible": true + "title": "Active" + "closable": true + "maximizable": true + "iconifiable": true + "resizable": true + "$client.FlatLaf.styleClass": "flatlaf-preview-internalframe" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( null ) { + "x": 5 + "y": 5 + } ) + add( new FormContainer( "javax.swing.JInternalFrame", new FormLayoutManager( class java.awt.BorderLayout ) ) { + name: "internalFrame2" + "visible": true + "closable": true + "iconifiable": true + "maximizable": true + "resizable": true + "title": "Inactive" + "$client.FlatLaf.styleClass": "flatlaf-preview-internalframe" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( null ) { + "x": 5 + "y": 50 + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 24 2 1" + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 0, 0 ) + "size": new java.awt.Dimension( 430, 1070 ) + } ) + add( new FormNonVisual( "javax.swing.ButtonGroup" ) { + name: "buttonGroup1" + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 0, 1095 ) + } ) + add( new FormNonVisual( "javax.swing.ButtonGroup" ) { + name: "buttonGroup2" + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 0, 1145 ) + } ) + } +} diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewButtons.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewButtons.java new file mode 100644 index 00000000..ccd57b71 --- /dev/null +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewButtons.java @@ -0,0 +1,819 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.themeeditor; + +import static com.formdev.flatlaf.FlatClientProperties.*; +import java.awt.Component; +import java.util.Objects; +import java.util.function.Predicate; +import javax.swing.*; +import net.miginfocom.swing.*; + +/** + * @author Karl Tauber + */ +class FlatThemePreviewButtons + extends JPanel +{ + private static final String KEY_BUTTON_TYPE = "preview.buttonType"; + + private final FlatThemePreview preview; + + FlatThemePreviewButtons( FlatThemePreview preview ) { + this.preview = preview; + + initComponents(); + } + + void activated() { + String buttonType = preview.state.get( KEY_BUTTON_TYPE, null ); + + if( !Objects.equals( buttonType, getButtonType() ) ) { + setButtonType( buttonType ); + buttonTypeChanged(); + } + } + + private String getButtonType() { + String buttonType = null; + if( squareButton.isSelected() ) + buttonType = BUTTON_TYPE_SQUARE; + else if( roundRectButton.isSelected() ) + buttonType = BUTTON_TYPE_ROUND_RECT; + else if( tabButton.isSelected() ) + buttonType = BUTTON_TYPE_TAB; + else if( toolBarButtonButton.isSelected() ) + buttonType = BUTTON_TYPE_TOOLBAR_BUTTON; + else if( borderlessButton.isSelected() ) + buttonType = BUTTON_TYPE_BORDERLESS; + return buttonType; + } + + private void setButtonType( String buttonType ) { + switch( String.valueOf( buttonType ) ) { + case BUTTON_TYPE_SQUARE: squareButton.setSelected( true ); break; + case BUTTON_TYPE_ROUND_RECT: roundRectButton.setSelected( true ); break; + case BUTTON_TYPE_TAB: tabButton.setSelected( true ); break; + case BUTTON_TYPE_TOOLBAR_BUTTON: toolBarButtonButton.setSelected( true ); break; + case BUTTON_TYPE_BORDERLESS: borderlessButton.setSelected( true ); break; + default: noneButton.setSelected( true ); break; + } + } + + private void buttonTypeChanged() { + String buttonType = getButtonType(); + + for( Component c : getComponents() ) { + if( !(c instanceof AbstractButton) ) + continue; + + AbstractButton b = (AbstractButton) c; + if( !BUTTON_TYPE_HELP.equals( b.getClientProperty( BUTTON_TYPE ) ) ) + b.putClientProperty( BUTTON_TYPE, buttonType ); + } + + FlatThemeFileEditor.putPrefsString( preview.state, KEY_BUTTON_TYPE, buttonType ); + } + + private void initComponents() { + // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents + JPanel panel1 = new JPanel(); + JLabel buttonTypeLabel = new JLabel(); + JToolBar buttonTypeToolBar1 = new JToolBar(); + noneButton = new JToggleButton(); + squareButton = new JToggleButton(); + roundRectButton = new JToggleButton(); + tabButton = new JToggleButton(); + JToolBar buttonTypeToolBar2 = new JToolBar(); + toolBarButtonButton = new JToggleButton(); + borderlessButton = new JToggleButton(); + JLabel label11 = new JLabel(); + JLabel label27 = new JLabel(); + JLabel label28 = new JLabel(); + JLabel label5 = new JLabel(); + JLabel label7 = new JLabel(); + JLabel label6 = new JLabel(); + JLabel label8 = new JLabel(); + JLabel label1 = new JLabel(); + FlatThemePreviewButtons.TestStateButton testStateButton1 = new FlatThemePreviewButtons.TestStateButton(); + FlatThemePreviewButtons.TestStateButton testStateButton7 = new FlatThemePreviewButtons.TestStateButton(); + FlatThemePreviewButtons.TestStateButton testStateButton4 = new FlatThemePreviewButtons.TestStateButton(); + FlatThemePreviewButtons.TestStateButton testStateButton10 = new FlatThemePreviewButtons.TestStateButton(); + JLabel label2 = new JLabel(); + FlatThemePreviewButtons.TestStateButton testStateButton2 = new FlatThemePreviewButtons.TestStateButton(); + FlatThemePreviewButtons.TestStateButton testStateButton8 = new FlatThemePreviewButtons.TestStateButton(); + FlatThemePreviewButtons.TestStateButton testStateButton5 = new FlatThemePreviewButtons.TestStateButton(); + FlatThemePreviewButtons.TestStateButton testStateButton11 = new FlatThemePreviewButtons.TestStateButton(); + JLabel label3 = new JLabel(); + FlatThemePreviewButtons.TestStateButton testStateButton3 = new FlatThemePreviewButtons.TestStateButton(); + FlatThemePreviewButtons.TestStateButton testStateButton9 = new FlatThemePreviewButtons.TestStateButton(); + FlatThemePreviewButtons.TestStateButton testStateButton6 = new FlatThemePreviewButtons.TestStateButton(); + FlatThemePreviewButtons.TestStateButton testStateButton12 = new FlatThemePreviewButtons.TestStateButton(); + JLabel label4 = new JLabel(); + FlatThemePreviewButtons.TestStateButton testStateButton13 = new FlatThemePreviewButtons.TestStateButton(); + FlatThemePreviewButtons.TestStateButton testStateButton14 = new FlatThemePreviewButtons.TestStateButton(); + JLabel label10 = new JLabel(); + JButton button1 = new JButton(); + FlatThemePreviewButtons.TestDefaultButton testDefaultButton1 = new FlatThemePreviewButtons.TestDefaultButton(); + JLabel label12 = new JLabel(); + JLabel label29 = new JLabel(); + JLabel label30 = new JLabel(); + JLabel label13 = new JLabel(); + JLabel label14 = new JLabel(); + JLabel label15 = new JLabel(); + JLabel label16 = new JLabel(); + JLabel label17 = new JLabel(); + FlatThemePreviewButtons.TestStateToggleButton testStateToggleButton1 = new FlatThemePreviewButtons.TestStateToggleButton(); + FlatThemePreviewButtons.TestStateToggleButton testStateToggleButton5 = new FlatThemePreviewButtons.TestStateToggleButton(); + FlatThemePreviewButtons.TestStateToggleButton testStateToggleButton9 = new FlatThemePreviewButtons.TestStateToggleButton(); + FlatThemePreviewButtons.TestStateToggleButton testStateToggleButton12 = new FlatThemePreviewButtons.TestStateToggleButton(); + JLabel label18 = new JLabel(); + FlatThemePreviewButtons.TestStateToggleButton testStateToggleButton2 = new FlatThemePreviewButtons.TestStateToggleButton(); + FlatThemePreviewButtons.TestStateToggleButton testStateToggleButton6 = new FlatThemePreviewButtons.TestStateToggleButton(); + FlatThemePreviewButtons.TestStateToggleButton testStateToggleButton10 = new FlatThemePreviewButtons.TestStateToggleButton(); + FlatThemePreviewButtons.TestStateToggleButton testStateToggleButton13 = new FlatThemePreviewButtons.TestStateToggleButton(); + JLabel label19 = new JLabel(); + FlatThemePreviewButtons.TestStateToggleButton testStateToggleButton3 = new FlatThemePreviewButtons.TestStateToggleButton(); + FlatThemePreviewButtons.TestStateToggleButton testStateToggleButton7 = new FlatThemePreviewButtons.TestStateToggleButton(); + FlatThemePreviewButtons.TestStateToggleButton testStateToggleButton11 = new FlatThemePreviewButtons.TestStateToggleButton(); + FlatThemePreviewButtons.TestStateToggleButton testStateToggleButton14 = new FlatThemePreviewButtons.TestStateToggleButton(); + JLabel label20 = new JLabel(); + FlatThemePreviewButtons.TestStateToggleButton testStateToggleButton4 = new FlatThemePreviewButtons.TestStateToggleButton(); + FlatThemePreviewButtons.TestStateToggleButton testStateToggleButton8 = new FlatThemePreviewButtons.TestStateToggleButton(); + JLabel label21 = new JLabel(); + JToggleButton toggleButton1 = new JToggleButton(); + JToggleButton toggleButton2 = new JToggleButton(); + JLabel label32 = new JLabel(); + JLabel label9 = new JLabel(); + JLabel label33 = new JLabel(); + JLabel label22 = new JLabel(); + FlatThemePreviewButtons.TestStateButton testStateButton15 = new FlatThemePreviewButtons.TestStateButton(); + FlatThemePreviewButtons.TestStateButton testStateButton19 = new FlatThemePreviewButtons.TestStateButton(); + JLabel label23 = new JLabel(); + FlatThemePreviewButtons.TestStateButton testStateButton16 = new FlatThemePreviewButtons.TestStateButton(); + FlatThemePreviewButtons.TestStateButton testStateButton20 = new FlatThemePreviewButtons.TestStateButton(); + JLabel label24 = new JLabel(); + FlatThemePreviewButtons.TestStateButton testStateButton17 = new FlatThemePreviewButtons.TestStateButton(); + FlatThemePreviewButtons.TestStateButton testStateButton21 = new FlatThemePreviewButtons.TestStateButton(); + JLabel label25 = new JLabel(); + FlatThemePreviewButtons.TestStateButton testStateButton18 = new FlatThemePreviewButtons.TestStateButton(); + JLabel label26 = new JLabel(); + JButton button2 = new JButton(); + + //======== this ======== + setLayout(new MigLayout( + "insets dialog,hidemode 3", + // columns + "[fill]" + + "[fill]" + + "[fill]para" + + "[fill]" + + "[fill]para", + // rows + "[]para" + + "[]" + + "[]0" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]unrel" + + "[]para" + + "[]" + + "[]0" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]unrel" + + "[]para" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]unrel" + + "[]")); + + //======== panel1 ======== + { + panel1.setLayout(new MigLayout( + "insets 0,hidemode 3", + // columns + "[fill]" + + "[fill]", + // rows + "[]0" + + "[]")); + + //---- buttonTypeLabel ---- + buttonTypeLabel.setText("Button type:"); + panel1.add(buttonTypeLabel, "cell 0 0"); + + //======== buttonTypeToolBar1 ======== + { + buttonTypeToolBar1.setFloatable(false); + buttonTypeToolBar1.setBorder(BorderFactory.createEmptyBorder()); + + //---- noneButton ---- + noneButton.setText("none"); + noneButton.setSelected(true); + noneButton.putClientProperty("FlatLaf.styleClass", "small"); + noneButton.addActionListener(e -> buttonTypeChanged()); + buttonTypeToolBar1.add(noneButton); + + //---- squareButton ---- + squareButton.setText("square"); + squareButton.putClientProperty("FlatLaf.styleClass", "small"); + squareButton.addActionListener(e -> buttonTypeChanged()); + buttonTypeToolBar1.add(squareButton); + + //---- roundRectButton ---- + roundRectButton.setText("roundRect"); + roundRectButton.putClientProperty("FlatLaf.styleClass", "small"); + roundRectButton.addActionListener(e -> buttonTypeChanged()); + buttonTypeToolBar1.add(roundRectButton); + + //---- tabButton ---- + tabButton.setText("tab"); + tabButton.putClientProperty("FlatLaf.styleClass", "small"); + tabButton.addActionListener(e -> buttonTypeChanged()); + buttonTypeToolBar1.add(tabButton); + } + panel1.add(buttonTypeToolBar1, "cell 1 0"); + + //======== buttonTypeToolBar2 ======== + { + buttonTypeToolBar2.setFloatable(false); + buttonTypeToolBar2.setBorder(BorderFactory.createEmptyBorder()); + + //---- toolBarButtonButton ---- + toolBarButtonButton.setText("toolBarButton"); + toolBarButtonButton.putClientProperty("FlatLaf.styleClass", "small"); + toolBarButtonButton.addActionListener(e -> buttonTypeChanged()); + buttonTypeToolBar2.add(toolBarButtonButton); + + //---- borderlessButton ---- + borderlessButton.setText("borderless"); + borderlessButton.putClientProperty("FlatLaf.styleClass", "small"); + borderlessButton.addActionListener(e -> buttonTypeChanged()); + buttonTypeToolBar2.add(borderlessButton); + } + panel1.add(buttonTypeToolBar2, "cell 1 1"); + } + add(panel1, "cell 0 0 5 1"); + + //---- label11 ---- + label11.setText("JButton"); + label11.putClientProperty("FlatLaf.styleClass", "h3"); + add(label11, "cell 0 1 3 1"); + + //---- label27 ---- + label27.setText("unfocused"); + add(label27, "cell 1 2 2 1,alignx center,growx 0"); + + //---- label28 ---- + label28.setText("focused"); + add(label28, "cell 3 2 2 1,alignx center,growx 0"); + + //---- label5 ---- + label5.setText("regular"); + label5.putClientProperty("FlatLaf.styleClass", "small"); + add(label5, "cell 1 3,alignx center,growx 0"); + + //---- label7 ---- + label7.setText("default"); + label7.putClientProperty("FlatLaf.styleClass", "small"); + add(label7, "cell 2 3,alignx center,growx 0"); + + //---- label6 ---- + label6.setText("regular"); + label6.putClientProperty("FlatLaf.styleClass", "small"); + add(label6, "cell 3 3,alignx center,growx 0"); + + //---- label8 ---- + label8.setText("default"); + label8.putClientProperty("FlatLaf.styleClass", "small"); + add(label8, "cell 4 3,alignx center,growx 0"); + + //---- label1 ---- + label1.setText("none"); + add(label1, "cell 0 4"); + + //---- testStateButton1 ---- + testStateButton1.setText("OK"); + testStateButton1.putClientProperty("JComponent.minimumWidth", 0); + add(testStateButton1, "cell 1 4"); + + //---- testStateButton7 ---- + testStateButton7.setText("OK"); + testStateButton7.setStateDefault(true); + testStateButton7.putClientProperty("JComponent.minimumWidth", 0); + add(testStateButton7, "cell 2 4"); + + //---- testStateButton4 ---- + testStateButton4.setText("OK"); + testStateButton4.setStateFocused(true); + testStateButton4.putClientProperty("JComponent.minimumWidth", 0); + add(testStateButton4, "cell 3 4"); + + //---- testStateButton10 ---- + testStateButton10.setText("OK"); + testStateButton10.setStateFocused(true); + testStateButton10.setStateDefault(true); + testStateButton10.putClientProperty("JComponent.minimumWidth", 0); + add(testStateButton10, "cell 4 4"); + + //---- label2 ---- + label2.setText("hover"); + add(label2, "cell 0 5"); + + //---- testStateButton2 ---- + testStateButton2.setText("OK"); + testStateButton2.setStateHover(true); + testStateButton2.putClientProperty("JComponent.minimumWidth", 0); + add(testStateButton2, "cell 1 5"); + + //---- testStateButton8 ---- + testStateButton8.setText("OK"); + testStateButton8.setStateHover(true); + testStateButton8.setStateDefault(true); + testStateButton8.putClientProperty("JComponent.minimumWidth", 0); + add(testStateButton8, "cell 2 5"); + + //---- testStateButton5 ---- + testStateButton5.setText("OK"); + testStateButton5.setStateHover(true); + testStateButton5.setStateFocused(true); + testStateButton5.putClientProperty("JComponent.minimumWidth", 0); + add(testStateButton5, "cell 3 5"); + + //---- testStateButton11 ---- + testStateButton11.setText("OK"); + testStateButton11.setStateHover(true); + testStateButton11.setStateFocused(true); + testStateButton11.setStateDefault(true); + testStateButton11.putClientProperty("JComponent.minimumWidth", 0); + add(testStateButton11, "cell 4 5"); + + //---- label3 ---- + label3.setText("pressed"); + add(label3, "cell 0 6"); + + //---- testStateButton3 ---- + testStateButton3.setText("OK"); + testStateButton3.setStatePressed(true); + testStateButton3.putClientProperty("JComponent.minimumWidth", 0); + add(testStateButton3, "cell 1 6"); + + //---- testStateButton9 ---- + testStateButton9.setText("OK"); + testStateButton9.setStatePressed(true); + testStateButton9.setStateDefault(true); + testStateButton9.putClientProperty("JComponent.minimumWidth", 0); + add(testStateButton9, "cell 2 6"); + + //---- testStateButton6 ---- + testStateButton6.setText("OK"); + testStateButton6.setStatePressed(true); + testStateButton6.setStateFocused(true); + testStateButton6.putClientProperty("JComponent.minimumWidth", 0); + add(testStateButton6, "cell 3 6"); + + //---- testStateButton12 ---- + testStateButton12.setText("OK"); + testStateButton12.setStatePressed(true); + testStateButton12.setStateFocused(true); + testStateButton12.setStateDefault(true); + testStateButton12.putClientProperty("JComponent.minimumWidth", 0); + add(testStateButton12, "cell 4 6"); + + //---- label4 ---- + label4.setText("disabled"); + add(label4, "cell 0 7"); + + //---- testStateButton13 ---- + testStateButton13.setText("OK"); + testStateButton13.setEnabled(false); + testStateButton13.putClientProperty("JComponent.minimumWidth", 0); + add(testStateButton13, "cell 1 7"); + + //---- testStateButton14 ---- + testStateButton14.setText("OK"); + testStateButton14.setEnabled(false); + testStateButton14.setStateDefault(true); + testStateButton14.putClientProperty("JComponent.minimumWidth", 0); + add(testStateButton14, "cell 2 7"); + + //---- label10 ---- + label10.setText("try me"); + add(label10, "cell 0 8"); + + //---- button1 ---- + button1.setText("OK"); + button1.putClientProperty("JComponent.minimumWidth", 0); + add(button1, "cell 1 8"); + + //---- testDefaultButton1 ---- + testDefaultButton1.setText("OK"); + testDefaultButton1.putClientProperty("JComponent.minimumWidth", 0); + add(testDefaultButton1, "cell 2 8"); + + //---- label12 ---- + label12.setText("JToggleButton"); + label12.putClientProperty("FlatLaf.styleClass", "h3"); + add(label12, "cell 0 9 3 1"); + + //---- label29 ---- + label29.setText("unfocused"); + add(label29, "cell 1 10 2 1,alignx center,growx 0"); + + //---- label30 ---- + label30.setText("focused"); + add(label30, "cell 3 10 2 1,alignx center,growx 0"); + + //---- label13 ---- + label13.setText("unsel."); + label13.putClientProperty("FlatLaf.styleClass", "small"); + add(label13, "cell 1 11,alignx center,growx 0"); + + //---- label14 ---- + label14.setText("selected"); + label14.putClientProperty("FlatLaf.styleClass", "small"); + add(label14, "cell 2 11,alignx center,growx 0"); + + //---- label15 ---- + label15.setText("unsel."); + label15.putClientProperty("FlatLaf.styleClass", "small"); + add(label15, "cell 3 11,alignx center,growx 0"); + + //---- label16 ---- + label16.setText("selected"); + label16.putClientProperty("FlatLaf.styleClass", "small"); + add(label16, "cell 4 11,alignx center,growx 0"); + + //---- label17 ---- + label17.setText("none"); + add(label17, "cell 0 12"); + + //---- testStateToggleButton1 ---- + testStateToggleButton1.setText("OK"); + add(testStateToggleButton1, "cell 1 12"); + + //---- testStateToggleButton5 ---- + testStateToggleButton5.setText("OK"); + testStateToggleButton5.setStateSelected(true); + add(testStateToggleButton5, "cell 2 12"); + + //---- testStateToggleButton9 ---- + testStateToggleButton9.setText("OK"); + testStateToggleButton9.setStateFocused(true); + add(testStateToggleButton9, "cell 3 12"); + + //---- testStateToggleButton12 ---- + testStateToggleButton12.setText("OK"); + testStateToggleButton12.setStateSelected(true); + testStateToggleButton12.setStateFocused(true); + add(testStateToggleButton12, "cell 4 12"); + + //---- label18 ---- + label18.setText("hover"); + add(label18, "cell 0 13"); + + //---- testStateToggleButton2 ---- + testStateToggleButton2.setText("OK"); + testStateToggleButton2.setStateHover(true); + add(testStateToggleButton2, "cell 1 13"); + + //---- testStateToggleButton6 ---- + testStateToggleButton6.setText("OK"); + testStateToggleButton6.setStateHover(true); + testStateToggleButton6.setStateSelected(true); + add(testStateToggleButton6, "cell 2 13"); + + //---- testStateToggleButton10 ---- + testStateToggleButton10.setText("OK"); + testStateToggleButton10.setStateHover(true); + testStateToggleButton10.setStateFocused(true); + add(testStateToggleButton10, "cell 3 13"); + + //---- testStateToggleButton13 ---- + testStateToggleButton13.setText("OK"); + testStateToggleButton13.setStateHover(true); + testStateToggleButton13.setStateSelected(true); + testStateToggleButton13.setStateFocused(true); + add(testStateToggleButton13, "cell 4 13"); + + //---- label19 ---- + label19.setText("pressed"); + add(label19, "cell 0 14"); + + //---- testStateToggleButton3 ---- + testStateToggleButton3.setText("OK"); + testStateToggleButton3.setStatePressed(true); + add(testStateToggleButton3, "cell 1 14"); + + //---- testStateToggleButton7 ---- + testStateToggleButton7.setText("OK"); + testStateToggleButton7.setStatePressed(true); + testStateToggleButton7.setStateSelected(true); + add(testStateToggleButton7, "cell 2 14"); + + //---- testStateToggleButton11 ---- + testStateToggleButton11.setText("OK"); + testStateToggleButton11.setStatePressed(true); + testStateToggleButton11.setStateFocused(true); + add(testStateToggleButton11, "cell 3 14"); + + //---- testStateToggleButton14 ---- + testStateToggleButton14.setText("OK"); + testStateToggleButton14.setStatePressed(true); + testStateToggleButton14.setStateSelected(true); + testStateToggleButton14.setStateFocused(true); + add(testStateToggleButton14, "cell 4 14"); + + //---- label20 ---- + label20.setText("disabled"); + add(label20, "cell 0 15"); + + //---- testStateToggleButton4 ---- + testStateToggleButton4.setText("OK"); + testStateToggleButton4.setEnabled(false); + add(testStateToggleButton4, "cell 1 15"); + + //---- testStateToggleButton8 ---- + testStateToggleButton8.setText("OK"); + testStateToggleButton8.setEnabled(false); + testStateToggleButton8.setStateSelected(true); + add(testStateToggleButton8, "cell 2 15"); + + //---- label21 ---- + label21.setText("try me"); + add(label21, "cell 0 16"); + + //---- toggleButton1 ---- + toggleButton1.setText("OK"); + add(toggleButton1, "cell 1 16"); + + //---- toggleButton2 ---- + toggleButton2.setText("OK"); + toggleButton2.setSelected(true); + add(toggleButton2, "cell 2 16"); + + //---- label32 ---- + label32.setText("Help Button"); + label32.putClientProperty("FlatLaf.styleClass", "h3"); + add(label32, "cell 0 17 2 1"); + + //---- label9 ---- + label9.setText("unfocused"); + add(label9, "cell 1 18 2 1,alignx center,growx 0"); + + //---- label33 ---- + label33.setText("focused"); + add(label33, "cell 3 18 2 1,alignx center,growx 0"); + + //---- label22 ---- + label22.setText("none"); + add(label22, "cell 0 19"); + + //---- testStateButton15 ---- + testStateButton15.putClientProperty("JComponent.minimumWidth", 0); + testStateButton15.putClientProperty("JButton.buttonType", "help"); + add(testStateButton15, "cell 1 19 2 1,alignx center,growx 0"); + + //---- testStateButton19 ---- + testStateButton19.setStateFocused(true); + testStateButton19.putClientProperty("JComponent.minimumWidth", 0); + testStateButton19.putClientProperty("JButton.buttonType", "help"); + add(testStateButton19, "cell 3 19 2 1,alignx center,growx 0"); + + //---- label23 ---- + label23.setText("hover"); + add(label23, "cell 0 20"); + + //---- testStateButton16 ---- + testStateButton16.setStateHover(true); + testStateButton16.putClientProperty("JComponent.minimumWidth", 0); + testStateButton16.putClientProperty("JButton.buttonType", "help"); + add(testStateButton16, "cell 1 20 2 1,alignx center,growx 0"); + + //---- testStateButton20 ---- + testStateButton20.setStateHover(true); + testStateButton20.setStateFocused(true); + testStateButton20.putClientProperty("JComponent.minimumWidth", 0); + testStateButton20.putClientProperty("JButton.buttonType", "help"); + add(testStateButton20, "cell 3 20 2 1,alignx center,growx 0"); + + //---- label24 ---- + label24.setText("pressed"); + add(label24, "cell 0 21"); + + //---- testStateButton17 ---- + testStateButton17.setStatePressed(true); + testStateButton17.putClientProperty("JComponent.minimumWidth", 0); + testStateButton17.putClientProperty("JButton.buttonType", "help"); + add(testStateButton17, "cell 1 21 2 1,alignx center,growx 0"); + + //---- testStateButton21 ---- + testStateButton21.setStatePressed(true); + testStateButton21.setStateFocused(true); + testStateButton21.putClientProperty("JComponent.minimumWidth", 0); + testStateButton21.putClientProperty("JButton.buttonType", "help"); + add(testStateButton21, "cell 3 21 2 1,alignx center,growx 0"); + + //---- label25 ---- + label25.setText("disabled"); + add(label25, "cell 0 22"); + + //---- testStateButton18 ---- + testStateButton18.setEnabled(false); + testStateButton18.putClientProperty("JComponent.minimumWidth", 0); + testStateButton18.putClientProperty("JButton.buttonType", "help"); + add(testStateButton18, "cell 1 22 2 1,alignx center,growx 0"); + + //---- label26 ---- + label26.setText("try me"); + add(label26, "cell 0 23"); + + //---- button2 ---- + button2.putClientProperty("JComponent.minimumWidth", 0); + button2.putClientProperty("JButton.buttonType", "help"); + add(button2, "cell 1 23 2 1,alignx center,growx 0"); + + //---- buttonGroup1 ---- + ButtonGroup buttonGroup1 = new ButtonGroup(); + buttonGroup1.add(noneButton); + buttonGroup1.add(squareButton); + buttonGroup1.add(roundRectButton); + buttonGroup1.add(tabButton); + buttonGroup1.add(toolBarButtonButton); + buttonGroup1.add(borderlessButton); + // JFormDesigner - End of component initialization //GEN-END:initComponents + } + + // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + private JToggleButton noneButton; + private JToggleButton squareButton; + private JToggleButton roundRectButton; + private JToggleButton tabButton; + private JToggleButton toolBarButtonButton; + private JToggleButton borderlessButton; + // JFormDesigner - End of variables declaration //GEN-END:variables + + //---- class TestStateButton ---------------------------------------------- + + private static class TestStateButton + extends JButton + { + private boolean stateHover; + private boolean statePressed; + private boolean stateFocused; + private boolean stateDefault; + + public TestStateButton() { + setModel( new DefaultButtonModel() { + @Override + public boolean isRollover() { + return isStateHover(); + } + @Override + public boolean isPressed() { + return isStatePressed(); + } + } ); + + putClientProperty( COMPONENT_FOCUS_OWNER, + (Predicate) c -> { + return ((TestStateButton)c).isStateFocused(); + } ); + } + + public boolean isStateHover() { + return stateHover; + } + + public void setStateHover( boolean stateHover ) { + this.stateHover = stateHover; + } + + public boolean isStatePressed() { + return statePressed; + } + + public void setStatePressed( boolean statePressed ) { + this.statePressed = statePressed; + } + + public boolean isStateFocused() { + return stateFocused; + } + + public void setStateFocused( boolean stateFocused ) { + this.stateFocused = stateFocused; + } + + public boolean isStateDefault() { + return stateDefault; + } + + public void setStateDefault( boolean stateDefault ) { + this.stateDefault = stateDefault; + } + + @Override + public boolean isDefaultButton() { + return isStateDefault(); + } + } + + //---- class TestStateToggleButton ---------------------------------------- + + private static class TestStateToggleButton + extends JToggleButton + { + private boolean stateHover; + private boolean statePressed; + private boolean stateFocused; + private boolean stateSelected; + + public TestStateToggleButton() { + setModel( new DefaultButtonModel() { + @Override + public boolean isRollover() { + return isStateHover(); + } + @Override + public boolean isPressed() { + return isStatePressed(); + } + @Override + public boolean isSelected() { + return isStateSelected(); + } + } ); + + putClientProperty( COMPONENT_FOCUS_OWNER, + (Predicate) c -> { + return ((TestStateToggleButton)c).isStateFocused(); + } ); + } + + public boolean isStateHover() { + return stateHover; + } + + public void setStateHover( boolean stateHover ) { + this.stateHover = stateHover; + } + + public boolean isStatePressed() { + return statePressed; + } + + public void setStatePressed( boolean statePressed ) { + this.statePressed = statePressed; + } + + public boolean isStateFocused() { + return stateFocused; + } + + public void setStateFocused( boolean stateFocused ) { + this.stateFocused = stateFocused; + } + + public boolean isStateSelected() { + return stateSelected; + } + + public void setStateSelected( boolean stateSelected ) { + this.stateSelected = stateSelected; + } + } + + //---- class TestDefaultButton -------------------------------------------- + + private static class TestDefaultButton + extends JButton + { + @Override + public boolean isDefaultButton() { + return true; + } + } +} diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewButtons.jfd b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewButtons.jfd new file mode 100644 index 00000000..f7f49429 --- /dev/null +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewButtons.jfd @@ -0,0 +1,637 @@ +JFDML JFormDesigner: "7.0.4.0.360" Java: "16" encoding: "UTF-8" + +new FormModel { + contentType: "form/swing" + root: new FormRoot { + auxiliary() { + "JavaCodeGenerator.defaultVariableLocal": true + } + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "insets dialog,hidemode 3" + "$columnConstraints": "[fill][fill][fill]para[fill][fill]para" + "$rowConstraints": "[]para[][]0[][][][][]unrel[]para[][]0[][][][][]unrel[]para[][][][][][]unrel[]" + } ) { + name: "this" + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "insets 0,hidemode 3" + "$columnConstraints": "[fill][fill]" + "$rowConstraints": "[]0[]" + } ) { + name: "panel1" + add( new FormComponent( "javax.swing.JLabel" ) { + name: "buttonTypeLabel" + "text": "Button type:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0" + } ) + add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { + name: "buttonTypeToolBar1" + "floatable": false + "border": &EmptyBorder0 new javax.swing.border.EmptyBorder( 0, 0, 0, 0 ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "noneButton" + "text": "none" + "$buttonGroup": new FormReference( "buttonGroup1" ) + "selected": true + "$client.FlatLaf.styleClass": "small" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "buttonTypeChanged", false ) ) + } ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "squareButton" + "text": "square" + "$buttonGroup": new FormReference( "buttonGroup1" ) + "$client.FlatLaf.styleClass": "small" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "buttonTypeChanged", false ) ) + } ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "roundRectButton" + "text": "roundRect" + "$buttonGroup": new FormReference( "buttonGroup1" ) + "$client.FlatLaf.styleClass": "small" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "buttonTypeChanged", false ) ) + } ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "tabButton" + "text": "tab" + "$buttonGroup": new FormReference( "buttonGroup1" ) + "$client.FlatLaf.styleClass": "small" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "buttonTypeChanged", false ) ) + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 0" + } ) + add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { + name: "buttonTypeToolBar2" + "floatable": false + "border": #EmptyBorder0 + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "toolBarButtonButton" + "text": "toolBarButton" + "$buttonGroup": new FormReference( "buttonGroup1" ) + "$client.FlatLaf.styleClass": "small" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "buttonTypeChanged", false ) ) + } ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "borderlessButton" + "text": "borderless" + "$buttonGroup": new FormReference( "buttonGroup1" ) + "$client.FlatLaf.styleClass": "small" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "buttonTypeChanged", false ) ) + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 1" + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0 5 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label11" + "text": "JButton" + "$client.FlatLaf.styleClass": "h3" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 1 3 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label27" + "text": "unfocused" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 2 2 1,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label28" + "text": "focused" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 2 2 1,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label5" + "text": "regular" + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 3,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label7" + "text": "default" + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 3,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label6" + "text": "regular" + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 3,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label8" + "text": "default" + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 3,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label1" + "text": "none" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton1" + "text": "OK" + "$client.JComponent.minimumWidth": 0 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton7" + "text": "OK" + "stateDefault": true + "$client.JComponent.minimumWidth": 0 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton4" + "text": "OK" + "stateFocused": true + "$client.JComponent.minimumWidth": 0 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton10" + "text": "OK" + "stateFocused": true + "stateDefault": true + "$client.JComponent.minimumWidth": 0 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 4" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label2" + "text": "hover" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 5" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton2" + "text": "OK" + "stateHover": true + "$client.JComponent.minimumWidth": 0 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 5" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton8" + "text": "OK" + "stateHover": true + "stateDefault": true + "$client.JComponent.minimumWidth": 0 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 5" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton5" + "text": "OK" + "stateHover": true + "stateFocused": true + "$client.JComponent.minimumWidth": 0 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 5" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton11" + "text": "OK" + "stateHover": true + "stateFocused": true + "stateDefault": true + "$client.JComponent.minimumWidth": 0 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 5" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label3" + "text": "pressed" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton3" + "text": "OK" + "statePressed": true + "$client.JComponent.minimumWidth": 0 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton9" + "text": "OK" + "statePressed": true + "stateDefault": true + "$client.JComponent.minimumWidth": 0 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton6" + "text": "OK" + "statePressed": true + "stateFocused": true + "$client.JComponent.minimumWidth": 0 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton12" + "text": "OK" + "statePressed": true + "stateFocused": true + "stateDefault": true + "$client.JComponent.minimumWidth": 0 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 6" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label4" + "text": "disabled" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton13" + "text": "OK" + "enabled": false + "$client.JComponent.minimumWidth": 0 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton14" + "text": "OK" + "enabled": false + "stateDefault": true + "$client.JComponent.minimumWidth": 0 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 7" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label10" + "text": "try me" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 8" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button1" + "text": "OK" + "$client.JComponent.minimumWidth": 0 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestDefaultButton" ) { + name: "testDefaultButton1" + "text": "OK" + "$client.JComponent.minimumWidth": 0 + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 8" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label12" + "text": "JToggleButton" + "$client.FlatLaf.styleClass": "h3" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 9 3 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label29" + "text": "unfocused" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 10 2 1,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label30" + "text": "focused" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 10 2 1,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label13" + "text": "unsel." + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 11,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label14" + "text": "selected" + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 11,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label15" + "text": "unsel." + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 11,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label16" + "text": "selected" + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 11,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label17" + "text": "none" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateToggleButton" ) { + name: "testStateToggleButton1" + "text": "OK" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateToggleButton" ) { + name: "testStateToggleButton5" + "text": "OK" + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateToggleButton" ) { + name: "testStateToggleButton9" + "text": "OK" + "stateFocused": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateToggleButton" ) { + name: "testStateToggleButton12" + "text": "OK" + "stateSelected": true + "stateFocused": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 12" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label18" + "text": "hover" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 13" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateToggleButton" ) { + name: "testStateToggleButton2" + "text": "OK" + "stateHover": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 13" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateToggleButton" ) { + name: "testStateToggleButton6" + "text": "OK" + "stateHover": true + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 13" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateToggleButton" ) { + name: "testStateToggleButton10" + "text": "OK" + "stateHover": true + "stateFocused": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 13" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateToggleButton" ) { + name: "testStateToggleButton13" + "text": "OK" + "stateHover": true + "stateSelected": true + "stateFocused": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 13" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label19" + "text": "pressed" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateToggleButton" ) { + name: "testStateToggleButton3" + "text": "OK" + "statePressed": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateToggleButton" ) { + name: "testStateToggleButton7" + "text": "OK" + "statePressed": true + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateToggleButton" ) { + name: "testStateToggleButton11" + "text": "OK" + "statePressed": true + "stateFocused": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateToggleButton" ) { + name: "testStateToggleButton14" + "text": "OK" + "statePressed": true + "stateSelected": true + "stateFocused": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 14" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label20" + "text": "disabled" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 15" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateToggleButton" ) { + name: "testStateToggleButton4" + "text": "OK" + "enabled": false + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 15" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateToggleButton" ) { + name: "testStateToggleButton8" + "text": "OK" + "enabled": false + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 15" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label21" + "text": "try me" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 16" + } ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "toggleButton1" + "text": "OK" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 16" + } ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "toggleButton2" + "text": "OK" + "selected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 16" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label32" + "text": "Help Button" + "$client.FlatLaf.styleClass": "h3" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 17 2 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label9" + "text": "unfocused" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 18 2 1,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label33" + "text": "focused" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 18 2 1,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label22" + "text": "none" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 19" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton15" + "$client.JComponent.minimumWidth": 0 + "$client.JButton.buttonType": "help" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 19 2 1,alignx center,growx 0" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton19" + "stateFocused": true + "$client.JComponent.minimumWidth": 0 + "$client.JButton.buttonType": "help" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 19 2 1,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label23" + "text": "hover" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 20" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton16" + "stateHover": true + "$client.JComponent.minimumWidth": 0 + "$client.JButton.buttonType": "help" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 20 2 1,alignx center,growx 0" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton20" + "stateHover": true + "stateFocused": true + "$client.JComponent.minimumWidth": 0 + "$client.JButton.buttonType": "help" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 20 2 1,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label24" + "text": "pressed" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 21" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton17" + "statePressed": true + "$client.JComponent.minimumWidth": 0 + "$client.JButton.buttonType": "help" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 21 2 1,alignx center,growx 0" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton21" + "statePressed": true + "stateFocused": true + "$client.JComponent.minimumWidth": 0 + "$client.JButton.buttonType": "help" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 21 2 1,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label25" + "text": "disabled" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 22" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewButtons$TestStateButton" ) { + name: "testStateButton18" + "enabled": false + "$client.JComponent.minimumWidth": 0 + "$client.JButton.buttonType": "help" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 22 2 1,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label26" + "text": "try me" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 23" + } ) + add( new FormComponent( "javax.swing.JButton" ) { + name: "button2" + "$client.JComponent.minimumWidth": 0 + "$client.JButton.buttonType": "help" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 23 2 1,alignx center,growx 0" + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 5, 0 ) + "size": new java.awt.Dimension( 335, 685 ) + } ) + add( new FormNonVisual( "javax.swing.ButtonGroup" ) { + name: "buttonGroup1" + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 5, 765 ) + } ) + } +} diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewFonts.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewFonts.java new file mode 100644 index 00000000..e604c8c7 --- /dev/null +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewFonts.java @@ -0,0 +1,289 @@ +/* +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.themeeditor; + +import java.awt.*; +import java.text.DecimalFormat; +import javax.swing.*; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.util.UIScale; +import net.miginfocom.swing.*; + +/** + * @author Karl Tauber + */ +public class FlatThemePreviewFonts + extends JPanel +{ + private static final DecimalFormat SCALE_FORMAT = new DecimalFormat( "0.##x" ); + + public FlatThemePreviewFonts() { + initComponents(); + + scaleValueLabel.setText( SCALE_FORMAT.format( UIScale.getUserScaleFactor() ) ); + } + + private void initComponents() { + // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents + JLabel headingsLabel = new JLabel(); + FlatThemePreviewFonts.FontPreview h00Preview = new FlatThemePreviewFonts.FontPreview(); + FlatThemePreviewFonts.FontPreview h0Preview = new FlatThemePreviewFonts.FontPreview(); + FlatThemePreviewFonts.FontPreview h1Preview = new FlatThemePreviewFonts.FontPreview(); + FlatThemePreviewFonts.FontPreview h2Preview = new FlatThemePreviewFonts.FontPreview(); + FlatThemePreviewFonts.FontPreview h3Preview = new FlatThemePreviewFonts.FontPreview(); + FlatThemePreviewFonts.FontPreview h4Preview = new FlatThemePreviewFonts.FontPreview(); + JLabel textLabel = new JLabel(); + FlatThemePreviewFonts.FontPreview largePreview = new FlatThemePreviewFonts.FontPreview(); + defaultPreview = new FlatThemePreviewFonts.FontPreview(); + FlatThemePreviewFonts.FontPreview mediumPreview = new FlatThemePreviewFonts.FontPreview(); + FlatThemePreviewFonts.FontPreview smallPreview = new FlatThemePreviewFonts.FontPreview(); + FlatThemePreviewFonts.FontPreview miniPreview = new FlatThemePreviewFonts.FontPreview(); + FlatThemePreviewFonts.FontPreview lightPreview = new FlatThemePreviewFonts.FontPreview(); + FlatThemePreviewFonts.FontPreview semiboldPreview = new FlatThemePreviewFonts.FontPreview(); + FlatThemePreviewFonts.FontPreview monospacedPreview = new FlatThemePreviewFonts.FontPreview(); + JLabel scaleLabel = new JLabel(); + scaleValueLabel = new JLabel(); + + //======== this ======== + setLayout(new MigLayout( + "ltr,insets dialog,hidemode 3", + // columns + "[left]unrel", + // rows + "[]" + + "[bottom]" + + "[bottom]" + + "[bottom]" + + "[bottom]" + + "[bottom]" + + "[bottom]para" + + "[]" + + "[bottom]" + + "[bottom]" + + "[bottom]" + + "[bottom]" + + "[bottom]para" + + "[]" + + "[]para" + + "[]para" + + "[]")); + + //---- headingsLabel ---- + headingsLabel.setText("Headings"); + headingsLabel.putClientProperty("FlatLaf.styleClass", "h3"); + add(headingsLabel, "cell 0 0"); + + //---- h00Preview ---- + h00Preview.setFontType("H00"); + h00Preview.setFontStyle("h00"); + add(h00Preview, "cell 0 1,gapx 12"); + + //---- h0Preview ---- + h0Preview.setFontType("H0"); + h0Preview.setFontStyle("h0"); + add(h0Preview, "cell 0 2,gapx 12"); + + //---- h1Preview ---- + h1Preview.setFontType("H1"); + h1Preview.setFontStyle("h1"); + h1Preview.setFontStyleRegular("h1.regular"); + add(h1Preview, "cell 0 3,gapx 12"); + + //---- h2Preview ---- + h2Preview.setFontType("H2"); + h2Preview.setFontStyle("h2"); + h2Preview.setFontStyleRegular("h2.regular"); + add(h2Preview, "cell 0 4,gapx 12"); + + //---- h3Preview ---- + h3Preview.setFontType("H3"); + h3Preview.setFontStyle("h3"); + h3Preview.setFontStyleRegular("h3.regular"); + add(h3Preview, "cell 0 5,gapx 12"); + + //---- h4Preview ---- + h4Preview.setFontType("H4"); + h4Preview.setFontStyle("h4"); + add(h4Preview, "cell 0 6,gapx 12"); + + //---- textLabel ---- + textLabel.setText("Text"); + textLabel.putClientProperty("FlatLaf.styleClass", "h3"); + add(textLabel, "cell 0 7"); + + //---- largePreview ---- + largePreview.setFontType("Large"); + largePreview.setFontStyle("large"); + add(largePreview, "cell 0 8,gapx 12"); + + //---- defaultPreview ---- + defaultPreview.setFontType("Default"); + add(defaultPreview, "cell 0 9,gapx 12"); + + //---- mediumPreview ---- + mediumPreview.setFontType("Medium"); + mediumPreview.setFontStyle("medium"); + add(mediumPreview, "cell 0 10,gapx 12"); + + //---- smallPreview ---- + smallPreview.setFontType("Small"); + smallPreview.setFontStyle("small"); + add(smallPreview, "cell 0 11,gapx 12"); + + //---- miniPreview ---- + miniPreview.setFontType("Mini"); + miniPreview.setFontStyle("mini"); + add(miniPreview, "cell 0 12,gapx 12"); + + //---- lightPreview ---- + lightPreview.setFontType("Light"); + lightPreview.setFontStyle("light"); + add(lightPreview, "cell 0 13,gapx 12"); + + //---- semiboldPreview ---- + semiboldPreview.setFontType("Semibold"); + semiboldPreview.setFontStyle("semibold"); + add(semiboldPreview, "cell 0 14,gapx 12"); + + //---- monospacedPreview ---- + monospacedPreview.setFontType("Monospaced"); + monospacedPreview.setFontStyle("monospaced"); + add(monospacedPreview, "cell 0 15,gapx 12"); + + //---- scaleLabel ---- + scaleLabel.setText("Fonts in preview are scaled by:"); + add(scaleLabel, "cell 0 16,gapx 12"); + + //---- scaleValueLabel ---- + scaleValueLabel.setText("1x"); + scaleValueLabel.putClientProperty("FlatLaf.styleClass", "h2"); + add(scaleValueLabel, "cell 0 16"); + // JFormDesigner - End of component initialization //GEN-END:initComponents + } + + // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + private FlatThemePreviewFonts.FontPreview defaultPreview; + private JLabel scaleValueLabel; + // JFormDesigner - End of variables declaration //GEN-END:variables + + //---- class FontPreview -------------------------------------------------- + + static class FontPreview + extends JPanel + { + private String fontType; + private String fontStyle; + private String fontStyleRegular; + + private FontPreview() { + initComponents(); + + updateDescription( previewLabel.getFont() ); + previewLabel.addPropertyChangeListener( "font", e -> { + updateDescription( previewLabel.getFont() ); + } ); + + preview2Label.setVisible( false ); + } + + public String getFontType() { + return fontType; + } + + public void setFontType( String fontType ) { + this.fontType = fontType; + previewLabel.setText( fontType ); + preview2Label.setText( " / " + fontType ); + } + + public String getFontStyle() { + return fontStyle; + } + + public void setFontStyle( String fontStyle ) { + this.fontStyle = fontStyle; + previewLabel.putClientProperty( FlatClientProperties.STYLE_CLASS, fontStyle ); + } + + public String getFontStyleRegular() { + return fontStyleRegular; + } + + public void setFontStyleRegular( String fontStyleRegular ) { + this.fontStyleRegular = fontStyleRegular; + preview2Label.putClientProperty( FlatClientProperties.STYLE_CLASS, fontStyleRegular ); + preview2Label.setVisible( fontStyleRegular != null ); + } + + private void updateDescription( Font font ) { + int baseSize = getDefaultFont().getSize(); + int fontSize = font.getSize(); + + descLabel.setText( String.format( "%s %d %s%s (%+d %s)", + font.getFamily(), + fontSize, + (font.getStyle() & Font.BOLD) != 0 ? " bold" : "", + (font.getStyle() & Font.ITALIC) != 0 ? " italic" : "", + fontSize - baseSize, + SCALE_FORMAT.format( (float) fontSize / baseSize ) ) ); + } + + private Font getDefaultFont() { + Font font = UIManager.getFont( "defaultFont" ); + if( font == null ) + font = UIManager.getFont( "Label.font" ); + return font; + } + + private void initComponents() { + // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents + previewLabel = new JLabel(); + preview2Label = new JLabel(); + descLabel = new JLabel(); + + //======== this ======== + setLayout(new MigLayout( + "insets 0,hidemode 3", + // columns + "[90,left]" + + "[fill]", + // rows + "[]0")); + + //---- previewLabel ---- + previewLabel.setText("preview"); + add(previewLabel, "cell 0 0"); + + //---- preview2Label ---- + preview2Label.setText("preview"); + add(preview2Label, "cell 0 0,gapx 0"); + + //---- descLabel ---- + descLabel.setText("description"); + descLabel.putClientProperty("FlatLaf.styleClass", "medium"); + add(descLabel, "cell 1 0"); + // JFormDesigner - End of component initialization //GEN-END:initComponents + } + + // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + private JLabel previewLabel; + private JLabel preview2Label; + private JLabel descLabel; + // JFormDesigner - End of variables declaration //GEN-END:variables + } +} diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewFonts.jfd b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewFonts.jfd new file mode 100644 index 00000000..e0dfb9b3 --- /dev/null +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewFonts.jfd @@ -0,0 +1,195 @@ +JFDML JFormDesigner: "7.0.5.0.382" Java: "16" encoding: "UTF-8" + +new FormModel { + contentType: "form/swing" + root: new FormRoot { + auxiliary() { + "JavaCodeGenerator.defaultVariableLocal": true + } + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "ltr,insets dialog,hidemode 3" + "$columnConstraints": "[left]unrel" + "$rowConstraints": "[][bottom][bottom][bottom][bottom][bottom][bottom]para[][bottom][bottom][bottom][bottom][bottom]para[][]para[]para[]" + } ) { + name: "this" + add( new FormComponent( "javax.swing.JLabel" ) { + name: "headingsLabel" + "text": "Headings" + "$client.FlatLaf.styleClass": "h3" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewFonts$FontPreview" ) { + name: "h00Preview" + "fontType": "H00" + "fontStyle": "h00" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 1,gapx 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewFonts$FontPreview" ) { + name: "h0Preview" + "fontType": "H0" + "fontStyle": "h0" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 2,gapx 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewFonts$FontPreview" ) { + name: "h1Preview" + "fontType": "H1" + "fontStyle": "h1" + "fontStyleRegular": "h1.regular" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 3,gapx 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewFonts$FontPreview" ) { + name: "h2Preview" + "fontType": "H2" + "fontStyle": "h2" + "fontStyleRegular": "h2.regular" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 4,gapx 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewFonts$FontPreview" ) { + name: "h3Preview" + "fontType": "H3" + "fontStyle": "h3" + "fontStyleRegular": "h3.regular" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 5,gapx 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewFonts$FontPreview" ) { + name: "h4Preview" + "fontType": "H4" + "fontStyle": "h4" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 6,gapx 12" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "textLabel" + "text": "Text" + "$client.FlatLaf.styleClass": "h3" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewFonts$FontPreview" ) { + name: "largePreview" + "fontType": "Large" + "fontStyle": "large" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 8,gapx 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewFonts$FontPreview" ) { + name: "defaultPreview" + "fontType": "Default" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 9,gapx 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewFonts$FontPreview" ) { + name: "mediumPreview" + "fontType": "Medium" + "fontStyle": "medium" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 10,gapx 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewFonts$FontPreview" ) { + name: "smallPreview" + "fontType": "Small" + "fontStyle": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 11,gapx 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewFonts$FontPreview" ) { + name: "miniPreview" + "fontType": "Mini" + "fontStyle": "mini" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 12,gapx 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewFonts$FontPreview" ) { + name: "lightPreview" + "fontType": "Light" + "fontStyle": "light" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 13,gapx 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewFonts$FontPreview" ) { + name: "semiboldPreview" + "fontType": "Semibold" + "fontStyle": "semibold" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 14,gapx 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewFonts$FontPreview" ) { + name: "monospacedPreview" + "fontType": "Monospaced" + "fontStyle": "monospaced" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 15,gapx 12" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "scaleLabel" + "text": "Fonts in preview are scaled by:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 16,gapx 12" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "scaleValueLabel" + "text": "1x" + "$client.FlatLaf.styleClass": "h2" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 16" + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 5, 0 ) + "size": new java.awt.Dimension( 335, 495 ) + } ) + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "insets 0,hidemode 3" + "$columnConstraints": "[90,left][fill]" + "$rowConstraints": "[]0" + } ) { + name: "panel1" + auxiliary() { + "JavaCodeGenerator.className": "FontPreview" + "JavaCodeGenerator.variableName": "fontPreview" + } + add( new FormComponent( "javax.swing.JLabel" ) { + name: "previewLabel" + "text": "preview" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "preview2Label" + "text": "preview" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0,gapx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "descLabel" + "text": "description" + "$client.FlatLaf.styleClass": "medium" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 0" + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 5, 545 ) + "size": new java.awt.Dimension( 235, 65 ) + } ) + } +} diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewSwitches.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewSwitches.java new file mode 100644 index 00000000..2baa7576 --- /dev/null +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewSwitches.java @@ -0,0 +1,861 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.themeeditor; + +import java.awt.Component; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.beans.Beans; +import java.util.function.Predicate; +import javax.swing.*; +import com.formdev.flatlaf.FlatClientProperties; +import com.formdev.flatlaf.extras.components.FlatTriStateCheckBox; +import com.formdev.flatlaf.icons.FlatCheckBoxIcon; +import com.formdev.flatlaf.icons.FlatRadioButtonIcon; +import net.miginfocom.layout.AC; +import net.miginfocom.layout.BoundSize; +import net.miginfocom.layout.ConstraintParser; +import net.miginfocom.layout.DimConstraint; +import net.miginfocom.swing.*; + +/** + * @author Karl Tauber + */ +class FlatThemePreviewSwitches + extends JPanel +{ + private static final String KEY_SWITCHES_ZOOM = "preview.switchesZoom"; + private static final String KEY_SHOW_INDETERMINATE = "preview.showIndeterminate"; + + private final FlatThemePreview preview; + + private static float zoom = 1; + + FlatThemePreviewSwitches( FlatThemePreview preview ) { + this.preview = preview; + + initComponents(); + } + + void activated() { + float zoom = preview.state.getFloat( KEY_SWITCHES_ZOOM, 1 ); + boolean showIndeterminate = preview.state.getBoolean( KEY_SHOW_INDETERMINATE, true ); + + if( zoom != getZoom() ) { + setZoom( zoom ); + zoomChanged(); + } + + if( showIndeterminate != indeterminateButton.isSelected() ) { + indeterminateButton.setSelected( showIndeterminate ); + indeterminateChanged(); + } + } + + private float getZoom() { + if( zoom2xButton.isSelected() ) + return 2; + if( zoom3xButton.isSelected() ) + return 3; + if( zoom4xButton.isSelected() ) + return 4; + return 1; + } + + private void setZoom( float zoom ) { + if( zoom == 2 ) + zoom2xButton.setSelected( true ); + else if( zoom == 3 ) + zoom3xButton.setSelected( true ); + else if( zoom == 4 ) + zoom4xButton.setSelected( true ); + else + zoom1xButton.setSelected( true ); + } + + private void zoomChanged() { + zoom = getZoom(); + + preview.revalidate(); + revalidate(); + repaint(); + + if( zoom != 1 ) + preview.state.putFloat( KEY_SWITCHES_ZOOM, zoom ); + else + preview.state.remove( KEY_SWITCHES_ZOOM ); + } + + private void indeterminateChanged() { + boolean show = indeterminateButton.isSelected(); + + // show/hide indeterminate checkboxes + for( Component c : getComponents() ) { + if( (c instanceof TestStateCheckBox && ((TestStateCheckBox)c).isStateIndeterminate()) || + c instanceof FlatTriStateCheckBox || + (c instanceof JLabel && ((JLabel)c).getText().startsWith( "ind" )) ) + c.setVisible( show ); + } + + // update layout + MigLayout layout = (MigLayout) getLayout(); + Object columnCons = layout.getColumnConstraints(); + AC ac = (columnCons instanceof String) + ? ConstraintParser.parseColumnConstraints( (String) columnCons ) + : (AC) columnCons; + DimConstraint[] constaints = ac.getConstaints(); + constaints[3].setSizeGroup( show ? "1" : null ); + constaints[6].setSizeGroup( show ? "2" : null ); + BoundSize gap = show ? null : ConstraintParser.parseBoundSize( "0", true, true ); + constaints[3].setGapBefore( gap ); + constaints[6].setGapBefore( gap ); + layout.setColumnConstraints( ac ); + + preview.revalidate(); + revalidate(); + repaint(); + + FlatThemeFileEditor.putPrefsBoolean( preview.state, KEY_SHOW_INDETERMINATE, show, true ); + } + + private void initComponents() { + // JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents + JPanel panel1 = new JPanel(); + JLabel zoomLabel = new JLabel(); + JToolBar zoomToolBar = new JToolBar(); + zoom1xButton = new JToggleButton(); + zoom2xButton = new JToggleButton(); + zoom3xButton = new JToggleButton(); + zoom4xButton = new JToggleButton(); + indeterminateButton = new JToggleButton(); + JLabel label22 = new JLabel(); + JLabel label1 = new JLabel(); + JLabel label2 = new JLabel(); + JLabel label23 = new JLabel(); + JLabel label28 = new JLabel(); + JLabel label37 = new JLabel(); + JLabel label24 = new JLabel(); + JLabel label29 = new JLabel(); + JLabel label38 = new JLabel(); + JLabel label17 = new JLabel(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox1 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox8 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox15 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox5 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox12 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox20 = new FlatThemePreviewSwitches.TestStateCheckBox(); + JLabel label18 = new JLabel(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox2 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox9 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox16 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox6 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox13 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox21 = new FlatThemePreviewSwitches.TestStateCheckBox(); + JLabel label19 = new JLabel(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox3 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox10 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox17 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox7 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox14 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox22 = new FlatThemePreviewSwitches.TestStateCheckBox(); + JLabel label20 = new JLabel(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox4 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox11 = new FlatThemePreviewSwitches.TestStateCheckBox(); + FlatThemePreviewSwitches.TestStateCheckBox testStateCheckBox18 = new FlatThemePreviewSwitches.TestStateCheckBox(); + JLabel label21 = new JLabel(); + FlatThemePreviewSwitches.ZoomCheckBox checkBox1 = new FlatThemePreviewSwitches.ZoomCheckBox(); + FlatThemePreviewSwitches.ZoomCheckBox checkBox2 = new FlatThemePreviewSwitches.ZoomCheckBox(); + FlatThemePreviewSwitches.ZoomTriStateCheckBox triStateCheckBox1 = new FlatThemePreviewSwitches.ZoomTriStateCheckBox(); + JLabel label27 = new JLabel(); + JLabel label3 = new JLabel(); + JLabel label4 = new JLabel(); + JLabel label25 = new JLabel(); + JLabel label30 = new JLabel(); + JLabel label26 = new JLabel(); + JLabel label31 = new JLabel(); + JLabel label36 = new JLabel(); + FlatThemePreviewSwitches.TestStateRadioButton testStateRadioButton1 = new FlatThemePreviewSwitches.TestStateRadioButton(); + FlatThemePreviewSwitches.TestStateRadioButton testStateRadioButton8 = new FlatThemePreviewSwitches.TestStateRadioButton(); + FlatThemePreviewSwitches.TestStateRadioButton testStateRadioButton5 = new FlatThemePreviewSwitches.TestStateRadioButton(); + FlatThemePreviewSwitches.TestStateRadioButton testStateRadioButton9 = new FlatThemePreviewSwitches.TestStateRadioButton(); + JLabel label35 = new JLabel(); + FlatThemePreviewSwitches.TestStateRadioButton testStateRadioButton2 = new FlatThemePreviewSwitches.TestStateRadioButton(); + FlatThemePreviewSwitches.TestStateRadioButton testStateRadioButton10 = new FlatThemePreviewSwitches.TestStateRadioButton(); + FlatThemePreviewSwitches.TestStateRadioButton testStateRadioButton6 = new FlatThemePreviewSwitches.TestStateRadioButton(); + FlatThemePreviewSwitches.TestStateRadioButton testStateRadioButton11 = new FlatThemePreviewSwitches.TestStateRadioButton(); + JLabel label34 = new JLabel(); + FlatThemePreviewSwitches.TestStateRadioButton testStateRadioButton3 = new FlatThemePreviewSwitches.TestStateRadioButton(); + FlatThemePreviewSwitches.TestStateRadioButton testStateRadioButton12 = new FlatThemePreviewSwitches.TestStateRadioButton(); + FlatThemePreviewSwitches.TestStateRadioButton testStateRadioButton7 = new FlatThemePreviewSwitches.TestStateRadioButton(); + FlatThemePreviewSwitches.TestStateRadioButton testStateRadioButton13 = new FlatThemePreviewSwitches.TestStateRadioButton(); + JLabel label33 = new JLabel(); + FlatThemePreviewSwitches.TestStateRadioButton testStateRadioButton4 = new FlatThemePreviewSwitches.TestStateRadioButton(); + FlatThemePreviewSwitches.TestStateRadioButton testStateRadioButton14 = new FlatThemePreviewSwitches.TestStateRadioButton(); + JLabel label32 = new JLabel(); + FlatThemePreviewSwitches.ZoomRadioButton radioButton1 = new FlatThemePreviewSwitches.ZoomRadioButton(); + FlatThemePreviewSwitches.ZoomRadioButton radioButton2 = new FlatThemePreviewSwitches.ZoomRadioButton(); + + //======== this ======== + setLayout(new MigLayout( + "insets dialog,hidemode 3", + // columns + "[fill]" + + "[sizegroup 1,center]" + + "[sizegroup 1,center]" + + "[sizegroup 1,center]para" + + "[sizegroup 2,center]" + + "[sizegroup 2,center]" + + "[sizegroup 2,center]0" + + "[grow,fill]", + // rows + "[]para" + + "[]" + + "[]3" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]unrel" + + "[]para" + + "[]" + + "[]3" + + "[]" + + "[]" + + "[]" + + "[]" + + "[]unrel" + + "[]")); + + //======== panel1 ======== + { + panel1.setLayout(new MigLayout( + "insets 0,hidemode 3", + // columns + "[fill]" + + "[fill]", + // rows + "[]0")); + + //---- zoomLabel ---- + zoomLabel.setText("Zoom:"); + panel1.add(zoomLabel, "cell 0 0"); + + //======== zoomToolBar ======== + { + zoomToolBar.setFloatable(false); + zoomToolBar.setBorder(BorderFactory.createEmptyBorder()); + + //---- zoom1xButton ---- + zoom1xButton.setText("1x"); + zoom1xButton.setSelected(true); + zoom1xButton.putClientProperty("FlatLaf.styleClass", "small"); + zoom1xButton.addActionListener(e -> zoomChanged()); + zoomToolBar.add(zoom1xButton); + + //---- zoom2xButton ---- + zoom2xButton.setText("2x"); + zoom2xButton.putClientProperty("FlatLaf.styleClass", "small"); + zoom2xButton.addActionListener(e -> zoomChanged()); + zoomToolBar.add(zoom2xButton); + + //---- zoom3xButton ---- + zoom3xButton.setText("3x"); + zoom3xButton.putClientProperty("FlatLaf.styleClass", "small"); + zoom3xButton.addActionListener(e -> zoomChanged()); + zoomToolBar.add(zoom3xButton); + + //---- zoom4xButton ---- + zoom4xButton.setText("4x"); + zoom4xButton.putClientProperty("FlatLaf.styleClass", "small"); + zoom4xButton.addActionListener(e -> zoomChanged()); + zoomToolBar.add(zoom4xButton); + zoomToolBar.addSeparator(); + + //---- indeterminateButton ---- + indeterminateButton.setText("indeterminate"); + indeterminateButton.setSelected(true); + indeterminateButton.putClientProperty("FlatLaf.styleClass", "small"); + indeterminateButton.addActionListener(e -> indeterminateChanged()); + zoomToolBar.add(indeterminateButton); + } + panel1.add(zoomToolBar, "cell 1 0"); + } + add(panel1, "cell 0 0 8 1,alignx right,growx 0"); + + //---- label22 ---- + label22.setText("JCheckBox"); + label22.putClientProperty("FlatLaf.styleClass", "h3"); + add(label22, "cell 0 1 3 1"); + + //---- label1 ---- + label1.setText("unfocused"); + add(label1, "cell 1 2 3 1,alignx center,growx 0"); + + //---- label2 ---- + label2.setText("focused"); + add(label2, "cell 4 2 3 1,alignx center,growx 0"); + + //---- label23 ---- + label23.setText("unsel."); + label23.putClientProperty("FlatLaf.styleClass", "small"); + add(label23, "cell 1 3,alignx center,growx 0"); + + //---- label28 ---- + label28.setText("sel."); + label28.putClientProperty("FlatLaf.styleClass", "small"); + add(label28, "cell 2 3,alignx center,growx 0"); + + //---- label37 ---- + label37.setText("ind."); + label37.putClientProperty("FlatLaf.styleClass", "small"); + add(label37, "cell 3 3,alignx center,growx 0"); + + //---- label24 ---- + label24.setText("unsel."); + label24.putClientProperty("FlatLaf.styleClass", "small"); + add(label24, "cell 4 3,alignx center,growx 0"); + + //---- label29 ---- + label29.setText("sel."); + label29.putClientProperty("FlatLaf.styleClass", "small"); + add(label29, "cell 5 3,alignx center,growx 0"); + + //---- label38 ---- + label38.setText("ind."); + label38.putClientProperty("FlatLaf.styleClass", "small"); + add(label38, "cell 6 3,alignx center,growx 0"); + + //---- label17 ---- + label17.setText("none"); + add(label17, "cell 0 4"); + add(testStateCheckBox1, "cell 1 4"); + + //---- testStateCheckBox8 ---- + testStateCheckBox8.setStateSelected(true); + add(testStateCheckBox8, "cell 2 4"); + + //---- testStateCheckBox15 ---- + testStateCheckBox15.setStateIndeterminate(true); + add(testStateCheckBox15, "cell 3 4"); + + //---- testStateCheckBox5 ---- + testStateCheckBox5.setStateFocused(true); + add(testStateCheckBox5, "cell 4 4"); + + //---- testStateCheckBox12 ---- + testStateCheckBox12.setStateFocused(true); + testStateCheckBox12.setStateSelected(true); + add(testStateCheckBox12, "cell 5 4"); + + //---- testStateCheckBox20 ---- + testStateCheckBox20.setStateIndeterminate(true); + testStateCheckBox20.setStateFocused(true); + add(testStateCheckBox20, "cell 6 4"); + + //---- label18 ---- + label18.setText("hover"); + add(label18, "cell 0 5"); + + //---- testStateCheckBox2 ---- + testStateCheckBox2.setStateHover(true); + add(testStateCheckBox2, "cell 1 5"); + + //---- testStateCheckBox9 ---- + testStateCheckBox9.setStateHover(true); + testStateCheckBox9.setStateSelected(true); + add(testStateCheckBox9, "cell 2 5"); + + //---- testStateCheckBox16 ---- + testStateCheckBox16.setStateIndeterminate(true); + testStateCheckBox16.setStateHover(true); + add(testStateCheckBox16, "cell 3 5"); + + //---- testStateCheckBox6 ---- + testStateCheckBox6.setStateFocused(true); + testStateCheckBox6.setStateHover(true); + add(testStateCheckBox6, "cell 4 5"); + + //---- testStateCheckBox13 ---- + testStateCheckBox13.setStateFocused(true); + testStateCheckBox13.setStateHover(true); + testStateCheckBox13.setStateSelected(true); + add(testStateCheckBox13, "cell 5 5"); + + //---- testStateCheckBox21 ---- + testStateCheckBox21.setStateIndeterminate(true); + testStateCheckBox21.setStateHover(true); + testStateCheckBox21.setStateFocused(true); + add(testStateCheckBox21, "cell 6 5"); + + //---- label19 ---- + label19.setText("pressed"); + add(label19, "cell 0 6"); + + //---- testStateCheckBox3 ---- + testStateCheckBox3.setStatePressed(true); + add(testStateCheckBox3, "cell 1 6"); + + //---- testStateCheckBox10 ---- + testStateCheckBox10.setStatePressed(true); + testStateCheckBox10.setStateSelected(true); + add(testStateCheckBox10, "cell 2 6"); + + //---- testStateCheckBox17 ---- + testStateCheckBox17.setStateIndeterminate(true); + testStateCheckBox17.setStatePressed(true); + add(testStateCheckBox17, "cell 3 6"); + + //---- testStateCheckBox7 ---- + testStateCheckBox7.setStateFocused(true); + testStateCheckBox7.setStatePressed(true); + add(testStateCheckBox7, "cell 4 6"); + + //---- testStateCheckBox14 ---- + testStateCheckBox14.setStateFocused(true); + testStateCheckBox14.setStatePressed(true); + testStateCheckBox14.setStateSelected(true); + add(testStateCheckBox14, "cell 5 6"); + + //---- testStateCheckBox22 ---- + testStateCheckBox22.setStateIndeterminate(true); + testStateCheckBox22.setStatePressed(true); + testStateCheckBox22.setStateFocused(true); + add(testStateCheckBox22, "cell 6 6"); + + //---- label20 ---- + label20.setText("disabled"); + add(label20, "cell 0 7"); + + //---- testStateCheckBox4 ---- + testStateCheckBox4.setEnabled(false); + add(testStateCheckBox4, "cell 1 7"); + + //---- testStateCheckBox11 ---- + testStateCheckBox11.setEnabled(false); + testStateCheckBox11.setStateSelected(true); + add(testStateCheckBox11, "cell 2 7"); + + //---- testStateCheckBox18 ---- + testStateCheckBox18.setStateIndeterminate(true); + testStateCheckBox18.setEnabled(false); + add(testStateCheckBox18, "cell 3 7"); + + //---- label21 ---- + label21.setText("try me"); + add(label21, "cell 0 8"); + add(checkBox1, "cell 1 8"); + + //---- checkBox2 ---- + checkBox2.setSelected(true); + add(checkBox2, "cell 2 8"); + add(triStateCheckBox1, "cell 3 8"); + + //---- label27 ---- + label27.setText("JRadioButton"); + label27.putClientProperty("FlatLaf.styleClass", "h3"); + add(label27, "cell 0 9 3 1"); + + //---- label3 ---- + label3.setText("unfocused"); + add(label3, "cell 1 10 2 1,alignx center,growx 0"); + + //---- label4 ---- + label4.setText("focused"); + add(label4, "cell 4 10 2 1,alignx center,growx 0"); + + //---- label25 ---- + label25.setText("unsel."); + label25.putClientProperty("FlatLaf.styleClass", "small"); + add(label25, "cell 1 11,alignx center,growx 0"); + + //---- label30 ---- + label30.setText("sel."); + label30.putClientProperty("FlatLaf.styleClass", "small"); + add(label30, "cell 2 11,alignx center,growx 0"); + + //---- label26 ---- + label26.setText("unsel."); + label26.putClientProperty("FlatLaf.styleClass", "small"); + add(label26, "cell 4 11,alignx center,growx 0"); + + //---- label31 ---- + label31.setText("sel."); + label31.putClientProperty("FlatLaf.styleClass", "small"); + add(label31, "cell 5 11,alignx center,growx 0"); + + //---- label36 ---- + label36.setText("none"); + add(label36, "cell 0 12"); + add(testStateRadioButton1, "cell 1 12"); + + //---- testStateRadioButton8 ---- + testStateRadioButton8.setStateSelected(true); + add(testStateRadioButton8, "cell 2 12"); + + //---- testStateRadioButton5 ---- + testStateRadioButton5.setStateFocused(true); + add(testStateRadioButton5, "cell 4 12"); + + //---- testStateRadioButton9 ---- + testStateRadioButton9.setStateFocused(true); + testStateRadioButton9.setStateSelected(true); + add(testStateRadioButton9, "cell 5 12"); + + //---- label35 ---- + label35.setText("hover"); + add(label35, "cell 0 13"); + + //---- testStateRadioButton2 ---- + testStateRadioButton2.setStateHover(true); + add(testStateRadioButton2, "cell 1 13"); + + //---- testStateRadioButton10 ---- + testStateRadioButton10.setStateHover(true); + testStateRadioButton10.setStateSelected(true); + add(testStateRadioButton10, "cell 2 13"); + + //---- testStateRadioButton6 ---- + testStateRadioButton6.setStateFocused(true); + testStateRadioButton6.setStateHover(true); + add(testStateRadioButton6, "cell 4 13"); + + //---- testStateRadioButton11 ---- + testStateRadioButton11.setStateFocused(true); + testStateRadioButton11.setStateHover(true); + testStateRadioButton11.setStateSelected(true); + add(testStateRadioButton11, "cell 5 13"); + + //---- label34 ---- + label34.setText("pressed"); + add(label34, "cell 0 14"); + + //---- testStateRadioButton3 ---- + testStateRadioButton3.setStatePressed(true); + add(testStateRadioButton3, "cell 1 14"); + + //---- testStateRadioButton12 ---- + testStateRadioButton12.setStatePressed(true); + testStateRadioButton12.setStateSelected(true); + add(testStateRadioButton12, "cell 2 14"); + + //---- testStateRadioButton7 ---- + testStateRadioButton7.setStateFocused(true); + testStateRadioButton7.setStatePressed(true); + add(testStateRadioButton7, "cell 4 14"); + + //---- testStateRadioButton13 ---- + testStateRadioButton13.setStateFocused(true); + testStateRadioButton13.setStatePressed(true); + testStateRadioButton13.setStateSelected(true); + add(testStateRadioButton13, "cell 5 14"); + + //---- label33 ---- + label33.setText("disabled"); + add(label33, "cell 0 15"); + + //---- testStateRadioButton4 ---- + testStateRadioButton4.setEnabled(false); + add(testStateRadioButton4, "cell 1 15"); + + //---- testStateRadioButton14 ---- + testStateRadioButton14.setEnabled(false); + testStateRadioButton14.setStateSelected(true); + add(testStateRadioButton14, "cell 2 15"); + + //---- label32 ---- + label32.setText("try me"); + add(label32, "cell 0 16"); + add(radioButton1, "cell 1 16"); + + //---- radioButton2 ---- + radioButton2.setSelected(true); + add(radioButton2, "cell 2 16"); + + //---- buttonGroup1 ---- + ButtonGroup buttonGroup1 = new ButtonGroup(); + buttonGroup1.add(zoom1xButton); + buttonGroup1.add(zoom2xButton); + buttonGroup1.add(zoom3xButton); + buttonGroup1.add(zoom4xButton); + + //---- buttonGroup2 ---- + ButtonGroup buttonGroup2 = new ButtonGroup(); + buttonGroup2.add(radioButton1); + buttonGroup2.add(radioButton2); + // JFormDesigner - End of component initialization //GEN-END:initComponents + } + + // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables + private JToggleButton zoom1xButton; + private JToggleButton zoom2xButton; + private JToggleButton zoom3xButton; + private JToggleButton zoom4xButton; + private JToggleButton indeterminateButton; + // JFormDesigner - End of variables declaration //GEN-END:variables + + //---- class ZoomCheckBox ------------------------------------------------- + + private static class ZoomCheckBox + extends JCheckBox + { + @Override + public void updateUI() { + super.updateUI(); + + if( !Beans.isDesignTime() ) + setIcon( new ZoomCheckBoxIcon() ); + } + } + + //---- class ZoomRadioButton ---------------------------------------------- + + private static class ZoomRadioButton + extends JRadioButton + { + @Override + public void updateUI() { + super.updateUI(); + + if( !Beans.isDesignTime() ) + setIcon( new ZoomRadioButtonIcon() ); + } + } + + //---- class ZoomTriStateCheckBox ----------------------------------------- + + private static class ZoomTriStateCheckBox + extends FlatTriStateCheckBox + { + @Override + public void updateUI() { + super.updateUI(); + + if( !Beans.isDesignTime() ) + setIcon( new ZoomCheckBoxIcon() ); + } + } + + //---- class TestStateCheckBox -------------------------------------------- + + private static class TestStateCheckBox + extends ZoomCheckBox + { + private boolean stateHover; + private boolean statePressed; + private boolean stateFocused; + private boolean stateSelected; + private boolean stateIndeterminate; + + public TestStateCheckBox() { + setModel( new DefaultButtonModel() { + @Override + public boolean isRollover() { + return isStateHover(); + } + @Override + public boolean isPressed() { + return isStatePressed(); + } + @Override + public boolean isSelected() { + return isStateSelected(); + } + } ); + + putClientProperty( FlatClientProperties.COMPONENT_FOCUS_OWNER, + (Predicate) c -> { + return ((TestStateCheckBox)c).isStateFocused(); + } ); + } + + public boolean isStateHover() { + return stateHover; + } + + public void setStateHover( boolean stateHover ) { + this.stateHover = stateHover; + } + + public boolean isStatePressed() { + return statePressed; + } + + public void setStatePressed( boolean statePressed ) { + this.statePressed = statePressed; + } + + public boolean isStateFocused() { + return stateFocused; + } + + public void setStateFocused( boolean stateFocused ) { + this.stateFocused = stateFocused; + } + + public boolean isStateSelected() { + return stateSelected; + } + + public void setStateSelected( boolean stateSelected ) { + this.stateSelected = stateSelected; + } + + public boolean isStateIndeterminate() { + return stateIndeterminate; + } + + public void setStateIndeterminate( boolean stateIndeterminate ) { + this.stateIndeterminate = stateIndeterminate; + + putClientProperty( FlatClientProperties.SELECTED_STATE, + stateIndeterminate ? FlatClientProperties.SELECTED_STATE_INDETERMINATE : null ); + } + } + + //---- class TestStateRadioButton ----------------------------------------- + + private static class TestStateRadioButton + extends ZoomRadioButton + { + private boolean stateHover; + private boolean statePressed; + private boolean stateFocused; + private boolean stateSelected; + + public TestStateRadioButton() { + setModel( new DefaultButtonModel() { + @Override + public boolean isRollover() { + return isStateHover(); + } + @Override + public boolean isPressed() { + return isStatePressed(); + } + @Override + public boolean isSelected() { + return isStateSelected(); + } + } ); + + putClientProperty( FlatClientProperties.COMPONENT_FOCUS_OWNER, + (Predicate) c -> { + return ((TestStateRadioButton)c).isStateFocused(); + } ); + } + + public boolean isStateHover() { + return stateHover; + } + + public void setStateHover( boolean stateHover ) { + this.stateHover = stateHover; + } + + public boolean isStatePressed() { + return statePressed; + } + + public void setStatePressed( boolean statePressed ) { + this.statePressed = statePressed; + } + + public boolean isStateFocused() { + return stateFocused; + } + + public void setStateFocused( boolean stateFocused ) { + this.stateFocused = stateFocused; + } + + public boolean isStateSelected() { + return stateSelected; + } + + public void setStateSelected( boolean stateSelected ) { + this.stateSelected = stateSelected; + } + } + + //---- class ZoomCheckBoxIcon --------------------------------------------- + + private static class ZoomCheckBoxIcon + extends FlatCheckBoxIcon + { + @Override + public void paintIcon( Component c, Graphics g, int x, int y ) { + Graphics2D g2 = (Graphics2D) g.create(); + try { + g2.translate( x, y ); + g2.scale( zoom, zoom ); + + super.paintIcon( c, g2, 0, 0 ); + } finally { + g2.dispose(); + } + } + + @Override + public int getIconWidth() { + return Math.round( super.getIconWidth() * zoom ); + } + + @Override + public int getIconHeight() { + return Math.round( super.getIconHeight() * zoom ); + } + + @Override + public float getFocusWidth() { + return super.getFocusWidth() * zoom; + } + } + + //---- class ZoomRadioButtonIcon ------------------------------------------ + + private static class ZoomRadioButtonIcon + extends FlatRadioButtonIcon + { + @Override + public void paintIcon( Component c, Graphics g, int x, int y ) { + Graphics2D g2 = (Graphics2D) g.create(); + try { + g2.translate( x, y ); + g2.scale( zoom, zoom ); + + super.paintIcon( c, g2, 0, 0 ); + } finally { + g2.dispose(); + } + } + + @Override + public int getIconWidth() { + return Math.round( super.getIconWidth() * zoom ); + } + + @Override + public int getIconHeight() { + return Math.round( super.getIconHeight() * zoom ); + } + + @Override + public float getFocusWidth() { + return super.getFocusWidth() * zoom; + } + } +} diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewSwitches.jfd b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewSwitches.jfd new file mode 100644 index 00000000..6bfb0a9b --- /dev/null +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewSwitches.jfd @@ -0,0 +1,539 @@ +JFDML JFormDesigner: "7.0.5.0.382" Java: "16" encoding: "UTF-8" + +new FormModel { + contentType: "form/swing" + root: new FormRoot { + auxiliary() { + "JavaCodeGenerator.defaultVariableLocal": true + } + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "insets dialog,hidemode 3" + "$columnConstraints": "[fill][sizegroup 1,center][sizegroup 1,center][sizegroup 1,center]para[sizegroup 2,center][sizegroup 2,center][sizegroup 2,center]0[grow,fill]" + "$rowConstraints": "[]para[][]3[][][][][]unrel[]para[][]3[][][][][]unrel[]" + } ) { + name: "this" + add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { + "$layoutConstraints": "insets 0,hidemode 3" + "$columnConstraints": "[fill][fill]" + "$rowConstraints": "[]0" + } ) { + name: "panel1" + add( new FormComponent( "javax.swing.JLabel" ) { + name: "zoomLabel" + "text": "Zoom:" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0" + } ) + add( new FormContainer( "javax.swing.JToolBar", new FormLayoutManager( class javax.swing.JToolBar ) ) { + name: "zoomToolBar" + "floatable": false + "border": new javax.swing.border.EmptyBorder( 0, 0, 0, 0 ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "zoom1xButton" + "text": "1x" + "selected": true + "$client.FlatLaf.styleClass": "small" + "$buttonGroup": new FormReference( "buttonGroup1" ) + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "zoomChanged", false ) ) + } ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "zoom2xButton" + "text": "2x" + "$client.FlatLaf.styleClass": "small" + "$buttonGroup": &FormReference0 new FormReference( "buttonGroup1" ) + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "zoomChanged", false ) ) + } ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "zoom3xButton" + "text": "3x" + "$client.FlatLaf.styleClass": "small" + "$buttonGroup": #FormReference0 + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "zoomChanged", false ) ) + } ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "zoom4xButton" + "text": "4x" + "$client.FlatLaf.styleClass": "small" + "$buttonGroup": #FormReference0 + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "zoomChanged", false ) ) + } ) + add( new FormComponent( "javax.swing.JToolBar$Separator" ) { + name: "separator1" + } ) + add( new FormComponent( "javax.swing.JToggleButton" ) { + name: "indeterminateButton" + "text": "indeterminate" + "selected": true + "$client.FlatLaf.styleClass": "small" + auxiliary() { + "JavaCodeGenerator.variableLocal": false + } + addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "indeterminateChanged", false ) ) + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 0" + } ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 0 8 1,alignx right,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label22" + "text": "JCheckBox" + "$client.FlatLaf.styleClass": "h3" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 1 3 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label1" + "text": "unfocused" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 2 3 1,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label2" + "text": "focused" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 2 3 1,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label23" + "text": "unsel." + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 3,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label28" + "text": "sel." + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 3,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label37" + "text": "ind." + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 3,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label24" + "text": "unsel." + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 3,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label29" + "text": "sel." + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 3,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label38" + "text": "ind." + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 3,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label17" + "text": "none" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox8" + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox15" + "stateIndeterminate": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox5" + "stateFocused": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox12" + "stateFocused": true + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 4" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox20" + "stateIndeterminate": true + "stateFocused": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 4" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label18" + "text": "hover" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 5" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox2" + "stateHover": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 5" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox9" + "stateHover": true + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 5" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox16" + "stateIndeterminate": true + "stateHover": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 5" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox6" + "stateFocused": true + "stateHover": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 5" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox13" + "stateFocused": true + "stateHover": true + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 5" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox21" + "stateIndeterminate": true + "stateHover": true + "stateFocused": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 5" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label19" + "text": "pressed" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox3" + "statePressed": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox10" + "statePressed": true + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox17" + "stateIndeterminate": true + "statePressed": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox7" + "stateFocused": true + "statePressed": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox14" + "stateFocused": true + "statePressed": true + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 6" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox22" + "stateIndeterminate": true + "statePressed": true + "stateFocused": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 6 6" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label20" + "text": "disabled" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox4" + "enabled": false + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox11" + "enabled": false + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 7" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateCheckBox" ) { + name: "testStateCheckBox18" + "stateIndeterminate": true + "enabled": false + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 7" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label21" + "text": "try me" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$ZoomCheckBox" ) { + name: "checkBox1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$ZoomCheckBox" ) { + name: "checkBox2" + "selected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 8" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$ZoomTriStateCheckBox" ) { + name: "triStateCheckBox1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 3 8" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label27" + "text": "JRadioButton" + "$client.FlatLaf.styleClass": "h3" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 9 3 1" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label3" + "text": "unfocused" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 10 2 1,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label4" + "text": "focused" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 10 2 1,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label25" + "text": "unsel." + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 11,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label30" + "text": "sel." + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 11,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label26" + "text": "unsel." + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 11,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label31" + "text": "sel." + "$client.FlatLaf.styleClass": "small" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 11,alignx center,growx 0" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label36" + "text": "none" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateRadioButton" ) { + name: "testStateRadioButton1" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateRadioButton" ) { + name: "testStateRadioButton8" + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateRadioButton" ) { + name: "testStateRadioButton5" + "stateFocused": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 12" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateRadioButton" ) { + name: "testStateRadioButton9" + "stateFocused": true + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 12" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label35" + "text": "hover" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 13" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateRadioButton" ) { + name: "testStateRadioButton2" + "stateHover": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 13" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateRadioButton" ) { + name: "testStateRadioButton10" + "stateHover": true + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 13" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateRadioButton" ) { + name: "testStateRadioButton6" + "stateFocused": true + "stateHover": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 13" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateRadioButton" ) { + name: "testStateRadioButton11" + "stateFocused": true + "stateHover": true + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 13" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label34" + "text": "pressed" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateRadioButton" ) { + name: "testStateRadioButton3" + "statePressed": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateRadioButton" ) { + name: "testStateRadioButton12" + "statePressed": true + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateRadioButton" ) { + name: "testStateRadioButton7" + "stateFocused": true + "statePressed": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 4 14" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateRadioButton" ) { + name: "testStateRadioButton13" + "stateFocused": true + "statePressed": true + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 5 14" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label33" + "text": "disabled" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 15" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateRadioButton" ) { + name: "testStateRadioButton4" + "enabled": false + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 15" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$TestStateRadioButton" ) { + name: "testStateRadioButton14" + "enabled": false + "stateSelected": true + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 15" + } ) + add( new FormComponent( "javax.swing.JLabel" ) { + name: "label32" + "text": "try me" + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 0 16" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$ZoomRadioButton" ) { + name: "radioButton1" + "$buttonGroup": new FormReference( "buttonGroup2" ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 1 16" + } ) + add( new FormComponent( "com.formdev.flatlaf.themeeditor.FlatThemePreviewSwitches$ZoomRadioButton" ) { + name: "radioButton2" + "selected": true + "$buttonGroup": new FormReference( "buttonGroup2" ) + }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { + "value": "cell 2 16" + } ) + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 0, 0 ) + "size": new java.awt.Dimension( 325, 515 ) + } ) + add( new FormNonVisual( "javax.swing.ButtonGroup" ) { + name: "buttonGroup1" + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 0, 580 ) + } ) + add( new FormNonVisual( "javax.swing.ButtonGroup" ) { + name: "buttonGroup2" + }, new FormLayoutConstraints( null ) { + "location": new java.awt.Point( 0, 634 ) + } ) + } +} diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePropertiesBaseManager.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePropertiesBaseManager.java new file mode 100644 index 00000000..d3152cdd --- /dev/null +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePropertiesBaseManager.java @@ -0,0 +1,301 @@ +/* + * Copyright 2021 FormDev Software GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.formdev.flatlaf.themeeditor; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Properties; +import java.util.Set; +import com.formdev.flatlaf.FlatDarculaLaf; +import com.formdev.flatlaf.FlatDarkLaf; +import com.formdev.flatlaf.FlatIconColors; +import com.formdev.flatlaf.FlatIntelliJLaf; +import com.formdev.flatlaf.FlatLaf; +import com.formdev.flatlaf.FlatLightLaf; +import com.formdev.flatlaf.util.StringUtils; + +/** + * @author Karl Tauber + */ +class FlatThemePropertiesBaseManager +{ + private static Class[] CORE_THEMES = { + FlatLaf.class, + FlatLightLaf.class, + FlatDarkLaf.class, + FlatIntelliJLaf.class, + FlatDarculaLaf.class, + }; + + private final Map providers = new HashMap<>(); + private static Map coreThemes; + private static Set definedCoreKeys; + + FlatThemePropertiesSupport.BasePropertyProvider create( File file, FlatThemePropertiesSupport propertiesSupport ) { + String name = StringUtils.removeTrailing( file.getName(), ".properties" ); + boolean isCoreTheme = file.getParent().replace( '\\', '/' ).endsWith( "/com/formdev/flatlaf" ); + MyBasePropertyProvider provider = new MyBasePropertyProvider( name, propertiesSupport, isCoreTheme ); + providers.put( name, provider ); + return provider; + } + + void clear() { + providers.clear(); + } + + static Set getDefindedCoreKeys() { + if( definedCoreKeys != null ) + return definedCoreKeys; + + loadCoreThemes(); + + definedCoreKeys = new HashSet<>(); + for( Properties properties : coreThemes.values() ) { + for( Object k : properties.keySet() ) { + String key = (String) k; + if( key.startsWith( "*." ) || key.startsWith( "@" ) ) + continue; + if( key.startsWith( "[" ) ) { + int closeIndex = key.indexOf( ']' ); + if( closeIndex < 0 ) + continue; + key = key.substring( closeIndex + 1 ); + } + definedCoreKeys.add( key ); + } + } + return definedCoreKeys; + } + + private static void loadCoreThemes() { + if( coreThemes != null ) + return; + + coreThemes = new HashMap<>(); + + for( Class lafClass : CORE_THEMES ) { + String propertiesName = '/' + lafClass.getName().replace( '.', '/' ) + ".properties"; + try( InputStream in = lafClass.getResourceAsStream( propertiesName ) ) { + Properties properties = new Properties(); + if( in != null ) + properties.load( in ); + coreThemes.put( lafClass.getSimpleName(), properties ); + } catch( IOException ex ) { + ex.printStackTrace(); + } + } + } + + private static List baseFiles( String name, String baseTheme ) { + ArrayList result = new ArrayList<>(); + + // core themes + switch( name ) { + case "FlatLightLaf": + case "FlatDarkLaf": + result.add( "FlatLaf" ); + break; + + case "FlatIntelliJLaf": + result.add( "FlatLightLaf" ); + result.add( "FlatLaf" ); + break; + + case "FlatDarculaLaf": + result.add( "FlatDarkLaf" ); + result.add( "FlatLaf" ); + break; + } + + // custom themes based on core themes + if( result.isEmpty() ) { + if( baseTheme == null ) + baseTheme = "light"; + + switch( baseTheme ) { + default: + case "light": + result.add( "FlatLightLaf" ); + result.add( "FlatLaf" ); + break; + + case "dark": + result.add( "FlatDarkLaf" ); + result.add( "FlatLaf" ); + break; + + case "intellij": + result.add( "FlatIntelliJLaf" ); + result.add( "FlatLightLaf" ); + result.add( "FlatLaf" ); + break; + + case "darcula": + result.add( "FlatDarculaLaf" ); + result.add( "FlatDarkLaf" ); + result.add( "FlatLaf" ); + break; + } + + // exclude base properties if editing base properties + if( name.equals( "FlatLaf" ) ) + result.remove( "FlatLaf" ); + } + + return result; + } + + //---- class MyBasePropertyProvider --------------------------------------- + + private class MyBasePropertyProvider + implements FlatThemePropertiesSupport.BasePropertyProvider + { + private final String name; + private final FlatThemePropertiesSupport propertiesSupport; + private final boolean isCoreTheme; + private final String coreBaseTheme; + + private List baseFiles; + private String lastBaseTheme; + + MyBasePropertyProvider( String name, FlatThemePropertiesSupport propertiesSupport, boolean isCoreTheme ) { + this.name = name; + this.propertiesSupport = propertiesSupport; + this.isCoreTheme = isCoreTheme; + + switch( name ) { + case "FlatLightLaf": coreBaseTheme = "light"; break; + case "FlatDarkLaf": coreBaseTheme = "dark"; break; + case "FlatIntelliJLaf": coreBaseTheme = "intellij"; break; + case "FlatDarculaLaf": coreBaseTheme = "darcula"; break; + default: coreBaseTheme = null; break; + } + } + + @Override + public String getProperty( String key, String baseTheme ) { + // override base theme for core themes + if( coreBaseTheme != null ) + baseTheme = coreBaseTheme; + + updateBaseFiles( baseTheme ); + + // search in opened editors + for( String baseFile : baseFiles ) { + String value = getPropertyFromBase( baseFile, key ); + if( value != null ) + return value; + } + + // search in core themes + if( !isCoreTheme ) { + loadCoreThemes(); + + String value = getPropertyFromCore( name, key ); + if( value != null ) + return value; + + for( String baseFile : baseFiles ) { + value = getPropertyFromCore( baseFile, key ); + if( value != null ) + return value; + } + } + + // search in icon colors + if( key.startsWith( "Actions." ) || key.startsWith( "Objects." ) ) { + boolean dark = FlatThemePropertiesSupport.isDark( baseTheme ); + for( FlatIconColors c : FlatIconColors.values() ) { + if( c.key.equals( key ) && (c.light == !dark || c.dark == dark) ) + return String.format( "#%06x", c.rgb ); + } + } + + return null; + } + + private String getPropertyFromBase( String baseFile, String key ) { + MyBasePropertyProvider provider = providers.get( baseFile ); + return (provider != null) + ? provider.propertiesSupport.getProperties().getProperty( key ) + : null; + } + + private String getPropertyFromCore( String baseFile, String key ) { + Properties properties = coreThemes.get( baseFile ); + return (properties != null) + ? properties.getProperty( key ) + : null; + } + + private void updateBaseFiles( String baseTheme ) { + if( baseFiles != null && Objects.equals( baseTheme, lastBaseTheme ) ) + return; + + baseFiles = baseFiles( name, baseTheme ); + lastBaseTheme = baseTheme; + } + + @Override + public void addAllKeys( Set allKeys, String baseTheme ) { + // override base theme for core themes + if( coreBaseTheme != null ) + baseTheme = coreBaseTheme; + + updateBaseFiles( baseTheme ); + + // search in opened editors + for( String baseFile : baseFiles ) { + MyBasePropertyProvider provider = providers.get( baseFile ); + if( provider == null ) + continue; + + for( Object key : provider.propertiesSupport.getProperties().keySet() ) + allKeys.add( (String) key ); + } + + // search in core themes + if( !isCoreTheme ) { + loadCoreThemes(); + + copyKeys( coreThemes.get( name ), allKeys ); + + for( String baseFile : baseFiles ) + copyKeys( coreThemes.get( baseFile ), allKeys ); + } + + // icon colors + for( FlatIconColors c : FlatIconColors.values() ) + allKeys.add( c.key ); + } + + private void copyKeys( Properties properties, Set allKeys ) { + if( properties == null ) + return; + + for( Object key : properties.keySet() ) + allKeys.add( (String) key ); + } + } +} diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePropertiesSupport.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePropertiesSupport.java index 163c6fa2..0be381c8 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePropertiesSupport.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePropertiesSupport.java @@ -17,22 +17,23 @@ package com.formdev.flatlaf.themeeditor; import java.awt.Color; -import java.io.File; -import java.io.FileInputStream; import java.io.IOException; -import java.io.InputStream; import java.io.StringReader; +import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.function.Function; +import javax.swing.UIDefaults; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; +import javax.swing.plaf.basic.BasicLookAndFeel; import javax.swing.text.BadLocationException; import com.formdev.flatlaf.UIDefaultsLoaderAccessor; +import com.formdev.flatlaf.util.SystemInfo; /** * Supports parsing content of text area in FlatLaf properties syntax. @@ -45,20 +46,30 @@ class FlatThemePropertiesSupport private final FlatSyntaxTextArea textArea; private final Function propertiesGetter; private final Function resolver; + private BasePropertyProvider basePropertyProvider; + + // caches private Properties propertiesCache; private final Map parsedValueCache = new HashMap<>(); - - private File[] baseFiles; - private long[] baseFilesLastModified; - private Properties[] basePropertiesCache; - + private final Map parsedValueCache2 = new HashMap<>(); private Set allKeysCache; + private String baseTheme; + + private static long globalCacheInvalidationCounter; + private long cacheInvalidationCounter; + + private static Set wildcardKeys; + + private static final String platformPrefix = + SystemInfo.isWindows ? "[win]" : + SystemInfo.isMacOS ? "[mac]" : + SystemInfo.isLinux ? "[linux]" : "[unknown]"; FlatThemePropertiesSupport( FlatSyntaxTextArea textArea ) { this.textArea = textArea; propertiesGetter = key -> { - return getProperty( key ); + return getPropertyOrWildcard( key ); }; resolver = v -> { return resolveValue( v ); @@ -67,12 +78,8 @@ class FlatThemePropertiesSupport textArea.getDocument().addDocumentListener( this ); } - void setBaseFiles( List baseFiles ) { - int size = baseFiles.size(); - this.baseFiles = baseFiles.toArray( new File[size] ); - - baseFilesLastModified = new long[size]; - basePropertiesCache = new Properties[size]; + void setBasePropertyProvider( BasePropertyProvider basePropertyProvider ) { + this.basePropertyProvider = basePropertyProvider; } private String resolveValue( String value ) { @@ -80,6 +87,8 @@ class FlatThemePropertiesSupport } Object getParsedValueAtLine( int line ) { + autoClearCache(); + Integer lineKey = line; Object parsedValue = parsedValueCache.get( lineKey ); if( parsedValue != null ) @@ -96,7 +105,7 @@ class FlatThemePropertiesSupport parsedValueCache.put( lineKey, parsedValue ); return parsedValue; } catch( Exception ex ) { - System.out.println( ex.getMessage() ); //TODO + System.out.println( textArea.getFileName() + ": " + ex.getMessage() ); //TODO parsedValueCache.put( lineKey, ex ); return null; } @@ -108,6 +117,21 @@ class FlatThemePropertiesSupport int endOffset = textArea.getLineEndOffset( line ); String text = textArea.getText( startOffset, endOffset - startOffset ); + // remove trailing backslash from multi-line properties usually used for styles + if( text.endsWith( "\\\n" ) ) + text = text.substring( 0, text.length() - 2 ).trim(); + // remove trailing semicolon from styles + if( text.endsWith( ";" ) ) + text = text.substring( 0, text.length() - 1 ).trim(); + + // remove key starting with "[style]" so that first property name + // in CSS styled value is used as key to detect value type + if( text.startsWith( "[style]" ) ) { + int sepIndex = text.indexOf( '=' ); + if( sepIndex >= 0 ) + text = text.substring( sepIndex + 1 ); + } + Properties properties = new Properties(); properties.load( new StringReader( text ) ); if( properties.isEmpty() ) @@ -122,26 +146,68 @@ class FlatThemePropertiesSupport } } - private String getProperty( String key ) { + Object getParsedProperty( String key ) { + Object parsedValue = parsedValueCache2.get( key ); + if( parsedValue != null ) + return !(parsedValue instanceof Exception) ? parsedValue : null; + + String str = getPropertyOrWildcard( key ); + if( str == null ) + return null; + + try { + Object[] resultValueType = new Object[1]; + String value = resolveValue( str ); + parsedValue = UIDefaultsLoaderAccessor.parseValue( key, value, resultValueType, resolver ); + parsedValueCache2.put( key, parsedValue ); + return parsedValue; + } catch( Exception ex ) { + System.out.println( textArea.getFileName() + ": " + ex.getMessage() ); //TODO + parsedValueCache2.put( key, ex ); + return null; + } + } + + private String getPropertyOrWildcard( String key ) { + // get platform specific properties + String value = getProperty( platformPrefix + key ); + if( value != null ) + return value; + + // get light/dark specific properties + value = getProperty( (isDark( getBaseTheme() ) ? "[dark]" : "[light]") + key ); + if( value != null ) + return value; + + value = getProperty( key ); + if( value != null ) + return value; + + if( !isKeyAllowedForWildcard( key ) ) + return null; + + int lastDotIndex = key.lastIndexOf( '.' ); + if( lastDotIndex < 0 ) + return null; + + String wildcardKey = "*.".concat( key.substring( lastDotIndex + 1 ) ); + return getProperty( wildcardKey ); + } + + String getProperty( String key ) { // look in current text area String value = getProperties().getProperty( key ); if( value != null ) return value; - if( baseFiles == null ) + if( basePropertyProvider == null ) return null; // look in base properties files - for( int i = 0; i < baseFiles.length; i++ ) { - value = getBaseProperties( i ).getProperty( key ); - if( value != null ) - return value; - } - - return null; + return basePropertyProvider.getProperty( key, getBaseTheme() ); } - private Properties getProperties() { + Properties getProperties() { if( propertiesCache != null ) return propertiesCache; @@ -154,23 +220,9 @@ class FlatThemePropertiesSupport return propertiesCache; } - private Properties getBaseProperties( int index ) { - long lastModified = baseFiles[index].lastModified(); - if( baseFilesLastModified[index] != lastModified || basePropertiesCache[index] == null ) { - // (re)load base properties file - baseFilesLastModified[index] = lastModified; - basePropertiesCache[index] = new Properties(); - try( InputStream in = new FileInputStream( baseFiles[index] ) ) { - basePropertiesCache[index].load( in ); - } catch( IOException ex ) { - ex.printStackTrace(); //TODO - } - } - - return basePropertiesCache[index]; - } - Set getAllKeys() { + autoClearCache(); + if( allKeysCache != null ) return allKeysCache; @@ -179,21 +231,112 @@ class FlatThemePropertiesSupport for( Object key : getProperties().keySet() ) allKeysCache.add( (String) key ); - if( baseFiles == null ) - return allKeysCache; - - for( int i = 0; i < baseFiles.length; i++ ) { - for( Object key : getBaseProperties( i ).keySet() ) - allKeysCache.add( (String) key ); - } + // look in base properties files + if( basePropertyProvider != null ) + basePropertyProvider.addAllKeys( allKeysCache, getBaseTheme() ); return allKeysCache; } + static boolean isDark( String baseTheme ) { + return "dark".equals( baseTheme ) || "darcula".equals( baseTheme ); + } + + private String getBaseTheme() { + if( baseTheme == null ) + baseTheme = getProperties().getProperty( "@baseTheme", "light" ); + return baseTheme; + } + private void clearCache() { propertiesCache = null; parsedValueCache.clear(); + parsedValueCache2.clear(); allKeysCache = null; + baseTheme = null; + + // increase global cache invalidation counter to allow auto-clear caches + globalCacheInvalidationCounter++; + cacheInvalidationCounter = globalCacheInvalidationCounter; + } + + /** + * Clear caches that may depend on other editors if cache of another editor was invalidated. + */ + private void autoClearCache() { + if( cacheInvalidationCounter == globalCacheInvalidationCounter ) + return; + + parsedValueCache.clear(); + parsedValueCache2.clear(); + allKeysCache = null; + } + + static Set getKeysForWildcard( String key ) { + if( !key.startsWith( "*." ) ) + return Collections.emptySet(); + + loadKeysAllowedForWildcard(); + + String suffix = key.substring( 1 ); + Set result = new HashSet<>(); + for( String k : wildcardKeys ) { + if( k.endsWith( suffix ) ) + result.add( k ); + } + return result; + } + + private static boolean isKeyAllowedForWildcard( String key ) { + loadKeysAllowedForWildcard(); + return wildcardKeys.contains( key ); + } + + private static void loadKeysAllowedForWildcard() { + if( wildcardKeys != null ) + return; + wildcardKeys = new HashSet<>(); + + UIDefaults basicDefaults = new BasicLookAndFeel() { + @Override public String getName() { return "Basic"; } + @Override public String getID() { return "Basic"; } + @Override public String getDescription() { return "Basic"; } + @Override public boolean isNativeLookAndFeel() { return false; } + @Override public boolean isSupportedLookAndFeel() { return true; } + }.getDefaults(); + + for( Object key : basicDefaults.keySet() ) { + if( key instanceof String ) + wildcardKeys.add( (String) key ); + } + + // same as added in FlatLaf.getDefaults() + wildcardKeys.addAll( Arrays.asList( + "Button.disabledBackground", + "EditorPane.disabledBackground", + "EditorPane.inactiveBackground", + "FormattedTextField.disabledBackground", + "PasswordField.disabledBackground", + "Spinner.disabledBackground", + "TextArea.disabledBackground", + "TextArea.inactiveBackground", + "TextField.disabledBackground", + "TextPane.disabledBackground", + "TextPane.inactiveBackground", + "ToggleButton.disabledBackground", + + "Button.disabledText", + "CheckBox.disabledText", + "CheckBoxMenuItem.disabledForeground", + "Menu.disabledForeground", + "MenuItem.disabledForeground", + "RadioButton.disabledText", + "RadioButtonMenuItem.disabledForeground", + "Spinner.disabledForeground", + "ToggleButton.disabledText", + + "DesktopIcon.foreground" + ) ); } //---- interface DocumentListener ---- @@ -233,4 +376,11 @@ class FlatThemePropertiesSupport this.value = value; } } + + //---- interface BasePropertyProvider ------------------------------------- + + interface BasePropertyProvider { + String getProperty( String key, String baseTheme ); + void addAllKeys( Set allKeys, String baseTheme ); + } } diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeTokenMaker.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeTokenMaker.java index f8d7adc3..b8eac587 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeTokenMaker.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemeTokenMaker.java @@ -51,7 +51,11 @@ public class FlatThemeTokenMaker tokenMap.put( "false", Token.LITERAL_BOOLEAN ); tokenMap.put( "true", Token.LITERAL_BOOLEAN ); - // functions + // general functions + tokenMap.put( "if", TOKEN_FUNCTION ); + tokenMap.put( "lazy", TOKEN_FUNCTION ); + + // color functions tokenMap.put( "rgb", TOKEN_FUNCTION ); tokenMap.put( "rgba", TOKEN_FUNCTION ); tokenMap.put( "hsl", TOKEN_FUNCTION ); @@ -60,7 +64,18 @@ public class FlatThemeTokenMaker tokenMap.put( "darken", TOKEN_FUNCTION ); tokenMap.put( "saturate", TOKEN_FUNCTION ); tokenMap.put( "desaturate", TOKEN_FUNCTION ); - tokenMap.put( "lazy", TOKEN_FUNCTION ); + tokenMap.put( "fadein", TOKEN_FUNCTION ); + tokenMap.put( "fadeout", TOKEN_FUNCTION ); + tokenMap.put( "fade", TOKEN_FUNCTION ); + tokenMap.put( "spin", TOKEN_FUNCTION ); + tokenMap.put( "changeHue", TOKEN_FUNCTION ); + tokenMap.put( "changeSaturation", TOKEN_FUNCTION ); + tokenMap.put( "changeLightness", TOKEN_FUNCTION ); + tokenMap.put( "changeAlpha", TOKEN_FUNCTION ); + tokenMap.put( "mix", TOKEN_FUNCTION ); + tokenMap.put( "tint", TOKEN_FUNCTION ); + tokenMap.put( "shade", TOKEN_FUNCTION ); + tokenMap.put( "contrast", TOKEN_FUNCTION ); // function options tokenMap.put( "relative", Token.RESERVED_WORD ); @@ -116,8 +131,10 @@ public class FlatThemeTokenMaker newTokenType = TOKEN_VARIABLE; else if( currentTokenType != TOKEN_STRING && (RSyntaxUtilities.isDigit( ch ) || (currentTokenType == TOKEN_NUMBER && ch == '.')) ) newTokenType = TOKEN_NUMBER; - else if( ch == ',' || ch == '(' || ch == ')' || ch == '"' || ch == '%' ) + else if( ch == ',' || ch == '"' || ch == '%' ) newTokenType = TokenTypes.OPERATOR; + else if( ch == '(' || ch == ')' ) + newTokenType = TokenTypes.SEPARATOR; // necessary for bracket matching else newTokenType = TOKEN_STRING; diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatDarkLaf.properties b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatDarkLaf.properties new file mode 100644 index 00000000..74e1d1af --- /dev/null +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatDarkLaf.properties @@ -0,0 +1,60 @@ +# +# Copyright 2021 FormDev Software GmbH +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +#---- FlatThemeEditorPane ---- + +FlatThemeEditorPane.background = #2b2b2b +FlatThemeEditorPane.caretColor = @foreground +FlatThemeEditorPane.selectionBackground = #214283 +FlatThemeEditorPane.currentLineHighlight = #323232 +FlatThemeEditorPane.markOccurrencesColor = #52503A +FlatThemeEditorPane.markAllHighlightColor = #32593D +FlatThemeEditorPane.matchedBracketBackground = lighten(#3B514D,3%) +FlatThemeEditorPane.matchedBracketBorderColor = $FlatThemeEditorPane.matchedBracketBackground + + +#---- FlatThemeEditorPane.style ---- + +FlatThemeEditorPane.style.property = @foreground +FlatThemeEditorPane.style.variable = @foreground +# use semitransparent background because it is painted over mark occurrences background +FlatThemeEditorPane.style.variable.background = #00ff0018 +FlatThemeEditorPane.style.number = #6897BB +FlatThemeEditorPane.style.color = #6897BB +# use semitransparent background because it is painted over mark occurrences background +FlatThemeEditorPane.style.color.background = #ffffff10 +FlatThemeEditorPane.style.string = #6A8759 +FlatThemeEditorPane.style.function = #CC7832 +FlatThemeEditorPane.style.type = #8C8C8C +FlatThemeEditorPane.style.reservedWord = #CC7832 +FlatThemeEditorPane.style.literalBoolean = #CC7832 +FlatThemeEditorPane.style.operator = #888 +FlatThemeEditorPane.style.separator = #888 +FlatThemeEditorPane.style.whitespace = @foreground +FlatThemeEditorPane.style.comment = #808080 +FlatThemeEditorPane.style.comment.italic = true + + +#---- FlatThemeEditorPane.gutter ---- + +FlatThemeEditorPane.gutter.background = $FlatThemeEditorPane.background +FlatThemeEditorPane.gutter.borderColor = $Component.borderColor +FlatThemeEditorPane.gutter.lineNumberColor = @disabledForeground + + +#---- FlatThemeEditorPane.errorstrip ---- + +FlatThemeEditorPane.errorstrip.caretMarkerColor = $FlatThemeEditorPane.caretColor diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLaf.svg b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLaf.svg new file mode 100644 index 00000000..61569fce --- /dev/null +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLaf.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt index 72ccd0c1..7c69d876 100644 --- a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt @@ -18,6 +18,8 @@ Button.default.background Button.default.boldText Button.default.borderColor Button.default.borderWidth +Button.default.endBackground +Button.default.endBorderColor Button.default.focusColor Button.default.focusedBackground Button.default.focusedBorderColor @@ -25,12 +27,16 @@ Button.default.foreground Button.default.hoverBackground Button.default.hoverBorderColor Button.default.pressedBackground +Button.default.startBackground +Button.default.startBorderColor Button.defaultButtonFollowsFocus Button.disabledBackground Button.disabledBorderColor Button.disabledForeground Button.disabledSelectedBackground Button.disabledText +Button.endBackground +Button.endBorderColor Button.focusInputMap Button.focusedBackground Button.focusedBorderColor @@ -49,6 +55,8 @@ Button.rollover Button.selectedBackground Button.selectedForeground Button.shadow +Button.startBackground +Button.startBorderColor Button.textIconGap Button.textShiftOffset Button.toolbar.hoverBackground @@ -68,49 +76,69 @@ CheckBox.foreground CheckBox.icon CheckBox.icon.background CheckBox.icon.borderColor +CheckBox.icon.borderWidth CheckBox.icon.checkmarkColor CheckBox.icon.disabledBackground CheckBox.icon.disabledBorderColor CheckBox.icon.disabledCheckmarkColor +CheckBox.icon.disabledSelectedBackground +CheckBox.icon.disabledSelectedBorderColor +CheckBox.icon.disabledSelectedBorderWidth CheckBox.icon.focusColor CheckBox.icon.focusWidth CheckBox.icon.focusedBackground CheckBox.icon.focusedBorderColor +CheckBox.icon.focusedCheckmarkColor +CheckBox.icon.focusedSelectedBackground +CheckBox.icon.focusedSelectedBorderColor CheckBox.icon.hoverBackground CheckBox.icon.hoverBorderColor +CheckBox.icon.hoverCheckmarkColor +CheckBox.icon.hoverSelectedBackground +CheckBox.icon.hoverSelectedBorderColor CheckBox.icon.pressedBackground +CheckBox.icon.pressedBorderColor +CheckBox.icon.pressedCheckmarkColor +CheckBox.icon.pressedSelectedBackground +CheckBox.icon.pressedSelectedBorderColor CheckBox.icon.selectedBackground CheckBox.icon.selectedBorderColor -CheckBox.icon.selectedFocusedBackground -CheckBox.icon.selectedFocusedBorderColor -CheckBox.icon.selectedFocusedCheckmarkColor -CheckBox.icon.selectedHoverBackground -CheckBox.icon.selectedPressedBackground +CheckBox.icon.selectedBorderWidth CheckBox.icon.style CheckBox.iconTextGap CheckBox.icon[filled].background CheckBox.icon[filled].borderColor +CheckBox.icon[filled].borderWidth CheckBox.icon[filled].checkmarkColor CheckBox.icon[filled].disabledBackground CheckBox.icon[filled].disabledBorderColor CheckBox.icon[filled].disabledCheckmarkColor +CheckBox.icon[filled].disabledSelectedBackground +CheckBox.icon[filled].disabledSelectedBorderColor +CheckBox.icon[filled].disabledSelectedBorderWidth +CheckBox.icon[filled].focusWidth CheckBox.icon[filled].focusedBackground CheckBox.icon[filled].focusedBorderColor +CheckBox.icon[filled].focusedCheckmarkColor +CheckBox.icon[filled].focusedSelectedBackground +CheckBox.icon[filled].focusedSelectedBorderColor CheckBox.icon[filled].hoverBackground CheckBox.icon[filled].hoverBorderColor +CheckBox.icon[filled].hoverCheckmarkColor +CheckBox.icon[filled].hoverSelectedBackground +CheckBox.icon[filled].hoverSelectedBorderColor CheckBox.icon[filled].pressedBackground +CheckBox.icon[filled].pressedBorderColor +CheckBox.icon[filled].pressedCheckmarkColor +CheckBox.icon[filled].pressedSelectedBackground +CheckBox.icon[filled].pressedSelectedBorderColor CheckBox.icon[filled].selectedBackground CheckBox.icon[filled].selectedBorderColor -CheckBox.icon[filled].selectedFocusedBackground -CheckBox.icon[filled].selectedFocusedBorderColor -CheckBox.icon[filled].selectedFocusedCheckmarkColor -CheckBox.icon[filled].selectedHoverBackground -CheckBox.icon[filled].selectedPressedBackground +CheckBox.icon[filled].selectedBorderWidth CheckBox.margin CheckBox.rollover CheckBox.textIconGap CheckBox.textShiftOffset -CheckBoxMenuItem.acceleratorFont CheckBoxMenuItem.acceleratorForeground CheckBoxMenuItem.acceleratorSelectionForeground CheckBoxMenuItem.arrowIcon @@ -121,6 +149,8 @@ CheckBoxMenuItem.checkIcon CheckBoxMenuItem.disabledForeground CheckBoxMenuItem.font CheckBoxMenuItem.foreground +CheckBoxMenuItem.icon.checkmarkColor +CheckBoxMenuItem.icon.disabledCheckmarkColor CheckBoxMenuItem.margin CheckBoxMenuItem.opaque CheckBoxMenuItem.selectionBackground @@ -134,6 +164,8 @@ ColorChooser.swatchesDefaultRecentColor ColorChooser.swatchesRecentSwatchSize ColorChooser.swatchesSwatchSize ColorChooserUI +ColumnControlButton.actionIcon +ColumnControlButton.iconColor ComboBox.ancestorInputMap ComboBox.background ComboBox.border @@ -141,15 +173,20 @@ ComboBox.buttonArrowColor ComboBox.buttonBackground ComboBox.buttonDarkShadow ComboBox.buttonDisabledArrowColor +ComboBox.buttonDisabledSeparatorColor ComboBox.buttonEditableBackground +ComboBox.buttonFocusedBackground ComboBox.buttonHighlight ComboBox.buttonHoverArrowColor ComboBox.buttonPressedArrowColor +ComboBox.buttonSeparatorColor +ComboBox.buttonSeparatorWidth ComboBox.buttonShadow ComboBox.buttonStyle ComboBox.disabledBackground ComboBox.disabledForeground ComboBox.editorColumns +ComboBox.focusedBackground ComboBox.font ComboBox.foreground ComboBox.isEnterSelectablePopup @@ -157,13 +194,16 @@ ComboBox.maximumRowCount ComboBox.minimumWidth ComboBox.noActionOnKeyNavigation ComboBox.padding +ComboBox.popupBackground ComboBox.selectionBackground ComboBox.selectionForeground ComboBox.timeFactor ComboBoxUI +Component.accentColor Component.arc Component.arrowType Component.borderColor +Component.borderWidth Component.custom.borderColor Component.disabledBorderColor Component.error.borderColor @@ -197,6 +237,7 @@ EditorPane.caretBlinkRate EditorPane.caretForeground EditorPane.disabledBackground EditorPane.focusInputMap +EditorPane.focusedBackground EditorPane.font EditorPane.foreground EditorPane.inactiveBackground @@ -219,6 +260,7 @@ FileView.computerIcon FileView.directoryIcon FileView.fileIcon FileView.floppyDriveIcon +FileView.fullRowSelection FileView.hardDriveIcon FormattedTextField.background FormattedTextField.border @@ -226,8 +268,10 @@ FormattedTextField.caretBlinkRate FormattedTextField.caretForeground FormattedTextField.disabledBackground FormattedTextField.focusInputMap +FormattedTextField.focusedBackground FormattedTextField.font FormattedTextField.foreground +FormattedTextField.iconTextGap FormattedTextField.inactiveBackground FormattedTextField.inactiveForeground FormattedTextField.margin @@ -295,7 +339,9 @@ JXBusyLabel.baseColor JXBusyLabel.highlightColor JXDatePicker.border JXHeader.background +JXHeader.descriptionForeground JXHeader.startBackground +JXHeader.titleForeground JXMonthView.arrowColor JXMonthView.background JXMonthView.daysOfTheWeekForeground @@ -384,7 +430,6 @@ List.selectionInactiveForeground List.showCellFocusIndicator List.timeFactor ListUI -Menu.acceleratorFont Menu.acceleratorForeground Menu.acceleratorSelectionForeground Menu.arrowIcon @@ -449,8 +494,7 @@ MenuItem.underlineSelectionBackground MenuItem.underlineSelectionCheckBackground MenuItem.underlineSelectionColor MenuItem.underlineSelectionHeight -MenuItemCheckBox.icon.checkmarkColor -MenuItemCheckBox.icon.disabledCheckmarkColor +MenuItem.verticallyAlignText MenuItemUI MenuUI MonthViewUI @@ -475,6 +519,11 @@ OptionPane.buttonPadding OptionPane.errorIcon OptionPane.font OptionPane.foreground +OptionPane.icon.errorColor +OptionPane.icon.foreground +OptionPane.icon.informationColor +OptionPane.icon.questionColor +OptionPane.icon.warningColor OptionPane.iconMessageGap OptionPane.informationIcon OptionPane.maxCharactersPerLine @@ -484,6 +533,7 @@ OptionPane.minimumSize OptionPane.questionIcon OptionPane.sameSizeButtons OptionPane.setButtonMargin +OptionPane.showIcon OptionPane.warningIcon OptionPane.windowBindings OptionPaneUI @@ -500,15 +550,20 @@ PasswordField.caretForeground PasswordField.disabledBackground PasswordField.echoChar PasswordField.focusInputMap +PasswordField.focusedBackground PasswordField.font PasswordField.foreground +PasswordField.iconTextGap PasswordField.inactiveBackground PasswordField.inactiveForeground PasswordField.margin PasswordField.placeholderForeground +PasswordField.revealIcon +PasswordField.revealIconColor PasswordField.selectionBackground PasswordField.selectionForeground PasswordField.showCapsLock +PasswordField.showRevealButton PasswordFieldUI Popup.dropShadowColor Popup.dropShadowInsets @@ -521,6 +576,8 @@ PopupMenu.borderInsets PopupMenu.consumeEventOnClose PopupMenu.font PopupMenu.foreground +PopupMenu.hoverScrollArrowBackground +PopupMenu.scrollArrowColor PopupMenu.selectedWindowInputMapBindings PopupMenu.selectedWindowInputMapBindings.RightToLeft PopupMenuSeparator.height @@ -552,6 +609,7 @@ RadioButton.foreground RadioButton.highlight RadioButton.icon RadioButton.icon.centerDiameter +RadioButton.icon.style RadioButton.iconTextGap RadioButton.icon[filled].centerDiameter RadioButton.light @@ -560,7 +618,6 @@ RadioButton.rollover RadioButton.shadow RadioButton.textIconGap RadioButton.textShiftOffset -RadioButtonMenuItem.acceleratorFont RadioButtonMenuItem.acceleratorForeground RadioButtonMenuItem.acceleratorSelectionForeground RadioButtonMenuItem.arrowIcon @@ -581,10 +638,13 @@ RangeSliderUI Resizable.resizeBorder RootPane.activeBorderColor RootPane.ancestorInputMap +RootPane.background RootPane.border RootPane.borderDragThickness RootPane.cornerDragWidth RootPane.defaultButtonWindowKeyBindings +RootPane.font +RootPane.foreground RootPane.honorDialogMinimumSizeOnResize RootPane.honorFrameMinimumSizeOnResize RootPane.inactiveBorderColor @@ -601,6 +661,7 @@ ScrollBar.hoverThumbColor ScrollBar.hoverThumbWithTrack ScrollBar.hoverTrackColor ScrollBar.maximumThumbSize +ScrollBar.minimumButtonSize ScrollBar.minimumThumbSize ScrollBar.pressedButtonBackground ScrollBar.pressedThumbColor @@ -629,6 +690,21 @@ ScrollPane.font ScrollPane.foreground ScrollPane.smoothScrolling ScrollPaneUI +SearchField.clearIcon +SearchField.clearIconColor +SearchField.clearIconHoverColor +SearchField.clearIconPressedColor +SearchField.clearPressedIcon +SearchField.clearRolloverIcon +SearchField.icon +SearchField.popupIcon +SearchField.popupPressedIcon +SearchField.popupRolloverIcon +SearchField.pressedIcon +SearchField.rolloverIcon +SearchField.searchIconColor +SearchField.searchIconHoverColor +SearchField.searchIconPressedColor Separator.background Separator.foreground Separator.height @@ -646,16 +722,21 @@ Slider.focusInputMap.RightToLeft Slider.focusInsets Slider.focusWidth Slider.focusedColor +Slider.focusedThumbBorderColor Slider.font Slider.foreground Slider.highlight Slider.horizontalSize Slider.hoverThumbColor +Slider.hoverTrackColor Slider.minimumHorizontalSize Slider.minimumVerticalSize Slider.onlyLeftMouseButtonDrag Slider.pressedThumbColor +Slider.pressedTrackColor Slider.shadow +Slider.thumbBorderColor +Slider.thumbBorderWidth Slider.thumbColor Slider.thumbSize Slider.tickColor @@ -671,13 +752,17 @@ Spinner.border Spinner.buttonArrowColor Spinner.buttonBackground Spinner.buttonDisabledArrowColor +Spinner.buttonDisabledSeparatorColor Spinner.buttonHoverArrowColor Spinner.buttonPressedArrowColor +Spinner.buttonSeparatorColor +Spinner.buttonSeparatorWidth Spinner.buttonStyle Spinner.disabledBackground Spinner.disabledForeground Spinner.editorAlignment Spinner.editorBorderPainted +Spinner.focusedBackground Spinner.font Spinner.foreground Spinner.padding @@ -709,6 +794,7 @@ TabbedPane.buttonArc TabbedPane.buttonHoverBackground TabbedPane.buttonInsets TabbedPane.buttonPressedBackground +TabbedPane.cardTabSelectionHeight TabbedPane.closeArc TabbedPane.closeCrossFilledSize TabbedPane.closeCrossLineWidth @@ -753,7 +839,9 @@ TabbedPane.tabHeight TabbedPane.tabInsets TabbedPane.tabRunOverlay TabbedPane.tabSelectionHeight +TabbedPane.tabSeparatorColor TabbedPane.tabSeparatorsFullHeight +TabbedPane.tabType TabbedPane.tabWidthMode TabbedPane.tabsOpaque TabbedPane.tabsOverlapBorder @@ -761,6 +849,7 @@ TabbedPane.tabsPopupPolicy TabbedPane.textIconGap TabbedPane.underlineColor TabbedPaneUI +Table.alternateRowColor Table.ancestorInputMap Table.ancestorInputMap.RightToLeft Table.ascendingSortIcon @@ -789,6 +878,7 @@ Table.selectionForeground Table.selectionInactiveBackground Table.selectionInactiveForeground Table.showHorizontalLines +Table.showTrailingVerticalLine Table.showVerticalLines Table.sortIconColor TableHeader.ancestorInputMap @@ -801,6 +891,7 @@ TableHeader.font TableHeader.foreground TableHeader.height TableHeader.separatorColor +TableHeader.showTrailingVerticalLine TableHeaderUI TableUI TaskPane.background @@ -820,6 +911,7 @@ TextArea.caretBlinkRate TextArea.caretForeground TextArea.disabledBackground TextArea.focusInputMap +TextArea.focusedBackground TextArea.font TextArea.foreground TextArea.inactiveBackground @@ -838,9 +930,11 @@ TextField.caretForeground TextField.darkShadow TextField.disabledBackground TextField.focusInputMap +TextField.focusedBackground TextField.font TextField.foreground TextField.highlight +TextField.iconTextGap TextField.inactiveBackground TextField.inactiveForeground TextField.light @@ -856,6 +950,7 @@ TextPane.caretBlinkRate TextPane.caretForeground TextPane.disabledBackground TextPane.focusInputMap +TextPane.focusedBackground TextPane.font TextPane.foreground TextPane.inactiveBackground @@ -865,6 +960,7 @@ TextPane.selectionBackground TextPane.selectionForeground TextPaneUI TitlePane.background +TitlePane.borderColor TitlePane.buttonHoverBackground TitlePane.buttonMaximizedHeight TitlePane.buttonPressedBackground @@ -887,7 +983,9 @@ TitlePane.inactiveForeground TitlePane.maximizeIcon TitlePane.menuBarEmbedded TitlePane.menuBarTitleGap +TitlePane.noIconLeftGap TitlePane.restoreIcon +TitlePane.showIcon TitlePane.titleMargins TitlePane.unifiedBackground TitlePane.useWindowDecorations @@ -902,9 +1000,11 @@ ToggleButton.disabledBackground ToggleButton.disabledSelectedBackground ToggleButton.disabledText ToggleButton.focusInputMap +ToggleButton.focusedBackground ToggleButton.font ToggleButton.foreground ToggleButton.highlight +ToggleButton.hoverBackground ToggleButton.iconTextGap ToggleButton.light ToggleButton.margin @@ -916,6 +1016,7 @@ ToggleButton.shadow ToggleButton.tab.disabledUnderlineColor ToggleButton.tab.focusBackground ToggleButton.tab.hoverBackground +ToggleButton.tab.selectedBackground ToggleButton.tab.underlineColor ToggleButton.tab.underlineHeight ToggleButton.textIconGap @@ -925,14 +1026,17 @@ ToggleButton.toolbar.pressedBackground ToggleButton.toolbar.selectedBackground ToggleButtonUI ToolBar.ancestorInputMap +ToolBar.arrowKeysOnlyNavigation ToolBar.background ToolBar.border ToolBar.borderMargins ToolBar.darkShadow ToolBar.dockingBackground ToolBar.dockingForeground +ToolBar.floatable ToolBar.floatingBackground ToolBar.floatingForeground +ToolBar.focusableButtons ToolBar.font ToolBar.foreground ToolBar.gripColor @@ -962,6 +1066,7 @@ Tree.dropCellBackground Tree.dropCellForeground Tree.dropLineColor Tree.editorBorder +Tree.editorBorderSelectionColor Tree.expandedIcon Tree.focusInputMap Tree.focusInputMap.RightToLeft @@ -1002,6 +1107,27 @@ Viewport.background Viewport.font Viewport.foreground ViewportUI +[style].h0 +[style].h00 +[style].h1 +[style].h1.regular +[style].h2 +[style].h2.regular +[style].h3 +[style].h3.regular +[style].h4 +[style].large +[style].light +[style].medium +[style].mini +[style].monospaced +[style].semibold +[style].small +[style]Button.clearButton +[style]Button.inTextField +[style]ToggleButton.inTextField +[style]ToolBar.inTextField +[style]ToolBarSeparator.inTextField activeCaption activeCaptionBorder activeCaptionText @@ -1013,6 +1139,15 @@ controlShadow controlText defaultFont desktop +h0.font +h00.font +h1.font +h1.regular.font +h2.font +h2.regular.font +h3.font +h3.regular.font +h4.font html.missingImage html.pendingImage inactiveCaption @@ -1022,9 +1157,16 @@ info infoText laf.dark laf.scaleFactor +large.font +light.font +medium.font menu menuText +mini.font +monospaced.font scrollbar +semibold.font +small.font swingx/TaskPaneUI text textHighlight diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLightLaf.properties b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLightLaf.properties new file mode 100644 index 00000000..07826591 --- /dev/null +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLightLaf.properties @@ -0,0 +1,60 @@ +# +# Copyright 2021 FormDev Software GmbH +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +#---- FlatThemeEditorPane ---- + +FlatThemeEditorPane.background = #fff +FlatThemeEditorPane.caretColor = @foreground +FlatThemeEditorPane.selectionBackground = #A6D2FF +FlatThemeEditorPane.currentLineHighlight = #fcfaed +FlatThemeEditorPane.markOccurrencesColor = #FCE8F4 +FlatThemeEditorPane.markAllHighlightColor = #ffc800 +FlatThemeEditorPane.matchedBracketBackground = #93D9D9 +FlatThemeEditorPane.matchedBracketBorderColor = $FlatThemeEditorPane.matchedBracketBackground + + +#---- FlatThemeEditorPane.style ---- + +FlatThemeEditorPane.style.property = @foreground +FlatThemeEditorPane.style.variable = @foreground +# use semitransparent background because it is painted over mark occurrences background +FlatThemeEditorPane.style.variable.background = #00cc0018 +FlatThemeEditorPane.style.number = #1750EB +FlatThemeEditorPane.style.color = #1750EB +# use semitransparent background because it is painted over mark occurrences background +FlatThemeEditorPane.style.color.background = #0000000a +FlatThemeEditorPane.style.string = #067D17 +FlatThemeEditorPane.style.function = #871094 +FlatThemeEditorPane.style.type = #8C8C8C +FlatThemeEditorPane.style.reservedWord = #871094 +FlatThemeEditorPane.style.literalBoolean = #871094 +FlatThemeEditorPane.style.operator = #888 +FlatThemeEditorPane.style.separator = #888 +FlatThemeEditorPane.style.whitespace = @foreground +FlatThemeEditorPane.style.comment = #8C8C8C +FlatThemeEditorPane.style.comment.italic = true + + +#---- FlatThemeEditorPane.gutter ---- + +FlatThemeEditorPane.gutter.background = $FlatThemeEditorPane.background +FlatThemeEditorPane.gutter.borderColor = $Component.borderColor +FlatThemeEditorPane.gutter.lineNumberColor = @disabledForeground + + +#---- FlatThemeEditorPane.errorstrip ---- + +FlatThemeEditorPane.errorstrip.caretMarkerColor = $FlatThemeEditorPane.caretColor diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/add.svg b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/add.svg new file mode 100644 index 00000000..af6fd932 --- /dev/null +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/add.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/close.svg b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/close.svg index 7f63bd7f..1f6b67c0 100644 --- a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/close.svg +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/close.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/findAndShowNextMatches.svg b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/findAndShowNextMatches.svg index 62f0f972..f73fccf0 100644 --- a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/findAndShowNextMatches.svg +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/findAndShowNextMatches.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/findAndShowPrevMatches.svg b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/findAndShowPrevMatches.svg index 88d78e89..3902602f 100644 --- a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/findAndShowPrevMatches.svg +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/findAndShowPrevMatches.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/matchCase.svg b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/matchCase.svg index 874ee768..bbe558af 100644 --- a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/matchCase.svg +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/matchCase.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/menu-open.svg b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/menu-open.svg index 51e7f354..e1f4d136 100644 --- a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/menu-open.svg +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/menu-open.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/regex.svg b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/regex.svg new file mode 100644 index 00000000..f073c590 --- /dev/null +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/regex.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/regexHovered.svg b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/regexHovered.svg new file mode 100644 index 00000000..545853d7 --- /dev/null +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/regexHovered.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/regexSelected.svg b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/regexSelected.svg new file mode 100644 index 00000000..29a9c56d --- /dev/null +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/regexSelected.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/words.svg b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/words.svg new file mode 100644 index 00000000..e427f911 --- /dev/null +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/words.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/wordsHovered.svg b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/wordsHovered.svg new file mode 100644 index 00000000..d99d09d6 --- /dev/null +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/wordsHovered.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/wordsSelected.svg b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/wordsSelected.svg new file mode 100644 index 00000000..21533311 --- /dev/null +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/preview/wordsSelected.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/regex.svg b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/regex.svg index 68316ab9..8c1d350d 100644 --- a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/regex.svg +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/regex.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/words.svg b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/words.svg index 353e3bb4..9b8c3312 100644 --- a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/words.svg +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/icons/words.svg @@ -1,3 +1,4 @@ + diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/light.xml b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/light.xml deleted file mode 100644 index 1c548fda..00000000 --- a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/light.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/flatlaf-theme-editor/theme-editor-test.properties b/flatlaf-theme-editor/theme-editor-test.properties index d9c49e32..fa4bf4e5 100644 --- a/flatlaf-theme-editor/theme-editor-test.properties +++ b/flatlaf-theme-editor/theme-editor-test.properties @@ -29,6 +29,24 @@ Prop.true = true Prop.var = @var1 Prop.ref = $Prop.string +Prop.ifNotNull = if(#000,#0f0,#dfd) +Prop.ifNull = if(null,#0f0,#dfd) +Prop.ifTrue = if(true,#0f0,#dfd) +Prop.ifFalse = if(false,#0f0,#dfd) +Prop.ifOne = if(1,#0f0,#dfd) +Prop.ifZero = if(0,#0f0,#dfd) +@varTrue = true +@varFalse = false +@varTrueValue = #0f0 +@varFalseValue = #dfd +Prop.ifVarTrue = if(@varTrue,@varTrueValue,@varFalseValue) +Prop.ifVarFalse = if(@varFalse,@varTrueValue,@varFalseValue) +Prop.ifTrueColorFunc = if(true,lighten(#f00,20%),darken(#f00,20%)) +Prop.ifFalseColorFunc = if(false,lighten(#f00,20%),darken(#f00,20%)) +Prop.ifUndefinedVar = if(@undefinedVar,#0f0,#dfd) +Prop.ifUndefinedProp = if($undefinedProp,#0f0,#dfd) +Prop.ifColor = lighten(if(#000,#0f0,#dfd), 10%) +Prop.ifColorVar = lighten(if(@varTrue,@varTrueValue,@varFalseValue), 10%) Prop.lazy = lazy(Prop.string) Prop.colorFunc1 = rgb(12,34,56) @@ -49,3 +67,64 @@ Prop.colorFunc13 = spin($Prop.colorFunc12,40) Prop.colorFunc14 = spin($Prop.colorFunc12,-40) Prop.colorFunc15 = spin($Prop.colorFunc12,400) Prop.colorFunc16 = spin($Prop.colorFunc12,-400) + +Prop.colorFunc20 = changeHue(#f00,180) +Prop.colorFunc21 = changeSaturation(#f00,50%) +Prop.colorFunc22 = changeLightness(#f00,80%) +Prop.colorFunc23 = changeAlpha(#f00,50%) + +Prop.colorFunc30 = mix(#f00,#0f0,10%) +Prop.colorFunc31 = mix(#f00,#0f0,25%) +Prop.colorFunc32 = mix(#f00,#0f0) +Prop.colorFunc33 = mix(#f00,#0f0,75%) +Prop.colorFunc34 = mix(#f00,#0f0,90%) +Prop.colorFunc35 = mix($Prop.color1,$Prop.color2) +Prop.colorFunc36 = mix($Prop.colorFunc20,$Prop.colorFunc30) + +Prop.colorFunc40 = tint(#f0f,25%) +Prop.colorFunc41 = tint(#f0f) +Prop.colorFunc42 = tint(#f0f,75%) + +Prop.colorFunc45 = shade(#f0f,25%) +Prop.colorFunc46 = shade(#f0f) +Prop.colorFunc47 = shade(#f0f,75%) + +Prop.colorFunc50 = contrast(#111,#000,#fff) +Prop.colorFunc51 = contrast(#eee,#000,#fff) +Prop.colorFunc52 = contrast(#111,$Prop.colorFunc1,$Prop.colorFunc3) +Prop.colorFunc53 = contrast(#eee,$Prop.colorFunc1,$Prop.colorFunc3) +Prop.colorFunc54 = contrast(lighten(#111,5%),$Prop.colorFunc1,$Prop.colorFunc3) +Prop.colorFunc55 = contrast(lighten(#eee,5%),$Prop.colorFunc1,$Prop.colorFunc3) +Prop.colorFunc56 = contrast(contrast(#222,#111,#eee),contrast(#eee,#000,#fff),contrast(#111,#000,#fff)) + +Prop.1.selectionBackground = #2675BF +Prop.1.selectionForeground = contrast($Prop.1.selectionBackground,#000,#fff) + +Prop.2.selectionBackground = #95c0e9 +Prop.2.selectionForeground = contrast($Prop.2.selectionBackground,#000,#fff) + +Prop.3.selectionBackground = #f00 +Prop.3.selectionForeground = contrast($Prop.3.selectionBackground,#000,#fff) + +Prop.4.selectionBackground = #0f0 +Prop.4.selectionForeground = contrast($Prop.4.selectionBackground,#000,#fff) + +Prop.5.selectionBackground = #00f +Prop.5.selectionForeground = contrast($Prop.5.selectionBackground,#000,#fff) + +Prop.6.selectionBackground = #FFCC00 +Prop.6.selectionForeground = contrast($Prop.6.selectionBackground,#000,#fff) + +Prop.7.selectionBackground = #FF9500 +Prop.7.selectionForeground = contrast($Prop.7.selectionBackground,#000,#fff) + + + +@varStyle1 = #f0f +[style].style1 = background: @varStyle1 + +[style].style2 = background: darken(#f00,10%); \ + foreground: #0f0; \ + foreground: darken(@background,30%); \ + toolbar.hoverBackground: fade(Actions.GreyInline,30%,lazy); \ + toolbar.selectedBackground: fade(Actions.GreyInline,50%,lazy) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c0..41d9927a 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 2a563242..aa991fce 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0c..c53aefaa 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,101 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions $var, ${var}, ${var:-default}, ${var+SET}, +# ${var#prefix}, ${var%suffix}, and $( cmd ); +# * compound commands having a testable exit status, especially case; +# * various built-in commands including command, set, and ulimit. +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -98,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -106,80 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/images/FlatDarkSwingXTest.png b/images/FlatDarkSwingXTest.png index 10cfc939..5cc37d5f 100644 Binary files a/images/FlatDarkSwingXTest.png and b/images/FlatDarkSwingXTest.png differ diff --git a/images/FlatLightSwingXTest.png b/images/FlatLightSwingXTest.png index a2b57212..d2bd1b0b 100644 Binary files a/images/FlatLightSwingXTest.png and b/images/FlatLightSwingXTest.png differ diff --git a/images/arc_orange.png b/images/arc_orange.png index 6ef8c1e3..6cc555fe 100644 Binary files a/images/arc_orange.png and b/images/arc_orange.png differ diff --git a/images/carbon.png b/images/carbon.png index cb24574e..b02d9e31 100644 Binary files a/images/carbon.png and b/images/carbon.png differ diff --git a/images/cyan_light.png b/images/cyan_light.png index 23fded79..43777dbe 100644 Binary files a/images/cyan_light.png and b/images/cyan_light.png differ diff --git a/images/dark_purple.png b/images/dark_purple.png index 93faa285..2ada70d7 100644 Binary files a/images/dark_purple.png and b/images/dark_purple.png differ diff --git a/images/extras-FlatUIDefaultsInspector.png b/images/extras-FlatUIDefaultsInspector.png index ddb33060..4099e24f 100644 Binary files a/images/extras-FlatUIDefaultsInspector.png and b/images/extras-FlatUIDefaultsInspector.png differ diff --git a/images/flat_dark.png b/images/flat_dark.png index 9a5271d0..ea742dce 100644 Binary files a/images/flat_dark.png and b/images/flat_dark.png differ diff --git a/images/flat_light.png b/images/flat_light.png index 2c38baaa..f8a0e5e8 100644 Binary files a/images/flat_light.png and b/images/flat_light.png differ diff --git a/images/intellij_platform_themes.png b/images/intellij_platform_themes.png index 449cb883..49e69662 100644 Binary files a/images/intellij_platform_themes.png and b/images/intellij_platform_themes.png differ diff --git a/images/one_dark.png b/images/one_dark.png index c7d81953..e54bcee2 100644 Binary files a/images/one_dark.png and b/images/one_dark.png differ diff --git a/images/solarized_light.png b/images/solarized_light.png index d31d6ec5..4184d367 100644 Binary files a/images/solarized_light.png and b/images/solarized_light.png differ diff --git a/images/theme-editor@1.5x.png b/images/theme-editor@1.5x.png new file mode 100644 index 00000000..e1cb24cb Binary files /dev/null and b/images/theme-editor@1.5x.png differ diff --git a/settings.gradle.kts b/settings.gradle.kts index 8acdb6d6..84f0c699 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -25,8 +25,10 @@ include( "flatlaf-demo" ) include( "flatlaf-testing" ) include( "flatlaf-theme-editor" ) -includeProject( "flatlaf-natives-windows", "flatlaf-natives/flatlaf-natives-windows" ) -includeProject( "flatlaf-natives-jna", "flatlaf-natives/flatlaf-natives-jna" ) +if( org.gradle.internal.os.OperatingSystem.current().isWindows ) + includeProject( "flatlaf-natives-windows", "flatlaf-natives/flatlaf-natives-windows" ) +includeProject( "flatlaf-natives-jna", "flatlaf-natives/flatlaf-natives-jna" ) +includeProject( "flatlaf-testing-modular-app", "flatlaf-testing/flatlaf-testing-modular-app" ) fun includeProject( projectPath: String, projectDir: String ) { include( projectPath )