Compare commits

...

169 Commits

Author SHA1 Message Date
Karl Tauber
5729c20386 release 1.1.2 2021-04-07 11:53:18 +02:00
Karl Tauber
a4d70d8095 FlatTextComponentsTest: fixed compiler warnings (for previous commit) 2021-04-07 10:34:11 +02:00
Karl Tauber
8fcce349d5 ComboBox and Spinner: fixed too wide arrow button if component is higher than preferred (issue #302) 2021-04-07 01:39:29 +02:00
Karl Tauber
5a94676a3a Merge pull request #269 from SchiopuMatei/main
Added option for downscaling
2021-04-07 00:24:18 +02:00
Karl Tauber
f32d72ee62 UIScale:
- allow scale factors less than 100% for system property `flatlaf.uiScale`
- no longer round scale factor of system property `flatlaf.uiScale` to 1/4
- renamed system property `flatlaf.uiDowncale.enabled` to `flatlaf.uiScale.allowScaleDown`
- round smaller scale factors to 1/10
- absolute minimum user scale factor is now 0.1
2021-04-07 00:21:15 +02:00
Karl Tauber
e35fc8620c JIDE: fixed null font in other Lafs if (wrongly) using LookAndFeelFactory.addUIDefaultsInitializer() or LookAndFeelFactory.addUIDefaultsCustomizer() (issue #288) 2021-04-06 18:35:48 +02:00
Karl Tauber
277c288952 IntelliJ Themes: fixed system colors 2021-04-06 11:29:55 +02:00
Karl Tauber
240b08e55c IntelliJ Themes: fixed window title bar background if unified background is enabled 2021-04-06 11:04:52 +02:00
Karl Tauber
fe7f345661 Native window decorations: support changing title bar background and foreground colors per window (via client property) also if unified window title bar is enabled 2021-04-06 10:46:28 +02:00
Karl Tauber
c8db01c958 SplitPane: fixed JSplitPane.setContinuousLayout(false) (issue #301) 2021-04-05 14:24:49 +02:00
Karl Tauber
f456185f7d Native window decorations: support changing title bar background and foreground colors per window (via client property) 2021-04-05 14:19:41 +02:00
Karl Tauber
801b555835 Window decorations: fixed random window title bar background for unified backgrounds in cases were background is not filled by custom window/rootpane components (issue #254) 2021-04-04 11:47:15 +02:00
Karl Tauber
eee177e64b Window decorations: enabling/disabling menu bar embedding via system and client properties now works the same way as for window decorations
(previously it was only possible to disable menu bar embedding)
2021-04-03 16:19:11 +02:00
Karl Tauber
63639f8e96 Native window decorations: cleaned-up/simplified JetBrains Runtime custom window decorations "enabled" checking:
- `FlatSystemProperties.USE_WINDOW_DECORATIONS` is now also used for JBR custom window decorations
- `FlatSystemProperties.USE_JETBRAINS_CUSTOM_DECORATIONS` is now only used to disable JBR custom window decorations; then FlatLaf native window decorations are used
- JBR custom window decorations are now disabled when running in JetBrains Projector, Webswing or WinPE
2021-04-03 13:32:46 +02:00
Karl Tauber
de1b0b1bb6 MenuBar: do not use TitlePane.unifiedBackground if window decorations are disabled for the window 2021-04-03 11:51:45 +02:00
Karl Tauber
bbdd7fc2b4 Demo:
- keep "Options > Window decorations" selected for JetBrains Runtime
- disable "Options > Use underline menu selection" on macOS
- added font size `11`
2021-04-03 11:49:57 +02:00
Karl Tauber
6addb5c4b4 Native window decorations:
- API to check whether current platform supports window decorations `FlatLaf.supportsNativeWindowDecorations()`
- API to toggle window decorations of all windows `FlatLaf.setUseNativeWindowDecorations(boolean)`
- `FlatClientProperties.USE_WINDOW_DECORATIONS` can now used to toggle window decorations for single window
- cleaned-up/fixed/simplified window decorations "enabled" checking:
  1. if `FlatSystemProperties.USE_WINDOW_DECORATIONS` is set, its value is used
  2. if `FlatClientProperties.USE_WINDOW_DECORATIONS` is set, its value is used
  3. use value of UI default `TitlePane.useWindowDecorations`
2021-04-03 11:13:57 +02:00
Karl Tauber
b47e0c88d6 Merge pull request #298 from Bios-Marcel/fix-demo-menu-item-states
Fix selected states for native window border related menu items
2021-04-02 16:13:36 +02:00
Marcel Schramm
d06993d940 Add comment explaining why the use of JBR results in not having custom decorations 2021-04-01 22:14:39 +02:00
Karl Tauber
d31f167b9e TabbedPane: fixed NPE when creating/modifying in another thread (issue #299) 2021-04-01 12:35:50 +02:00
Karl Tauber
f12ee6c167 added dummy class to empty opend module packages 2021-04-01 09:40:22 +02:00
Karl Tauber
983b341f33 Native window decorations: fixed loading of native library when using JPMS for application (issue #289) 2021-04-01 01:07:35 +02:00
Karl Tauber
f3e6642f05 Button and ToggleButton: simplified/unified code of FlatButtonUI.getBackground() (issue #292) 2021-03-31 23:14:45 +02:00
Karl Tauber
0a63990d21 Button and ToggleButton: do not paint background of disabled (and unselected) toolBar buttons (issue #292; regression since fixing #112) 2021-03-31 22:28:43 +02:00
Karl Tauber
6909bb4b03 Native window decorations: removed superfluous pixel-line at top of screen when window is maximized (issue #296) 2021-03-31 20:56:17 +02:00
Marcel Schramm
620aa8bcee Fix selected states for native window border related menu items
The menu items for custom window decorations and embeded menu bar aren't selected anymore if the feature isn't supported.
On top of that, there's now a tooltip indicating that these aren't supported.
2021-03-31 19:59:29 +02:00
Karl Tauber
d13ddeb944 use larger font when running on WinPE (issue #279) 2021-03-30 11:00:27 +02:00
Karl Tauber
1b5da0e1d1 Window decorations: support enabling/disabling unified title bar backgrounds at runtime without FlatLaf.updateUI() 2021-03-30 01:34:34 +02:00
Karl Tauber
7a2d0e7fcb fixed crash when running in Webswing (issue #290) 2021-03-30 01:06:30 +02:00
Karl Tauber
477c3b6b1e README.md: added link to FlatLaf 1.0 announcement on Reddit 2021-03-28 18:44:21 +02:00
Karl Tauber
95312c3650 release 1.1.1 2021-03-28 16:04:14 +02:00
Karl Tauber
9006e835c6 natives.yml: exclude ~/.gradle/caches/modules-2/modules-2.lock from Gradle cache 2021-03-26 21:52:28 +01:00
Karl Tauber
f801d61929 support running on WinPE (issue #279) 2021-03-26 21:51:11 +01:00
Karl Tauber
a143e5777c Extras: FlatInspector: fixed InaccessibleObjectException when running in Java 16 2021-03-26 21:44:41 +01:00
Karl Tauber
bf500e46e7 Window decorations: fixed wrong/missing window icon when application replaces InternalFrame.icon (issue #284) 2021-03-25 16:14:41 +01:00
Karl Tauber
4a2f79f390 Native window decorations: updated DLLs (issues #282 and #283)
built by GitHub Actions:
https://github.com/JFormDesigner/FlatLaf/actions/runs/686023039
2021-03-25 11:10:13 +01:00
Karl Tauber
c24ce7c5bc Native window decorations: fixed broken maximizing window when restoring frame state at startup (issue #283) 2021-03-25 10:32:24 +01:00
Karl Tauber
8a6a0c7971 Native window decorations: fixed missing animations when minimizing, maximizing or restoring a window using window title bar buttons (issue #282) 2021-03-24 23:59:59 +01:00
Karl Tauber
de6e5bd800 fixed missing focus indicators in heavy-weight popups (issue #273) 2021-03-24 11:43:06 +01:00
Karl Tauber
e18a04f9e6 Merge pull request #278 from ingokegel/native_provider_setter
Add a setter for the native provider
2021-03-24 11:34:22 +01:00
Karl Tauber
14fc652f4b Window decorations: fixed right aligned progress bar in embedded menu bar was overlapping window title (issue #272) 2021-03-23 19:23:18 +01:00
Ingo Kegel
9a876e747a Added setter for native provider
This makes it possible to support situations where the extraction of a DLL at runtime is not possible
2021-03-23 16:47:08 +01:00
Karl Tauber
f8ee8b27fb InternalFrame: fixed translucent internal frame menu bar background if TitlePane.unifiedBackground is true (issue #274) 2021-03-23 15:08:01 +01:00
Karl Tauber
ce1a1487aa support menu bars in JDialog 2021-03-23 14:58:53 +01:00
Karl Tauber
fe1e364a1d Native window decorations: support disabling native window decorations per window via client property (issue #277) 2021-03-23 13:18:07 +01:00
Karl Tauber
eabb052107 Native window decorations: fixed double window title bar when first disposing a window and then showing it again (issue #277) 2021-03-23 10:07:43 +01:00
Karl Tauber
734f3621f1 Window decorations: Fixed NPE in FlatTitlePane.findHorizontalGlue() (issue #275) 2021-03-22 18:47:53 +01:00
Karl Tauber
9612a81f2e release 1.1 2021-03-21 14:03:36 +01:00
Karl Tauber
2945a36cef added since 1.1 2021-03-21 13:53:57 +01:00
Karl Tauber
b84dc5bfcc JIDE and SwingX: README.md: added links to dependencies on maven central 2021-03-21 13:29:23 +01:00
Karl Tauber
60486fd880 JIDE: build using latest version of JIDE library com.formdev:jide-oss:3.7.11.1 2021-03-20 19:19:33 +01:00
Karl Tauber
891091cebc SwingX: fixed compiling module-info (broken since previous commit) 2021-03-19 17:06:23 +01:00
Karl Tauber
1493ddcf41 SwingX: the library on Maven Central no longer depends on org.swinglabs.swingx:swingx-all:1.6.5-1 to avoid problems when another SwingX library should be used 2021-03-19 16:23:29 +01:00
Karl Tauber
4299c50537 JIDE: the library on Maven Central no longer depends on com.jidesoft:jide-oss:3.6.18 to avoid problems when another JIDE library should be used (issue #270) 2021-03-19 16:22:24 +01:00
Karl Tauber
14577c396d JIDE: fixed hover/selection background colors of JideSplitButton and JideSplitToggleButton 2021-03-19 15:59:59 +01:00
Karl Tauber
e9b566241d JIDE: support JideSplitButton and JideSplitToggleButton 2021-03-19 15:39:32 +01:00
Karl Tauber
d39b08c035 FlatArrowButton: refactored arrow painting to FlatUIUtils.paintArrow() so that it can be easily used other components (e.g. JideSplitButton) 2021-03-19 01:21:19 +01:00
Karl Tauber
69ac683c8c Support running in JetBrains Projector (https://jetbrains.com/projector/) 2021-03-17 00:43:08 +01:00
Karl Tauber
eafd0b3d06 use lambdas for listeners (where possible) instead of extending Basic*UI.*Handler classes
some of those `Basic*UI.*Handler` classes may be deprecated in a future Java version (see https://github.com/openjdk/jdk/pull/1958)

this should also avoid loading of those `Basic*UI.*Handler` classes at runtime
2021-03-17 00:34:35 +01:00
Karl Tauber
310a4989dc JIDE: made used fonts "active" and restored fonts modified in LookAndFeelFactory.installJideExtension() 2021-03-16 23:23:40 +01:00
Karl Tauber
3d0df51839 JIDE: support JideLabel to fix wrong text colors in dark themes 2021-03-16 22:52:13 +01:00
Karl Tauber
ede02aaaa5 TabbedPane: use float arc for tab area button background 2021-03-16 22:20:46 +01:00
Karl Tauber
beff149004 JIDE: support JideButton and JideToggleButton 2021-03-16 22:15:32 +01:00
Karl Tauber
07db6e8fb0 Extras: FlatInspector: fixed NPE if component class is in default package 2021-03-16 13:46:25 +01:00
Karl Tauber
46852c0780 JIDE: invoke LookAndFeelFactory.installJideExtension() early in FlatJidePopupMenuUI to be sure that Jide extensions are installed 2021-03-16 13:26:36 +01:00
Karl Tauber
a5e41c573f JIDE: UIDefaultsDump: dump UI defaults added by LookAndFeelFactory.installJideExtension() 2021-03-16 11:38:49 +01:00
SchiopuMatei
ed91aa4648 Added option for downscaling 2021-03-15 20:41:40 +02:00
Karl Tauber
9a94395d30 JIDE: split FlatJideOssTest (moved JideTabbedPane to FlatJideOssContainerTest`) 2021-03-15 17:40:31 +01:00
Karl Tauber
04aa61c2bb Merge pull request #268 from title-pane-improvements
Title pane improvements (Windows 10 only)
2021-03-14 17:39:50 +01:00
Karl Tauber
035a13df54 Window decorations: support unified backgrounds for window title bar, menu bar and main content (issue #254) 2021-03-14 15:13:26 +01:00
Karl Tauber
e8a6f0ca3d Native window decorations: added flatlaf-windows-x86.dll and updated flatlaf-windows-x86_64.dll
built by GitHub Actions:
https://github.com/JFormDesigner/FlatLaf/actions/runs/650060630
2021-03-14 00:20:22 +01:00
Karl Tauber
1fc519b9de natives.yml: run "Native Libraries" also when natives.yml changed 2021-03-14 00:02:01 +01:00
Karl Tauber
2bcf38e2e3 natives.yml: run "Native Libraries" on any change in native project (e.g. when changing Gradle build script) 2021-03-13 23:59:30 +01:00
Karl Tauber
8eb44a68cb Native window decorations: support 32-bit JREs 2021-03-13 23:41:38 +01:00
Karl Tauber
30c7b442a8 Window decorations:
- support customizing of window title alignment: left aligned or centered (default is left without embedded menubar and centered with embedded menubar)
- improved centering of window title with embedded menubar (issue #252)
2021-03-13 17:08:47 +01:00
Karl Tauber
cee2211108 Demo: added "users" icon to right side of menu bar to demonstrate this feature 2021-03-13 11:14:51 +01:00
Karl Tauber
b7bcbccd45 Window decorations: support right aligned extra components in JFrame title pane with embedded menu bar 2021-03-13 11:10:50 +01:00
Karl Tauber
d2ccb97eba Native window decorations: use LoggingFacade 2021-03-12 23:18:13 +01:00
Karl Tauber
39d56f2603 Merge pull request #267 from native-window-decorations
Native window decorations for Windows 10 (using JNI)
2021-03-12 23:15:19 +01:00
Karl Tauber
83e904dd2d Merge pull request #262 from native-window-decorations-jna
Native window decorations for Windows 10 (using JNA)
2021-03-12 23:08:35 +01:00
Karl Tauber
110c787eba Merge pull request #265 from ingokegel:optional_logging
Make the module dependency on java.logging optional
2021-03-12 22:57:04 +01:00
Karl Tauber
7c7ff289de removed module java.logging from module-info.javas 2021-03-12 22:52:59 +01:00
Karl Tauber
617a35c51b LoggingFacade:
- make LoggingFacadeImpl classes package private
- added missing @Override
- minor formatting changes
2021-03-12 21:16:57 +01:00
Karl Tauber
73487ccf65 Native window decorations:
- enabled by default (via UI property `TitlePane.useWindowDecorations`)
- dropped system property `flatlaf.useNativeWindowDecorations` and replaced with `flatlaf.useWindowDecorations`
- old functionality of system property `flatlaf.useWindowDecorations` removed
2021-03-11 10:54:23 +01:00
Ingo Kegel
712bff9c99 Use System.Logger for logging with Java 9+ 2021-03-10 17:56:27 +01:00
Ingo Kegel
eedfcf86aa LoggingFacade: moved to com.formdev.flatlaf.util, added license header, fixed NPEs in logging calls and removed overloads of logSevere 2021-03-10 17:06:12 +01:00
Karl Tauber
f730848928 Native window decorations: added flatlaf-windows-x86_64.dll
built by GitHub Actions:
https://github.com/JFormDesigner/FlatLaf/actions/runs/636694710
2021-03-10 16:16:50 +01:00
Karl Tauber
61d0574c5c Native window decorations: added READMEs 2021-03-09 19:08:53 +01:00
Karl Tauber
2f01e01ec1 Native window decorations: delete temporary DLLs on next startup (same approach as used in JNA) 2021-03-07 00:10:15 +01:00
Karl Tauber
cbcf66df7f Native window decorations: fixed enabled items is system menu 2021-03-06 16:23:10 +01:00
Karl Tauber
cfaeea039b Native window decorations: fixed enabled items is system menu 2021-03-06 16:21:22 +01:00
Karl Tauber
a891d1eb54 Native window decorations: never build :flatlaf-natives-windows:jar because it is not used/needed 2021-03-06 15:26:18 +01:00
Karl Tauber
4372052ef0 Native window decorations: do not try to build native library (on Windows) if no C++ compiler is available 2021-03-06 15:18:23 +01:00
Karl Tauber
8734b062dc Native window decorations: avoid using C-runtime, which reduces the DLL size from 100kb to 8kb 2021-03-06 12:01:49 +01:00
Ingo Kegel
343451de65 Make the module dependency on java.logging optional
Currently, FlatLaf has the following module dependencies:

$ jdeps --list-deps --multi-release 9 flatlaf-1.0.jar
   java.base
   java.desktop
   java.logging

This commit makes the java.logging dependency optional and hides logging behind a facade that falls back to printing to stderr if the java.logging module is not available.

To test, create a reduced JRE with a command like

jdk-15/bin/jlink.exe --module-path jdk-15/jmods --add-modules java.desktop --add-modules java.instrument --output jre-15-desktop-only

(adding java.instrument, so the FlatLafDemo main class can be started from IntelliJ IDEA)
2021-03-05 16:44:08 +01:00
Karl Tauber
144d65c776 Native window decorations: initial implementation in C++ using JNI 2021-03-05 10:31:31 +01:00
Karl Tauber
a6815574f7 Native window decorations: renamed project flatlaf-native-jna to flatlaf-natives/flatlaf-natives-jna
removed module-info.java because this JAR is not released/published
2021-03-04 11:04:47 +01:00
Karl Tauber
e5a116a0d4 Extras: FlatInspector: removed println (fixes #263) 2021-02-25 16:54:05 +01:00
Karl Tauber
0beef6b108 README.md: new applications using FlatLaf:
- install4j
2021-02-25 00:00:30 +01:00
Karl Tauber
7341008449 Native window decorations: fixed missing top border line 2021-02-24 23:17:41 +01:00
Karl Tauber
49bd53194a Native window decorations: show window system menu when left-clicking on application icon, close window on left-double-click on app icon 2021-02-23 23:31:36 +01:00
Karl Tauber
baf4437efc Native window decorations: show window system menu when right-clicking on caption 2021-02-23 01:10:59 +01:00
Karl Tauber
b244f80f81 Native window decorations: support autohide taskbar 2021-02-22 22:57:43 +01:00
Karl Tauber
e41c91a42b Native window decorations: fixed exception when switching Laf after closing a dialog 2021-02-22 09:56:40 +01:00
Karl Tauber
b9a2e3ceac Native window decorations: initial implementation (using JNA; will be replaced with JNI later) 2021-02-21 17:51:19 +01:00
Karl Tauber
fa7dd3bdc4 GitHub Actions: upload all built libs 2021-02-21 17:18:59 +01:00
Karl Tauber
9a8c68b846 GitHub Actions: renamed master to main 2021-02-19 16:38:25 +01:00
Karl Tauber
698e33ddf4 IntelliJ Themes: fixed text color of CheckBoxMenuItem and RadioButtonMenuItem in all "Arc" themes (issue #259) 2021-02-19 11:33:15 +01:00
Karl Tauber
909258ba14 README.md: added "Getting started" and direct links to documentation 2021-02-14 12:32:56 +01:00
Karl Tauber
2ad6bd1d23 release 1.0 2021-02-13 13:42:04 +01:00
Karl Tauber
510ffd41d8 PopupFactory: fixed NullPointerException when PopupFactory.getPopup() is invoked with parameter owner set to null 2021-02-13 13:31:30 +01:00
Karl Tauber
4f00591c4e Table: fixed wrong grid line thickness in dragged column on HiDPI screens on Java 9+ (issue #236) 2021-02-12 11:32:12 +01:00
Karl Tauber
5b65ed87cd FileChooser: fixed display of date in details view if current user is selected in "Look in" combobox (Windows 10 only; issue #249) 2021-02-12 11:10:25 +01:00
Karl Tauber
b0121c422d GitHub Actions: added Gradle wrapper validation 2021-02-11 23:52:11 +01:00
Karl Tauber
a9e9fad222 Extras: FlatInspector: tooltip is no longer limited to window bounds 2021-02-11 18:23:01 +01:00
Karl Tauber
b5fc07acc7 TabbedPane: custom TabbedPane.selectedForeground color did not work when TabbedPane.foreground has also custom color (issue #257) 2021-02-11 12:04:36 +01:00
Karl Tauber
140ebfdb92 release 1.0-rc3 2021-02-06 23:31:53 +01:00
Karl Tauber
37d0179de1 GitHub Actions: upload demo (was removed in previous commit) 2021-02-06 23:27:39 +01:00
Karl Tauber
823d4b0fe2 dropped usage of bintray, jcenter and jfrog artifactory
deploy to Sonatype OSSRH

snapshots are now here:
https://oss.sonatype.org/content/repositories/snapshots/com/formdev/
2021-02-06 19:02:32 +01:00
Karl Tauber
dd1eacf4f0 update to Gradle 6.8.2
./gradlew wrapper --gradle-version=6.8.2
2021-02-06 11:35:35 +01:00
Karl Tauber
86c33dd686 fixed javadoc syntax error 2021-02-06 11:26:57 +01:00
Karl Tauber
c6757cc61b UI defaults inspector: filter by colors with alpha and derived colors 2021-02-06 01:32:32 +01:00
Karl Tauber
a38cf284dd UI defaults inspector: show color functions in value tooltips 2021-02-06 01:31:34 +01:00
Karl Tauber
575b8e3f7f UI defaults inspector: for derived colors, no longer change Item.value from Color to Color[] because this could cause problems if there is a UI value of type Color[] 2021-02-06 01:01:48 +01:00
Karl Tauber
bc443f47f1 Theme Editor: fixed NPE (caused by no longer implemented base files support) 2021-02-05 23:33:26 +01:00
Karl Tauber
b631bcc0db UIDefaultsLoader: check for endless recursion in parsing color functions (e.g. abc = darken($abc,10%)) 2021-02-05 23:30:48 +01:00
Karl Tauber
5ccd92ece6 CheckBox: fixed background of check boxes in JIDE CheckBoxTree (broken since commit dd8ab242fb) 2021-02-04 19:41:14 +01:00
Karl Tauber
2f3c8868a7 IntelliJ Themes: fixed table header background when dragging column in "Dark Flat" and "Light Flat" themes 2021-02-04 19:18:06 +01:00
Karl Tauber
6f7b5e8005 README.md: removed JCenter and replaced download links to bintray with Maven Central 2021-02-04 16:48:53 +01:00
Karl Tauber
10d1e4b798 UIDefaultsDump: dump color value in same format as used in FlatLaf properties files; also dump alpha as percentage 2021-02-04 15:24:50 +01:00
Karl Tauber
9d5934df14 Extras: FlatInspector: use HTML in tooltip 2021-02-04 15:19:33 +01:00
Karl Tauber
be507de6c1 Label and ToolTip: made inserting BASE_SIZE rule into HTML text more reliable 2021-02-04 15:10:27 +01:00
Karl Tauber
e5d3c08821 Fixed color of <address> tag in HTML text 2021-02-04 12:58:14 +01:00
Karl Tauber
027b4ab7da Label and ToolTip: fixed font sizes for <code>, <kbd>, <big>, <small> and <samp> tags in HTML text
ToolTip: update font size if `tiptext` property changes
2021-02-04 12:56:18 +01:00
Karl Tauber
fefea0d7ec IntelliJ Themes: updated themes to newest versions (used IJThemesUpdater) 2021-02-02 18:00:17 +01:00
Karl Tauber
33f30bfd19 README.md: new applications using FlatLaf:
- DbVisualizer
- MagicPlot
- Thermo-Calc
- Burp Suite
- BurpCustomizer
- IGMAS+
2021-02-01 21:58:18 +01:00
Karl Tauber
e9d4b9961a README.md: made "commercial" bold 2021-02-01 15:14:07 +01:00
Karl Tauber
b94248fe79 README.md: removed "new" badge from projects using FlatLaf 2021-02-01 14:58:44 +01:00
Karl Tauber
225975e0dd FlatTestFrame: added 5x and 6x scale factors 2021-02-01 13:57:36 +01:00
Karl Tauber
eac7492143 FlatAnimatedIconTest: made animation of switch smooth on high scale factors 2021-02-01 12:55:14 +01:00
Karl Tauber
b3c40bf448 release 1.0-rc2 2021-02-01 01:39:52 +01:00
Karl Tauber
02f7cd77f4 FlatBorder: fixed wrong round edge of focused components in themes without outer focus border (Flat Light/Dark) 2021-02-01 01:30:52 +01:00
Karl Tauber
7f8f3aa99b Button: undone most style changes done in previous commit related to focused and default buttons:
- default button: white background and wide border
- focused button: light blue background and thin border

(the light blue default button did not look beautiful IMHO)
2021-02-01 01:08:20 +01:00
Karl Tauber
0bcdc14909 - Button:
- In "Flat Light" theme, changed styles of focused and default buttons to
    avoid confusion with all other themes. Focused buttons now have a white
    background (was light blue) and a slightly wider border. The default button
    now has a light blue background (was white) and a thin border. In all other
    themes the default button also has colored background.
  - In "Flat Dark" theme, use slightly wider border for focused buttons.
- CheckBox and RadioButton: In "Flat Dark" theme, use blueish background for
  focused components.
2021-01-31 20:02:24 +01:00
Karl Tauber
526c25a02b FlatComponentStateTest: fixed insets 2021-01-31 18:51:28 +01:00
Karl Tauber
f48da9dab1 FlatComponentStateTest: added text field and combobox (for comparison) 2021-01-31 16:17:47 +01:00
Karl Tauber
2e8dfda12e FlatComponentStateTest: added help buttons 2021-01-31 00:55:29 +01:00
Karl Tauber
63da576d85 FlatComponentStateTest: added selected checkboxes and radiobuttons 2021-01-30 20:53:07 +01:00
Karl Tauber
0ab4206540 FlatComponentStateTest added 2021-01-30 18:43:11 +01:00
Karl Tauber
212ae90401 client property "JComponent.focusOwner" added to allow customizing detection of focused state (issue #185) 2021-01-30 17:54:47 +01:00
Karl Tauber
d4e5d0be45 javadoc fixes 2021-01-30 17:46:53 +01:00
Karl Tauber
3520a0f1fb TextComponents: border of focused non-editable text components had wrong color 2021-01-30 01:06:03 +01:00
Karl Tauber
036090a947 Button: fixed behavior of Enter key on focused button on Windows and Linux, which now clicks the focused button (instead of the default button) 2021-01-30 00:37:36 +01:00
Karl Tauber
dc570c683a UI defaults: added Java 8 and 9+ InputMap dumps of NimbusLookAndFeel, which are different on Linux (and macOS) than on Windows because they use GTK key bindings (see GTKKeybindings.installKeybindings(), invoked from NimbusLookAndFeel.getDefaults()) 2021-01-29 23:00:06 +01:00
Karl Tauber
9f85d34c91 JIDE: updated UI defaults dumps for commit 7d0f7e1c8e (support JidePopupMenu) 2021-01-29 22:06:01 +01:00
Karl Tauber
16bf1fb6c3 README.md: screenshots updated 2021-01-28 23:26:30 +01:00
Karl Tauber
47c4d508e0 Demo: updated screenshot mode 2021-01-28 23:26:16 +01:00
Karl Tauber
e5d9060623 UI defaults: added links to docs and note to properties files 2021-01-23 18:49:35 +01:00
Karl Tauber
fdf28fc385 javadoc and comment updates/fixes 2021-01-23 18:05:46 +01:00
Karl Tauber
9015a4d56b Window decorations: fixed top window border in dark themes when running in JetBrains Runtime (issue #244)
fixed/improved calculation of active border color
2021-01-23 16:59:53 +01:00
Karl Tauber
38301454a6 CHANGELOG.md: added recently merged PRs #245 2021-01-22 11:10:04 +01:00
Karl Tauber
9b3a22c4ca FlatComponents2Test: simplified layout and reduced frame size 2021-01-21 23:58:22 +01:00
Karl Tauber
548dbc3649 Merge pull request #245 from ingokegel/tree_wide_selection
Added a per-tree wide selection setting
2021-01-21 23:19:33 +01:00
Karl Tauber
3474129812 Tree:
- paint non-wide selection in FlatTreeUI.paintRow() instead of using reflection to change private field in DefaultTreeCellRenderer
- use DefaultTreeCellRenderer.getBackgroundSelectionColor() as selection color (if possible)
- added boolean client property JTree.paintSelection to disable selection painting in FlatTreeUI.paintRow()
- FlatComponents2Test:
  - added checkboxes for wideSelection and paintSelection client properties
  - added possibility to test various kinds of tree cell renderers
  - added JXTree, JIDE CheckBoxTree

(PR #245)
2021-01-21 17:38:20 +01:00
Karl Tauber
63193feebe JIDE: JidePopupMenu:
- added test to FlatJideOssTest
- updated README.md and CHANGELOG.md

(PR #246)
2021-01-21 00:14:42 +01:00
Karl Tauber
51f22bfe75 Merge pull request #246 from ingokegel/jide_popup_menu_ui
Added UI for JidePopupMenu
2021-01-21 00:05:32 +01:00
Ingo Kegel
7d0f7e1c8e Added UI for JidePopupMenu 2021-01-20 16:18:48 +01:00
Karl Tauber
dd8ab242fb CheckBox and RadioButton: fill component background as soon as background color is different to default background color, even if component is not opaque (which is the default). This paints selection if using the component as cell renderer a Table, Tree or List (better fix for #77) 2021-01-19 19:13:20 +01:00
Ingo Kegel
60f3428da7 Added a per-tree wide selection setting 2021-01-19 17:46:41 +01:00
208 changed files with 21038 additions and 7263 deletions

4
.gitattributes vendored
View File

@@ -15,8 +15,12 @@
# BINARY FILES:
# Disable line ending normalize on checkin.
*.dll binary
*.dylib binary
*.gif binary
*.jar binary
*.lib binary
*.png binary
*.sketch binary
*.so binary
*.zip binary

View File

@@ -33,6 +33,8 @@ jobs:
steps:
- uses: actions/checkout@v2
- uses: gradle/wrapper-validation-action@v1
- name: Setup Java ${{ matrix.java }}
uses: actions/setup-java@v1
with:
@@ -60,12 +62,7 @@ jobs:
with:
name: FlatLaf-build-artifacts
path: |
flatlaf-core/build/libs
flatlaf-demo/build/libs
flatlaf-extras/build/libs
flatlaf-intellij-themes/build/libs
flatlaf-jide-oss/build/libs
flatlaf-swingx/build/libs
flatlaf-*/build/libs
!**/*-javadoc.jar
!**/*-sources.jar
@@ -75,7 +72,7 @@ jobs:
needs: build
if: |
github.event_name == 'push' &&
github.ref == 'refs/heads/master' &&
github.ref == 'refs/heads/main' &&
github.repository == 'JFormDesigner/FlatLaf'
steps:
@@ -99,11 +96,11 @@ jobs:
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts') }}
restore-keys: ${{ runner.os }}-gradle
- name: Publish snapshot to oss.jfrog.org
run: ./gradlew artifactoryPublish
- name: Publish snapshot to oss.sonatype.org
run: ./gradlew publish -Dorg.gradle.internal.publish.checksums.insecure=true
env:
BINTRAY_USER: ${{ secrets.BINTRAY_USER }}
BINTRAY_KEY: ${{ secrets.BINTRAY_KEY }}
OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
release:
@@ -135,8 +132,21 @@ jobs:
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle.kts') }}
restore-keys: ${{ runner.os }}-gradle
- name: Release a new stable version to bintray
run: ./gradlew bintrayUpload -Drelease=true
- name: Release a new stable version to Maven Central
run: ./gradlew publish :flatlaf-demo:build -Drelease=true
env:
BINTRAY_USER: ${{ secrets.BINTRAY_USER }}
BINTRAY_KEY: ${{ secrets.BINTRAY_KEY }}
OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
SIGNING_KEY: ${{ secrets.SIGNING_KEY }}
SIGNING_PASSWORD: ${{ secrets.SIGNING_PASSWORD }}
- name: Upload demo
uses: sebastianpopp/ftp-action@releases/v2
with:
host: ${{ secrets.FTP_SERVER }}
user: ${{ secrets.FTP_USERNAME }}
password: ${{ secrets.FTP_PASSWORD }}
forceSsl: true
localDir: "flatlaf-demo/build/libs"
remoteDir: "."
options: "--only-newer --no-recursion --verbose=1"

58
.github/workflows/natives.yml vendored Normal file
View File

@@ -0,0 +1,58 @@
# https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-gradle
name: Native Libraries
on:
push:
branches:
- '*'
tags:
- '[0-9]*'
paths:
- 'flatlaf-natives/flatlaf-natives-windows/**'
- '.github/workflows/natives.yml'
pull_request:
branches:
- '*'
paths:
- 'flatlaf-natives/flatlaf-natives-windows/**'
- '.github/workflows/natives.yml'
jobs:
Windows:
runs-on: windows-latest
steps:
- uses: actions/checkout@v2
- uses: gradle/wrapper-validation-action@v1
- name: Setup Java 1.8
uses: actions/setup-java@v1
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
- name: Build with Gradle
run: ./gradlew :flatlaf-natives-windows:build
- name: Upload artifacts
uses: actions/upload-artifact@v2
with:
name: FlatLaf-natives-windows-build-artifacts
path: |
flatlaf-natives/flatlaf-natives-windows/build

2
.gitignore vendored
View File

@@ -9,3 +9,5 @@ out/
*.iml
*.ipr
*.iws
.vs/
.vscode/

View File

@@ -1,6 +1,176 @@
FlatLaf Change Log
==================
## 1.1.2
#### New features and improvements
- Native window decorations: Added API to check whether current platform
supports window decorations (`FlatLaf.supportsNativeWindowDecorations()`) and
to toggle window decorations of all windows
(`FlatLaf.setUseNativeWindowDecorations(boolean)`).
- Native window decorations: Support changing title bar background and
foreground colors per window. (set client properties
`JRootPane.titleBarBackground` and `JRootPane.titleBarForeground` on root pane
to a `java.awt.Color`).
#### Fixed bugs
- Native window decorations: Fixed loading of native library when using Java
Platform Module System (JPMS) for application. (issue #289)
- Native window decorations: Removed superfluous pixel-line at top of screen
when window is maximized. (issue #296)
- Window decorations: Fixed random window title bar background in cases were
background is not filled by custom window or root pane components and unified
background is enabled.
- IntelliJ Themes: Fixed window title bar background if unified background is
enabled.
- IntelliJ Themes: Fixed system colors.
- Button and ToggleButton: Do not paint background of disabled (and unselected)
toolBar buttons. (issue #292; regression since fixing #112)
- ComboBox and Spinner: Fixed too wide arrow button if component is higher than
preferred. (issue #302)
- SplitPane: `JSplitPane.setContinuousLayout(false)` did not work. (issue #301)
- TabbedPane: Fixed NPE when creating/modifying in another thread. (issue #299)
- Fixed crash when running in Webswing. (issue #290)
## 1.1.1
#### New features and improvements
- Native window decorations: Support disabling native window decorations per
window. (set client property `JRootPane.useWindowDecorations` on root pane to
`false`).
- Support running on WinPE. (issue #279)
#### Fixed bugs
- Native window decorations: Fixed missing animations when minimizing,
maximizing or restoring a window using window title bar buttons. (issue #282)
- Native window decorations: Fixed broken maximizing window when restoring frame
state at startup. (issue #283)
- Native window decorations: Fixed double window title bar when first disposing
a window with `frame.dispose()` and then showing it again with
`frame.setVisible(true)`. (issue #277)
- Custom window decorations: Fixed NPE in `FlatTitlePane.findHorizontalGlue()`.
(issue #275)
- Custom window decorations: Fixed right aligned progress bar in embedded menu
bar was overlapping window title. (issue #272)
- Fixed missing focus indicators in heavy-weight popups. (issue #273)
- InternalFrame: Fixed translucent internal frame menu bar background if
`TitlePane.unifiedBackground` is `true`. (issue #274)
- Extras: UI Inspector: Fixed `InaccessibleObjectException` when running in Java 16.
## 1.1
#### New features and improvements
- Windows 10 only:
- Native window decorations for Windows 10 enables dark frame/dialog title bar
and embedded menu bar with all JREs, while still having native Windows 10
border drop shadows, resize behavior, window snapping and system window
menu. (PR #267)
- Custom window decorations: Support right aligned components in `JFrame`
title bar with embedded menu bar (using `Box.createHorizontalGlue()`). (PR
#268)
- Custom window decorations: Improved centering of window title with embedded
menu bar. (PR #268; issue #252)
- Custom window decorations: Support unified backgrounds for window title bar,
menu bar and main content. If enabled with `UIManager.put(
"TitlePane.unifiedBackground", true );` then window title bar and menu bar
use same background color as main content. (PR #268; issue #254)
- JIDE Common Layer: Support `JideButton`, `JideLabel`, `JideSplitButton`,
`JideToggleButton` and `JideToggleSplitButton`.
- JIDE Common Layer: The library on Maven Central no longer depends on
`com.jidesoft:jide-oss:3.6.18` to avoid problems when another JIDE library
should be used. (issue #270)
- SwingX: The library on Maven Central no longer depends on
`org.swinglabs.swingx:swingx-all:1.6.5-1` to avoid problems when another
SwingX library should be used.
- Support running in [JetBrains Projector](https://jetbrains.com/projector/).
#### Fixed bugs
- IntelliJ Themes: Fixed text color of CheckBoxMenuItem and RadioButtonMenuItem
in all "Arc" themes. (issue #259)
## 1.0
#### New features and improvements
- Extras: UI Inspector: Tooltip is no longer limited to window bounds.
#### Fixed bugs
- TabbedPane: Custom `TabbedPane.selectedForeground` color did not work when
`TabbedPane.foreground` has also custom color. (issue #257)
- FileChooser: Fixed display of date in details view if current user is selected
in "Look in" combobox. (Windows 10 only; issue #249)
- Table: Fixed wrong grid line thickness in dragged column on HiDPI screens on
Java 9+. (issue #236)
- PopupFactory: Fixed `NullPointerException` when `PopupFactory.getPopup()` is
invoked with parameter `owner` set to `null`.
## 1.0-rc3
#### New features and improvements
- Extras:
- UI Inspector: Use HTML in tooltip. Display color value in same format as
used in FlatLaf properties files. Added color preview.
#### Fixed bugs
- Label and ToolTip: Fixed font sizes for `<code>`, `<kbd>`, `<big>`, `<small>`
and `<samp>` tags in HTML text.
- Fixed color of `<address>` tag in HTML text.
- IntelliJ Themes: Fixed table header background when dragging column in "Dark
Flat" and "Light Flat" themes.
- CheckBox: Fixed background of check boxes in JIDE `CheckBoxTree`. (regression
in 1.0-rc2)
## 1.0-rc2
#### New features and improvements
- Button:
- In "Flat Light" theme, use a slightly thinner border for focused buttons
(because they already have light blue background).
- In "Flat Dark" theme, use slightly wider border for focused buttons.
- CheckBox and RadioButton: In "Flat Dark" theme, use blueish background for
focused components.
- Tree: Support disabling wide selection per component. (set client property
`JTree.wideSelection` to `false`). (PR #245)
- Tree: Support disabling selection painting per component. Then the tree cell
renderer is responsible for selection painting. (set client property
`JTree.paintSelection` to `false`).
- JIDE Common Layer: Support `JidePopupMenu`.
#### Fixed bugs
- Button: Fixed behavior of <kbd>Enter</kbd> key on focused button on Windows
and Linux, which now clicks the focused button (instead of the default
button).
- On Windows, this is a regression in 1.0-rc1.
- On macOS, the <kbd>Enter</kbd> key always clicks the default button, which
is the platform behavior.
- On all platforms, the default button can be always clicked with
<kbd>Ctrl+Enter</kbd> keys, even if another button is focused.
- CheckBox and RadioButton: Fill component background as soon as background
color is different to default background color, even if component is not
opaque (which is the default). This paints selection if using the component as
cell renderer a Table, Tree or List.
- TextComponents: Border of focused non-editable text components had wrong
color.
- Custom window decorations: Fixed top window border in dark themes when running
in JetBrains Runtime.
## 1.0-rc1
#### New features and improvements

110
README.md
View File

@@ -37,7 +37,7 @@ Requires Java 8 or newer.
Download
--------
FlatLaf binaries are available on **JCenter** and **Maven Central**.
FlatLaf binaries are available on **Maven Central**.
If you use Maven or Gradle, add a dependency with following coordinates to your
build script:
@@ -48,16 +48,16 @@ build script:
Otherwise download `flatlaf-<version>.jar` here:
[![Download](https://api.bintray.com/packages/jformdesigner/flatlaf/flatlaf/images/download.svg)](https://bintray.com/jformdesigner/flatlaf/flatlaf/_latestVersion)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.formdev/flatlaf/badge.svg?style=flat-square&color=007ec6)](https://maven-badges.herokuapp.com/maven-central/com.formdev/flatlaf)
### Snapshots
FlatLaf snapshot binaries are available in
[JFrog Artifactory](https://oss.jfrog.org/artifactory/oss-snapshot-local/com/formdev/).
To access the latest snapshot, change the FlatLaf version(s) in the dependencies
FlatLaf snapshot binaries are available on
[Sonatype OSSRH](https://oss.sonatype.org/content/repositories/snapshots/com/formdev/flatlaf/).
To access the latest snapshot, change the FlatLaf version in your dependencies
to `<version>-SNAPSHOT` (e.g. `0.27-SNAPSHOT`) and add the repository
`https://oss.jfrog.org/artifactory/oss-snapshot-local` to your build (see
`https://oss.sonatype.org/content/repositories/snapshots/` to your build (see
[Maven](https://maven.apache.org/guides/mini/guide-multiple-repositories.html)
and
[Gradle](https://docs.gradle.org/current/userguide/declaring_repositories.html#sec:declaring_custom_repository)
@@ -73,36 +73,74 @@ Addons
- [JIDE Common Layer](flatlaf-jide-oss)
Getting started
---------------
To enable FlatLaf, add following code to your main method before you create any
Swing component:
~~~java
FlatLightLaf.install();
// create UI here...
~~~
Documentation
-------------
For more information and documentation visit
[FlatLaf Home](https://www.formdev.com/flatlaf/)
[FlatLaf Home](https://www.formdev.com/flatlaf/):
- [Themes](https://www.formdev.com/flatlaf/themes/)
- [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/)
- [Client Properties](https://www.formdev.com/flatlaf/client-properties/)
- [System Properties](https://www.formdev.com/flatlaf/system-properties/)
Buzz
----
- [What others say about FlatLaf on Twitter](https://twitter.com/search?f=live&q=flatlaf)
- [FlatLaf 1.0 announcement on Reddit](https://www.reddit.com/r/java/comments/lsbcwe/flatlaf_10_swing_look_and_feel/)
- [FlatLaf announcement on Reddit](https://www.reddit.com/r/java/comments/dl0hu3/flatlaf_flat_look_and_feel/)
Projects using FlatLaf
----------------------
Applications using FlatLaf
--------------------------
- [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
- [KeyStore Explorer](https://keystore-explorer.org/) 5.4.3
- ![New](images/new.svg) [OWASP ZAP](https://www.zaproxy.org/) 2.10 - the worlds
most widely used web app scanner
- ![New](images/new.svg) [JOSM](https://josm.openstreetmap.de/) - an extensible
editor for [OpenStreetMap](https://www.openstreetmap.org/) (requires FlatLaf
JOSM plugin)
- [jAlbum](https://jalbum.net/) 21 (commercial) - creates photo album websites
- [XMLmind XML Editor](https://www.xmlmind.com/xmleditor/) 9.3 (commercial)
- [Total Validator](https://www.totalvalidator.com/) 15 (commercial) - checks
your website
- ![New](images/new.svg)
[install4j](https://www.ej-technologies.com/products/install4j/overview.html)
9.0 (**commercial**) - the powerful multi-platform Java installer builder
- ![New](images/new.svg) [DbVisualizer](https://www.dbvis.com/) 12.0
(**commercial**) - the universal database tool for developers, analysts and
DBAs
- ![New](images/new.svg) [MagicPlot](https://magicplot.com/) 3.0
(**commercial**) - Software for nonlinear fitting, plotting and data analysis
- ![New](images/new.svg)
[Thermo-Calc](https://thermocalc.com/products/thermo-calc/) 2021a
(**commercial**) - Thermodynamics and Properties Software
- [OWASP ZAP](https://www.zaproxy.org/) 2.10 - the worlds most widely used web
app scanner
- ![New](images/new.svg)
[Burp Suite Professional and Community Edition](https://portswigger.net/burp/pro)
2020.11.2 (**commercial**) - the leading software for web security testing
- ![New](images/new.svg)
[BurpCustomizer](https://github.com/CoreyD97/BurpCustomizer) - adds more
FlatLaf themes to Burp Suite
- [JOSM](https://josm.openstreetmap.de/) - an extensible editor for
[OpenStreetMap](https://www.openstreetmap.org/) (requires FlatLaf JOSM plugin)
- [jAlbum](https://jalbum.net/) 21 (**commercial**) - creates photo album
websites
- [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
@@ -116,32 +154,33 @@ Projects using FlatLaf
gamepad mapping software
- [SpringRemote](https://github.com/HaleyWang/SpringRemote) - remote Linux SSH
connections manager
- ![New](images/new.svg) [jEnTunnel](https://github.com/ggrandes/jentunnel) -
manage SSH Tunnels made easy
- [jEnTunnel](https://github.com/ggrandes/jentunnel) - manage SSH Tunnels made
easy
- [mendelson AS2](https://sourceforge.net/projects/mec-as2/),
[AS4](https://sourceforge.net/projects/mendelson-as4/) and
[OFTP2](https://sourceforge.net/projects/mendelson-oftp2/) (open-source) and
[mendelson AS2](https://mendelson-e-c.com/as2/),
[AS4](https://mendelson-e-c.com/as4/) and
[OFTP2](https://mendelson-e-c.com/oftp2) (commercial)
[OFTP2](https://mendelson-e-c.com/oftp2) (**commercial**)
- ![New](images/new.svg) [IGMAS+](https://www.gfz-potsdam.de/igmas) -
Interactive Gravity and Magnetic Application System
- [MeteoInfo](https://github.com/meteoinfo/MeteoInfo) 2.2 - GIS and scientific
computation environment for meteorological community
- [lsfusion platform](https://github.com/lsfusion/platform) 4 - information
systems development platform
- ![New](images/new.svg) [JPass](https://github.com/gaborbata/jpass) - password
manager with strong encryption
- [JPass](https://github.com/gaborbata/jpass) - password manager with strong
encryption
- [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)
- [Pseudo Assembler IDE](https://github.com/tomasz-herman/PseudoAssemblerIDE) -
IDE for Pseudo-Assembler
- ![New](images/new.svg) [Linotte](https://github.com/cpc6128/LangageLinotte)
3.1 - French programming language created to learn programming
- ![New](images/new.svg) [MEKA](https://github.com/Waikato/meka) 1.9.3 -
multi-label classifiers and evaluation procedures using the Weka machine
learning framework
- ![New](images/new.svg) [Shutter Encoder](https://www.shutterencoder.com/) 14.2
- [Linotte](https://github.com/cpc6128/LangageLinotte) 3.1 - French programming
language created to learn programming
- [MEKA](https://github.com/Waikato/meka) 1.9.3 - multi-label classifiers and
evaluation procedures using the Weka machine learning framework
- [Shutter Encoder](https://www.shutterencoder.com/) 14.2
([source code](https://github.com/paulpacifico/shutter-encoder)) -
professional video converter and compression tool (screenshots show **old**
look)
@@ -149,15 +188,12 @@ Projects using FlatLaf
sound files in time or frequency domain
- [RemoteLight](https://github.com/Drumber/RemoteLight) - multifunctional LED
control software
- ![New](images/new.svg)
[ThunderFocus](https://github.com/marcocipriani01/ThunderFocus) -
- [ThunderFocus](https://github.com/marcocipriani01/ThunderFocus) -
Arduino-based telescope focuser
- ![New](images/new.svg)
[Novel-Grabber](https://github.com/Flameish/Novel-Grabber) - download novels
- [Novel-Grabber](https://github.com/Flameish/Novel-Grabber) - download novels
from any webnovel and lightnovel site
- ![New](images/new.svg) [lectureStudio](https://www.lecturestudio.org/)
4.3.1060 - digitize your lectures with ease
- ![New](images/new.svg)
[Android Tool](https://github.com/fast-geek/Android-Tool) - makes popular adb
- [lectureStudio](https://www.lecturestudio.org/) 4.3.1060 - digitize your
lectures with ease
- [Android Tool](https://github.com/fast-geek/Android-Tool) - makes popular adb
and fastboot commands easier to use
- and more...

View File

@@ -14,8 +14,8 @@
* limitations under the License.
*/
val releaseVersion = "1.0-rc1"
val developmentVersion = "1.0-rc2-SNAPSHOT"
val releaseVersion = "1.1.2"
val developmentVersion = "1.2-SNAPSHOT"
version = if( java.lang.Boolean.getBoolean( "release" ) ) releaseVersion else developmentVersion
@@ -23,7 +23,7 @@ allprojects {
version = rootProject.version
repositories {
jcenter()
mavenCentral()
}
}
@@ -40,17 +40,6 @@ println( "Java ${System.getProperty( "java.version" )}" )
println()
extra["bintray.user"] = System.getenv( "BINTRAY_USER" ) ?: System.getProperty( "bintray.user" )
extra["bintray.key"] = System.getenv( "BINTRAY_KEY" ) ?: System.getProperty( "bintray.key" )
// if true, do not upload to bintray
extra["bintray.dryRun"] = false
// if true, uploaded artifacts are visible to all
// if false, only visible to owner when logged into bintray
extra["bintray.publish"] = false
allprojects {
tasks {
withType<JavaCompile>().configureEach {

View File

@@ -20,15 +20,5 @@ plugins {
// required for kotlin-dsl or embedded-kotlin plugins
repositories {
jcenter()
}
dependencies {
// NOTE: keep plugin versions in sync with settings.gradle.kts
// "com.jfrog.bintray" plugin
implementation( "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4" )
// "com.jfrog.artifactory" plugin
implementation( "org.jfrog.buildinfo:build-info-extractor-gradle:4.13.0" )
mavenCentral()
}

View File

@@ -27,6 +27,10 @@ if( JavaVersion.current() >= JavaVersion.VERSION_1_9 ) {
}
}
dependencies {
add( "java9Compile", sourceSets.main.get().output )
}
tasks {
named<JavaCompile>( "compileJava9Java" ) {
sourceCompatibility = "9"

View File

@@ -33,9 +33,17 @@ if( JavaVersion.current() >= JavaVersion.VERSION_1_9 ) {
sourceSets {
create( "module-info" ) {
java {
// include "src/main/java" here to get compile errors if classes are
// include "src/main/java" and "src/main/java9" here to get compile errors if classes are
// used from other modules that are not specified in module dependencies
setSrcDirs( listOf( "src/main/module-info", "src/main/java" ) )
setSrcDirs( listOf( "src/main/module-info", "src/main/java", "src/main/java9" ) )
// exclude Java 8 source file if an equally named Java 9+ source file exists
exclude {
if( it.isDirectory )
return@exclude false
val java9file = file( "${projectDir}/src/main/java9/${it.path}" )
java9file.exists() && java9file != it.file
}
}
}
}
@@ -48,7 +56,8 @@ if( JavaVersion.current() >= JavaVersion.VERSION_1_9 ) {
dependsOn( extension.paths )
options.compilerArgs.add( "--module-path" )
options.compilerArgs.add( configurations.runtimeClasspath.get().asPath )
options.compilerArgs.add( configurations.runtimeClasspath.get().asPath
+ File.pathSeparator + configurations.compileClasspath.get().asPath )
}
jar {

View File

@@ -26,8 +26,7 @@ val extension = project.extensions.create<PublishExtension>( "flatlafPublish" )
plugins {
`maven-publish`
id( "com.jfrog.bintray" )
id( "com.jfrog.artifactory" )
signing
}
publishing {
@@ -74,49 +73,40 @@ publishing {
}
}
}
}
bintray {
user = rootProject.extra["bintray.user"] as String?
key = rootProject.extra["bintray.key"] as String?
repositories {
maven {
name = "OSSRH"
setPublications( "maven" )
val releasesRepoUrl = "https://oss.sonatype.org/service/local/staging/deploy/maven2/"
val snapshotsRepoUrl = "https://oss.sonatype.org/content/repositories/snapshots/"
url = uri( if( java.lang.Boolean.getBoolean( "release" ) ) releasesRepoUrl else snapshotsRepoUrl )
with( pkg ) {
repo = "flatlaf"
afterEvaluate {
this@with.name = extension.artifactId
credentials {
// get from gradle.properties
val ossrhUsername: String? by project
val ossrhPassword: String? by project
username = System.getenv( "OSSRH_USERNAME" ) ?: ossrhUsername
password = System.getenv( "OSSRH_PASSWORD" ) ?: ossrhPassword
}
}
setLicenses( "Apache-2.0" )
vcsUrl = "https://github.com/JFormDesigner/FlatLaf"
with( version ) {
name = project.version.toString()
}
publish = rootProject.extra["bintray.publish"] as Boolean
dryRun = rootProject.extra["bintray.dryRun"] as Boolean
}
}
artifactory {
setContextUrl( "https://oss.jfrog.org" )
signing {
// get from gradle.properties
val signingKey: String? by project
val signingPassword: String? by project
publish( closureOf<org.jfrog.gradle.plugin.artifactory.dsl.PublisherConfig> {
repository( delegateClosureOf<groovy.lang.GroovyObject> {
setProperty( "repoKey", "oss-snapshot-local" )
setProperty( "username", rootProject.extra["bintray.user"] as String? )
setProperty( "password", rootProject.extra["bintray.key"] as String? )
} )
val key = System.getenv( "SIGNING_KEY" ) ?: signingKey
val password = System.getenv( "SIGNING_PASSWORD" ) ?: signingPassword
defaults( delegateClosureOf<groovy.lang.GroovyObject> {
invokeMethod( "publications", "maven" )
setProperty( "publishArtifacts", true )
setProperty( "publishPom", true )
} )
} )
resolve( delegateClosureOf<org.jfrog.gradle.plugin.artifactory.dsl.ResolverConfig> {
setProperty( "repoKey", "jcenter" )
} )
useInMemoryPgpKeys( key, password )
sign( publishing.publications["maven"] )
}
// disable signing of snapshots
tasks.withType<Sign>().configureEach {
onlyIf { java.lang.Boolean.getBoolean( "release" ) }
}

View File

@@ -27,6 +27,16 @@ java {
}
tasks {
compileJava {
// generate JNI headers
options.headerOutputDirectory.set( buildDir.resolve( "generated/jni-headers" ) )
}
processResources {
// build native libraries
dependsOn( ":flatlaf-natives-windows:assemble" )
}
jar {
archiveBaseName.set( "flatlaf" )

View File

@@ -22,6 +22,8 @@ import javax.swing.JComponent;
import javax.swing.SwingConstants;
/**
* Defines/documents own client properties used in FlatLaf.
*
* @author Karl Tauber
*/
public interface FlatClientProperties
@@ -170,6 +172,25 @@ public interface FlatClientProperties
*/
String OUTLINE_WARNING = "warning";
/**
* Specifies a callback that is invoked to check whether a component is permanent focus owner.
* Used to paint focus indicators.
* <p>
* May be useful in special cases for custom components.
* <p>
* Use a {@link java.util.function.Predicate} that receives the component as parameter:
* <pre>{@code
* myComponent.putClientProperty( "JComponent.focusOwner",
* (Predicate<JComponent>) c -> {
* return ...; // check here
* } );
* }</pre>
* <p>
* <strong>Component</strong> {@link javax.swing.JComponent}<br>
* <strong>Value type</strong> {@link java.util.function.Predicate}&lt;javax.swing.JComponent&gt;
*/
String COMPONENT_FOCUS_OWNER = "JComponent.focusOwner";
//---- Popup --------------------------------------------------------------
/**
@@ -211,14 +232,63 @@ public interface FlatClientProperties
//---- JRootPane ----------------------------------------------------------
/**
* Specifies whether the menu bar is embedded into the title pane if custom
* window decorations are enabled. Default is {@code true}.
* Specifies whether FlatLaf native window decorations should be used
* for {@code JFrame} or {@code JDialog}.
* <p>
* Setting this enables/disables using FlatLaf native window decorations
* for the window that contains the root pane.
* <p>
* This client property has lower priority than system property
* {@link FlatSystemProperties#USE_WINDOW_DECORATIONS}, but higher priority
* than UI default {@code TitlePane.useWindowDecorations}.
* <p>
* (requires Window 10)
* <p>
* <strong>Component</strong> {@link javax.swing.JRootPane}<br>
* <strong>Value type</strong> {@link java.lang.Boolean}
*
* @since 1.1.1
*/
String USE_WINDOW_DECORATIONS = "JRootPane.useWindowDecorations";
/**
* Specifies whether the menu bar is embedded into the window title pane
* if window decorations are enabled.
* <p>
* Setting this enables/disables embedding
* for the window that contains the root pane.
* <p>
* This client property has lower priority than system property
* {@link FlatSystemProperties#MENUBAR_EMBEDDED}, but higher priority
* than UI default {@code TitlePane.menuBarEmbedded}.
* <p>
* (requires Window 10)
* <p>
* <strong>Component</strong> {@link javax.swing.JRootPane}<br>
* <strong>Value type</strong> {@link java.lang.Boolean}
*/
String MENU_BAR_EMBEDDED = "JRootPane.menuBarEmbedded";
/**
* Background color of window title bar (requires enabled window decorations).
* <p>
* <strong>Component</strong> {@link javax.swing.JRootPane}<br>
* <strong>Value type</strong> {@link java.awt.Color}
*
* @since 1.1.2
*/
String TITLE_BAR_BACKGROUND = "JRootPane.titleBarBackground";
/**
* Foreground color of window title bar (requires enabled window decorations).
* <p>
* <strong>Component</strong> {@link javax.swing.JRootPane}<br>
* <strong>Value type</strong> {@link java.awt.Color}
*
* @since 1.1.2
*/
String TITLE_BAR_FOREGROUND = "JRootPane.titleBarForeground";
//---- JScrollBar / JScrollPane -------------------------------------------
/**
@@ -232,7 +302,7 @@ public interface FlatClientProperties
/**
* Specifies whether the scroll pane uses smooth scrolling.
* <p>
* <strong>Component</strong> {{@link javax.swing.JScrollPane}<br>
* <strong>Component</strong> {@link javax.swing.JScrollPane}<br>
* <strong>Value type</strong> {@link java.lang.Boolean}
*/
String SCROLL_PANE_SMOOTH_SCROLLING = "JScrollPane.smoothScrolling";
@@ -293,10 +363,12 @@ public interface FlatClientProperties
String TABBED_PANE_MAXIMUM_TAB_WIDTH = "JTabbedPane.maximumTabWidth";
/**
* Specifies the height of a tab.
* Specifies the minimum height of a tab.
* <p>
* <strong>Component</strong> {@link javax.swing.JTabbedPane}<br>
* <strong>Value type</strong> {@link java.lang.Integer}
*
* @see #TABBED_PANE_TAB_INSETS
*/
String TABBED_PANE_TAB_HEIGHT = "JTabbedPane.tabHeight";
@@ -306,6 +378,8 @@ public interface FlatClientProperties
* <strong>Component</strong> {@link javax.swing.JTabbedPane}
* or tab content components (see {@link javax.swing.JTabbedPane#setComponentAt(int, java.awt.Component)})<br>
* <strong>Value type</strong> {@link java.awt.Insets}
*
* @see #TABBED_PANE_TAB_HEIGHT
*/
String TABBED_PANE_TAB_INSETS = "JTabbedPane.tabInsets";
@@ -670,6 +744,25 @@ public interface FlatClientProperties
*/
String TAB_BUTTON_SELECTED_BACKGROUND = "JToggleButton.tab.selectedBackground";
//---- JTree --------------------------------------------------------------
/**
* Override if a tree shows a wide selection. Default is {@code true}.
* <p>
* <strong>Component</strong> {@link javax.swing.JTree}<br>
* <strong>Value type</strong> {@link java.lang.Boolean}
*/
String TREE_WIDE_SELECTION = "JTree.wideSelection";
/**
* Specifies whether tree item selection is painted. Default is {@code true}.
* If set to {@code false}, then the tree cell renderer is responsible for painting selection.
* <p>
* <strong>Component</strong> {@link javax.swing.JTree}<br>
* <strong>Value type</strong> {@link java.lang.Boolean}
*/
String TREE_PAINT_SELECTION = "JTree.paintSelection";
//---- helper methods -----------------------------------------------------
/**

View File

@@ -42,10 +42,12 @@ class FlatInputMaps
}
private static void initBasicInputMaps( UIDefaults defaults ) {
defaults.put( "Button.focusInputMap", new UIDefaults.LazyInputMap( new Object[] {
"SPACE", "pressed",
"released SPACE", "released"
} ) );
if( SystemInfo.isMacOS ) {
defaults.put( "Button.focusInputMap", new UIDefaults.LazyInputMap( new Object[] {
"SPACE", "pressed",
"released SPACE", "released"
} ) );
}
modifyInputMap( defaults, "ComboBox.ancestorInputMap",
"SPACE", "spacePopup",

View File

@@ -38,8 +38,6 @@ import java.util.Properties;
import java.util.ServiceLoader;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.BorderFactory;
import javax.swing.Icon;
import javax.swing.ImageIcon;
@@ -48,6 +46,7 @@ import javax.swing.JDialog;
import javax.swing.JFrame;
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;
@@ -59,9 +58,11 @@ import javax.swing.plaf.UIResource;
import javax.swing.plaf.basic.BasicLookAndFeel;
import javax.swing.text.StyleContext;
import javax.swing.text.html.HTMLEditorKit;
import com.formdev.flatlaf.ui.FlatNativeWindowBorder;
import com.formdev.flatlaf.ui.FlatPopupFactory;
import com.formdev.flatlaf.ui.JBRCustomDecorations;
import com.formdev.flatlaf.ui.FlatRootPaneUI;
import com.formdev.flatlaf.util.GrayFilter;
import com.formdev.flatlaf.util.LoggingFacade;
import com.formdev.flatlaf.util.MultiResolutionImageSupport;
import com.formdev.flatlaf.util.SystemInfo;
import com.formdev.flatlaf.util.UIScale;
@@ -74,7 +75,6 @@ import com.formdev.flatlaf.util.UIScale;
public abstract class FlatLaf
extends BasicLookAndFeel
{
static final Logger LOG = Logger.getLogger( FlatLaf.class.getName() );
private static final String DESKTOPFONTHINTS = "awt.font.desktophints";
private static List<Object> customDefaultsSources;
@@ -91,9 +91,6 @@ public abstract class FlatLaf
private Consumer<UIDefaults> postInitialization;
private Boolean oldFrameWindowDecorated;
private Boolean oldDialogWindowDecorated;
/**
* Sets the application look and feel to the given LaF
* using {@link UIManager#setLookAndFeel(javax.swing.LookAndFeel)}.
@@ -103,7 +100,7 @@ public abstract class FlatLaf
UIManager.setLookAndFeel( newLookAndFeel );
return true;
} catch( Exception ex ) {
LOG.log( Level.SEVERE, "FlatLaf: Failed to initialize look and feel '" + newLookAndFeel.getClass().getName() + "'.", ex );
LoggingFacade.INSTANCE.logSevere( "FlatLaf: Failed to initialize look and feel '" + newLookAndFeel.getClass().getName() + "'.", ex );
return false;
}
}
@@ -145,28 +142,28 @@ public abstract class FlatLaf
* Returns whether FlatLaf supports custom window decorations.
* This depends on the operating system and on the used Java runtime.
* <p>
* To use custom window decorations in your application, enable them with
* following code (before creating any frames or dialogs). Then custom window
* decorations are only enabled if this method returns {@code true}.
* <pre>
* JFrame.setDefaultLookAndFeelDecorated( true );
* JDialog.setDefaultLookAndFeelDecorated( true );
* </pre>
* This method returns {@code true} on Windows 10 (see exception below), {@code false} otherwise.
* <p>
* Returns {@code true} on Windows 10, {@code false} otherwise.
* <p>
* Return also {@code false} if running on Windows 10 in
* Returns also {@code false} on Windows 10 if:
* <ul>
* <li>FlatLaf native window border support is available (requires Windows 10)</li>
* <li>running in
* <a href="https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime">JetBrains Runtime 11 (or later)</a>
* (<a href="https://github.com/JetBrains/JetBrainsRuntime">source code on github</a>)
* and JBR supports custom window decorations. In this case, JBR custom decorations
* are enabled if {@link JFrame#isDefaultLookAndFeelDecorated()} or
* {@link JDialog#isDefaultLookAndFeelDecorated()} return {@code true}.
* and JBR supports custom window decorations
* </li>
* </ul>
* In this cases, custom decorations are enabled by the root pane.
* Usage of {@link JFrame#setDefaultLookAndFeelDecorated(boolean)} or
* {@link JDialog#setDefaultLookAndFeelDecorated(boolean)} is not necessary.
*/
@Override
public boolean getSupportsWindowDecorations() {
if( SystemInfo.isJetBrainsJVM_11_orLater &&
SystemInfo.isWindows_10_orLater &&
JBRCustomDecorations.isSupported() )
if( SystemInfo.isProjector || SystemInfo.isWebswing || SystemInfo.isWinPE )
return false;
if( SystemInfo.isWindows_10_orLater &&
FlatNativeWindowBorder.isSupported() )
return false;
return SystemInfo.isWindows_10_orLater;
@@ -262,19 +259,9 @@ public abstract class FlatLaf
Color linkColor = defaults.getColor( "Component.linkColor" );
if( linkColor != null ) {
new HTMLEditorKit().getStyleSheet().addRule(
String.format( "a { color: #%06x; }", linkColor.getRGB() & 0xffffff ) );
String.format( "a, address { color: #%06x; }", linkColor.getRGB() & 0xffffff ) );
}
};
// enable/disable window decorations, but only if system property is either
// "true" or "false"; in other cases it is not changed
Boolean useWindowDecorations = FlatSystemProperties.getBooleanStrict( FlatSystemProperties.USE_WINDOW_DECORATIONS, null );
if( useWindowDecorations != null ) {
oldFrameWindowDecorated = JFrame.isDefaultLookAndFeelDecorated();
oldDialogWindowDecorated = JDialog.isDefaultLookAndFeelDecorated();
JFrame.setDefaultLookAndFeelDecorated( useWindowDecorations );
JDialog.setDefaultLookAndFeelDecorated( useWindowDecorations );
}
}
@Override
@@ -304,17 +291,9 @@ public abstract class FlatLaf
}
// restore default link color
new HTMLEditorKit().getStyleSheet().addRule( "a { color: blue; }" );
new HTMLEditorKit().getStyleSheet().addRule( "a, address { color: blue; }" );
postInitialization = null;
// restore enable/disable window decorations
if( oldFrameWindowDecorated != null ) {
JFrame.setDefaultLookAndFeelDecorated( oldFrameWindowDecorated );
JDialog.setDefaultLookAndFeelDecorated( oldDialogWindowDecorated );
oldFrameWindowDecorated = null;
oldDialogWindowDecorated = null;
}
super.uninitialize();
}
@@ -341,7 +320,7 @@ public abstract class FlatLaf
} else
aquaLaf = (BasicLookAndFeel) Class.forName( aquaLafClassName ).newInstance();
} catch( Exception ex ) {
LOG.log( Level.SEVERE, "FlatLaf: Failed to initialize Aqua look and feel '" + aquaLafClassName + "'.", ex );
LoggingFacade.INSTANCE.logSevere( "FlatLaf: Failed to initialize Aqua look and feel '" + aquaLafClassName + "'.", ex );
throw new IllegalStateException();
}
@@ -400,6 +379,12 @@ public abstract class FlatLaf
initIconColors( defaults, isDark() );
FlatInputMaps.initInputMaps( defaults );
// copy InternalFrame.icon (the Java cup) to TitlePane.icon
// (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 );
// get addons and sort them by priority
ServiceLoader<FlatDefaultsAddon> addonLoader = ServiceLoader.load( FlatDefaultsAddon.class );
List<FlatDefaultsAddon> addons = new ArrayList<>();
@@ -461,8 +446,16 @@ public abstract class FlatLaf
if( SystemInfo.isWindows ) {
Font winFont = (Font) Toolkit.getDefaultToolkit().getDesktopProperty( "win.messagebox.font" );
if( winFont != null )
uiFont = createCompositeFont( winFont.getFamily(), winFont.getStyle(), winFont.getSize() );
if( winFont != null ) {
if( SystemInfo.isWinPE ) {
// on WinPE use "win.defaultGUI.font", which is usually Tahoma,
// because Segoe UI font is not available on WinPE
Font winPEFont = (Font) Toolkit.getDefaultToolkit().getDesktopProperty( "win.defaultGUI.font" );
if( winPEFont != null )
uiFont = createCompositeFont( winPEFont.getFamily(), winPEFont.getStyle(), winFont.getSize() );
} else
uiFont = createCompositeFont( winFont.getFamily(), winFont.getStyle(), winFont.getSize() );
}
} else if( SystemInfo.isMacOS ) {
String fontName;
@@ -499,7 +492,7 @@ public abstract class FlatLaf
// 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 );
Object activeFont = new ActiveFont( 1 );
// override fonts
for( Object key : defaults.keySet() ) {
@@ -522,6 +515,13 @@ public abstract class FlatLaf
return (font instanceof FontUIResource) ? (FontUIResource) font : new FontUIResource( font );
}
/**
* @since 1.1
*/
public static ActiveValue createActiveFontValue( float scaleFactor ) {
return new ActiveFont( scaleFactor );
}
/**
* Adds the default color palette for action icons and object icons to the given UIDefaults.
* <p>
@@ -577,7 +577,7 @@ public abstract class FlatLaf
.invoke( null, true );
defaults.put( key, value );
} catch( Exception ex ) {
Logger.getLogger( FlatLaf.class.getName() ).log( Level.SEVERE, null, ex );
LoggingFacade.INSTANCE.logSevere( null, ex );
throw new RuntimeException( ex );
}
}
@@ -684,7 +684,7 @@ public abstract class FlatLaf
// update UI
updateUI();
} catch( UnsupportedLookAndFeelException ex ) {
LOG.log( Level.SEVERE, "FlatLaf: Failed to reinitialize look and feel '" + lookAndFeel.getClass().getName() + "'.", ex );
LoggingFacade.INSTANCE.logSevere( "FlatLaf: Failed to reinitialize look and feel '" + lookAndFeel.getClass().getName() + "'.", ex );
}
} );
}
@@ -717,6 +717,79 @@ public abstract class FlatLaf
} );
}
/**
* Returns whether native window decorations are supported on current platform.
* <p>
* This requires Windows 10, 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}.
*
* @since 1.1.2
*/
public static boolean supportsNativeWindowDecorations() {
return SystemInfo.isWindows_10_orLater && FlatNativeWindowBorder.isSupported();
}
/**
* Returns whether native window decorations are enabled.
*
* @since 1.1.2
*/
public static boolean isUseNativeWindowDecorations() {
return UIManager.getBoolean( "TitlePane.useWindowDecorations" );
}
/**
* Sets whether native window decorations are enabled.
* <p>
* Existing frames and dialogs will be updated.
*
* @since 1.1.2
*/
public static void setUseNativeWindowDecorations( boolean enabled ) {
UIManager.put( "TitlePane.useWindowDecorations", enabled );
if( !(UIManager.getLookAndFeel() instanceof FlatLaf) )
return;
// update existing frames and dialogs
for( Window w : Window.getWindows() ) {
if( isDisplayableFrameOrDialog( w ) )
FlatRootPaneUI.updateNativeWindowBorder( ((RootPaneContainer)w).getRootPane() );
}
}
/**
* Revalidate and repaint all displayable frames and dialogs.
*
* @since 1.1.2
*/
public static void revalidateAndRepaintAllFramesAndDialogs() {
for( Window w : Window.getWindows() ) {
if( isDisplayableFrameOrDialog( w ) ) {
w.revalidate();
w.repaint();
}
}
}
/**
* Repaint all displayable frames and dialogs.
*
* @since 1.1.2
*/
public static void repaintAllFramesAndDialogs() {
for( Window w : Window.getWindows() ) {
if( isDisplayableFrameOrDialog( w ) )
w.repaint();
}
}
private static boolean isDisplayableFrameOrDialog( Window w ) {
return w.isDisplayable() && (w instanceof JFrame || w instanceof JDialog);
}
public static boolean isShowMnemonics() {
return MnemonicHandler.isShowMnemonics();
}
@@ -760,6 +833,10 @@ public abstract class FlatLaf
public Object createValue( UIDefaults table ) {
Font defaultFont = UIManager.getFont( "defaultFont" );
// fallback (to avoid NPE in case that this is used in another Laf)
if( defaultFont == null )
defaultFont = UIManager.getFont( "Label.font" );
if( lastDefaultFont != defaultFont ) {
lastDefaultFont = defaultFont;

View File

@@ -16,8 +16,7 @@
package com.formdev.flatlaf;
import javax.swing.JDialog;
import javax.swing.JFrame;
import com.formdev.flatlaf.util.UIScale;
/**
* Defines/documents own system properties used in FlatLaf.
@@ -35,6 +34,8 @@ 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.
* <p>
* Since FlatLaf 1.1.2: Scale factors less then 100% are allowed.
* <p>
* <strong>Allowed Values</strong> e.g. {@code 1.5}, {@code 1.5x}, {@code 150%} or {@code 144dpi} (96dpi is 100%)<br>
*/
String UI_SCALE = "flatlaf.uiScale";
@@ -47,6 +48,17 @@ public interface FlatSystemProperties
*/
String UI_SCALE_ENABLED = "flatlaf.uiScale.enabled";
/**
* Specifies whether values smaller than 100% are allowed for the user scale factor
* (see {@link UIScale#getUserScaleFactor()}).
* <p>
* <strong>Allowed Values</strong> {@code false} and {@code true}<br>
* <strong>Default</strong> {@code false}
*
* @since 1.1.2
*/
String UI_SCALE_ALLOW_SCALE_DOWN = "flatlaf.uiScale.allowScaleDown";
/**
* Specifies whether Ubuntu font should be used on Ubuntu Linux.
* By default, if not running in a JetBrains Runtime, the Liberation Sans font
@@ -58,11 +70,18 @@ public interface FlatSystemProperties
String USE_UBUNTU_FONT = "flatlaf.useUbuntuFont";
/**
* Specifies whether custom look and feel window decorations should be used
* Specifies whether native window decorations should be used
* when creating {@code JFrame} or {@code JDialog}.
* <p>
* If this system property is set, FlatLaf invokes {@link JFrame#setDefaultLookAndFeelDecorated(boolean)}
* and {@link JDialog#setDefaultLookAndFeelDecorated(boolean)} on LaF initialization.
* Setting this to {@code true} forces using native window decorations
* even if they are not enabled by the application.<br>
* Setting this to {@code false} disables using native window decorations.
* <p>
* This system property has higher priority than client property
* {@link FlatClientProperties#USE_WINDOW_DECORATIONS} and
* UI default {@code TitlePane.useWindowDecorations}.
* <p>
* (requires Window 10)
* <p>
* <strong>Allowed Values</strong> {@code false} and {@code true}<br>
* <strong>Default</strong> none
@@ -76,19 +95,31 @@ public interface FlatSystemProperties
* <a href="https://confluence.jetbrains.com/display/JBR/JetBrains+Runtime">JetBrains Runtime</a>
* (based on OpenJDK).
* <p>
* Setting this to {@code true} forces using JetBrains Runtime custom window decorations
* even if they are not enabled by the application.
* Setting this to {@code false} disables using JetBrains Runtime custom window decorations.
* Then FlatLaf native window decorations are used.
* <p>
* (requires Window 10)
* <p>
* <strong>Allowed Values</strong> {@code false} and {@code true}<br>
* <strong>Default</strong> {@code true}
* <strong>Default</strong> true
*/
String USE_JETBRAINS_CUSTOM_DECORATIONS = "flatlaf.useJetBrainsCustomDecorations";
/**
* Specifies whether menubar is embedded into custom window decorations.
* Specifies whether the menu bar is embedded into the window title pane
* if window decorations are enabled.
* <p>
* Setting this to {@code true} forces embedding.<br>
* Setting this to {@code false} disables embedding.
* <p>
* This system property has higher priority than client property
* {@link FlatClientProperties#MENU_BAR_EMBEDDED} and
* UI default {@code TitlePane.menuBarEmbedded}.
* <p>
* (requires Window 10)
* <p>
* <strong>Allowed Values</strong> {@code false} and {@code true}<br>
* <strong>Default</strong> {@code true}
* <strong>Default</strong> none
*/
String MENUBAR_EMBEDDED = "flatlaf.menuBarEmbedded";

View File

@@ -30,11 +30,11 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.logging.Level;
import javax.swing.UIDefaults;
import javax.swing.plaf.ColorUIResource;
import com.formdev.flatlaf.json.Json;
import com.formdev.flatlaf.json.ParseException;
import com.formdev.flatlaf.util.LoggingFacade;
import com.formdev.flatlaf.util.StringUtils;
/**
@@ -76,7 +76,7 @@ public class IntelliJTheme
try {
return FlatLaf.install( createLaf( in ) );
} catch( Exception ex ) {
FlatLaf.LOG.log( Level.SEVERE, "FlatLaf: Failed to load IntelliJ theme", ex );
LoggingFacade.INSTANCE.logSevere( "FlatLaf: Failed to load IntelliJ theme", ex );
return false;
}
}
@@ -324,7 +324,7 @@ public class IntelliJTheme
try {
uiValue = UIDefaultsLoader.parseValue( key, valueStr );
} catch( RuntimeException ex ) {
UIDefaultsLoader.logParseError( Level.CONFIG, key, valueStr, ex );
UIDefaultsLoader.logParseError( key, valueStr, ex, false );
return; // ignore invalid value
}
}

View File

@@ -28,7 +28,8 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
import java.util.logging.Level;
import com.formdev.flatlaf.util.LoggingFacade;
import com.formdev.flatlaf.util.StringUtils;
import com.formdev.flatlaf.util.SystemInfo;
import com.formdev.flatlaf.util.UIScale;
@@ -172,7 +173,7 @@ class LinuxFontPolicy
if( "1".equals( strs.get( 5 ) ) )
style |= Font.ITALIC;
} catch( RuntimeException ex ) {
FlatLaf.LOG.log( Level.CONFIG, "FlatLaf: Failed to parse 'font=" + generalFont + "'.", ex );
LoggingFacade.INSTANCE.logConfig( "FlatLaf: Failed to parse 'font=" + generalFont + "'.", ex );
}
}
@@ -186,7 +187,7 @@ class LinuxFontPolicy
if( dpi < 50 )
dpi = 50;
} catch( NumberFormatException ex ) {
FlatLaf.LOG.log( Level.CONFIG, "FlatLaf: Failed to parse 'forceFontDPI=" + forceFontDPI + "'.", ex );
LoggingFacade.INSTANCE.logConfig( "FlatLaf: Failed to parse 'forceFontDPI=" + forceFontDPI + "'.", ex );
}
}
@@ -225,7 +226,7 @@ class LinuxFontPolicy
while( (line = reader.readLine()) != null )
lines.add( line );
} catch( IOException ex ) {
FlatLaf.LOG.log( Level.CONFIG, "FlatLaf: Failed to read '" + filename + "'.", ex );
LoggingFacade.INSTANCE.logConfig( "FlatLaf: Failed to read '" + filename + "'.", ex );
}
return lines;
}

View File

@@ -28,6 +28,7 @@ import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.lang.ref.WeakReference;
import javax.swing.AbstractButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
@@ -137,10 +138,17 @@ class MnemonicHandler
// get menu bar and first menu
Component c = e.getComponent();
JRootPane rootPane = SwingUtilities.getRootPane( c );
Window window = (rootPane != null) ? SwingUtilities.getWindowAncestor( rootPane ) : null;
JMenuBar menuBar = (rootPane != null) ? rootPane.getJMenuBar() : null;
if( menuBar == null && window instanceof JFrame )
menuBar = ((JFrame)window).getJMenuBar();
if( menuBar == null ) {
// get menu bar from frame/dialog because there
// may be multiple nested root panes in a frame/dialog
// (e.g. each internal frame has its own root pane)
Window window = SwingUtilities.getWindowAncestor( c );
if( window instanceof JFrame )
menuBar = ((JFrame)window).getJMenuBar();
else if( window instanceof JDialog )
menuBar = ((JDialog)window).getJMenuBar();
}
JMenu firstMenu = (menuBar != null) ? menuBar.getMenu( 0 ) : null;
// select first menu and show mnemonics

View File

@@ -33,7 +33,6 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.function.Function;
import java.util.logging.Level;
import javax.swing.UIDefaults;
import javax.swing.UIManager;
import javax.swing.UIDefaults.ActiveValue;
@@ -48,6 +47,7 @@ import com.formdev.flatlaf.util.ColorFunctions.ColorFunction;
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.StringUtils;
import com.formdev.flatlaf.util.SystemInfo;
import com.formdev.flatlaf.util.UIScale;
@@ -72,6 +72,8 @@ class UIDefaultsLoader
private static final String OPTIONAL_PREFIX = "?";
private static final String WILDCARD_PREFIX = "*.";
private static int parseColorDepth;
static void loadDefaultsFromProperties( Class<?> lookAndFeelClass, List<FlatDefaultsAddon> addons,
Properties additionalDefaults, boolean dark, UIDefaults defaults )
{
@@ -119,7 +121,7 @@ class UIDefaultsLoader
addonClassLoaders.add( addonClassLoader );
}
// load custom properties files (usually provides by applications)
// load custom properties files (usually provided by applications)
List<Object> customDefaultsSources = FlatLaf.getCustomDefaultsSources();
int size = (customDefaultsSources != null) ? customDefaultsSources.size() : 0;
for( int i = 0; i < size; i++ ) {
@@ -241,16 +243,20 @@ class UIDefaultsLoader
try {
defaults.put( key, parseValue( key, value, null, resolver, addonClassLoaders ) );
} catch( RuntimeException ex ) {
logParseError( Level.SEVERE, key, value, ex );
logParseError( key, value, ex, true );
}
}
} catch( IOException ex ) {
FlatLaf.LOG.log( Level.SEVERE, "FlatLaf: Failed to load properties files.", ex );
LoggingFacade.INSTANCE.logSevere( "FlatLaf: Failed to load properties files.", ex );
}
}
static void logParseError( Level level, String key, String value, RuntimeException ex ) {
FlatLaf.LOG.log( level, "FlatLaf: Failed to parse: '" + key + '=' + value + '\'', ex );
static void logParseError( String key, String value, RuntimeException ex, boolean severe ) {
String message = "FlatLaf: Failed to parse: '" + key + '=' + value + '\'';
if( severe )
LoggingFacade.INSTANCE.logSevere( message, ex );
else
LoggingFacade.INSTANCE.logConfig( message, ex );
}
static String resolveValue( String value, Function<String, String> propertiesGetter ) {
@@ -438,7 +444,7 @@ class UIDefaultsLoader
try {
return findClass( value, addonClassLoaders ).newInstance();
} catch( InstantiationException | IllegalAccessException | ClassNotFoundException ex ) {
FlatLaf.LOG.log( Level.SEVERE, "FlatLaf: Failed to instantiate '" + value + "'.", ex );
LoggingFacade.INSTANCE.logSevere( "FlatLaf: Failed to instantiate '" + value + "'.", ex );
return null;
}
};
@@ -449,7 +455,7 @@ class UIDefaultsLoader
try {
return findClass( value, addonClassLoaders );
} catch( ClassNotFoundException ex ) {
FlatLaf.LOG.log( Level.SEVERE, "FlatLaf: Failed to find class '" + value + "'.", ex );
LoggingFacade.INSTANCE.logSevere( "FlatLaf: Failed to find class '" + value + "'.", ex );
return null;
}
};
@@ -580,19 +586,27 @@ class UIDefaultsLoader
if( params.isEmpty() )
throw new IllegalArgumentException( "missing parameters in function '" + value + "'" );
switch( function ) {
case "rgb": return parseColorRgbOrRgba( false, params, resolver, reportError );
case "rgba": return parseColorRgbOrRgba( true, params, resolver, reportError );
case "hsl": return parseColorHslOrHsla( false, params );
case "hsla": return parseColorHslOrHsla( true, params );
case "lighten": return parseColorHSLIncreaseDecrease( 2, true, params, resolver, reportError );
case "darken": return parseColorHSLIncreaseDecrease( 2, false, params, resolver, reportError );
case "saturate": return parseColorHSLIncreaseDecrease( 1, true, params, resolver, reportError );
case "desaturate": return parseColorHSLIncreaseDecrease( 1, false, params, resolver, reportError );
case "fadein": return parseColorHSLIncreaseDecrease( 3, true, params, resolver, reportError );
case "fadeout": return parseColorHSLIncreaseDecrease( 3, false, params, resolver, reportError );
case "fade": return parseColorFade( params, resolver, reportError );
case "spin": return parseColorSpin( params, resolver, reportError );
if( parseColorDepth > 100 )
throw new IllegalArgumentException( "endless recursion in color function '" + value + "'" );
parseColorDepth++;
try {
switch( function ) {
case "rgb": return parseColorRgbOrRgba( false, params, resolver, reportError );
case "rgba": return parseColorRgbOrRgba( true, params, resolver, reportError );
case "hsl": return parseColorHslOrHsla( false, params );
case "hsla": return parseColorHslOrHsla( true, params );
case "lighten": return parseColorHSLIncreaseDecrease( 2, true, params, resolver, reportError );
case "darken": return parseColorHSLIncreaseDecrease( 2, false, params, resolver, reportError );
case "saturate": return parseColorHSLIncreaseDecrease( 1, true, params, resolver, reportError );
case "desaturate": return parseColorHSLIncreaseDecrease( 1, false, params, resolver, reportError );
case "fadein": return parseColorHSLIncreaseDecrease( 3, true, params, resolver, reportError );
case "fadeout": return parseColorHSLIncreaseDecrease( 3, false, params, resolver, reportError );
case "fade": return parseColorFade( params, resolver, reportError );
case "spin": return parseColorSpin( params, resolver, reportError );
}
} finally {
parseColorDepth--;
}
throw new IllegalArgumentException( "unknown color function '" + value + "'" );
@@ -918,7 +932,7 @@ class UIDefaultsLoader
Object value = UIManager.get( uiKey );
if( value == null && !optional )
FlatLaf.LOG.log( Level.SEVERE, "FlatLaf: '" + uiKey + "' not found in UI defaults." );
LoggingFacade.INSTANCE.logSevere( "FlatLaf: '" + uiKey + "' not found in UI defaults.", null );
return value;
}
}

View File

@@ -146,8 +146,14 @@ public class FlatCheckBoxIcon
paintBorder( c, g );
// paint background
g.setColor( FlatUIUtils.deriveColor( getBackground( c, selected ),
selected ? selectedBackground : background ) );
Color bg = FlatUIUtils.deriveColor( getBackground( c, selected ),
selected ? selectedBackground : background );
if( bg.getAlpha() < 255 ) {
// fill background with default color before filling with non-opaque background
g.setColor( selected ? selectedBackground : background );
paintBackground( c, g );
}
g.setColor( bg );
paintBackground( c, g );
// paint checkmark

View File

@@ -31,6 +31,8 @@ import com.formdev.flatlaf.ui.FlatUIUtils;
*
* @uiDefault Component.focusWidth int
* @uiDefault Component.focusColor Color
* @uiDefault HelpButton.innerFocusWidth int or float optional; defaults to Component.innerFocusWidth
* @uiDefault HelpButton.borderWidth int optional; default is 1
* @uiDefault HelpButton.borderColor Color
* @uiDefault HelpButton.disabledBorderColor Color
* @uiDefault HelpButton.focusedBorderColor Color
@@ -50,6 +52,8 @@ public class FlatHelpButtonIcon
{
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 );
protected final Color borderColor = UIManager.getColor( "HelpButton.borderColor" );
protected final Color disabledBorderColor = UIManager.getColor( "HelpButton.disabledBorderColor" );
@@ -84,12 +88,18 @@ public class FlatHelpButtonIcon
boolean enabled = c.isEnabled();
boolean focused = FlatUIUtils.isPermanentFocusOwner( c );
// paint focused border
float xy = 0.5f;
float wh = iconSize - 1;
// paint outer focus border
if( focused && FlatButtonUI.isFocusPainted( c ) ) {
g2.setColor( focusColor );
g2.fill( new Ellipse2D.Float( 0.5f, 0.5f, iconSize - 1, iconSize - 1 ) );
g2.fill( new Ellipse2D.Float( xy, xy, wh, wh ) );
}
xy += focusWidth;
wh -= (focusWidth * 2);
// paint border
g2.setColor( FlatButtonUI.buttonStateColor( c,
borderColor,
@@ -97,7 +107,19 @@ public class FlatHelpButtonIcon
focusedBorderColor,
hoverBorderColor,
null ) );
g2.fill( new Ellipse2D.Float( focusWidth + 0.5f, focusWidth + 0.5f, 21, 21 ) );
g2.fill( new Ellipse2D.Float( xy, xy, wh, wh ) );
xy += borderWidth;
wh -= (borderWidth * 2);
// paint inner focus border
if( innerFocusWidth > 0 && focused && FlatButtonUI.isFocusPainted( c ) ) {
g2.setColor( focusColor );
g2.fill( new Ellipse2D.Float( xy, xy, wh, wh ) );
xy += innerFocusWidth;
wh -= (innerFocusWidth * 2);
}
// paint background
g2.setColor( FlatUIUtils.deriveColor( FlatButtonUI.buttonStateColor( c,
@@ -106,7 +128,7 @@ public class FlatHelpButtonIcon
focusedBackground,
hoverBackground,
pressedBackground ), background ) );
g2.fill( new Ellipse2D.Float( focusWidth + 1.5f, focusWidth + 1.5f, 19, 19 ) );
g2.fill( new Ellipse2D.Float( xy, xy, wh, wh ) );
// paint question mark
Path2D q = new Path2D.Float();

View File

@@ -0,0 +1,28 @@
/*
* 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.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.
*
* @author Karl Tauber
*/
interface EmptyPackage
{
}

View File

@@ -17,16 +17,13 @@
package com.formdev.flatlaf.ui;
import static com.formdev.flatlaf.util.UIScale.scale;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Path2D;
import javax.swing.JComponent;
import javax.swing.plaf.UIResource;
import javax.swing.plaf.basic.BasicArrowButton;
@@ -190,73 +187,14 @@ public class FlatArrowButton
}
protected void paintArrow( Graphics2D g ) {
int direction = getDirection();
boolean vert = (direction == NORTH || direction == SOUTH);
// compute width/height
int w = scale( arrowWidth + (chevron ? 0 : 1) );
int h = scale( (arrowWidth / 2) + (chevron ? 0 : 1) );
// rotate width/height
int rw = vert ? w : h;
int rh = vert ? h : w;
// chevron lines end 1px outside of width/height
if( chevron ) {
// add 1px to width/height for position calculation only
rw++;
rh++;
}
int x = Math.round( (getWidth() - rw) / 2f + scale( (float) xOffset ) );
int y = Math.round( (getHeight() - rh) / 2f + scale( (float) yOffset ) );
int x = 0;
// move arrow for round borders
Container parent = getParent();
if( vert && parent instanceof JComponent && FlatUIUtils.hasRoundBorder( (JComponent) parent ) )
x -= scale( parent.getComponentOrientation().isLeftToRight() ? 1 : -1 );
// paint arrow
g.translate( x, y );
/*debug
debugPaint( g, vert, rw, rh );
debug*/
Shape arrowShape = createArrowShape( direction, chevron, w, h );
if( chevron ) {
g.setStroke( new BasicStroke( scale( 1f ) ) );
g.draw( arrowShape );
} else {
// triangle
g.fill( arrowShape );
}
g.translate( -x, -y );
FlatUIUtils.paintArrow( g, x, 0, getWidth(), getHeight(), getDirection(), chevron, arrowWidth, xOffset, yOffset );
}
public static Shape createArrowShape( int direction, boolean chevron, float w, float h ) {
switch( direction ) {
case NORTH: return FlatUIUtils.createPath( !chevron, 0,h, (w / 2f),0, w,h );
case SOUTH: return FlatUIUtils.createPath( !chevron, 0,0, (w / 2f),h, w,0 );
case WEST: return FlatUIUtils.createPath( !chevron, h,0, 0,(w / 2f), h,w );
case EAST: return FlatUIUtils.createPath( !chevron, 0,0, h,(w / 2f), 0,w );
default: return new Path2D.Float();
}
}
/*debug
private void debugPaint( Graphics g, boolean vert, int w, int h ) {
Color oldColor = g.getColor();
g.setColor( Color.red );
g.drawRect( 0, 0, w - 1, h - 1 );
int xy1 = -2;
int xy2 = h + 1;
for( int i = 0; i < 20; i++ ) {
g.drawRect( vert ? 0 : xy1, vert ? xy1 : 0, 0, 0 );
g.drawRect( vert ? 0 : xy2, vert ? xy2 : 0, 0, 0 );
xy1 -= 2;
xy2 += 2;
}
g.setColor( oldColor );
}
debug*/
}

View File

@@ -35,7 +35,6 @@ import javax.swing.JViewport;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.plaf.basic.BasicBorders;
import javax.swing.text.JTextComponent;
import com.formdev.flatlaf.FlatClientProperties;
import com.formdev.flatlaf.util.DerivedColor;
@@ -95,12 +94,14 @@ public class FlatBorder
// paint outer border
if( outlineColor != null || isFocused( c ) ) {
float innerWidth = !isCellEditor( c ) && !(c instanceof JScrollPane)
? (outlineColor != null ? innerOutlineWidth : innerFocusWidth)
? (outlineColor != null ? innerOutlineWidth : getInnerFocusWidth( c ))
: 0;
g2.setColor( (outlineColor != null) ? outlineColor : getFocusColor( c ) );
FlatUIUtils.paintComponentOuterBorder( g2, x, y, width, height,
focusWidth, borderWidth + scale( innerWidth ), arc );
if( focusWidth > 0 || innerWidth > 0 ) {
g2.setColor( (outlineColor != null) ? outlineColor : getFocusColor( c ) );
FlatUIUtils.paintComponentOuterBorder( g2, x, y, width, height,
focusWidth, borderWidth + scale( innerWidth ), arc );
}
}
// paint border
@@ -159,7 +160,7 @@ public class FlatBorder
return false;
}
return c.isEnabled() && (!(c instanceof JTextComponent) || ((JTextComponent)c).isEditable());
return c.isEnabled();
}
protected boolean isFocused( Component c ) {
@@ -236,6 +237,13 @@ public class FlatBorder
return focusWidth;
}
/**
* Returns the (unscaled) thickness of the inner focus border.
*/
protected float getInnerFocusWidth( Component c ) {
return innerFocusWidth;
}
/**
* Returns the (unscaled) line thickness used to compute the border insets.
* This may be different to {@link #getBorderWidth}.

View File

@@ -44,6 +44,7 @@ import com.formdev.flatlaf.util.UIScale;
* @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.toolbar.margin Insets
* @uiDefault Button.toolbar.spacingInsets Insets
* @uiDefault Button.arc int
@@ -65,6 +66,7 @@ public class FlatButtonBorder
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" );
@@ -134,6 +136,11 @@ public class FlatButtonBorder
return FlatToggleButtonUI.isTabButton( c ) ? 0 : super.getFocusWidth( c );
}
@Override
protected float getInnerFocusWidth( Component c ) {
return buttonInnerFocusWidth;
}
@Override
protected int getBorderWidth( Component c ) {
return FlatButtonUI.isDefaultButton( c ) ? defaultBorderWidth : borderWidth;

View File

@@ -388,41 +388,35 @@ public class FlatButtonUI
}
protected Color getBackground( JComponent c ) {
boolean toolBarButton = isToolBarButton( c );
// selected state
if( ((AbstractButton)c).isSelected() ) {
// in toolbar use same colors for disabled and enabled because
// in toolbar use same background colors for disabled and enabled because
// we assume that toolbar icon is shown disabled
boolean toolBarButton = isToolBarButton( c );
return buttonStateColor( c,
toolBarButton ? toolbarSelectedBackground : selectedBackground,
toolBarButton ? toolbarSelectedBackground : disabledSelectedBackground,
null, null,
null,
null,
toolBarButton ? toolbarPressedBackground : pressedBackground );
}
if( !c.isEnabled() )
return disabledBackground;
// toolbar button
if( isToolBarButton( c ) ) {
ButtonModel model = ((AbstractButton)c).getModel();
if( model.isPressed() )
return toolbarPressedBackground;
if( model.isRollover() )
return toolbarHoverBackground;
// use component background if explicitly set
if( toolBarButton ) {
Color bg = c.getBackground();
if( isCustomBackground( bg ) )
return bg;
// do not paint background
return null;
return buttonStateColor( c,
isCustomBackground( bg ) ? bg : null,
null,
null,
toolbarHoverBackground,
toolbarPressedBackground );
}
boolean def = isDefaultButton( c );
return buttonStateColor( c,
getBackgroundBase( c, def ),
null,
disabledBackground,
isCustomBackground( c.getBackground() ) ? null : (def ? defaultFocusedBackground : focusedBackground),
def ? defaultHoverBackground : hoverBackground,
def ? defaultPressedBackground : pressedBackground );
@@ -444,16 +438,18 @@ public class FlatButtonUI
public static Color buttonStateColor( Component c, Color enabledColor, Color disabledColor,
Color focusedColor, Color hoverColor, Color pressedColor )
{
AbstractButton b = (c instanceof AbstractButton) ? (AbstractButton) c : null;
if( !c.isEnabled() )
return disabledColor;
if( pressedColor != null && b != null && b.getModel().isPressed() )
return pressedColor;
if( c instanceof AbstractButton ) {
ButtonModel model = ((AbstractButton)c).getModel();
if( hoverColor != null && b != null && b.getModel().isRollover() )
return hoverColor;
if( pressedColor != null && model.isPressed() )
return pressedColor;
if( hoverColor != null && model.isRollover() )
return hoverColor;
}
if( focusedColor != null && isFocusPainted( c ) && FlatUIUtils.isPermanentFocusOwner( c ) )
return focusedColor;

View File

@@ -38,7 +38,6 @@ import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Rectangle2D;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.lang.ref.WeakReference;
import javax.swing.AbstractAction;
@@ -244,7 +243,24 @@ public class FlatComboBoxUI
public void layoutContainer( Container parent ) {
super.layoutContainer( parent );
if ( editor != null && padding != null ) {
if( arrowButton != null ) {
Insets insets = getInsets();
int buttonWidth = parent.getPreferredSize().height - insets.top - insets.bottom;
if( buttonWidth != arrowButton.getWidth() ) {
// set width of arrow button to preferred height of combobox
int xOffset = comboBox.getComponentOrientation().isLeftToRight()
? arrowButton.getWidth() - buttonWidth
: 0;
arrowButton.setBounds( arrowButton.getX() + xOffset, arrowButton.getY(),
buttonWidth, arrowButton.getHeight() );
// update editor bounds
if( editor != null )
editor.setBounds( rectangleForCurrentValue() );
}
}
if( editor != null && padding != null ) {
// fix editor bounds by subtracting padding
editor.setBounds( FlatUIUtils.subtractInsets( editor.getBounds(), padding ) );
}
@@ -274,30 +290,28 @@ public class FlatComboBoxUI
@Override
protected PropertyChangeListener createPropertyChangeListener() {
return new BasicComboBoxUI.PropertyChangeHandler() {
@Override
public void propertyChange( PropertyChangeEvent e ) {
super.propertyChange( e );
PropertyChangeListener superListener = super.createPropertyChangeListener();
return e -> {
superListener.propertyChange( e );
Object source = e.getSource();
String propertyName = e.getPropertyName();
Object source = e.getSource();
String propertyName = e.getPropertyName();
if( editor != null &&
((source == comboBox && propertyName == "foreground") ||
(source == editor && propertyName == "enabled")) )
{
// fix editor component colors
updateEditorColors();
} 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();
}
if( editor != null &&
((source == comboBox && propertyName == "foreground") ||
(source == editor && propertyName == "enabled")) )
{
// fix editor component colors
updateEditorColors();
} 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();
};
}
@@ -648,14 +662,12 @@ public class FlatComboBoxUI
@Override
protected PropertyChangeListener createPropertyChangeListener() {
return new BasicComboPopup.PropertyChangeHandler() {
@Override
public void propertyChange( PropertyChangeEvent e ) {
super.propertyChange( e );
PropertyChangeListener superListener = super.createPropertyChangeListener();
return e -> {
superListener.propertyChange( e );
if( e.getPropertyName() == "renderer" )
list.setCellRenderer( new PopupListCellRenderer() );
}
if( e.getPropertyName() == "renderer" )
list.setCellRenderer( new PopupListCellRenderer() );
};
}

View File

@@ -31,13 +31,17 @@ import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JToggleButton;
import javax.swing.UIManager;
import javax.swing.filechooser.FileView;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.metal.MetalFileChooserUI;
import javax.swing.table.TableCellRenderer;
import com.formdev.flatlaf.FlatClientProperties;
import com.formdev.flatlaf.util.ScaledImageIcon;
import com.formdev.flatlaf.util.SystemInfo;
import com.formdev.flatlaf.util.UIScale;
/**
@@ -190,6 +194,62 @@ public class FlatFileChooserUI
}
}
@Override
protected JPanel createDetailsView( JFileChooser fc ) {
JPanel p = super.createDetailsView( fc );
if( !SystemInfo.isWindows )
return p;
// find scroll pane
JScrollPane scrollPane = null;
for( Component c : p.getComponents() ) {
if( c instanceof JScrollPane ) {
scrollPane = (JScrollPane) c;
break;
}
}
if( scrollPane == null )
return p;
// get scroll view, which should be a table
Component view = scrollPane.getViewport().getView();
if( !(view instanceof JTable) )
return p;
JTable table = (JTable) view;
// on Windows 10, the date may contain left-to-right (0x200e) and right-to-left (0x200f)
// mark characters (see https://en.wikipedia.org/wiki/Left-to-right_mark)
// when the "current user" item is selected in the "look in" combobox
// --> remove them
TableCellRenderer defaultRenderer = table.getDefaultRenderer( Object.class );
table.setDefaultRenderer( Object.class, new TableCellRenderer() {
@Override
public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected,
boolean hasFocus, int row, int column )
{
// remove left-to-right and right-to-left mark characters
if( value instanceof String && ((String)value).startsWith( "\u200e" ) ) {
String str = (String) value;
char[] buf = new char[str.length()];
int j = 0;
for( int i = 0; i < buf.length; i++ ) {
char ch = str.charAt( i );
if( ch != '\u200e' && ch != '\u200f' )
buf[j++] = ch;
}
value = new String( buf, 0, j );
}
return defaultRenderer.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column );
}
} );
return p;
}
@Override
public Dimension getPreferredSize( JComponent c ) {
return UIScale.scale( super.getPreferredSize( c ) );

View File

@@ -22,6 +22,9 @@ import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.beans.PropertyChangeEvent;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JLabel;
@@ -96,23 +99,37 @@ public class FlatLabelUI
}
/**
* Checks whether text contains HTML headings and adds a special CSS rule to
* re-calculate heading font sizes based on current component font size.
* Checks whether text contains HTML tags that use "absolute-size" keywords
* (e.g. "x-large") for font-size in default style sheet
* (see javax/swing/text/html/default.css).
* If yes, adds a special CSS rule (BASE_SIZE) to the HTML text, which
* re-calculates font sizes based on current component font size.
*/
static void updateHTMLRenderer( JComponent c, String text, boolean always ) {
if( BasicHTML.isHTMLString( text ) &&
c.getClientProperty( "html.disable" ) != Boolean.TRUE &&
text.contains( "<h" ) &&
(text.contains( "<h1" ) || text.contains( "<h2" ) || text.contains( "<h3" ) ||
text.contains( "<h4" ) || text.contains( "<h5" ) || text.contains( "<h6" )) )
needsFontBaseSize( text ) )
{
int headIndex = text.indexOf( "<head>" );
// BASE_SIZE rule is parsed in javax.swing.text.html.StyleSheet.addRule()
String style = "<style>BASE_SIZE " + c.getFont().getSize() + "</style>";
if( headIndex < 0 )
style = "<head>" + style + "</head>";
int insertIndex = headIndex >= 0 ? (headIndex + "<head>".length()) : "<html>".length();
String lowerText = text.toLowerCase();
int headIndex;
int styleIndex;
int insertIndex;
if( (headIndex = lowerText.indexOf( "<head>" )) >= 0 ) {
// there is a <head> tag --> insert after <head> tag
insertIndex = headIndex + "<head>".length();
} else if( (styleIndex = lowerText.indexOf( "<style>" )) >= 0 ) {
// there is a <style> tag --> insert before <style> tag
insertIndex = styleIndex;
} else {
// no <head> or <style> tag --> insert <head> tag after <html> tag
style = "<head>" + style + "</head>";
insertIndex = "<html>".length();
}
text = text.substring( 0, insertIndex )
+ style
+ text.substring( insertIndex );
@@ -122,6 +139,44 @@ public class FlatLabelUI
BasicHTML.updateRenderer( c, text );
}
private static Set<String> tagsUseFontSizeSet;
private static boolean needsFontBaseSize( String text ) {
if( tagsUseFontSizeSet == null ) {
// tags that use font-size in javax/swing/text/html/default.css
tagsUseFontSizeSet = new HashSet<>( Arrays.asList(
"h1", "h2", "h3", "h4", "h5", "h6", "code", "kbd", "big", "small", "samp" ) );
}
// search for tags in HTML text
int textLength = text.length();
for( int i = 6; i < textLength - 1; i++ ) {
if( text.charAt( i ) == '<' ) {
switch( text.charAt( i + 1 ) ) {
// first letters of tags in tagsUseFontSizeSet
case 'b': case 'B':
case 'c': case 'C':
case 'h': case 'H':
case 'k': case 'K':
case 's': case 'S':
int tagBegin = i + 1;
for( i += 2; i < textLength; i++ ) {
if( !Character.isLetterOrDigit( text.charAt( i ) ) ) {
String tag = text.substring( tagBegin, i ).toLowerCase();
if( tagsUseFontSizeSet.contains( tag ) )
return true;
break;
}
}
break;
}
}
}
return false;
}
static Graphics createGraphicsHTMLTextYCorrection( Graphics g, JComponent c ) {
return (c.getClientProperty( BasicHTML.propertyKey ) != null)
? HiDPIUtils.createGraphicsTextYCorrection( (Graphics2D) g )

View File

@@ -16,17 +16,24 @@
package com.formdev.flatlaf.ui;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Window;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.ActionMap;
import javax.swing.JComponent;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JRootPane;
import javax.swing.LookAndFeel;
import javax.swing.MenuElement;
import javax.swing.MenuSelectionManager;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.plaf.ActionMapUIResource;
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.util.SystemInfo;
@@ -40,6 +47,7 @@ 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
*/
@@ -55,6 +63,13 @@ public class FlatMenuBarUI
* Do not add any functionality here.
*/
@Override
protected void installDefaults() {
super.installDefaults();
LookAndFeel.installProperty( menuBar, "opaque", false );
}
@Override
protected void installKeyboardActions() {
super.installKeyboardActions();
@@ -67,6 +82,44 @@ public class FlatMenuBarUI
map.put( "takeFocus", new TakeFocus() );
}
@Override
public void update( Graphics g, JComponent c ) {
// paint background
Color background = getBackground( c );
if( background != null ) {
g.setColor( background );
g.fillRect( 0, 0, c.getWidth(), c.getHeight() );
}
paint( g, c );
}
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) )
return background;
// paint background if menu bar is not the "main" menu bar
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 );
// paint background in full screen mode
if( FlatUIUtils.isFullScreen( rootPane ) )
return background;
// do not paint background if menu bar is embedded into title pane
return FlatRootPaneUI.isMenuBarEmbedded( rootPane ) ? null : background;
}
//---- class TakeFocus ----------------------------------------------------
/**

View File

@@ -0,0 +1,348 @@
/*
* 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.Color;
import java.awt.Rectangle;
import java.awt.Window;
import java.beans.PropertyChangeListener;
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;
import com.formdev.flatlaf.FlatLaf;
import com.formdev.flatlaf.FlatSystemProperties;
import com.formdev.flatlaf.ui.JBRCustomDecorations.JBRWindowTopBorder;
import com.formdev.flatlaf.util.SystemInfo;
/**
* Support for custom window decorations with native window border.
*
* @author Karl Tauber
* @since 1.1
*/
public class FlatNativeWindowBorder
{
// can use window decorations if:
// - on Windows 10
// - not when running in JetBrains Projector, Webswing or WinPE
// - not disabled via system property
private static final boolean canUseWindowDecorations =
SystemInfo.isWindows_10_orLater &&
!SystemInfo.isProjector &&
!SystemInfo.isWebswing &&
!SystemInfo.isWinPE &&
FlatSystemProperties.getBoolean( FlatSystemProperties.USE_WINDOW_DECORATIONS, true );
// check this field before using class JBRCustomDecorations to avoid unnecessary loading of that class
private static final boolean canUseJBRCustomDecorations =
canUseWindowDecorations &&
SystemInfo.isJetBrainsJVM_11_orLater &&
FlatSystemProperties.getBoolean( FlatSystemProperties.USE_JETBRAINS_CUSTOM_DECORATIONS, true );
private static Boolean supported;
private static Provider nativeProvider;
public static boolean isSupported() {
if( canUseJBRCustomDecorations )
return JBRCustomDecorations.isSupported();
initialize();
return supported;
}
static Object install( JRootPane rootPane ) {
if( canUseJBRCustomDecorations )
return JBRCustomDecorations.install( rootPane );
if( !isSupported() )
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
// FlatLaf native window border.
// 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 );
// Install FlatLaf native window border, which must be done late,
// when the native window is already created, because it needs access to the window.
// Uninstall FlatLaf native window border when window is disposed (or root pane removed).
// "ancestor" property change event is fired from JComponent.addNotify() and removeNotify().
PropertyChangeListener ancestorListener = e -> {
Object newValue = e.getNewValue();
if( newValue instanceof Window )
install( (Window) newValue );
else if( newValue == null && e.getOldValue() instanceof Window )
uninstall( (Window) e.getOldValue() );
};
rootPane.addPropertyChangeListener( "ancestor", ancestorListener );
return ancestorListener;
}
static void install( Window window ) {
if( hasCustomDecoration( window ) )
return;
// do not enable native window border if LaF provides decorations
if( UIManager.getLookAndFeel().getSupportsWindowDecorations() )
return;
if( window instanceof JFrame ) {
JFrame frame = (JFrame) window;
JRootPane rootPane = frame.getRootPane();
// check whether disabled via system property, client property or UI default
if( !useWindowDecorations( rootPane ) )
return;
// do not enable native window border if frame is undecorated
if( frame.isUndecorated() )
return;
// enable native window border for window
setHasCustomDecoration( frame, true );
// enable Swing window decoration
rootPane.setWindowDecorationStyle( JRootPane.FRAME );
} else if( window instanceof JDialog ) {
JDialog dialog = (JDialog) window;
JRootPane rootPane = dialog.getRootPane();
// check whether disabled via system property, client property or UI default
if( !useWindowDecorations( rootPane ) )
return;
// do not enable native window border if dialog is undecorated
if( dialog.isUndecorated() )
return;
// enable native window border for window
setHasCustomDecoration( dialog, true );
// enable Swing window decoration
rootPane.setWindowDecorationStyle( JRootPane.PLAIN_DIALOG );
}
}
static void uninstall( JRootPane rootPane, Object data ) {
if( canUseJBRCustomDecorations ) {
JBRCustomDecorations.uninstall( rootPane, data );
return;
}
if( !isSupported() )
return;
// remove listener
if( data instanceof PropertyChangeListener )
rootPane.removePropertyChangeListener( "ancestor", (PropertyChangeListener) data );
// do not uninstall when switching to another FlatLaf theme and if still enabled
if( UIManager.getLookAndFeel() instanceof FlatLaf && useWindowDecorations( rootPane ) )
return;
// uninstall native window border
Window window = SwingUtilities.windowForComponent( rootPane );
if( window != null )
uninstall( window );
}
private static void uninstall( Window window ) {
if( !hasCustomDecoration( window ) )
return;
// disable native window border for window
setHasCustomDecoration( window, false );
if( window instanceof JFrame ) {
JFrame frame = (JFrame) window;
// disable Swing window decoration
frame.getRootPane().setWindowDecorationStyle( JRootPane.NONE );
} else if( window instanceof JDialog ) {
JDialog dialog = (JDialog) window;
// disable Swing window decoration
dialog.getRootPane().setWindowDecorationStyle( JRootPane.NONE );
}
}
private static boolean useWindowDecorations( JRootPane rootPane ) {
return FlatUIUtils.getBoolean( rootPane,
FlatSystemProperties.USE_WINDOW_DECORATIONS,
FlatClientProperties.USE_WINDOW_DECORATIONS,
"TitlePane.useWindowDecorations",
false );
}
public static boolean hasCustomDecoration( Window window ) {
if( canUseJBRCustomDecorations )
return JBRCustomDecorations.hasCustomDecoration( window );
if( !isSupported() )
return false;
return nativeProvider.hasCustomDecoration( window );
}
public static void setHasCustomDecoration( Window window, boolean hasCustomDecoration ) {
if( canUseJBRCustomDecorations ) {
JBRCustomDecorations.setHasCustomDecoration( window, hasCustomDecoration );
return;
}
if( !isSupported() )
return;
nativeProvider.setHasCustomDecoration( window, hasCustomDecoration );
}
static void setTitleBarHeightAndHitTestSpots( Window window, int titleBarHeight,
List<Rectangle> hitTestSpots, Rectangle appIconBounds )
{
if( canUseJBRCustomDecorations ) {
JBRCustomDecorations.setTitleBarHeightAndHitTestSpots( window, titleBarHeight, hitTestSpots );
return;
}
if( !isSupported() )
return;
nativeProvider.setTitleBarHeight( window, titleBarHeight );
nativeProvider.setTitleBarHitTestSpots( window, hitTestSpots );
nativeProvider.setTitleBarAppIconBounds( window, appIconBounds );
}
static boolean showWindow( Window window, int cmd ) {
if( canUseJBRCustomDecorations || !isSupported() )
return false;
return nativeProvider.showWindow( window, cmd );
}
private static void initialize() {
if( supported != null )
return;
supported = false;
if( !canUseWindowDecorations )
return;
try {
/*
Class<?> cls = Class.forName( "com.formdev.flatlaf.natives.jna.windows.FlatWindowsNativeWindowBorder" );
Method m = cls.getMethod( "getInstance" );
setNativeProvider( (Provider) m.invoke( null ) );
*/
setNativeProvider( FlatWindowsNativeWindowBorder.getInstance() );
} catch( Exception ex ) {
// ignore
}
}
/**
* @since 1.1.1
*/
public static void setNativeProvider( Provider provider ) {
if( nativeProvider != null )
throw new IllegalStateException();
nativeProvider = provider;
supported = (nativeProvider != null);
}
//---- interface Provider -------------------------------------------------
public interface Provider
{
boolean hasCustomDecoration( Window window );
void setHasCustomDecoration( Window window, boolean hasCustomDecoration );
void setTitleBarHeight( Window window, int titleBarHeight );
void setTitleBarHitTestSpots( Window window, List<Rectangle> hitTestSpots );
void setTitleBarAppIconBounds( Window window, Rectangle appIconBounds );
// commands for showWindow(); values must match Win32 API
// https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-showwindow
int SW_MAXIMIZE = 3;
int SW_MINIMIZE = 6;
int SW_RESTORE = 9;
boolean showWindow( Window window, int cmd );
boolean isColorizationColorAffectsBorders();
Color getColorizationColor();
int getColorizationColorBalance();
void addChangeListener( ChangeListener l );
void removeChangeListener( ChangeListener l );
}
//---- class WindowTopBorder -------------------------------------------
static class WindowTopBorder
extends JBRCustomDecorations.JBRWindowTopBorder
{
private static WindowTopBorder instance;
static JBRWindowTopBorder getInstance() {
if( canUseJBRCustomDecorations )
return JBRWindowTopBorder.getInstance();
if( instance == null )
instance = new WindowTopBorder();
return instance;
}
@Override
void installListeners() {
nativeProvider.addChangeListener( e -> {
update();
// repaint top borders of all windows
for( Window window : Window.getWindows() ) {
if( window.isDisplayable() )
window.repaint( 0, 0, window.getWidth(), 1 );
}
} );
}
@Override
boolean isColorizationColorAffectsBorders() {
return nativeProvider.isColorizationColorAffectsBorders();
}
@Override
Color getColorizationColor() {
return nativeProvider.getColorizationColor();
}
@Override
int getColorizationColorBalance() {
return nativeProvider.getColorizationColorBalance();
}
}
}

View File

@@ -62,7 +62,7 @@ public class FlatPopupFactory
public Popup getPopup( Component owner, Component contents, int x, int y )
throws IllegalArgumentException
{
Point pt = fixToolTipLocation( owner, contents, x, y );
Point pt = fixToolTipLocation( contents, x, y );
if( pt != null ) {
x = pt.x;
y = pt.y;
@@ -70,7 +70,7 @@ public class FlatPopupFactory
boolean forceHeavyWeight = isOptionEnabled( owner, contents, FlatClientProperties.POPUP_FORCE_HEAVY_WEIGHT, "Popup.forceHeavyWeight" );
if( !isOptionEnabled( owner, contents, FlatClientProperties.POPUP_DROP_SHADOW_PAINTED, "Popup.dropShadowPainted" ) )
if( !isOptionEnabled( owner, contents, FlatClientProperties.POPUP_DROP_SHADOW_PAINTED, "Popup.dropShadowPainted" ) || SystemInfo.isProjector || SystemInfo.isWebswing )
return new NonFlashingPopup( getPopupForScreenOfOwner( owner, contents, x, y, forceHeavyWeight ), contents );
// macOS and Linux adds drop shadow to heavy weight popups
@@ -111,6 +111,7 @@ public class FlatPopupFactory
// check whether heavy weight popup window is on same screen as owner component
if( popupWindow == null ||
owner == null ||
popupWindow.getGraphicsConfiguration() == owner.getGraphicsConfiguration() )
return popup;
@@ -211,7 +212,7 @@ public class FlatPopupFactory
* This method checks whether the current mouse location is within tooltip bounds
* 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 ) {
private Point fixToolTipLocation( Component contents, int x, int y ) {
if( !(contents instanceof JToolTip) || !wasInvokedFromToolTipManager() )
return null;
@@ -450,10 +451,10 @@ public class FlatPopupFactory
mediumWeightShown = true;
Window window = SwingUtilities.windowForComponent( owner );
if( window == null )
if( owner == null )
return;
Window window = SwingUtilities.windowForComponent( owner );
if( !(window instanceof RootPaneContainer) )
return;

View File

@@ -27,7 +27,6 @@ import javax.swing.JComponent;
import javax.swing.LookAndFeel;
import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.UIResource;
import javax.swing.plaf.basic.BasicRadioButtonUI;
import com.formdev.flatlaf.icons.FlatCheckBoxIcon;
import com.formdev.flatlaf.util.UIScale;
@@ -58,6 +57,8 @@ public class FlatRadioButtonUI
protected int iconTextGap;
protected Color disabledText;
private Color defaultBackground;
private boolean defaults_initialized = false;
public static ComponentUI createUI( JComponent c ) {
@@ -74,6 +75,8 @@ public class FlatRadioButtonUI
iconTextGap = FlatUIUtils.getUIInt( prefix + "iconTextGap", 4 );
disabledText = UIManager.getColor( prefix + "disabledText" );
defaultBackground = UIManager.getColor( prefix + "background" );
defaults_initialized = true;
}
@@ -120,7 +123,7 @@ public class FlatRadioButtonUI
// - if background was explicitly set to a non-UIResource color
if( !c.isOpaque() &&
((AbstractButton)c).isContentAreaFilled() &&
!(c.getBackground() instanceof UIResource) )
!defaultBackground.equals( c.getBackground() ) )
{
g.setColor( c.getBackground() );
g.fillRect( 0, 0, c.getWidth(), c.getHeight() );

View File

@@ -40,6 +40,7 @@ import javax.swing.UIManager;
import javax.swing.border.Border;
import javax.swing.plaf.BorderUIResource;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.RootPaneUI;
import javax.swing.plaf.UIResource;
import javax.swing.plaf.basic.BasicRootPaneUI;
import com.formdev.flatlaf.FlatClientProperties;
@@ -70,16 +71,13 @@ import com.formdev.flatlaf.util.UIScale;
public class FlatRootPaneUI
extends BasicRootPaneUI
{
// check this field before using class JBRCustomDecorations to avoid unnecessary loading of that class
static final boolean canUseJBRCustomDecorations
= SystemInfo.isJetBrainsJVM_11_orLater && SystemInfo.isWindows_10_orLater;
protected final Color borderColor = UIManager.getColor( "TitlePane.borderColor" );
protected JRootPane rootPane;
protected FlatTitlePane titlePane;
protected FlatWindowResizer windowResizer;
private Object nativeWindowBorderData;
private LayoutManager oldLayout;
public static ComponentUI createUI( JComponent c ) {
@@ -97,8 +95,7 @@ public class FlatRootPaneUI
else
installBorder();
if( canUseJBRCustomDecorations )
JBRCustomDecorations.install( rootPane );
installNativeWindowBorder();
}
protected void installBorder() {
@@ -113,6 +110,7 @@ public class FlatRootPaneUI
public void uninstallUI( JComponent c ) {
super.uninstallUI( c );
uninstallNativeWindowBorder();
uninstallClientDecorations();
rootPane = null;
}
@@ -138,11 +136,39 @@ public class FlatRootPaneUI
c.putClientProperty( "jetbrains.awt.windowDarkAppearance", FlatLaf.isLafDark() );
}
/**
* @since 1.1.2
*/
protected void installNativeWindowBorder() {
nativeWindowBorderData = FlatNativeWindowBorder.install( rootPane );
}
/**
* @since 1.1.2
*/
protected void uninstallNativeWindowBorder() {
FlatNativeWindowBorder.uninstall( rootPane, nativeWindowBorderData );
nativeWindowBorderData = null;
}
/**
* @since 1.1.2
*/
public static void updateNativeWindowBorder( JRootPane rootPane ) {
RootPaneUI rui = rootPane.getUI();
if( !(rui instanceof FlatRootPaneUI) )
return;
FlatRootPaneUI ui = (FlatRootPaneUI) rui;
ui.uninstallNativeWindowBorder();
ui.installNativeWindowBorder();
}
protected void installClientDecorations() {
boolean isJBRSupported = canUseJBRCustomDecorations && JBRCustomDecorations.isSupported();
boolean isNativeWindowBorderSupported = FlatNativeWindowBorder.isSupported();
// install border
if( rootPane.getWindowDecorationStyle() != JRootPane.NONE && !isJBRSupported )
if( rootPane.getWindowDecorationStyle() != JRootPane.NONE && !isNativeWindowBorderSupported )
LookAndFeel.installBorder( rootPane, "RootPane.border" );
else
LookAndFeel.uninstallBorder( rootPane );
@@ -155,7 +181,7 @@ public class FlatRootPaneUI
rootPane.setLayout( createRootLayout() );
// install window resizer
if( !isJBRSupported )
if( !isNativeWindowBorderSupported )
windowResizer = createWindowResizer();
}
@@ -219,6 +245,10 @@ public class FlatRootPaneUI
installBorder();
break;
case FlatClientProperties.USE_WINDOW_DECORATIONS:
updateNativeWindowBorder( rootPane );
break;
case FlatClientProperties.MENU_BAR_EMBEDDED:
if( titlePane != null ) {
titlePane.menuBarChanged();
@@ -226,9 +256,22 @@ public class FlatRootPaneUI
rootPane.repaint();
}
break;
case FlatClientProperties.TITLE_BAR_BACKGROUND:
case FlatClientProperties.TITLE_BAR_FOREGROUND:
if( titlePane != null )
titlePane.titleBarColorsChanged();
break;
}
}
protected static boolean isMenuBarEmbedded( JRootPane rootPane ) {
RootPaneUI ui = rootPane.getUI();
return ui instanceof FlatRootPaneUI &&
((FlatRootPaneUI)ui).titlePane != null &&
((FlatRootPaneUI)ui).titlePane.isMenuBarEmbedded();
}
//---- class FlatRootLayout -----------------------------------------------
protected class FlatRootLayout
@@ -299,15 +342,16 @@ public class FlatRootPaneUI
rootPane.getGlassPane().setBounds( x, y, width, height );
int nextY = 0;
if( !isFullScreen && titlePane != null ) {
Dimension prefSize = titlePane.getPreferredSize();
titlePane.setBounds( 0, 0, width, prefSize.height );
nextY += prefSize.height;
if( titlePane != null ) {
int prefHeight = !isFullScreen ? titlePane.getPreferredSize().height : 0;
titlePane.setBounds( 0, 0, width, prefHeight );
nextY += prefHeight;
}
JMenuBar menuBar = rootPane.getJMenuBar();
if( menuBar != null && menuBar.isVisible() ) {
if( !isFullScreen && titlePane != null && titlePane.isMenuBarEmbedded() ) {
boolean embedded = !isFullScreen && titlePane != null && titlePane.isMenuBarEmbedded();
if( embedded ) {
titlePane.validate();
menuBar.setBounds( titlePane.getMenuBarBounds() );
} else {
@@ -344,6 +388,9 @@ public class FlatRootPaneUI
//---- class FlatWindowBorder ---------------------------------------------
/**
* Window border used for non-native window decorations.
*/
public static class FlatWindowBorder
extends BorderUIResource.EmptyBorderUIResource
{
@@ -358,7 +405,7 @@ public class FlatRootPaneUI
@Override
public Insets getBorderInsets( Component c, Insets insets ) {
if( isWindowMaximized( c ) || FlatUIUtils.isFullScreen( c ) ) {
// hide border if window is maximized
// hide border if window is maximized or full screen
insets.top = insets.left = insets.bottom = insets.right = 0;
return insets;
} else
@@ -421,7 +468,9 @@ public class FlatRootPaneUI
(parent instanceof JFrame &&
(((JFrame)parent).getJMenuBar() == null ||
!((JFrame)parent).getJMenuBar().isVisible())) ||
parent instanceof JDialog;
(parent instanceof JDialog &&
(((JDialog)parent).getJMenuBar() == null ||
!((JDialog)parent).getJMenuBar().isVisible()));
}
}
}

View File

@@ -23,7 +23,6 @@ import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.Objects;
import javax.swing.InputMap;
@@ -168,30 +167,28 @@ public class FlatScrollBarUI
@Override
protected PropertyChangeListener createPropertyChangeListener() {
return new BasicScrollBarUI.PropertyChangeHandler() {
@Override
public void propertyChange( PropertyChangeEvent e ) {
super.propertyChange( e );
PropertyChangeListener superListener = super.createPropertyChangeListener();
return e -> {
superListener.propertyChange( e );
switch( e.getPropertyName() ) {
case FlatClientProperties.SCROLL_BAR_SHOW_BUTTONS:
scrollbar.revalidate();
scrollbar.repaint();
break;
switch( e.getPropertyName() ) {
case FlatClientProperties.SCROLL_BAR_SHOW_BUTTONS:
scrollbar.revalidate();
scrollbar.repaint();
break;
case "componentOrientation":
// this is missing in BasicScrollBarUI.Handler.propertyChange()
InputMap inputMap = (InputMap) UIManager.get( "ScrollBar.ancestorInputMap" );
if( !scrollbar.getComponentOrientation().isLeftToRight() ) {
InputMap rtlInputMap = (InputMap) UIManager.get( "ScrollBar.ancestorInputMap.RightToLeft" );
if( rtlInputMap != null ) {
rtlInputMap.setParent( inputMap );
inputMap = rtlInputMap;
}
case "componentOrientation":
// this is missing in BasicScrollBarUI.Handler.propertyChange()
InputMap inputMap = (InputMap) UIManager.get( "ScrollBar.ancestorInputMap" );
if( !scrollbar.getComponentOrientation().isLeftToRight() ) {
InputMap rtlInputMap = (InputMap) UIManager.get( "ScrollBar.ancestorInputMap.RightToLeft" );
if( rtlInputMap != null ) {
rtlInputMap.setParent( inputMap );
inputMap = rtlInputMap;
}
SwingUtilities.replaceUIInputMap( scrollbar, JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, inputMap );
break;
}
}
SwingUtilities.replaceUIInputMap( scrollbar, JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, inputMap );
break;
}
};
}

View File

@@ -105,19 +105,17 @@ public class FlatScrollPaneUI
@Override
protected MouseWheelListener createMouseWheelListener() {
return new BasicScrollPaneUI.MouseWheelHandler() {
@Override
public void mouseWheelMoved( MouseWheelEvent e ) {
if( isSmoothScrollingEnabled() &&
scrollpane.isWheelScrollingEnabled() &&
e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL &&
e.getPreciseWheelRotation() != 0 &&
e.getPreciseWheelRotation() != e.getWheelRotation() )
{
mouseWheelMovedSmooth( e );
} else
super.mouseWheelMoved( e );
}
MouseWheelListener superListener = super.createMouseWheelListener();
return e -> {
if( isSmoothScrollingEnabled() &&
scrollpane.isWheelScrollingEnabled() &&
e.getScrollType() == MouseWheelEvent.WHEEL_UNIT_SCROLL &&
e.getPreciseWheelRotation() != 0 &&
e.getPreciseWheelRotation() != e.getWheelRotation() )
{
mouseWheelMovedSmooth( e );
} else
superListener.mouseWheelMoved( e );
};
}
@@ -239,41 +237,39 @@ public class FlatScrollPaneUI
@Override
protected PropertyChangeListener createPropertyChangeListener() {
return new BasicScrollPaneUI.PropertyChangeHandler() {
@Override
public void propertyChange( PropertyChangeEvent e ) {
super.propertyChange( e );
PropertyChangeListener superListener = super.createPropertyChangeListener();
return e -> {
superListener.propertyChange( e );
switch( e.getPropertyName() ) {
case FlatClientProperties.SCROLL_BAR_SHOW_BUTTONS:
JScrollBar vsb = scrollpane.getVerticalScrollBar();
JScrollBar hsb = scrollpane.getHorizontalScrollBar();
if( vsb != null ) {
vsb.revalidate();
vsb.repaint();
}
if( hsb != null ) {
hsb.revalidate();
hsb.repaint();
}
break;
case ScrollPaneConstants.LOWER_LEFT_CORNER:
case ScrollPaneConstants.LOWER_RIGHT_CORNER:
case ScrollPaneConstants.UPPER_LEFT_CORNER:
case ScrollPaneConstants.UPPER_RIGHT_CORNER:
// remove border from buttons added to corners
Object corner = e.getNewValue();
if( corner instanceof JButton &&
((JButton)corner).getBorder() instanceof FlatButtonBorder &&
scrollpane.getViewport() != null &&
scrollpane.getViewport().getView() instanceof JTable )
{
((JButton)corner).setBorder( BorderFactory.createEmptyBorder() );
((JButton)corner).setFocusable( false );
}
switch( e.getPropertyName() ) {
case FlatClientProperties.SCROLL_BAR_SHOW_BUTTONS:
JScrollBar vsb = scrollpane.getVerticalScrollBar();
JScrollBar hsb = scrollpane.getHorizontalScrollBar();
if( vsb != null ) {
vsb.revalidate();
vsb.repaint();
}
if( hsb != null ) {
hsb.revalidate();
hsb.repaint();
}
break;
}
case ScrollPaneConstants.LOWER_LEFT_CORNER:
case ScrollPaneConstants.LOWER_RIGHT_CORNER:
case ScrollPaneConstants.UPPER_LEFT_CORNER:
case ScrollPaneConstants.UPPER_RIGHT_CORNER:
// remove border from buttons added to corners
Object corner = e.getNewValue();
if( corner instanceof JButton &&
((JButton)corner).getBorder() instanceof FlatButtonBorder &&
scrollpane.getViewport() != null &&
scrollpane.getViewport().getView() instanceof JTable )
{
((JButton)corner).setBorder( BorderFactory.createEmptyBorder() );
((JButton)corner).setFocusable( false );
}
break;
}
};
}

View File

@@ -375,8 +375,8 @@ public class FlatSpinnerUI
Rectangle editorRect = new Rectangle( r );
Rectangle buttonsRect = new Rectangle( r );
// make button area square
int buttonsWidth = r.height;
// make button area square (if spinner has preferred height)
int buttonsWidth = parent.getPreferredSize().height - insets.top - insets.bottom;
buttonsRect.width = buttonsWidth;
if( parent.getComponentOrientation().isLeftToRight() ) {

View File

@@ -46,10 +46,13 @@ import com.formdev.flatlaf.util.UIScale;
* @uiDefault SplitPaneDivider.border Border
* @uiDefault SplitPaneDivider.draggingColor Color only used if continuousLayout is false
*
* <!-- JSplitPane -->
*
* @uiDefault SplitPane.continuousLayout boolean
*
* <!-- FlatSplitPaneUI -->
*
* @uiDefault Component.arrowType String chevron (default) or triangle
* @uiDefault SplitPane.continuousLayout boolean
* @uiDefault SplitPaneDivider.oneTouchArrowColor Color
* @uiDefault SplitPaneDivider.oneTouchHoverArrowColor Color
* @uiDefault SplitPaneDivider.oneTouchPressedArrowColor Color
@@ -65,7 +68,6 @@ public class FlatSplitPaneUI
extends BasicSplitPaneUI
{
protected String arrowType;
private Boolean continuousLayout;
protected Color oneTouchArrowColor;
protected Color oneTouchHoverArrowColor;
protected Color oneTouchPressedArrowColor;
@@ -85,8 +87,6 @@ public class FlatSplitPaneUI
oneTouchPressedArrowColor = UIManager.getColor( "SplitPaneDivider.oneTouchPressedArrowColor" );
super.installDefaults();
continuousLayout = (Boolean) UIManager.get( "SplitPane.continuousLayout" );
}
@Override
@@ -98,11 +98,6 @@ public class FlatSplitPaneUI
oneTouchPressedArrowColor = null;
}
@Override
public boolean isContinuousLayout() {
return super.isContinuousLayout() || (continuousLayout != null && Boolean.TRUE.equals( continuousLayout ));
}
@Override
public BasicSplitPaneDivider createDefaultDivider() {
return new FlatSplitPaneDivider( this );

View File

@@ -722,6 +722,13 @@ public class FlatTabbedPaneUI
}
protected Insets getRealTabAreaInsets( int tabPlacement ) {
// this is to avoid potential NPE in ensureSelectedTabIsVisible()
// (see https://github.com/JFormDesigner/FlatLaf/issues/299)
// but now should actually never occur because added more checks to
// ensureSelectedTabIsVisibleLater() and ensureSelectedTabIsVisible()
if( tabAreaInsets == null )
tabAreaInsets = new Insets( 0, 0, 0, 0 );
Insets currentTabAreaInsets = super.getTabAreaInsets( tabPlacement );
Insets insets = (Insets) currentTabAreaInsets.clone();
@@ -893,7 +900,7 @@ public class FlatTabbedPaneUI
Color color;
if( tabPane.isEnabled() && tabPane.isEnabledAt( tabIndex ) ) {
color = tabPane.getForegroundAt( tabIndex );
if( isSelected && (color instanceof UIResource) && selectedForeground != null )
if( isSelected && selectedForeground != null && color == tabPane.getForeground() )
color = selectedForeground;
} else
color = disabledForeground;
@@ -1386,13 +1393,18 @@ public class FlatTabbedPaneUI
}
protected void ensureSelectedTabIsVisibleLater() {
// do nothing if not yet displayable or if not invoked from dispatch thread,
// which may be the case when creating/modifying in another thread
if( !tabPane.isDisplayable() || !EventQueue.isDispatchThread() )
return;
EventQueue.invokeLater( () -> {
ensureSelectedTabIsVisible();
} );
}
protected void ensureSelectedTabIsVisible() {
if( tabPane == null || tabViewport == null )
if( tabPane == null || tabViewport == null || !tabPane.isDisplayable() )
return;
ensureCurrentLayout();
@@ -1559,7 +1571,7 @@ public class FlatTabbedPaneUI
FlatUIUtils.paintComponentBackground( g, left, top,
getWidth() - left - right,
getHeight() - top - bottom,
0, scale( buttonArc ) );
0, scale( (float) buttonArc ) );
}
}

View File

@@ -25,7 +25,6 @@ import java.awt.Graphics2D;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.geom.Rectangle2D;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JScrollPane;
import javax.swing.JViewport;
@@ -34,8 +33,9 @@ import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicTableUI;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.JTableHeader;
import com.formdev.flatlaf.util.Graphics2DProxy;
import com.formdev.flatlaf.util.SystemInfo;
import com.formdev.flatlaf.util.UIScale;
/**
@@ -137,12 +137,6 @@ public class FlatTableUI
oldIntercellSpacing = table.getIntercellSpacing();
table.setIntercellSpacing( intercellSpacing );
}
// checkbox is non-opaque in FlatLaf and therefore would not paint selection
// --> make checkbox renderer opaque (but opaque in Metal or Windows LaF)
TableCellRenderer booleanRenderer = table.getDefaultRenderer( Boolean.class );
if( booleanRenderer instanceof JCheckBox )
((JCheckBox)booleanRenderer).setOpaque( true );
}
@Override
@@ -221,15 +215,18 @@ public class FlatTableUI
// - do not paint last vertical grid line if line is on right edge of scroll pane
// - fix unstable grid line thickness when scaled at 125%, 150%, 175%, 225%, ...
// which paints either 1px or 2px lines depending on location
// - on Java 9+, fix wrong grid line thickness in dragged column
boolean hideLastVerticalLine = hideLastVerticalLine();
int tableWidth = table.getWidth();
JTableHeader header = table.getTableHeader();
boolean isDragging = (header != null && header.getDraggedColumn() != null);
double systemScaleFactor = UIScale.getSystemScaleFactor( (Graphics2D) g );
double lineThickness = (1. / systemScaleFactor) * (int) systemScaleFactor;
// Java 8 uses drawLine() to paint grid lines
// Java 9+ uses fillRect() to paint grid lines
// Java 9+ uses fillRect() to paint grid lines (except for dragged column)
g = new Graphics2DProxy( (Graphics2D) g ) {
@Override
public void drawLine( int x1, int y1, int x2, int y2 ) {
@@ -239,6 +236,22 @@ public class FlatTableUI
wasInvokedFromPaintGrid() )
return;
// on Java 9+, fix wrong grid line thickness in dragged column
if( isDragging &&
SystemInfo.isJava_9_orLater &&
((horizontalLines && y1 == y2) || (verticalLines && x1 == x2)) &&
wasInvokedFromPaintDraggedArea() )
{
if( y1 == y2 ) {
// horizontal grid line
super.fill( new Rectangle2D.Double( x1, y1, x2 - x1 + 1, lineThickness ) );
} else if( x1 == x2 ) {
// vertical grid line
super.fill( new Rectangle2D.Double( x1, y1, lineThickness, y2 - y1 + 1 ) );
}
return;
}
super.drawLine( x1, y1, x2, y2 );
}
@@ -266,11 +279,23 @@ public class FlatTableUI
}
private boolean wasInvokedFromPaintGrid() {
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() ) &&
"paintGrid".equals( stackTrace[i].getMethodName() ) )
return true;
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;
}

View File

@@ -16,6 +16,7 @@
package com.formdev.flatlaf.ui;
import static com.formdev.flatlaf.FlatClientProperties.*;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
@@ -47,6 +48,7 @@ import java.util.List;
import java.util.Objects;
import javax.accessibility.AccessibleContext;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.Icon;
import javax.swing.ImageIcon;
@@ -63,7 +65,7 @@ import javax.swing.border.AbstractBorder;
import javax.swing.border.Border;
import com.formdev.flatlaf.FlatClientProperties;
import com.formdev.flatlaf.FlatSystemProperties;
import com.formdev.flatlaf.ui.JBRCustomDecorations.JBRWindowTopBorder;
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;
@@ -77,12 +79,16 @@ import com.formdev.flatlaf.util.UIScale;
* @uiDefault TitlePane.inactiveForeground Color
* @uiDefault TitlePane.embeddedForeground Color
* @uiDefault TitlePane.borderColor Color optional
* @uiDefault TitlePane.unifiedBackground boolean
* @uiDefault TitlePane.iconSize Dimension
* @uiDefault TitlePane.iconMargins Insets
* @uiDefault TitlePane.titleMargins Insets
* @uiDefault TitlePane.menuBarMargins Insets
* @uiDefault TitlePane.menuBarEmbedded boolean
* @uiDefault TitlePane.buttonMaximizedHeight int
* @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
@@ -100,9 +106,11 @@ public class FlatTitlePane
protected final Color embeddedForeground = UIManager.getColor( "TitlePane.embeddedForeground" );
protected final Color borderColor = UIManager.getColor( "TitlePane.borderColor" );
protected final Insets menuBarMargins = UIManager.getInsets( "TitlePane.menuBarMargins" );
protected final Dimension iconSize = UIManager.getDimension( "TitlePane.iconSize" );
protected final int buttonMaximizedHeight = UIManager.getInt( "TitlePane.buttonMaximizedHeight" );
protected final boolean centerTitle = UIManager.getBoolean( "TitlePane.centerTitle" );
protected final boolean centerTitleIfMenuBarEmbedded = FlatUIUtils.getUIBoolean( "TitlePane.centerTitleIfMenuBarEmbedded", true );
protected final int menuBarTitleGap = FlatUIUtils.getUIInt( "TitlePane.menuBarTitleGap", 20 );
protected final JRootPane rootPane;
@@ -147,9 +155,15 @@ public class FlatTitlePane
protected void addSubComponents() {
leftPanel = new JPanel();
iconLabel = new JLabel();
titleLabel = new JLabel();
titleLabel = new JLabel() {
@Override
public void updateUI() {
setUI( new FlatTitleLabelUI() );
}
};
iconLabel.setBorder( new FlatEmptyBorder( UIManager.getInsets( "TitlePane.iconMargins" ) ) );
titleLabel.setBorder( new FlatEmptyBorder( UIManager.getInsets( "TitlePane.titleMargins" ) ) );
titleLabel.setHorizontalAlignment( SwingConstants.CENTER );
leftPanel.setLayout( new BoxLayout( leftPanel, BoxLayout.LINE_AXIS ) );
leftPanel.setOpaque( false );
@@ -159,9 +173,7 @@ public class FlatTitlePane
@Override
public Dimension getPreferredSize() {
JMenuBar menuBar = rootPane.getJMenuBar();
return (menuBar != null && menuBar.isVisible() && isMenuBarEmbedded())
? FlatUIUtils.addInsets( menuBar.getPreferredSize(), UIScale.scale( menuBarMargins ) )
: new Dimension();
return hasVisibleEmbeddedMenuBar( menuBar ) ? menuBar.getPreferredSize() : new Dimension();
}
};
leftPanel.add( menuBarPlaceholder );
@@ -184,6 +196,20 @@ public class FlatTitlePane
if( !getComponentOrientation().isLeftToRight() )
leftPanel.setLocation( leftPanel.getX() + (oldWidth - newWidth), leftPanel.getY() );
}
// If menu bar is embedded and contains a horizontal glue component,
// then move the title label to the same location as the glue component
// and give it the same width.
// This allows placing any component on the trailing side of the title pane.
JMenuBar menuBar = rootPane.getJMenuBar();
if( hasVisibleEmbeddedMenuBar( menuBar ) ) {
Component horizontalGlue = findHorizontalGlue( menuBar );
if( horizontalGlue != null ) {
Point glueLocation = SwingUtilities.convertPoint( horizontalGlue, 0, 0, titleLabel );
titleLabel.setBounds( titleLabel.getX() + glueLocation.x, titleLabel.getY(),
horizontalGlue.getWidth(), titleLabel.getHeight() );
}
}
}
} );
@@ -240,10 +266,17 @@ public class FlatTitlePane
}
protected void activeChanged( boolean active ) {
boolean hasEmbeddedMenuBar = rootPane.getJMenuBar() != null && rootPane.getJMenuBar().isVisible() && isMenuBarEmbedded();
Color background = FlatUIUtils.nonUIResource( active ? activeBackground : inactiveBackground );
Color foreground = FlatUIUtils.nonUIResource( active ? activeForeground : inactiveForeground );
Color titleForeground = (hasEmbeddedMenuBar && active) ? FlatUIUtils.nonUIResource( embeddedForeground ) : foreground;
Color background = clientPropertyColor( rootPane, TITLE_BAR_BACKGROUND, null );
Color foreground = clientPropertyColor( rootPane, TITLE_BAR_FOREGROUND, null );
Color titleForeground = foreground;
if( background == null )
background = FlatUIUtils.nonUIResource( active ? activeBackground : inactiveBackground );
if( foreground == null ) {
foreground = FlatUIUtils.nonUIResource( active ? activeForeground : inactiveForeground );
titleForeground = (active && hasVisibleEmbeddedMenuBar( rootPane.getJMenuBar() ))
? FlatUIUtils.nonUIResource( embeddedForeground )
: foreground;
}
setBackground( background );
titleLabel.setForeground( titleForeground );
@@ -252,8 +285,6 @@ public class FlatTitlePane
restoreButton.setForeground( foreground );
closeButton.setForeground( foreground );
titleLabel.setHorizontalAlignment( hasEmbeddedMenuBar ? SwingConstants.CENTER : SwingConstants.LEADING );
// this is necessary because hover/pressed colors are derived from background color
iconifyButton.setBackground( background );
maximizeButton.setBackground( background );
@@ -323,7 +354,7 @@ public class FlatTitlePane
iconLabel.setIcon( FlatTitlePaneIcon.create( images, iconSize ) );
else {
// no icon set on window --> use default icon
Icon defaultIcon = UIManager.getIcon( "InternalFrame.icon" );
Icon defaultIcon = UIManager.getIcon( "TitlePane.icon" );
if( defaultIcon != null && (defaultIcon.getIconWidth() == 0 || defaultIcon.getIconHeight() == 0) )
defaultIcon = null;
if( defaultIcon != null ) {
@@ -337,7 +368,7 @@ public class FlatTitlePane
// show/hide icon
iconLabel.setVisible( hasIcon );
updateJBRHitTestSpotsAndTitleBarHeightLater();
updateNativeTitleBarHeightAndHitTestSpotsLater();
}
@Override
@@ -355,7 +386,7 @@ public class FlatTitlePane
installWindowListeners();
}
updateJBRHitTestSpotsAndTitleBarHeightLater();
updateNativeTitleBarHeightAndHitTestSpotsLater();
}
@Override
@@ -394,11 +425,23 @@ public class FlatTitlePane
window.removeComponentListener( handler );
}
/**
* Returns whether this title pane currently has an visible and embedded menubar.
*/
protected boolean hasVisibleEmbeddedMenuBar( JMenuBar menuBar ) {
return menuBar != null && menuBar.isVisible() && isMenuBarEmbedded();
}
/**
* Returns whether the menubar should be embedded into the title pane.
*/
protected boolean isMenuBarEmbedded() {
// not storing value of "TitlePane.menuBarEmbedded" in class to allow changing at runtime
return UIManager.getBoolean( "TitlePane.menuBarEmbedded" ) &&
FlatClientProperties.clientPropertyBoolean( rootPane, FlatClientProperties.MENU_BAR_EMBEDDED, true ) &&
FlatSystemProperties.getBoolean( FlatSystemProperties.MENUBAR_EMBEDDED, true );
return FlatUIUtils.getBoolean( rootPane,
FlatSystemProperties.MENUBAR_EMBEDDED,
FlatClientProperties.MENU_BAR_EMBEDDED,
"TitlePane.menuBarEmbedded",
false );
}
protected Rectangle getMenuBarBounds() {
@@ -412,13 +455,42 @@ public class FlatTitlePane
Insets borderInsets = getBorder().getBorderInsets( this );
bounds.height += borderInsets.bottom;
return FlatUIUtils.subtractInsets( bounds, UIScale.scale( getMenuBarMargins() ) );
// If menu bar is embedded and contains a horizontal glue component,
// then make the menu bar wider so that it completely overlaps the title label.
// Since the menu bar is not opaque, the title label is still visible.
// The title label is moved to the location of the glue component by the layout manager.
// This allows placing any component on the trailing side of the title pane.
Component horizontalGlue = findHorizontalGlue( rootPane.getJMenuBar() );
if( horizontalGlue != null ) {
boolean leftToRight = getComponentOrientation().isLeftToRight();
int titleWidth = leftToRight
? buttonPanel.getX() - (leftPanel.getX() + leftPanel.getWidth())
: leftPanel.getX() - (buttonPanel.getX() + buttonPanel.getWidth());
titleWidth = Math.max( titleWidth, 0 ); // title width may be negative
bounds.width += titleWidth;
if( !leftToRight )
bounds.x -= titleWidth;
}
return bounds;
}
protected Insets getMenuBarMargins() {
return getComponentOrientation().isLeftToRight()
? menuBarMargins
: new Insets( menuBarMargins.top, menuBarMargins.right, menuBarMargins.bottom, menuBarMargins.left );
protected Component findHorizontalGlue( JMenuBar menuBar ) {
if( menuBar == null )
return null;
int count = menuBar.getComponentCount();
for( int i = count - 1; i >= 0; i-- ) {
Component c = menuBar.getComponent( i );
if( c instanceof Box.Filler && c.getMaximumSize().width >= Short.MAX_VALUE )
return c;
}
return null;
}
protected void titleBarColorsChanged() {
activeChanged( window == null || window.isActive() );
repaint();
}
protected void menuBarChanged() {
@@ -435,7 +507,8 @@ public class FlatTitlePane
}
protected void menuBarLayouted() {
updateJBRHitTestSpotsAndTitleBarHeightLater();
updateNativeTitleBarHeightAndHitTestSpotsLater();
revalidate();
}
/*debug
@@ -449,15 +522,26 @@ public class FlatTitlePane
}
if( debugHitTestSpots != null ) {
g.setColor( Color.blue );
Point offset = SwingUtilities.convertPoint( this, 0, 0, window );
for( Rectangle r : debugHitTestSpots )
g.drawRect( r.x, r.y, r.width, r.height );
g.drawRect( r.x - offset.x, r.y - offset.y, r.width - 1, r.height - 1 );
}
if( debugAppIconBounds != null ) {
g.setColor( Color.red );
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 );
}
}
debug*/
@Override
protected void paintComponent( Graphics g ) {
g.setColor( getBackground() );
// not storing value of "TitlePane.unifiedBackground" in class to allow changing at runtime
g.setColor( (UIManager.getBoolean( "TitlePane.unifiedBackground" ) &&
clientPropertyColor( rootPane, TITLE_BAR_BACKGROUND, null ) == null)
? FlatUIUtils.getParentBackground( this )
: getBackground() );
g.fillRect( 0, 0, getWidth(), getHeight() );
}
@@ -475,10 +559,12 @@ debug*/
* Iconifies the window.
*/
protected void iconify() {
if( window instanceof Frame ) {
Frame frame = (Frame) window;
if( !(window instanceof Frame) )
return;
Frame frame = (Frame) window;
if( !FlatNativeWindowBorder.showWindow( window, FlatNativeWindowBorder.Provider.SW_MINIMIZE ) )
frame.setExtendedState( frame.getExtendedState() | Frame.ICONIFIED );
}
}
/**
@@ -496,16 +582,17 @@ debug*/
rootPane.putClientProperty( "_flatlaf.maximizedBoundsUpToDate", true );
// maximize window
frame.setExtendedState( frame.getExtendedState() | Frame.MAXIMIZED_BOTH );
if( !FlatNativeWindowBorder.showWindow( frame, FlatNativeWindowBorder.Provider.SW_MAXIMIZE ) )
frame.setExtendedState( frame.getExtendedState() | Frame.MAXIMIZED_BOTH );
}
protected void updateMaximizedBounds() {
Frame frame = (Frame) window;
// set maximized bounds to avoid that maximized window overlaps Windows task bar
// (if not running in JBR and if not modified from the application)
// (if not having native window border and if not modified from the application)
Rectangle oldMaximizedBounds = frame.getMaximizedBounds();
if( !hasJBRCustomDecoration() &&
if( !hasNativeCustomDecoration() &&
(oldMaximizedBounds == null ||
Objects.equals( oldMaximizedBounds, rootPane.getClientProperty( "_flatlaf.maximizedBounds" ) )) )
{
@@ -584,8 +671,11 @@ debug*/
* Restores the window size.
*/
protected void restore() {
if( window instanceof Frame ) {
Frame frame = (Frame) window;
if( !(window instanceof Frame) )
return;
Frame frame = (Frame) window;
if( !FlatNativeWindowBorder.showWindow( window, FlatNativeWindowBorder.Provider.SW_RESTORE ) ) {
int state = frame.getExtendedState();
frame.setExtendedState( ((state & Frame.ICONIFIED) != 0)
? (state & ~Frame.ICONIFIED)
@@ -601,65 +691,118 @@ debug*/
window.dispatchEvent( new WindowEvent( window, WindowEvent.WINDOW_CLOSING ) );
}
protected boolean hasJBRCustomDecoration() {
return FlatRootPaneUI.canUseJBRCustomDecorations &&
window != null &&
JBRCustomDecorations.hasCustomDecoration( window );
private boolean hasJBRCustomDecoration() {
return window != null && JBRCustomDecorations.hasCustomDecoration( window );
}
protected void updateJBRHitTestSpotsAndTitleBarHeightLater() {
/**
* Returns whether windows uses native window border and has custom decorations enabled.
*/
protected boolean hasNativeCustomDecoration() {
return window != null && FlatNativeWindowBorder.hasCustomDecoration( window );
}
protected void updateNativeTitleBarHeightAndHitTestSpotsLater() {
EventQueue.invokeLater( () -> {
updateJBRHitTestSpotsAndTitleBarHeight();
updateNativeTitleBarHeightAndHitTestSpots();
} );
}
protected void updateJBRHitTestSpotsAndTitleBarHeight() {
protected void updateNativeTitleBarHeightAndHitTestSpots() {
if( !isDisplayable() )
return;
if( !hasJBRCustomDecoration() )
if( !hasNativeCustomDecoration() )
return;
List<Rectangle> hitTestSpots = new ArrayList<>();
if( iconLabel.isVisible() )
addJBRHitTestSpot( iconLabel, false, hitTestSpots );
addJBRHitTestSpot( buttonPanel, false, hitTestSpots );
addJBRHitTestSpot( menuBarPlaceholder, true, hitTestSpots );
int titleBarHeight = getHeight();
// slightly reduce height so that component receives mouseExit events
if( titleBarHeight > 0 )
titleBarHeight--;
JBRCustomDecorations.setHitTestSpotsAndTitleBarHeight( window, hitTestSpots, titleBarHeight );
List<Rectangle> hitTestSpots = new ArrayList<>();
Rectangle appIconBounds = null;
if( iconLabel.isVisible() ) {
// compute real icon size (without insets)
Point location = SwingUtilities.convertPoint( iconLabel, 0, 0, window );
Insets iconInsets = iconLabel.getInsets();
Rectangle iconBounds = new Rectangle(
location.x + iconInsets.left,
location.y + iconInsets.top,
iconLabel.getWidth() - iconInsets.left - iconInsets.right,
iconLabel.getHeight() - iconInsets.top - iconInsets.bottom );
if( hasJBRCustomDecoration() )
hitTestSpots.add( iconBounds );
else
appIconBounds = iconBounds;
}
Rectangle r = getNativeHitTestSpot( buttonPanel );
if( r != null )
hitTestSpots.add( r );
JMenuBar menuBar = rootPane.getJMenuBar();
if( hasVisibleEmbeddedMenuBar( menuBar ) ) {
r = getNativeHitTestSpot( menuBarPlaceholder );
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.
Point glueLocation = SwingUtilities.convertPoint( horizontalGlue, 0, 0, window );
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 );
} 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.grow( HIT_TEST_SPOT_GROW, HIT_TEST_SPOT_GROW );
hitTestSpots.add( r2 );
}
hitTestSpots.add( r );
}
}
FlatNativeWindowBorder.setTitleBarHeightAndHitTestSpots( window, titleBarHeight, hitTestSpots, appIconBounds );
/*debug
debugHitTestSpots = hitTestSpots;
debugTitleBarHeight = titleBarHeight;
debugHitTestSpots = hitTestSpots;
debugAppIconBounds = appIconBounds;
repaint();
debug*/
}
protected void addJBRHitTestSpot( JComponent c, boolean subtractMenuBarMargins, List<Rectangle> hitTestSpots ) {
protected Rectangle getNativeHitTestSpot( JComponent c ) {
Dimension size = c.getSize();
if( size.width <= 0 || size.height <= 0 )
return;
return null;
Point location = SwingUtilities.convertPoint( c, 0, 0, window );
Rectangle r = new Rectangle( location, size );
if( subtractMenuBarMargins )
r = FlatUIUtils.subtractInsets( r, UIScale.scale( getMenuBarMargins() ) );
// slightly increase rectangle so that component receives mouseExit events
r.grow( 2, 2 );
hitTestSpots.add( r );
r.grow( HIT_TEST_SPOT_GROW, HIT_TEST_SPOT_GROW );
return r;
}
private static final int HIT_TEST_SPOT_GROW = 2;
/*debug
private List<Rectangle> debugHitTestSpots;
private int debugTitleBarHeight;
private List<Rectangle> debugHitTestSpots;
private Rectangle debugAppIconBounds;
debug*/
//---- class TitlePaneBorder ----------------------------------------------
//---- class FlatTitlePaneBorder ------------------------------------------
protected class FlatTitlePaneBorder
extends AbstractBorder
@@ -676,8 +819,8 @@ debug*/
} else if( borderColor != null && (rootPane.getJMenuBar() == null || !rootPane.getJMenuBar().isVisible()) )
insets.bottom += UIScale.scale( 1 );
if( hasJBRCustomDecoration() )
insets = FlatUIUtils.addInsets( insets, JBRWindowTopBorder.getInstance().getBorderInsets() );
if( hasNativeCustomDecoration() && !isWindowMaximized( c ) )
insets = FlatUIUtils.addInsets( insets, WindowTopBorder.getInstance().getBorderInsets() );
return insets;
}
@@ -695,13 +838,57 @@ debug*/
FlatUIUtils.paintFilledRectangle( g, borderColor, x, y + height - lineHeight, width, lineHeight );
}
if( hasJBRCustomDecoration() )
JBRWindowTopBorder.getInstance().paintBorder( c, g, x, y, width, height );
if( hasNativeCustomDecoration() && !isWindowMaximized( c ) )
WindowTopBorder.getInstance().paintBorder( c, g, x, y, width, height );
}
protected Border getMenuBarBorder() {
JMenuBar menuBar = rootPane.getJMenuBar();
return (menuBar != null && menuBar.isVisible() && isMenuBarEmbedded()) ? menuBar.getBorder() : null;
return hasVisibleEmbeddedMenuBar( menuBar ) ? menuBar.getBorder() : null;
}
protected boolean isWindowMaximized( Component c ) {
return window instanceof Frame
? (((Frame)window).getExtendedState() & Frame.MAXIMIZED_BOTH) != 0
: false;
}
}
//---- class FlatTitleLabelUI ---------------------------------------------
/**
* @since 1.1
*/
protected class FlatTitleLabelUI
extends FlatLabelUI
{
@Override
protected void paintEnabledText( JLabel l, Graphics g, String s, int textX, int textY ) {
boolean hasEmbeddedMenuBar = hasVisibleEmbeddedMenuBar( rootPane.getJMenuBar() );
int labelWidth = l.getWidth();
int textWidth = labelWidth - (textX * 2);
int gap = UIScale.scale( menuBarTitleGap );
// The passed in textX coordinate is always to horizontally center the text within the label bounds.
// Modify textX so that the text is painted either centered within the window bounds or leading aligned.
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).
int centeredTextX = ((l.getParent().getWidth() - textWidth) / 2) - l.getX();
if( centeredTextX >= gap && centeredTextX + textWidth <= labelWidth - gap )
textX = centeredTextX;
} else {
// leading aligned
boolean leftToRight = getComponentOrientation().isLeftToRight();
Insets insets = l.getInsets();
int leadingInset = hasEmbeddedMenuBar ? gap : (leftToRight ? insets.left : insets.right);
int leadingTextX = leftToRight ? leadingInset : labelWidth - leadingInset - textWidth;
if( leftToRight ? leadingTextX < textX : leadingTextX > textX )
textX = leadingTextX;
}
super.paintEnabledText( l, g, s, textX, textY );
}
}
@@ -730,7 +917,7 @@ debug*/
break;
case "componentOrientation":
updateJBRHitTestSpotsAndTitleBarHeightLater();
updateNativeTitleBarHeightAndHitTestSpotsLater();
break;
}
}
@@ -740,10 +927,10 @@ debug*/
@Override
public void windowActivated( WindowEvent e ) {
activeChanged( true );
updateJBRHitTestSpotsAndTitleBarHeight();
updateNativeTitleBarHeightAndHitTestSpots();
if( hasJBRCustomDecoration() )
JBRWindowTopBorder.getInstance().repaintBorder( FlatTitlePane.this );
if( hasNativeCustomDecoration() )
WindowTopBorder.getInstance().repaintBorder( FlatTitlePane.this );
repaintWindowBorder();
}
@@ -751,10 +938,10 @@ debug*/
@Override
public void windowDeactivated( WindowEvent e ) {
activeChanged( false );
updateJBRHitTestSpotsAndTitleBarHeight();
updateNativeTitleBarHeightAndHitTestSpots();
if( hasJBRCustomDecoration() )
JBRWindowTopBorder.getInstance().repaintBorder( FlatTitlePane.this );
if( hasNativeCustomDecoration() )
WindowTopBorder.getInstance().repaintBorder( FlatTitlePane.this );
repaintWindowBorder();
}
@@ -762,7 +949,7 @@ debug*/
@Override
public void windowStateChanged( WindowEvent e ) {
frameStateChanged();
updateJBRHitTestSpotsAndTitleBarHeight();
updateNativeTitleBarHeightAndHitTestSpots();
}
//---- interface MouseListener ----
@@ -775,7 +962,7 @@ debug*/
if( e.getSource() == iconLabel ) {
// double-click on icon closes window
close();
} else if( !hasJBRCustomDecoration() &&
} else if( !hasNativeCustomDecoration() &&
window instanceof Frame &&
((Frame)window).isResizable() )
{
@@ -808,8 +995,8 @@ debug*/
if( window == null )
return; // should newer occur
if( hasJBRCustomDecoration() )
return; // do nothing if running in JBR
if( hasNativeCustomDecoration() )
return; // do nothing if having native window border
// restore window if it is maximized
if( window instanceof Frame ) {
@@ -852,7 +1039,7 @@ debug*/
@Override
public void componentResized( ComponentEvent e ) {
updateJBRHitTestSpotsAndTitleBarHeightLater();
updateNativeTitleBarHeightAndHitTestSpotsLater();
}
@Override

View File

@@ -71,7 +71,7 @@ public class FlatToolTipUI
if( sharedPropertyChangedListener == null ) {
sharedPropertyChangedListener = e -> {
String name = e.getPropertyName();
if( name == "text" || name == "font" || name == "foreground" ) {
if( name == "tiptext" || name == "font" || name == "foreground" ) {
JToolTip toolTip = (JToolTip) e.getSource();
FlatLabelUI.updateHTMLRenderer( toolTip, toolTip.getTipText(), false );
}

View File

@@ -16,6 +16,8 @@
package com.formdev.flatlaf.ui;
import static com.formdev.flatlaf.FlatClientProperties.*;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
@@ -23,10 +25,11 @@ import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import javax.swing.CellRendererPane;
import javax.swing.Icon;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTree;
import javax.swing.LookAndFeel;
import javax.swing.SwingUtilities;
@@ -145,9 +148,6 @@ public class FlatTreeUI
@Override
protected MouseListener createMouseListener() {
if( !wideSelection )
return super.createMouseListener();
return new BasicTreeUI.MouseHandler() {
@Override
public void mousePressed( MouseEvent e ) {
@@ -165,7 +165,7 @@ public class FlatTreeUI
}
private MouseEvent handleWideMouseEvent( MouseEvent e ) {
if( !tree.isEnabled() || !SwingUtilities.isLeftMouseButton( e ) || e.isConsumed() )
if( !isWideSelection() || !tree.isEnabled() || !SwingUtilities.isLeftMouseButton( e ) || e.isConsumed() )
return e;
int x = e.getX();
@@ -192,32 +192,38 @@ public class FlatTreeUI
@Override
protected PropertyChangeListener createPropertyChangeListener() {
if( !wideSelection )
return super.createPropertyChangeListener();
PropertyChangeListener superListener = super.createPropertyChangeListener();
return e -> {
superListener.propertyChange( e );
return new BasicTreeUI.PropertyChangeHandler() {
@Override
public void propertyChange( PropertyChangeEvent e ) {
super.propertyChange( e );
if( e.getSource() == tree ) {
switch( e.getPropertyName() ) {
case TREE_WIDE_SELECTION:
case TREE_PAINT_SELECTION:
tree.repaint();
break;
if( e.getSource() == tree && e.getPropertyName() == "dropLocation" ) {
JTree.DropLocation oldValue = (JTree.DropLocation) e.getOldValue();
repaintWideDropLocation( oldValue );
repaintWideDropLocation( tree.getDropLocation() );
case "dropLocation":
if( isWideSelection() ) {
JTree.DropLocation oldValue = (JTree.DropLocation) e.getOldValue();
repaintWideDropLocation( oldValue );
repaintWideDropLocation( tree.getDropLocation() );
}
break;
}
}
private void repaintWideDropLocation(JTree.DropLocation loc) {
if( loc == null || isDropLine( loc ) )
return;
Rectangle r = tree.getPathBounds( loc.getPath() );
if( r != null )
tree.repaint( 0, r.y, tree.getWidth(), r.height );
}
};
}
private void repaintWideDropLocation(JTree.DropLocation loc) {
if( loc == null || isDropLine( loc ) )
return;
Rectangle r = tree.getPathBounds( loc.getPath() );
if( r != null )
tree.repaint( 0, r.y, tree.getWidth(), r.height );
}
/**
* Same as super.paintRow(), but supports wide selection and uses
* inactive selection background/foreground if tree is not focused.
@@ -227,34 +233,22 @@ public class FlatTreeUI
TreePath path, int row, boolean isExpanded, boolean hasBeenExpanded, boolean isLeaf )
{
boolean isEditing = (editingComponent != null && editingRow == row);
boolean hasFocus = FlatUIUtils.isPermanentFocusOwner( tree );
boolean cellHasFocus = hasFocus && (row == getLeadSelectionRow());
boolean isSelected = tree.isRowSelected( row );
boolean isDropRow = isDropRow( row );
boolean needsSelectionPainting = (isSelected || isDropRow) && isPaintSelection();
// do not paint row if editing, except if selection needs painted
if( isEditing && !needsSelectionPainting )
return;
boolean hasFocus = FlatUIUtils.isPermanentFocusOwner( tree );
boolean cellHasFocus = hasFocus && (row == getLeadSelectionRow());
// if tree is used as cell renderer in another component (e.g. in Rhino JavaScript debugger),
// check whether that component is focused to get correct selection colors
if( !hasFocus && isSelected && tree.getParent() instanceof CellRendererPane )
hasFocus = FlatUIUtils.isPermanentFocusOwner( tree.getParent().getParent() );
// wide selection background
if( wideSelection && (isSelected || isDropRow) ) {
// fill background
g.setColor( isDropRow
? UIManager.getColor( "Tree.dropCellBackground" )
: (hasFocus ? selectionBackground : selectionInactiveBackground) );
g.fillRect( 0, bounds.y, tree.getWidth(), bounds.height );
// paint expand/collapse icon
if( shouldPaintExpandControl( path, row, isExpanded, hasBeenExpanded, isLeaf ) ) {
paintExpandControl( g, clipBounds, insets, bounds,
path, row, isExpanded, hasBeenExpanded, isLeaf );
}
}
if( isEditing )
return;
// get renderer component
Component rendererComponent = currentCellRenderer.getTreeCellRendererComponent( tree,
path.getLastPathComponent(), isSelected, isExpanded, isLeaf, row, cellHasFocus );
@@ -290,8 +284,51 @@ public class FlatTreeUI
}
}
// paint selection background
if( needsSelectionPainting ) {
// set selection color
Color oldColor = g.getColor();
g.setColor( isDropRow
? UIManager.getColor( "Tree.dropCellBackground" )
: (rendererComponent instanceof DefaultTreeCellRenderer
? ((DefaultTreeCellRenderer)rendererComponent).getBackgroundSelectionColor()
: (hasFocus ? selectionBackground : selectionInactiveBackground)) );
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 );
}
} else {
// non-wide selection
int xOffset = 0;
int imageOffset = 0;
if( rendererComponent instanceof JLabel ) {
JLabel label = (JLabel) rendererComponent;
Icon icon = label.getIcon();
imageOffset = (icon != null && label.getText() != null)
? icon.getIconWidth() + Math.max( label.getIconTextGap() - 1, 0 )
: 0;
xOffset = label.getComponentOrientation().isLeftToRight() ? imageOffset : 0;
}
g.fillRect( bounds.x + xOffset, bounds.y, bounds.width - imageOffset, bounds.height );
}
// this is actually not necessary because renderer should always set color
// before painting, but doing anyway to avoid any side effect (in bad renderers)
g.setColor( oldColor );
}
// paint renderer
rendererPane.paintComponent( g, rendererComponent, tree, bounds.x, bounds.y, bounds.width, bounds.height, true );
if( !isEditing )
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 )
@@ -314,6 +351,14 @@ public class FlatTreeUI
@Override
protected Rectangle getDropLineRect( DropLocation loc ) {
Rectangle r = super.getDropLineRect( loc );
return wideSelection ? new Rectangle( 0, r.y, tree.getWidth(), r.height ) : r;
return isWideSelection() ? new Rectangle( 0, r.y, tree.getWidth(), r.height ) : r;
}
protected boolean isWideSelection() {
return clientPropertyBoolean( tree, TREE_WIDE_SELECTION, wideSelection );
}
protected boolean isPaintSelection() {
return clientPropertyBoolean( tree, TREE_PAINT_SELECTION, true );
}
}

View File

@@ -16,6 +16,7 @@
package com.formdev.flatlaf.ui;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
@@ -30,6 +31,7 @@ import java.awt.KeyboardFocusManager;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.Window;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
@@ -39,10 +41,12 @@ import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import java.util.IdentityHashMap;
import java.util.WeakHashMap;
import java.util.function.Predicate;
import java.util.function.Supplier;
import javax.swing.JComponent;
import javax.swing.JTable;
import javax.swing.LookAndFeel;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.border.Border;
@@ -50,6 +54,7 @@ import javax.swing.border.CompoundBorder;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.UIResource;
import com.formdev.flatlaf.FlatClientProperties;
import com.formdev.flatlaf.FlatSystemProperties;
import com.formdev.flatlaf.util.DerivedColor;
import com.formdev.flatlaf.util.Graphics2DProxy;
import com.formdev.flatlaf.util.HiDPIUtils;
@@ -118,6 +123,14 @@ public class FlatUIUtils
return (color != null) ? color : UIManager.getColor( defaultKey );
}
/**
* @since 1.1
*/
public static boolean getUIBoolean( String key, boolean defaultValue ) {
Object value = UIManager.get( key );
return (value instanceof Boolean) ? (Boolean) value : defaultValue;
}
public static int getUIInt( String key, int defaultValue ) {
Object value = UIManager.get( key );
return (value instanceof Integer) ? (Integer) value : defaultValue;
@@ -128,6 +141,25 @@ public class FlatUIUtils
return (value instanceof Number) ? ((Number)value).floatValue() : defaultValue;
}
/**
* @since 1.1.2
*/
public static boolean getBoolean( JComponent c, String systemPropertyKey,
String clientPropertyKey, String uiKey, boolean defaultValue )
{
// check whether forced to true/false via system property
Boolean value = FlatSystemProperties.getBooleanStrict( systemPropertyKey, null );
if( value != null )
return value;
// check whether forced to true/false via client property
value = FlatClientProperties.clientPropertyBooleanStrict( c, clientPropertyKey, null );
if( value != null )
return value;
return getUIBoolean( uiKey, defaultValue );
}
public static boolean isChevron( String arrowType ) {
return !"triangle".equals( arrowType );
}
@@ -173,12 +205,29 @@ public class FlatUIUtils
/**
* Returns whether the given component is the permanent focus owner and
* is in the active window. Used to paint focus indicators.
* is in the active window or in a popup window owned by the active window.
* Used to paint focus indicators.
*/
@SuppressWarnings( "unchecked" )
public static boolean isPermanentFocusOwner( Component c ) {
KeyboardFocusManager keyboardFocusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager();
if( c instanceof JComponent ) {
Object value = ((JComponent)c).getClientProperty( FlatClientProperties.COMPONENT_FOCUS_OWNER );
if( value instanceof Predicate ) {
return ((Predicate<JComponent>)value).test( (JComponent) c ) &&
isInActiveWindow( c, keyboardFocusManager.getActiveWindow() );
}
}
return keyboardFocusManager.getPermanentFocusOwner() == c &&
keyboardFocusManager.getActiveWindow() == SwingUtilities.windowForComponent( c );
isInActiveWindow( c, keyboardFocusManager.getActiveWindow() );
}
private static boolean isInActiveWindow( Component c, Window activeWindow ) {
Window window = SwingUtilities.windowForComponent( c );
return window == activeWindow ||
(window != null && window.getType() == Window.Type.POPUP && window.getOwner() == activeWindow);
}
/**
@@ -334,7 +383,7 @@ public class FlatUIUtils
float innerArc = arc - (lineWidth * 2);
// reduce outer arc slightly for small arcs to make the curve slightly wider
if( arc > 0 && arc < UIScale.scale( 10 ) )
if( focusWidth > 0 && arc > 0 && arc < UIScale.scale( 10 ) )
outerArc -= UIScale.scale( 2f );
Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD );
@@ -593,6 +642,111 @@ public class FlatUIUtils
return rect;
}
/**
* Paints a chevron or triangle arrow in the center of the given rectangle.
*
* @param g the graphics context used for painting
* @param x the x coordinate of the rectangle
* @param y the y coordinate of the rectangle
* @param width the width of the rectangle
* @param height the height of the rectangle
* @param direction the arrow direction ({@link SwingConstants#NORTH}, {@link SwingConstants#SOUTH}
* {@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)
*
* @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 )
{
// compute arrow width/height
int aw = UIScale.scale( arrowSize + (chevron ? 0 : 1) );
int ah = UIScale.scale( (arrowSize / 2) + (chevron ? 0 : 1) );
// rotate arrow width/height for horizontal directions
boolean vert = (direction == SwingConstants.NORTH || direction == SwingConstants.SOUTH);
if( !vert ) {
int temp = aw;
aw = ah;
ah = temp;
}
// chevron lines end 1px outside of width/height
// --> add 1px to arrow width/height for position calculation
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 ) );
// paint arrow
g.translate( ax, ay );
/*debug
debugPaintArrow( g, Color.red, vert, aw + extra, 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 );
g.setStroke( oldStroke );
} else {
// triangle
g.fill( arrowShape );
}
g.translate( -ax, -ay );
}
/**
* Creates a chevron or triangle arrow shape for the given direction and size.
* <p>
* The chevron shape is a 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}
* {@link SwingConstants#WEST} or {@link SwingConstants#EAST})
* @param chevron {@code true} for chevron arrow, {@code false} for triangle arrow
* @param w the width of the returned shape
* @param h the height of the returned shape
*
* @since 1.1
*/
public static Shape createArrowShape( int direction, boolean chevron, float w, float h ) {
switch( direction ) {
case SwingConstants.NORTH: return createPath( !chevron, 0,h, (w / 2f),0, w,h );
case SwingConstants.SOUTH: return createPath( !chevron, 0,0, (w / 2f),h, w,0 );
case SwingConstants.WEST: return createPath( !chevron, w,0, 0,(h / 2f), w,h );
case SwingConstants.EAST: return createPath( !chevron, 0,0, w,(h / 2f), 0,h );
default: return new Path2D.Float();
}
}
/*debug
private static void debugPaintArrow( Graphics2D g, Color color, boolean vert, int w, int h ) {
Color oldColor = g.getColor();
g.setColor( color );
g.fill( createRectangle( 0, 0, w, h, 1 ) );
int xy1 = -2;
int x2 = w + 1;
int y2 = h + 1;
for( int i = 0; i < 20; i++ ) {
g.fillRect( 0, xy1, 1, 1 );
g.fillRect( 0, y2, 1, 1 );
g.fillRect( xy1, 0, 1, 1 );
g.fillRect( x2, 0, 1, 1 );
xy1 -= 2;
x2 += 2;
y2 += 2;
}
g.setColor( oldColor );
}
debug*/
/**
* Creates a closed path for the given points.
*/

View File

@@ -0,0 +1,405 @@
/*
* 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.Color;
import java.awt.Dialog;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.GraphicsConfiguration;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Window;
import java.awt.geom.AffineTransform;
import java.util.Collections;
import java.util.IdentityHashMap;
import java.util.List;
import java.util.Map;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.Timer;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.EventListenerList;
import com.formdev.flatlaf.util.LoggingFacade;
import com.formdev.flatlaf.util.NativeLibrary;
import com.formdev.flatlaf.util.SystemInfo;
//
// Interesting resources:
// https://github.com/microsoft/terminal/blob/main/src/cascadia/WindowsTerminal/NonClientIslandWindow.cpp
// https://docs.microsoft.com/en-us/windows/win32/dwm/customframe
// https://github.com/JetBrains/JetBrainsRuntime/blob/master/src/java.desktop/windows/native/libawt/windows/awt_Frame.cpp
// https://github.com/JetBrains/JetBrainsRuntime/commit/d2820524a1aa211b1c49b30f659b9b4d07a6f96e
// https://github.com/JetBrains/JetBrainsRuntime/pull/18
// https://medium.com/swlh/customizing-the-title-bar-of-an-application-window-50a4ac3ed27e
// https://github.com/kalbetredev/CustomDecoratedJFrame
// https://github.com/Guerra24/NanoUI-win32
// https://github.com/oberth/custom-chrome
// https://github.com/rossy/borderless-window
//
/**
* Native window border support for Windows 10 when using custom decorations.
* <p>
* If the application wants to use custom decorations, the Windows 10 title bar is hidden
* (including minimize, maximize and close buttons), but not the resize borders (including drop shadow).
* Windows 10 window snapping functionality will remain unaffected:
* https://support.microsoft.com/en-us/windows/snap-your-windows-885a9b1e-a983-a3b1-16cd-c531795e6241
*
* @author Karl Tauber
* @since 1.1
*/
class FlatWindowsNativeWindowBorder
implements FlatNativeWindowBorder.Provider
{
private final Map<Window, WndProc> windowsMap = Collections.synchronizedMap( new IdentityHashMap<>() );
private final EventListenerList listenerList = new EventListenerList();
private Timer fireStateChangedTimer;
private boolean colorizationUpToDate;
private boolean colorizationColorAffectsBorders;
private Color colorizationColor;
private int colorizationColorBalance;
private static NativeLibrary nativeLibrary;
private static FlatWindowsNativeWindowBorder instance;
static FlatNativeWindowBorder.Provider getInstance() {
// requires Windows 10
if( !SystemInfo.isWindows_10_orLater )
return null;
// load native library
if( nativeLibrary == null ) {
if( !SystemInfo.isJava_9_orLater ) {
// In Java 8, load jawt.dll (part of JRE) explicitly because it
// is not found when running application with <jdk>/bin/java.exe.
// When using <jdk>/jre/bin/java.exe, it is found.
// jawt.dll is located in <jdk>/jre/bin/.
// Java 9 and later does not have this problem.
try {
System.loadLibrary( "jawt" );
} 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 );
}
// check whether native library was successfully loaded
if( !nativeLibrary.isLoaded() )
return null;
// create new instance
if( instance == null )
instance = new FlatWindowsNativeWindowBorder();
return instance;
}
private FlatWindowsNativeWindowBorder() {
}
@Override
public boolean hasCustomDecoration( Window window ) {
return windowsMap.containsKey( window );
}
/**
* Tell the window whether the application wants 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).
*/
@Override
public void setHasCustomDecoration( Window window, boolean hasCustomDecoration ) {
if( hasCustomDecoration )
install( window );
else
uninstall( window );
}
private void install( Window window ) {
// requires Windows 10
if( !SystemInfo.isWindows_10_orLater )
return;
// only JFrame and JDialog are supported
if( !(window instanceof JFrame) && !(window instanceof JDialog) )
return;
// not supported if frame/dialog is undecorated
if( (window instanceof Frame && ((Frame)window).isUndecorated()) ||
(window instanceof Dialog && ((Dialog)window).isUndecorated()) )
return;
// check whether already installed
if( windowsMap.containsKey( window ) )
return;
// install
WndProc wndProc = new WndProc( window );
if( wndProc.hwnd == 0 )
return;
windowsMap.put( window, wndProc );
}
private void uninstall( Window window ) {
WndProc wndProc = windowsMap.remove( window );
if( wndProc != null )
wndProc.uninstall();
}
@Override
public void setTitleBarHeight( Window window, int titleBarHeight ) {
WndProc wndProc = windowsMap.get( window );
if( wndProc == null )
return;
wndProc.titleBarHeight = titleBarHeight;
}
@Override
public void setTitleBarHitTestSpots( Window window, List<Rectangle> hitTestSpots ) {
WndProc wndProc = windowsMap.get( window );
if( wndProc == null )
return;
wndProc.hitTestSpots = hitTestSpots.toArray( new Rectangle[hitTestSpots.size()] );
}
@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;
}
@Override
public boolean showWindow( Window window, int cmd ) {
WndProc wndProc = windowsMap.get( window );
if( wndProc == null )
return false;
wndProc.showWindow( wndProc.hwnd, cmd );
return true;
}
@Override
public boolean isColorizationColorAffectsBorders() {
updateColorization();
return colorizationColorAffectsBorders;
}
@Override
public Color getColorizationColor() {
updateColorization();
return colorizationColor;
}
@Override
public int getColorizationColorBalance() {
updateColorization();
return colorizationColorBalance;
}
private void updateColorization() {
if( colorizationUpToDate )
return;
colorizationUpToDate = true;
String subKey = "SOFTWARE\\Microsoft\\Windows\\DWM";
int value = registryGetIntValue( subKey, "ColorPrevalence", -1 );
colorizationColorAffectsBorders = (value > 0);
value = registryGetIntValue( subKey, "ColorizationColor", -1 );
colorizationColor = (value != -1) ? new Color( value ) : null;
colorizationColorBalance = registryGetIntValue( subKey, "ColorizationColorBalance", -1 );
}
private native static int registryGetIntValue( String key, String valueName, int defaultValue );
@Override
public void addChangeListener( ChangeListener l ) {
listenerList.add( ChangeListener.class, l );
}
@Override
public void removeChangeListener( ChangeListener l ) {
listenerList.remove( ChangeListener.class, l );
}
private void fireStateChanged() {
Object[] listeners = listenerList.getListenerList();
if( listeners.length == 0 )
return;
ChangeEvent e = new ChangeEvent( this );
for( int i = 0; i < listeners.length; i += 2 ) {
if( listeners[i] == ChangeListener.class )
((ChangeListener)listeners[i+1]).stateChanged( e );
}
}
/**
* Because there may be sent many WM_DWMCOLORIZATIONCOLORCHANGED messages,
* slightly delay event firing and fire it only once (on the AWT thread).
*/
void fireStateChangedLaterOnce() {
EventQueue.invokeLater( () -> {
if( fireStateChangedTimer != null ) {
fireStateChangedTimer.restart();
return;
}
fireStateChangedTimer = new Timer( 300, e -> {
fireStateChangedTimer = null;
colorizationUpToDate = false;
fireStateChanged();
} );
fireStateChangedTimer.setRepeats( false );
fireStateChangedTimer.start();
} );
}
//---- class WndProc ------------------------------------------------------
private class WndProc
{
// WM_NCHITTEST mouse position codes
private static final int
HTCLIENT = 1,
HTCAPTION = 2,
HTSYSMENU = 3,
HTTOP = 12;
private Window window;
private final long hwnd;
private int titleBarHeight;
private Rectangle[] hitTestSpots;
private Rectangle appIconBounds;
WndProc( Window window ) {
this.window = window;
hwnd = installImpl( window );
// remove the OS window title bar
if( window instanceof JFrame && ((JFrame)window).getExtendedState() != 0 ) {
// In case that the frame should be maximized or minimized immediately
// when showing, then it is necessary to defer ::SetWindowPos() invocation.
// Otherwise the frame will not be maximized or minimized.
// This occurs only if frame.pack() was no invoked.
EventQueue.invokeLater( () -> {
updateFrame( hwnd );
});
} else
updateFrame( hwnd );
}
void uninstall() {
uninstallImpl( hwnd );
// cleanup
window = null;
}
private native long installImpl( Window window );
private native void uninstallImpl( long hwnd );
private native void updateFrame( long hwnd );
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
Point pt = scaleDown( x, y );
int sx = pt.x;
int sy = pt.y;
// 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 ) )
return HTSYSMENU;
boolean isOnTitleBar = (sy < titleBarHeight);
if( isOnTitleBar ) {
// use a second reference to the array to avoid that it can be changed
// in another thread while processing the array
Rectangle[] hitTestSpots2 = hitTestSpots;
for( Rectangle spot : hitTestSpots2 ) {
if( spot.contains( sx, sy ) )
return HTCLIENT;
}
return isOnResizeBorder ? HTTOP : HTCAPTION;
}
return isOnResizeBorder ? HTTOP : HTCLIENT;
}
/**
* Scales down in the same way as AWT.
* See AwtWin32GraphicsDevice::ScaleDownX() and ::ScaleDownY()
*/
private Point scaleDown( int x, int y ) {
GraphicsConfiguration gc = window.getGraphicsConfiguration();
if( gc == null )
return new Point( x, y );
AffineTransform t = gc.getDefaultTransform();
return new Point( clipRound( x / t.getScaleX() ), clipRound( y / t.getScaleY() ) );
}
/**
* Rounds in the same way as AWT.
* See AwtWin32GraphicsDevice::ClipRound()
*/
private int clipRound( double value ) {
value -= 0.5;
if( value < Integer.MIN_VALUE )
return Integer.MIN_VALUE;
if( value > Integer.MAX_VALUE )
return Integer.MAX_VALUE;
return (int) Math.ceil( value );
}
// invoked from native code
private boolean isFullscreen() {
GraphicsConfiguration gc = window.getGraphicsConfiguration();
if( gc == null )
return false;
return gc.getDevice().getFullScreenWindow() == window;
}
// invoked from native code
private void fireStateChangedLaterOnce() {
FlatWindowsNativeWindowBorder.this.fireStateChangedLaterOnce();
}
}
}

View File

@@ -29,17 +29,14 @@ import java.awt.event.HierarchyEvent;
import java.awt.event.HierarchyListener;
import java.beans.PropertyChangeListener;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JRootPane;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.plaf.BorderUIResource;
import com.formdev.flatlaf.FlatLaf;
import com.formdev.flatlaf.FlatSystemProperties;
import com.formdev.flatlaf.util.LoggingFacade;
import com.formdev.flatlaf.util.HiDPIUtils;
import com.formdev.flatlaf.util.SystemInfo;
@@ -55,26 +52,29 @@ import com.formdev.flatlaf.util.SystemInfo;
*/
public class JBRCustomDecorations
{
private static boolean initialized;
private static Boolean supported;
private static Method Window_hasCustomDecoration;
private static Method Window_setHasCustomDecoration;
private static Method WWindowPeer_setCustomDecorationHitTestSpots;
private static Method WWindowPeer_setCustomDecorationTitleBarHeight;
private static Method WWindowPeer_setCustomDecorationHitTestSpots;
private static Method AWTAccessor_getComponentAccessor;
private static Method AWTAccessor_ComponentAccessor_getPeer;
public static boolean isSupported() {
initialize();
return Window_setHasCustomDecoration != null;
return supported;
}
static void install( JRootPane rootPane ) {
static Object install( JRootPane rootPane ) {
if( !isSupported() )
return;
return null;
// check whether root pane already has a parent, which is the case when switching LaF
if( rootPane.getParent() != null )
return;
Window window = SwingUtilities.windowForComponent( rootPane );
if( window != null ) {
FlatNativeWindowBorder.install( window );
return null;
}
// Use hierarchy listener to wait until the root pane is added to a window.
// Enabling JBR decorations must be done very early, probably before
@@ -88,8 +88,9 @@ public class JBRCustomDecorations
Container parent = e.getChangedParent();
if( parent instanceof Window )
install( (Window) parent );
FlatNativeWindowBorder.install( (Window) parent );
// remove listener since it is actually not possible to uninstall JBR decorations
// use invokeLater to remove listener to avoid that listener
// is removed while listener queue is processed
EventQueue.invokeLater( () -> {
@@ -98,54 +99,20 @@ public class JBRCustomDecorations
}
};
rootPane.addHierarchyListener( addListener );
return addListener;
}
static void install( Window window ) {
if( !isSupported() )
return;
static void uninstall( JRootPane rootPane, Object data ) {
// remove listener (if not yet done)
if( data instanceof HierarchyListener )
rootPane.removeHierarchyListener( (HierarchyListener) data );
// do not enable JBR decorations if LaF provides decorations
if( UIManager.getLookAndFeel().getSupportsWindowDecorations() )
return;
if( window instanceof JFrame ) {
JFrame frame = (JFrame) window;
// do not enable JBR decorations if JFrame should use system window decorations
// and if not forced to use JBR decorations
if( !JFrame.isDefaultLookAndFeelDecorated() &&
!FlatSystemProperties.getBoolean( FlatSystemProperties.USE_JETBRAINS_CUSTOM_DECORATIONS, false ))
return;
// do not enable JBR decorations if frame is undecorated
if( frame.isUndecorated() )
return;
// enable JBR custom window decoration for window
setHasCustomDecoration( frame );
// enable Swing window decoration
frame.getRootPane().setWindowDecorationStyle( JRootPane.FRAME );
} else if( window instanceof JDialog ) {
JDialog dialog = (JDialog) window;
// do not enable JBR decorations if JDialog should use system window decorations
// and if not forced to use JBR decorations
if( !JDialog.isDefaultLookAndFeelDecorated() &&
!FlatSystemProperties.getBoolean( FlatSystemProperties.USE_JETBRAINS_CUSTOM_DECORATIONS, false ))
return;
// do not enable JBR decorations if dialog is undecorated
if( dialog.isUndecorated() )
return;
// enable JBR custom window decoration for window
setHasCustomDecoration( dialog );
// enable Swing window decoration
dialog.getRootPane().setWindowDecorationStyle( JRootPane.PLAIN_DIALOG );
}
// 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 );
}
static boolean hasCustomDecoration( Window window ) {
@@ -155,48 +122,48 @@ public class JBRCustomDecorations
try {
return (Boolean) Window_hasCustomDecoration.invoke( window );
} catch( Exception ex ) {
Logger.getLogger( FlatLaf.class.getName() ).log( Level.SEVERE, null, ex );
LoggingFacade.INSTANCE.logSevere( null, ex );
return false;
}
}
static void setHasCustomDecoration( Window window ) {
static void setHasCustomDecoration( Window window, boolean hasCustomDecoration ) {
if( !isSupported() )
return;
try {
Window_setHasCustomDecoration.invoke( window );
if( hasCustomDecoration )
Window_setHasCustomDecoration.invoke( window );
else
setTitleBarHeightAndHitTestSpots( window, 4, Collections.emptyList() );
} catch( Exception ex ) {
Logger.getLogger( FlatLaf.class.getName() ).log( Level.SEVERE, null, ex );
LoggingFacade.INSTANCE.logSevere( null, ex );
}
}
static void setHitTestSpotsAndTitleBarHeight( Window window, List<Rectangle> hitTestSpots, int titleBarHeight ) {
static void setTitleBarHeightAndHitTestSpots( Window window, int titleBarHeight, List<Rectangle> hitTestSpots ) {
if( !isSupported() )
return;
try {
Object compAccessor = AWTAccessor_getComponentAccessor.invoke( null );
Object peer = AWTAccessor_ComponentAccessor_getPeer.invoke( compAccessor, window );
WWindowPeer_setCustomDecorationHitTestSpots.invoke( peer, hitTestSpots );
WWindowPeer_setCustomDecorationTitleBarHeight.invoke( peer, titleBarHeight );
WWindowPeer_setCustomDecorationHitTestSpots.invoke( peer, hitTestSpots );
} catch( Exception ex ) {
Logger.getLogger( FlatLaf.class.getName() ).log( Level.SEVERE, null, ex );
LoggingFacade.INSTANCE.logSevere( null, ex );
}
}
private static void initialize() {
if( initialized )
if( supported != null )
return;
initialized = true;
supported = false;
// requires JetBrains Runtime 11 and Windows 10
if( !SystemInfo.isJetBrainsJVM_11_orLater || !SystemInfo.isWindows_10_orLater )
return;
if( !FlatSystemProperties.getBoolean( FlatSystemProperties.USE_JETBRAINS_CUSTOM_DECORATIONS, true ) )
return;
try {
Class<?> awtAcessorClass = Class.forName( "sun.awt.AWTAccessor" );
Class<?> compAccessorClass = Class.forName( "sun.awt.AWTAccessor$ComponentAccessor" );
@@ -204,15 +171,17 @@ public class JBRCustomDecorations
AWTAccessor_ComponentAccessor_getPeer = compAccessorClass.getDeclaredMethod( "getPeer", Component.class );
Class<?> peerClass = Class.forName( "sun.awt.windows.WWindowPeer" );
WWindowPeer_setCustomDecorationHitTestSpots = peerClass.getDeclaredMethod( "setCustomDecorationHitTestSpots", List.class );
WWindowPeer_setCustomDecorationTitleBarHeight = peerClass.getDeclaredMethod( "setCustomDecorationTitleBarHeight", int.class );
WWindowPeer_setCustomDecorationHitTestSpots.setAccessible( true );
WWindowPeer_setCustomDecorationHitTestSpots = peerClass.getDeclaredMethod( "setCustomDecorationHitTestSpots", List.class );
WWindowPeer_setCustomDecorationTitleBarHeight.setAccessible( true );
WWindowPeer_setCustomDecorationHitTestSpots.setAccessible( true );
Window_hasCustomDecoration = Window.class.getDeclaredMethod( "hasCustomDecoration" );
Window_setHasCustomDecoration = Window.class.getDeclaredMethod( "setHasCustomDecoration" );
Window_hasCustomDecoration.setAccessible( true );
Window_setHasCustomDecoration.setAccessible( true );
supported = true;
} catch( Exception ex ) {
// ignore
}
@@ -227,7 +196,6 @@ public class JBRCustomDecorations
private final Color defaultActiveBorder = new Color( 0x707070 );
private final Color inactiveLightColor = new Color( 0xaaaaaa );
private final Color inactiveDarkColor = new Color( 0x3f3f3f );
private boolean colorizationAffectsBorders;
private Color activeColor = defaultActiveBorder;
@@ -238,15 +206,22 @@ public class JBRCustomDecorations
return instance;
}
private JBRWindowTopBorder() {
JBRWindowTopBorder() {
super( 1, 0, 0, 0 );
colorizationAffectsBorders = calculateAffectsBorders();
activeColor = calculateActiveBorderColor();
update();
installListeners();
}
void update() {
colorizationAffectsBorders = isColorizationColorAffectsBorders();
activeColor = calculateActiveBorderColor();
}
void installListeners() {
Toolkit toolkit = Toolkit.getDefaultToolkit();
toolkit.addPropertyChangeListener( "win.dwm.colorizationColor.affects.borders", e -> {
colorizationAffectsBorders = calculateAffectsBorders();
colorizationAffectsBorders = isColorizationColorAffectsBorders();
activeColor = calculateActiveBorderColor();
} );
@@ -258,40 +233,50 @@ public class JBRCustomDecorations
toolkit.addPropertyChangeListener( "win.frame.activeBorderColor", l );
}
private boolean calculateAffectsBorders() {
boolean isColorizationColorAffectsBorders() {
Object value = Toolkit.getDefaultToolkit().getDesktopProperty( "win.dwm.colorizationColor.affects.borders" );
return (value instanceof Boolean) ? (Boolean) value : true;
}
Color getColorizationColor() {
return (Color) Toolkit.getDefaultToolkit().getDesktopProperty( "win.dwm.colorizationColor" );
}
int getColorizationColorBalance() {
Object value = Toolkit.getDefaultToolkit().getDesktopProperty( "win.dwm.colorizationColorBalance" );
return (value instanceof Integer) ? (Integer) value : -1;
}
private Color calculateActiveBorderColor() {
if( !colorizationAffectsBorders )
return defaultActiveBorder;
Toolkit toolkit = Toolkit.getDefaultToolkit();
Color colorizationColor = (Color) toolkit.getDesktopProperty( "win.dwm.colorizationColor" );
Color colorizationColor = getColorizationColor();
if( colorizationColor != null ) {
Object colorizationColorBalanceObj = toolkit.getDesktopProperty( "win.dwm.colorizationColorBalance" );
if( colorizationColorBalanceObj instanceof Integer ) {
int colorizationColorBalance = (Integer) colorizationColorBalanceObj;
if( colorizationColorBalance < 0 )
colorizationColorBalance = 100;
int colorizationColorBalance = getColorizationColorBalance();
if( colorizationColorBalance < 0 || colorizationColorBalance > 100 )
colorizationColorBalance = 100;
if( colorizationColorBalance == 0 )
return new Color( 0xD9D9D9 );
if( colorizationColorBalance == 100 )
return colorizationColor;
if( colorizationColorBalance == 0 )
return new Color( 0xD9D9D9 );
if( colorizationColorBalance == 100 )
return colorizationColor;
float alpha = colorizationColorBalance / 100.0f;
float remainder = 1 - alpha;
int r = Math.round( (colorizationColor.getRed() * alpha + 0xD9 * remainder) );
int g = Math.round( (colorizationColor.getGreen() * alpha + 0xD9 * remainder) );
int b = Math.round( (colorizationColor.getBlue() * alpha + 0xD9 * remainder) );
return new Color( r, g, b );
}
return colorizationColor;
float alpha = colorizationColorBalance / 100.0f;
float remainder = 1 - alpha;
int r = Math.round( colorizationColor.getRed() * alpha + 0xD9 * remainder );
int g = Math.round( colorizationColor.getGreen() * alpha + 0xD9 * remainder );
int b = Math.round( colorizationColor.getBlue() * alpha + 0xD9 * remainder );
// avoid potential IllegalArgumentException in Color constructor
r = Math.min( Math.max( r, 0 ), 255 );
g = Math.min( Math.max( g, 0 ), 255 );
b = Math.min( Math.max( b, 0 ), 255 );
return new Color( r, g, b );
}
Color activeBorderColor = (Color) toolkit.getDesktopProperty( "win.frame.activeBorderColor" );
Color activeBorderColor = (Color) Toolkit.getDefaultToolkit().getDesktopProperty( "win.frame.activeBorderColor" );
return (activeBorderColor != null) ? activeBorderColor : UIManager.getColor( "MenuBar.borderColor" );
}
@@ -300,7 +285,14 @@ public class JBRCustomDecorations
Window window = SwingUtilities.windowForComponent( c );
boolean active = (window != null) ? window.isActive() : false;
g.setColor( active ? activeColor : (FlatLaf.isLafDark() ? inactiveDarkColor : inactiveLightColor) );
// paint top border
// - in light themes
// - in dark themes only for active windows if colorization affects borders
boolean paintTopBorder = !FlatLaf.isLafDark() || (active && colorizationAffectsBorders);
if( !paintTopBorder )
return;
g.setColor( active ? activeColor : inactiveLightColor );
HiDPIUtils.paintAtScale1x( (Graphics2D) g, x, y, width, height, this::paintImpl );
}

View File

@@ -128,6 +128,21 @@ public class ColorFunctions
? hsla[hslIndex] > 65
: hsla[hslIndex] < 35;
}
@Override
public String toString() {
String name;
switch( hslIndex ) {
case 0: name = "spin"; break;
case 1: name = increase ? "saturate" : "desaturate"; break;
case 2: name = increase ? "lighten" : "darken"; break;
case 3: name = increase ? "fadein" : "fadeout"; break;
default: throw new IllegalArgumentException();
}
return String.format( "%s(%.0f%%%s%s)", name, amount,
(relative ? " relative" : ""),
(autoInverse ? " autoInverse" : "") );
}
}
//---- class HSLIncreaseDecrease ------------------------------------------
@@ -148,5 +163,10 @@ public class ColorFunctions
public void apply( float[] hsla ) {
hsla[3] = clamp( amount );
}
@Override
public String toString() {
return String.format( "fade(%.0f%%)", amount );
}
}
}

View File

@@ -59,4 +59,17 @@ public class DerivedColor
public ColorFunction[] getFunctions() {
return functions;
}
@Override
public String toString() {
StringBuilder buf = new StringBuilder();
buf.append( super.toString() );
for( ColorFunction function : functions ) {
buf.append( '\n' );
buf.append( function.toString() );
}
return buf.toString();
}
}

View File

@@ -134,7 +134,7 @@ public class HiDPIUtils
// - fractional scale factors result in fractional component Y device coordinates
// - fractional text Y device coordinates are rounded for horizontal lines of characters
// - maybe different rounding methods for drawing primitives (e.g. rectangle) and text
// - Java adds 0.5 to X/Y positions in before drawing string in BufferedTextPipe.enqueueGlyphList()
// - Java adds 0.5 to X/Y positions before drawing string in BufferedTextPipe.enqueueGlyphList()
// this is not the optimal solution, but works very good in most cases
// (tested with class FlatPaintingStringTest on Windows 10 with font "Segoe UI")

View File

@@ -21,10 +21,7 @@ import java.awt.Graphics;
import java.awt.Graphics2D;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JComponent;
import com.formdev.flatlaf.FlatLaf;
/**
* Provides Java version compatibility methods.
@@ -58,7 +55,7 @@ public class JavaCompatibility
? new Class[] { JComponent.class, Graphics2D.class, String.class, int.class, float.class, float.class }
: new Class[] { JComponent.class, Graphics.class, String.class, int.class, int.class, int.class } );
} catch( Exception ex ) {
Logger.getLogger( FlatLaf.class.getName() ).log( Level.SEVERE, null, ex );
LoggingFacade.INSTANCE.logSevere( null, ex );
throw new RuntimeException( ex );
}
}
@@ -70,7 +67,7 @@ public class JavaCompatibility
else
drawStringUnderlineCharAtMethod.invoke( null, c, g, text, underlinedIndex, x, y );
} catch( IllegalAccessException | IllegalArgumentException | InvocationTargetException ex ) {
Logger.getLogger( FlatLaf.class.getName() ).log( Level.SEVERE, null, ex );
LoggingFacade.INSTANCE.logSevere( null, ex );
throw new RuntimeException( ex );
}
}
@@ -94,7 +91,7 @@ public class JavaCompatibility
: "clipStringIfNecessary",
new Class[] { JComponent.class, FontMetrics.class, String.class, int.class } );
} catch( Exception ex ) {
Logger.getLogger( FlatLaf.class.getName() ).log( Level.SEVERE, null, ex );
LoggingFacade.INSTANCE.logSevere( null, ex );
throw new RuntimeException( ex );
}
}
@@ -103,7 +100,7 @@ public class JavaCompatibility
try {
return (String) getClippedStringMethod.invoke( null, c, fm, string, availTextWidth );
} catch( IllegalAccessException | IllegalArgumentException | InvocationTargetException ex ) {
Logger.getLogger( FlatLaf.class.getName() ).log( Level.SEVERE, null, ex );
LoggingFacade.INSTANCE.logSevere( null, ex );
throw new RuntimeException( ex );
}
}

View File

@@ -0,0 +1,28 @@
/*
* 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;
/**
* @since 1.1
*/
public interface LoggingFacade
{
LoggingFacade INSTANCE = new LoggingFacadeImpl();
void logSevere( String message, Throwable t );
void logConfig( String message, Throwable t );
}

View File

@@ -0,0 +1,40 @@
/*
* 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 com.formdev.flatlaf.FlatLaf;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* @since 1.1
*/
class LoggingFacadeImpl
implements LoggingFacade
{
private static final Logger LOG = Logger.getLogger( FlatLaf.class.getName() );
@Override
public void logSevere( String message, Throwable t ) {
LOG.log( Level.SEVERE, message, t );
}
@Override
public void logConfig( String message, Throwable t ) {
LOG.log( Level.CONFIG, message, t );
}
}

View File

@@ -0,0 +1,199 @@
/*
* 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.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
/**
* Helper class to load native library (.dll, .so or .dylib) stored in Jar.
* <p>
* Copies native library to users temporary folder before loading it.
*
* @author Karl Tauber
* @since 1.1
*/
public class NativeLibrary
{
private static final String DELETE_SUFFIX = ".delete";
private static boolean deletedTemporary;
private final boolean loaded;
/**
* Load native library from given classloader.
* <p>
* Note regarding Java Platform Module System (JPMS):
* If classloader is {@code null}, the library can be only loaded from the module
* that contains this class.
* If classloader is not {@code null}, then the package that contains the library
* must be specified as "open" in module-info.java of the module that contains the library.
*
* @param libraryName resource name of the native library (without "lib" prefix and without extension)
* @param classLoader the classloader used to locate the library, or {@code null}
* @param supported whether the native library is supported on the current platform
*/
public NativeLibrary( String libraryName, ClassLoader classLoader, boolean supported ) {
this.loaded = supported
? loadLibraryFromJar( libraryName, classLoader )
: false;
}
/**
* Returns whether the native library is loaded.
* <p>
* Returns {@code false} if not supported on current platform as specified in constructor
* or if loading failed.
*/
public boolean isLoaded() {
return loaded;
}
private static boolean loadLibraryFromJar( String libraryName, ClassLoader classLoader ) {
// add prefix and suffix to library name
libraryName = decorateLibraryName( libraryName );
// find library
URL libraryUrl = (classLoader != null)
? classLoader.getResource( libraryName )
: NativeLibrary.class.getResource( "/" + libraryName );
if( libraryUrl == null ) {
log( "Library '" + libraryName + "' not found", null );
return false;
}
File tempFile = null;
try {
// for development environment
if( "file".equals( libraryUrl.getProtocol() ) ) {
File libraryFile = new File( libraryUrl.getPath() );
if( libraryFile.isFile() ) {
// load library without copying
System.load( libraryFile.getCanonicalPath() );
return true;
}
}
// create temporary file
Path tempPath = createTempFile( libraryName );
tempFile = tempPath.toFile();
// copy library to temporary file
try( InputStream in = libraryUrl.openStream() ) {
Files.copy( in, tempPath, StandardCopyOption.REPLACE_EXISTING );
}
// load library
System.load( tempFile.getCanonicalPath() );
// delete library
deleteOrMarkForDeletion( tempFile );
return true;
} catch( Throwable ex ) {
log( null, ex );
if( tempFile != null )
deleteOrMarkForDeletion( tempFile );
return false;
}
}
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;
}
private static void log( String msg, Throwable thrown ) {
LoggingFacade.INSTANCE.logSevere( msg, thrown );
}
private static Path createTempFile( String libraryName ) throws IOException {
int sep = libraryName.lastIndexOf( '/' );
String name = (sep >= 0) ? libraryName.substring( sep + 1 ) : libraryName;
int dot = name.lastIndexOf( '.' );
String prefix = ((dot >= 0) ? name.substring( 0, dot ) : name) + '-';
String suffix = (dot >= 0) ? name.substring( dot ) : "";
Path tempDir = getTempDir();
if( tempDir != null ) {
deleteTemporaryFiles( tempDir );
return Files.createTempFile( tempDir, prefix, suffix );
} else
return Files.createTempFile( prefix, suffix );
}
private static Path getTempDir() throws IOException {
if( SystemInfo.isWindows ) {
// On Windows, where File.delete() and File.deleteOnExit() does not work
// 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.
Path tempDir = Paths.get( System.getProperty( "java.io.tmpdir" ) + "/flatlaf.temp" );
Files.createDirectories( tempDir );
return tempDir;
} else
return null; // use standard temporary directory
}
private static void deleteTemporaryFiles( Path tempDir ) {
if( deletedTemporary )
return;
deletedTemporary = true;
File[] markerFiles = tempDir.toFile().listFiles( (dir, name) -> name.endsWith( DELETE_SUFFIX ) );
if( markerFiles == null )
return;
for( File markerFile : markerFiles ) {
File toDeleteFile = new File( markerFile.getParent(), StringUtils.removeTrailing( markerFile.getName(), DELETE_SUFFIX ) );
if( !toDeleteFile.exists() || toDeleteFile.delete() )
markerFile.delete();
}
}
private static void deleteOrMarkForDeletion( File file ) {
// try to delete the native library
if( file.delete() )
return;
// not possible to delete on Windows because native library file is locked
// --> create "to delete" marker file (used at next startup)
try {
File markFile = new File( file.getParent(), file.getName() + DELETE_SUFFIX );
markFile.createNewFile();
} catch( IOException ex2 ) {
// ignore
}
}
}

View File

@@ -38,6 +38,9 @@ public class SystemInfo
public static final boolean isMacOS_10_14_Mojave_orLater;
public static final boolean isMacOS_10_15_Catalina_orLater;
// OS architecture
/** @since 1.1 */ public static final boolean isX86_64;
// Java versions
public static final long javaVersion;
public static final boolean isJava_9_orLater;
@@ -51,6 +54,11 @@ public class SystemInfo
// UI toolkits
public static final boolean isKDE;
// other
/** @since 1.1 */ public static final boolean isProjector;
/** @since 1.1.2 */ public static final boolean isWebswing;
/** @since 1.1.1 */ public static final boolean isWinPE;
static {
// platforms
String osName = System.getProperty( "os.name" ).toLowerCase( Locale.ENGLISH );
@@ -65,6 +73,10 @@ public class SystemInfo
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_64 = osArch.equals( "amd64" ) || osArch.equals( "x86_64" );
// Java versions
javaVersion = scanVersion( System.getProperty( "java.version" ) );
isJava_9_orLater = (javaVersion >= toVersion( 9, 0, 0, 0 ));
@@ -78,6 +90,11 @@ public class SystemInfo
// UI toolkits
isKDE = (isLinux && System.getenv( "KDE_FULL_SESSION" ) != null);
// other
isProjector = Boolean.getBoolean( "org.jetbrains.projector.server.enable" );
isWebswing = (System.getProperty( "webswing.rootDir" ) != null);
isWinPE = isWindows && "X:\\Windows\\System32".equalsIgnoreCase( System.getProperty( "user.dir" ) );
}
public static long scanVersion( String version ) {

View File

@@ -36,9 +36,14 @@ import javax.swing.plaf.UIResource;
import com.formdev.flatlaf.FlatSystemProperties;
/**
* Two scaling modes are supported for HiDPI displays:
* This class handles scaling in Swing UIs.
* It computes user scaling factor based on font size and
* provides methods to scale integer, float, {@link Dimension} and {@link Insets}.
* This class is look and feel independent.
* <p>
* Two scaling modes are supported by FlatLaf for HiDPI displays:
*
* 1) system scaling mode
* <h3>1) system scaling mode</h3>
*
* This mode is supported since Java 9 on all platforms and in some Java 8 VMs
* (e.g. Apple and JetBrains). The JRE determines the scale factor per-display and
@@ -49,7 +54,7 @@ import com.formdev.flatlaf.FlatSystemProperties;
* The scale factor may be different for each connected display.
* The scale factor may change for a window when moving the window from one display to another one.
*
* 2) user scaling mode
* <h3>2) user scaling mode</h3>
*
* This mode is mainly for Java 8 compatibility, but is also used on Linux
* or if the default font is changed.
@@ -85,6 +90,9 @@ public class UIScale
private static Boolean jreHiDPI;
/**
* Returns whether system scaling is enabled.
*/
public static boolean isSystemScalingEnabled() {
if( jreHiDPI != null )
return jreHiDPI;
@@ -112,10 +120,16 @@ public class UIScale
return jreHiDPI;
}
/**
* Returns the system scale factor for the given graphics context.
*/
public static double getSystemScaleFactor( Graphics2D g ) {
return isSystemScalingEnabled() ? getSystemScaleFactor( g.getDeviceConfiguration() ) : 1;
}
/**
* Returns the system scale factor for the given graphics configuration.
*/
public static double getSystemScaleFactor( GraphicsConfiguration gc ) {
return (isSystemScalingEnabled() && gc != null) ? gc.getDefaultTransform().getScaleX() : 1;
}
@@ -166,7 +180,7 @@ public class UIScale
// apply custom scale factor specified in system property "flatlaf.uiScale"
float customScaleFactor = getCustomScaleFactor();
if( customScaleFactor > 0 ) {
setUserScaleFactor( customScaleFactor );
setUserScaleFactor( customScaleFactor, false );
return;
}
@@ -216,7 +230,7 @@ public class UIScale
} else
newScaleFactor = computeScaleFactor( font );
setUserScaleFactor( newScaleFactor );
setUserScaleFactor( newScaleFactor, true );
}
private static float computeScaleFactor( Font font ) {
@@ -260,7 +274,7 @@ public class UIScale
if( scaleFactor == fontScaleFactor )
return font;
int newFontSize = Math.round( (font.getSize() / fontScaleFactor) * scaleFactor );
int newFontSize = Math.max( Math.round( (font.getSize() / fontScaleFactor) * scaleFactor ), 1 );
return new FontUIResource( font.deriveFont( (float) newFontSize ) );
}
@@ -297,16 +311,29 @@ public class UIScale
}
}
/**
* Returns the user scale factor.
*/
public static float getUserScaleFactor() {
initialize();
return scaleFactor;
}
private static void setUserScaleFactor( float scaleFactor ) {
if( scaleFactor <= 1f )
scaleFactor = 1f;
else // round scale factor to 1/4
scaleFactor = Math.round( scaleFactor * 4f ) / 4f;
/**
* Sets the user scale factor.
*/
private static void setUserScaleFactor( float scaleFactor, boolean normalize ) {
if( normalize ) {
if( scaleFactor < 1f ) {
scaleFactor = FlatSystemProperties.getBoolean( FlatSystemProperties.UI_SCALE_ALLOW_SCALE_DOWN, false )
? Math.round( scaleFactor * 10f ) / 10f // round small scale factor to 1/10
: 1f;
} else if( scaleFactor > 1f ) // round scale factor to 1/4
scaleFactor = Math.round( scaleFactor * 4f ) / 4f;
}
// minimum scale factor
scaleFactor = Math.max( scaleFactor, 0.1f );
float oldScaleFactor = UIScale.scaleFactor;
UIScale.scaleFactor = scaleFactor;
@@ -318,40 +345,65 @@ public class UIScale
changeSupport.firePropertyChange( "userScaleFactor", oldScaleFactor, scaleFactor );
}
/**
* Multiplies the given value by the user scale factor.
*/
public static float scale( float value ) {
initialize();
return (scaleFactor == 1) ? value : (value * scaleFactor);
}
/**
* Multiplies the given value by the user scale factor and rounds the result.
*/
public static int scale( int value ) {
initialize();
return (scaleFactor == 1) ? value : Math.round( value * scaleFactor );
}
/**
* Similar as scale(int) but always "rounds down".
* Similar as {@link #scale(int)} but always "rounds down".
* <p>
* For use in special cases. {@link #scale(int)} is the preferred method.
*/
public static int scale2( int value ) {
initialize();
return (scaleFactor == 1) ? value : (int) (value * scaleFactor);
}
/**
* Divides the given value by the user scale factor.
*/
public static float unscale( float value ) {
initialize();
return (scaleFactor == 1f) ? value : (value / scaleFactor);
}
/**
* Divides the given value by the user scale factor and rounds the result.
*/
public static int unscale( int value ) {
initialize();
return (scaleFactor == 1f) ? value : Math.round( value / scaleFactor );
}
/**
* If user scale factor is not 1, scale the given graphics context by invoking
* {@link Graphics2D#scale(double, double)} with user scale factor.
*/
public static void scaleGraphics( Graphics2D g ) {
initialize();
if( scaleFactor != 1f )
g.scale( scaleFactor, scaleFactor );
}
/**
* Scales the given dimension with the user scale factor.
* <p>
* If user scale factor is 1, then the given dimension is simply returned.
* 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 ) {
initialize();
return (dimension == null || scaleFactor == 1f)
@@ -361,6 +413,13 @@ public class UIScale
: new Dimension ( scale( dimension.width ), scale( dimension.height ) ));
}
/**
* Scales the given insets with the user scale factor.
* <p>
* If user scale factor is 1, then the given insets is simply returned.
* 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 ) {
initialize();
return (insets == null || scaleFactor == 1f)

View File

@@ -0,0 +1,38 @@
/*
* 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 com.formdev.flatlaf.FlatLaf;
/**
* @since 1.1
*/
class LoggingFacadeImpl
implements LoggingFacade
{
private static final System.Logger LOG = System.getLogger( FlatLaf.class.getName() );
@Override
public void logSevere( String message, Throwable t ) {
LOG.log( System.Logger.Level.ERROR, message, t );
}
@Override
public void logConfig( String message, Throwable t ) {
LOG.log( System.Logger.Level.DEBUG, message, t );
}
}

View File

@@ -19,7 +19,6 @@
*/
module com.formdev.flatlaf {
requires java.desktop;
requires java.logging;
exports com.formdev.flatlaf;
exports com.formdev.flatlaf.icons;

View File

@@ -14,15 +14,35 @@
# limitations under the License.
#
#
# This file is loaded for "FlatLaf Darcula" theme (that extend class FlatDarculaLaf)
# and for all dark IntelliJ Platform themes.
#
# Documentation:
# - https://www.formdev.com/flatlaf/properties-files/
# - https://www.formdev.com/flatlaf/how-to-customize/
#
# 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.
#
# 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/
#---- Button ----
Button.innerFocusWidth = 0
Button.default.boldText = true
#---- CheckBox ----
CheckBox.icon.focusedBackground = null
#---- Component ----
Component.focusWidth = 2

View File

@@ -14,6 +14,18 @@
# limitations under the License.
#
#
# This file is loaded for all dark themes (that extend class FlatDarkLaf).
#
# Documentation:
# - https://www.formdev.com/flatlaf/properties-files/
# - https://www.formdev.com/flatlaf/how-to-customize/
#
# 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.
#
# 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/
@@ -72,6 +84,8 @@ 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.hoverBackground = lighten($Button.default.background,3%,derived)
@@ -103,6 +117,7 @@ CheckBox.icon.disabledCheckmarkColor = #606060
# focused
CheckBox.icon.focusedBorderColor = #466D94
CheckBox.icon.focusedBackground = fade($CheckBox.icon.focusedBorderColor,30%)
# hover
CheckBox.icon.hoverBorderColor = $CheckBox.icon.focusedBorderColor

View File

@@ -14,6 +14,19 @@
# limitations under the License.
#
#
# This file is loaded for "FlatLaf IntelliJ" theme (that extend class FlatIntelliJLaf)
# and for all light IntelliJ Platform themes.
#
# Documentation:
# - https://www.formdev.com/flatlaf/properties-files/
# - https://www.formdev.com/flatlaf/how-to-customize/
#
# 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.
#
# 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/

View File

@@ -14,6 +14,18 @@
# limitations under the License.
#
#
# This file is loaded for all themes.
#
# Documentation:
# - https://www.formdev.com/flatlaf/properties-files/
# - https://www.formdev.com/flatlaf/how-to-customize/
#
# 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.
#
#---- UI delegates ----
ButtonUI = com.formdev.flatlaf.ui.FlatButtonUI
@@ -272,12 +284,15 @@ HelpButton.focusedBorderColor = $CheckBox.icon.focusedBorderColor
HelpButton.hoverBorderColor = $?CheckBox.icon.hoverBorderColor
HelpButton.background = $CheckBox.icon.background
HelpButton.disabledBackground = $CheckBox.icon.disabledBackground
HelpButton.focusedBackground = $?CheckBox.icon.focusedBackground
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.borderWidth = $?Button.borderWidth
HelpButton.innerFocusWidth = $?Button.innerFocusWidth
#---- InternalFrame ----
@@ -670,13 +685,17 @@ TitledBorder.border = 1,1,1,1,$Separator.foreground
#---- TitlePane ----
TitlePane.useWindowDecorations = true
TitlePane.menuBarEmbedded = true
TitlePane.unifiedBackground = false
TitlePane.iconSize = 16,16
TitlePane.iconMargins = 3,8,3,0
TitlePane.menuBarMargins = 0,8,0,22
TitlePane.titleMargins = 3,8,3,8
TitlePane.iconMargins = 3,8,3,8
TitlePane.titleMargins = 3,0,3,0
TitlePane.buttonSize = 44,30
TitlePane.buttonMaximizedHeight = 22
TitlePane.centerTitle = false
TitlePane.centerTitleIfMenuBarEmbedded = true
TitlePane.menuBarTitleGap = 20
TitlePane.closeIcon = com.formdev.flatlaf.icons.FlatWindowCloseIcon
TitlePane.iconifyIcon = com.formdev.flatlaf.icons.FlatWindowIconifyIcon
TitlePane.maximizeIcon = com.formdev.flatlaf.icons.FlatWindowMaximizeIcon

View File

@@ -14,6 +14,18 @@
# limitations under the License.
#
#
# This file is loaded for all light themes (that extend class FlatLightLaf).
#
# Documentation:
# - https://www.formdev.com/flatlaf/properties-files/
# - https://www.formdev.com/flatlaf/how-to-customize/
#
# 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.
#
# 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/
@@ -73,6 +85,8 @@ Button.disabledBorderColor = $Component.disabledBorderColor
Button.focusedBorderColor = $Component.focusedBorderColor
Button.hoverBorderColor = $Button.focusedBorderColor
Button.innerFocusWidth = 0
Button.default.background = $Button.background
Button.default.foreground = @foreground
Button.default.focusedBackground = $Button.focusedBackground

View File

@@ -14,6 +14,36 @@
# limitations under the License.
#
#
# This file is loaded for all IntelliJ Platform themes.
#
# Documentation:
# - https://www.formdev.com/flatlaf/properties-files/
# - https://www.formdev.com/flatlaf/how-to-customize/
#
#---- system colors ----
# fix (most) system colors because they are usually not set in .json files
desktop = lazy(TextField.background)
activeCaptionText = lazy(TextField.foreground)
inactiveCaptionText = lazy(TextField.foreground)
window = lazy(Panel.background)
windowBorder = lazy(TextField.foreground)
windowText = lazy(TextField.foreground)
menu = lazy(Menu.background)
menuText = lazy(Menu.foreground)
text = lazy(TextField.background)
textText = lazy(TextField.foreground)
textHighlight = lazy(TextField.selectionBackground)
textHighlightText = lazy(TextField.selectionForeground)
textInactiveText = lazy(TextField.inactiveForeground)
control = lazy(Panel.background)
controlText = lazy(TextField.foreground)
info = lazy(ToolTip.background)
infoText = lazy(ToolTip.foreground)
#---- Button ----
Button.startBackground = $Button.background
@@ -61,21 +91,33 @@ 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]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]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]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]ProgressBar.selectionBackground = #ddd
[Arc_Theme_Dark_-_Orange]ProgressBar.selectionForeground = #fff
@@ -87,6 +129,8 @@ ToggleButton.endBackground = $ToggleButton.background
[Cyan_light]MenuItem.checkBackground = @ijMenuCheckBackgroundL20
[Cyan_light]MenuItem.underlineSelectionCheckBackground = @ijMenuCheckBackgroundL20
[Dark_Flat_Theme]TableHeader.background = #3B3B3B
[Dark_purple]Slider.focusedColor = fade($Component.focusColor,70%,derived)
[Dracula]ProgressBar.selectionBackground = #fff
@@ -115,6 +159,8 @@ ToggleButton.endBackground = $ToggleButton.background
[High_contrast]ToggleButton.disabledSelectedBackground = #444
[High_contrast]ToggleButton.toolbar.selectedBackground = #fff
[Light_Flat]TableHeader.background = #E5E5E9
[Monocai]MenuItem.checkBackground = @ijMenuCheckBackgroundL10
[Monocai]MenuItem.underlineSelectionCheckBackground = @ijMenuCheckBackgroundL10
@Monocai.acceleratorForeground = lazy(MenuItem.disabledForeground)

View File

@@ -16,15 +16,6 @@
plugins {
`java-library`
id( "com.jfrog.bintray" )
// Although artifactory plugin is not used in this subproject, the plugin is required
// because otherwise gradle fails with following error:
// Caused by: org.codehaus.groovy.runtime.typehandling.GroovyCastException:
// Cannot cast object 'task ':bintrayUpload''
// with class 'com.jfrog.bintray.gradle.tasks.BintrayUploadTask_Decorated'
// to class 'com.jfrog.bintray.gradle.tasks.BintrayUploadTask'
id( "com.jfrog.artifactory" )
}
repositories {
@@ -40,6 +31,7 @@ dependencies {
implementation( project( ":flatlaf-intellij-themes" ) )
implementation( "com.miglayout:miglayout-swing:5.3-SNAPSHOT" )
implementation( "com.jgoodies:jgoodies-forms:1.9.0" )
// implementation( project( ":flatlaf-natives-jna" ) )
}
tasks {
@@ -47,6 +39,7 @@ tasks {
dependsOn( ":flatlaf-core:jar" )
dependsOn( ":flatlaf-extras:jar" )
dependsOn( ":flatlaf-intellij-themes:jar" )
// dependsOn( ":flatlaf-natives-jna:jar" )
manifest {
attributes( "Main-Class" to "com.formdev.flatlaf.demo.FlatLafDemo" )
@@ -68,24 +61,3 @@ tasks {
} )
}
}
bintray {
user = rootProject.extra["bintray.user"] as String?
key = rootProject.extra["bintray.key"] as String?
setConfigurations( "archives" )
with( pkg ) {
repo = "flatlaf"
name = "flatlaf-demo"
setLicenses( "Apache-2.0" )
vcsUrl = "https://github.com/JFormDesigner/FlatLaf"
with( version ) {
name = project.version.toString()
}
publish = rootProject.extra["bintray.publish"] as Boolean
dryRun = rootProject.extra["bintray.dryRun"] as Boolean
}
}

View File

@@ -24,7 +24,6 @@ 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.FlatLaf;
import com.formdev.flatlaf.demo.HintManager.Hint;
import com.formdev.flatlaf.demo.extras.*;
@@ -32,8 +31,11 @@ import com.formdev.flatlaf.demo.intellijthemes.*;
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.extras.FlatSVGUtils;
import com.formdev.flatlaf.ui.JBRCustomDecorations;
import com.formdev.flatlaf.util.SystemInfo;
import net.miginfocom.layout.ConstraintParser;
import net.miginfocom.layout.LC;
import net.miginfocom.layout.UnitValue;
@@ -141,26 +143,21 @@ class DemoFrame
private void windowDecorationsChanged() {
boolean windowDecorations = windowDecorationsCheckBoxMenuItem.isSelected();
// change window decoration of demo main frame
dispose();
setUndecorated( windowDecorations );
getRootPane().setWindowDecorationStyle( windowDecorations ? JRootPane.FRAME : JRootPane.NONE );
menuBarEmbeddedCheckBoxMenuItem.setEnabled( windowDecorations );
setVisible( true );
// change window decoration of all frames and dialogs
FlatLaf.setUseNativeWindowDecorations( windowDecorations );
// enable/disable window decoration for later created frames/dialogs
JFrame.setDefaultLookAndFeelDecorated( windowDecorations );
JDialog.setDefaultLookAndFeelDecorated( windowDecorations );
menuBarEmbeddedCheckBoxMenuItem.setEnabled( windowDecorations );
unifiedTitleBarMenuItem.setEnabled( windowDecorations );
}
private void menuBarEmbeddedChanged() {
getRootPane().putClientProperty( FlatClientProperties.MENU_BAR_EMBEDDED,
menuBarEmbeddedCheckBoxMenuItem.isSelected() ? null : false );
UIManager.put( "TitlePane.menuBarEmbedded", menuBarEmbeddedCheckBoxMenuItem.isSelected() );
FlatLaf.revalidateAndRepaintAllFramesAndDialogs();
}
// alternative method for all frames and menu bars in an application
// UIManager.put( "TitlePane.menuBarEmbedded", menuBarEmbeddedCheckBoxMenuItem.isSelected() );
// revalidate();
// repaint();
private void unifiedTitleBar() {
UIManager.put( "TitlePane.unifiedBackground", unifiedTitleBarMenuItem.isSelected() );
FlatLaf.repaintAllFramesAndDialogs();
}
private void underlineMenuSelection() {
@@ -268,7 +265,7 @@ class DemoFrame
// add font sizes
fontMenu.addSeparator();
ArrayList<String> sizes = new ArrayList<>( Arrays.asList(
"10", "12", "14", "16", "18", "20", "24", "28" ) );
"10", "11", "12", "14", "16", "18", "20", "24", "28" ) );
if( !sizes.contains( currentSize ) )
sizes.add( currentSize );
sizes.sort( String.CASE_INSENSITIVE_ORDER );
@@ -327,6 +324,7 @@ class DemoFrame
optionsMenu = new JMenu();
windowDecorationsCheckBoxMenuItem = new JCheckBoxMenuItem();
menuBarEmbeddedCheckBoxMenuItem = new JCheckBoxMenuItem();
unifiedTitleBarMenuItem = new JCheckBoxMenuItem();
underlineMenuSelectionMenuItem = new JCheckBoxMenuItem();
alwaysShowMnemonicsMenuItem = new JCheckBoxMenuItem();
animatedLafChangeMenuItem = new JCheckBoxMenuItem();
@@ -588,6 +586,11 @@ class DemoFrame
menuBarEmbeddedCheckBoxMenuItem.addActionListener(e -> menuBarEmbeddedChanged());
optionsMenu.add(menuBarEmbeddedCheckBoxMenuItem);
//---- unifiedTitleBarMenuItem ----
unifiedTitleBarMenuItem.setText("Unified window title bar");
unifiedTitleBarMenuItem.addActionListener(e -> unifiedTitleBar());
optionsMenu.add(unifiedTitleBarMenuItem);
//---- underlineMenuSelectionMenuItem ----
underlineMenuSelectionMenuItem.setText("Use underline menu selection");
underlineMenuSelectionMenuItem.addActionListener(e -> underlineMenuSelection());
@@ -702,6 +705,15 @@ class DemoFrame
buttonGroup1.add(radioButtonMenuItem3);
// JFormDesigner - End of component initialization //GEN-END:initComponents
// add "Users" button to menubar
FlatButton usersButton = new FlatButton();
usersButton.setIcon( new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/users.svg" ) );
usersButton.setButtonType( ButtonType.toolBarButton );
usersButton.setFocusable( false );
usersButton.addActionListener( e -> JOptionPane.showMessageDialog( null, "Hello User! How are you?", "User", JOptionPane.INFORMATION_MESSAGE ) );
menuBar1.add( Box.createGlue() );
menuBar1.add( usersButton );
undoMenuItem.setIcon( new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/undo.svg" ) );
redoMenuItem.setIcon( new FlatSVGIcon( "com/formdev/flatlaf/demo/icons/redo.svg" ) );
@@ -721,10 +733,20 @@ class DemoFrame
copyMenuItem.addActionListener( new DefaultEditorKit.CopyAction() );
pasteMenuItem.addActionListener( new DefaultEditorKit.PasteAction() );
boolean supportsWindowDecorations = UIManager.getLookAndFeel()
.getSupportsWindowDecorations() || JBRCustomDecorations.isSupported();
windowDecorationsCheckBoxMenuItem.setEnabled( supportsWindowDecorations && !JBRCustomDecorations.isSupported() );
menuBarEmbeddedCheckBoxMenuItem.setEnabled( supportsWindowDecorations );
if( FlatLaf.supportsNativeWindowDecorations() ) {
if( JBRCustomDecorations.isSupported() ) {
// If the JetBrains Runtime is used, it forces the use of it's own custom
// window decoration, which can not disabled.
windowDecorationsCheckBoxMenuItem.setEnabled( false );
}
} else {
unsupported( windowDecorationsCheckBoxMenuItem );
unsupported( menuBarEmbeddedCheckBoxMenuItem );
unsupported( unifiedTitleBarMenuItem );
}
if( SystemInfo.isMacOS )
unsupported( underlineMenuSelectionMenuItem );
// remove contentPanel bottom insets
MigLayout layout = (MigLayout) contentPanel.getLayout();
@@ -739,11 +761,18 @@ class DemoFrame
layout.setLayoutConstraints( lc );
}
private void unsupported( JCheckBoxMenuItem menuItem ) {
menuItem.setEnabled( false );
menuItem.setSelected( false );
menuItem.setToolTipText( "Not supported on your system." );
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
private JMenu fontMenu;
private JMenu optionsMenu;
private JCheckBoxMenuItem windowDecorationsCheckBoxMenuItem;
private JCheckBoxMenuItem menuBarEmbeddedCheckBoxMenuItem;
private JCheckBoxMenuItem unifiedTitleBarMenuItem;
private JCheckBoxMenuItem underlineMenuSelectionMenuItem;
private JCheckBoxMenuItem alwaysShowMnemonicsMenuItem;
private JCheckBoxMenuItem animatedLafChangeMenuItem;

View File

@@ -1,4 +1,4 @@
JFDML JFormDesigner: "7.0.2.0.298" Java: "15" encoding: "UTF-8"
JFDML JFormDesigner: "7.0.3.1.342" Java: "16" encoding: "UTF-8"
new FormModel {
contentType: "form/swing"
@@ -360,6 +360,14 @@ new FormModel {
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "menuBarEmbeddedChanged", false ) )
} )
add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) {
name: "unifiedTitleBarMenuItem"
"text": "Unified window title bar"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "unifiedTitleBar", false ) )
} )
add( new FormComponent( "javax.swing.JCheckBoxMenuItem" ) {
name: "underlineMenuSelectionMenuItem"
"text": "Use underline menu selection"

View File

@@ -17,8 +17,6 @@
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;
@@ -40,13 +38,12 @@ public class FlatLafDemo
if( SystemInfo.isMacOS && System.getProperty( "apple.laf.useScreenMenuBar" ) == null )
System.setProperty( "apple.laf.useScreenMenuBar", "true" );
if( FlatLafDemo.screenshotsMode && !SystemInfo.isJava_9_orLater && System.getProperty( "flatlaf.uiScale" ) == null )
System.setProperty( "flatlaf.uiScale", "2x" );
SwingUtilities.invokeLater( () -> {
DemoPrefs.init( PREFS_ROOT_PATH );
// enable window decorations
JFrame.setDefaultLookAndFeelDecorated( true );
JDialog.setDefaultLookAndFeelDecorated( true );
// application specific UI defaults
FlatLaf.registerCustomDefaultsSource( "com.formdev.flatlaf.demo" );
@@ -61,7 +58,7 @@ public class FlatLafDemo
DemoFrame frame = new DemoFrame();
if( FlatLafDemo.screenshotsMode )
frame.setPreferredSize( new Dimension( 1280, 620 ) );
frame.setPreferredSize( new Dimension( 1660, 840 ) );
// show frame
frame.pack();

View File

@@ -481,6 +481,7 @@ class MoreComponentsPanel
indeterminateCheckBox,
toolTipLabel, toolTip1, toolTip2,
toolBarLabel, toolBar1, toolBar2,
splitPaneLabel, splitPane3,
};
for( Component c : components )

View File

@@ -44,10 +44,12 @@ class NewDialog
}
private void okActionPerformed() {
System.out.println( "ok" );
dispose();
}
private void cancelActionPerformed() {
System.out.println( "cancel" );
dispose();
}

View File

@@ -25,6 +25,8 @@ import javax.swing.*;
import javax.swing.border.*;
import com.formdev.flatlaf.extras.FlatSVGIcon;
import com.formdev.flatlaf.icons.FlatTabbedPaneCloseIcon;
import net.miginfocom.layout.AC;
import net.miginfocom.layout.ConstraintParser;
import net.miginfocom.swing.*;
/**
@@ -1009,6 +1011,29 @@ class TabsPanel
tabsPopupPolicyButtonGroup.add(popupAsNeededButton);
tabsPopupPolicyButtonGroup.add(popupNeverButton);
// JFormDesigner - End of component initialization //GEN-END:initComponents
if( FlatLafDemo.screenshotsMode ) {
Component[] components = new Component[] {
tabPlacementLabel, tabPlacementToolBar, tabPlacementTabbedPane,
iconBottomTabbedPane, iconTrailingTabbedPane,
alignLeadingTabbedPane, alignTrailingTabbedPane, alignFillTabbedPane,
panel3, separator2, panel4,
};
for( Component c : components )
c.setVisible( false );
// remove gaps
MigLayout layout1 = (MigLayout) panel1.getLayout();
AC rowSpecs1 = ConstraintParser.parseRowConstraints( (String) layout1.getRowConstraints() );
rowSpecs1.gap( "0!", 0, 1 );
layout1.setRowConstraints( rowSpecs1 );
MigLayout layout2 = (MigLayout) panel2.getLayout();
AC rowSpecs2 = ConstraintParser.parseRowConstraints( (String) layout2.getRowConstraints() );
rowSpecs2.gap( "0!", 2, 4, 8 );
layout2.setRowConstraints( rowSpecs2 );
}
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables

View File

@@ -0,0 +1 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg"><rect id="frame" width="16" height="16" fill="none"/><path d="M11.6 8.5c1.104 0 1.992-.88 1.992-1.964 0-1.085-.888-1.965-1.992-1.965s-2 .88-2 1.965c0 1.084.896 1.964 2 1.964zm-6-.786c1.328 0 2.392-1.053 2.392-2.357C7.992 4.053 6.928 3 5.6 3 4.272 3 3.2 4.053 3.2 5.357c0 1.304 1.072 2.357 2.4 2.357zm6 2.357c-1.464 0-4.4.723-4.4 2.161V14H16v-1.768c0-1.438-2.936-2.16-4.4-2.16zm-6-.785c-1.864 0-5.6.919-5.6 2.75V14h5.6v-1.768c0-.668.264-1.838 1.896-2.726-.696-.142-1.368-.22-1.896-.22z" fill="#6E6E6E"/></svg>

After

Width:  |  Height:  |  Size: 603 B

View File

@@ -25,7 +25,7 @@ This sub-project provides some additional components and classes:
Download
--------
FlatLaf Extras binaries are available on **JCenter** and **Maven Central**.
FlatLaf Extras binaries are available on **Maven Central**.
If you use Maven or Gradle, add a dependency with following coordinates to your
build script:
@@ -36,11 +36,11 @@ build script:
Otherwise download `flatlaf-extras-<version>.jar` here:
[![Download](https://api.bintray.com/packages/jformdesigner/flatlaf/flatlaf-extras/images/download.svg)](https://bintray.com/jformdesigner/flatlaf/flatlaf-extras/_latestVersion)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.formdev/flatlaf-extras/badge.svg?style=flat-square&color=007ec6)](https://maven-badges.herokuapp.com/maven-central/com.formdev/flatlaf-extras)
If SVG classes are used, `svgSalamander-<version>.jar` is also required:
[![Download](https://api.bintray.com/packages/jformdesigner/svgSalamander/svgSalamander/images/download.svg)](https://bintray.com/jformdesigner/svgSalamander/svgSalamander/_latestVersion)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.formdev/svgSalamander/badge.svg?style=flat-square&color=007ec6)](https://maven-badges.herokuapp.com/maven-central/com.formdev/svgSalamander)
Tools

View File

@@ -38,6 +38,9 @@ import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.lang.reflect.Field;
@@ -48,6 +51,8 @@ import javax.swing.JRootPane;
import javax.swing.JToolBar;
import javax.swing.JToolTip;
import javax.swing.KeyStroke;
import javax.swing.Popup;
import javax.swing.PopupFactory;
import javax.swing.RootPaneContainer;
import javax.swing.SwingUtilities;
import javax.swing.border.Border;
@@ -55,7 +60,7 @@ import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;
import javax.swing.plaf.UIResource;
import javax.swing.text.JTextComponent;
import com.formdev.flatlaf.ui.FlatToolTipUI;
import com.formdev.flatlaf.FlatClientProperties;
import com.formdev.flatlaf.ui.FlatUIUtils;
import com.formdev.flatlaf.util.UIScale;
@@ -83,7 +88,6 @@ import com.formdev.flatlaf.util.UIScale;
public class FlatInspector
{
private static final Integer HIGHLIGHT_LAYER = 401;
private static final Integer TOOLTIP_LAYER = 402;
private static final int KEY_MODIFIERS_MASK = InputEvent.CTRL_DOWN_MASK | InputEvent.SHIFT_DOWN_MASK | InputEvent.ALT_DOWN_MASK | InputEvent.META_DOWN_MASK;
@@ -91,6 +95,8 @@ public class FlatInspector
private final MouseMotionListener mouseMotionListener;
private final AWTEventListener keyListener;
private final PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport( this );
private final WindowListener windowListener;
private Window window;
private boolean enabled;
private Component lastComponent;
@@ -100,7 +106,7 @@ public class FlatInspector
private boolean wasCtrlOrShiftKeyPressed;
private JComponent highlightFigure;
private JToolTip tip;
private Popup popup;
/**
* Installs a key listener into the application that allows enabling and disabling
@@ -190,6 +196,18 @@ public class FlatInspector
}
}
};
windowListener = new WindowAdapter() {
@Override
public void windowActivated( WindowEvent e ) {
update();
}
@Override
public void windowDeactivated( WindowEvent e ) {
hidePopup();
}
};
}
private void uninstall() {
@@ -222,12 +240,26 @@ public class FlatInspector
rootPane.getGlassPane().setVisible( enabled );
// add/remove key listener
Toolkit toolkit = Toolkit.getDefaultToolkit();
if( enabled )
toolkit.addAWTEventListener( keyListener, AWTEvent.KEY_EVENT_MASK );
else
toolkit.removeAWTEventListener( keyListener );
// add/remove window listener
if( enabled ) {
window = SwingUtilities.windowForComponent( rootPane );
if( window != null )
window.addWindowListener( windowListener );
} else {
if( window != null ) {
window.removeWindowListener( windowListener );
window = null;
}
}
// show/hide popup
if( enabled ) {
Point pt = new Point( MouseInfo.getPointerInfo().getLocation() );
SwingUtilities.convertPointFromScreen( pt, rootPane );
@@ -243,14 +275,19 @@ public class FlatInspector
highlightFigure.getParent().remove( highlightFigure );
highlightFigure = null;
if( tip != null )
tip.getParent().remove( tip );
tip = null;
hidePopup();
}
propertyChangeSupport.firePropertyChange( "enabled", !enabled, enabled );
}
private void hidePopup() {
if( popup != null ) {
popup.hide();
popup = null;
}
}
public void update() {
if( !rootPane.getGlassPane().isVisible() )
return;
@@ -304,7 +341,7 @@ public class FlatInspector
continue;
// ignore highlight figure and tooltip
if( c == highlightFigure || c == tip )
if( c == highlightFigure )
continue;
// ignore glass pane
@@ -358,31 +395,24 @@ public class FlatInspector
}
private void showToolTip( Component c, int x, int y, int parentLevel ) {
if( c == null ) {
if( tip != null )
tip.setVisible( false );
hidePopup();
if( c == null || (window != null && !window.isActive()) )
return;
}
if( tip == null ) {
tip = new JToolTip() {
@Override
public void updateUI() {
setUI( FlatToolTipUI.createUI( this ) );
}
};
rootPane.getLayeredPane().add( tip, TOOLTIP_LAYER );
} else
tip.setVisible( true );
JToolTip tip = new JToolTip();
tip.setTipText( buildToolTipText( c, parentLevel ) );
tip.putClientProperty( FlatClientProperties.POPUP_FORCE_HEAVY_WEIGHT, true );
Point pt = new Point( x, y );
SwingUtilities.convertPointToScreen( pt, rootPane.getGlassPane() );
int tx = pt.x + UIScale.scale( 8 );
int ty = pt.y + UIScale.scale( 16 );
int tx = x + UIScale.scale( 8 );
int ty = y + UIScale.scale( 16 );
Dimension size = tip.getPreferredSize();
// position the tip in the visible area
Rectangle visibleRect = rootPane.getVisibleRect();
Rectangle visibleRect = rootPane.getGraphicsConfiguration().getBounds();
if( tx + size.width > visibleRect.x + visibleRect.width )
tx -= size.width + UIScale.scale( 16 );
if( ty + size.height > visibleRect.y + visibleRect.height )
@@ -392,20 +422,25 @@ public class FlatInspector
if( ty < visibleRect.y )
ty = visibleRect.y;
tip.setBounds( tx, ty, size.width, size.height );
tip.repaint();
PopupFactory popupFactory = PopupFactory.getSharedInstance();
popup = popupFactory.getPopup( c, tip, tx, ty );
popup.show();
}
private static String buildToolTipText( Component c, int parentLevel ) {
StringBuilder buf = new StringBuilder( 1500 );
buf.append( "<html><style>" );
buf.append( "td { padding: 0 10 0 0; }" );
buf.append( "</style><table>" );
String name = c.getClass().getName();
name = name.substring( name.lastIndexOf( '.' ) + 1 );
String text =
"Class: " + name + " (" + c.getClass().getPackage().getName() + ")\n" +
"Size: " + c.getWidth() + ',' + c.getHeight() + " @ " + c.getX() + ',' + c.getY() + '\n';
Package pkg = c.getClass().getPackage();
appendRow( buf, "Class", name + " (" + (pkg != null ? pkg.getName() : "-") + ")" );
appendRow( buf, "Size", c.getWidth() + ", " + c.getHeight() + "&nbsp;&nbsp; @ " + c.getX() + ", " + c.getY() );
if( c instanceof Container )
text += "Insets: " + toString( ((Container)c).getInsets() ) + '\n';
appendRow( buf, "Insets", toString( ((Container)c).getInsets() ) );
Insets margin = null;
if( c instanceof AbstractButton )
@@ -418,29 +453,29 @@ public class FlatInspector
margin = ((JToolBar) c).getMargin();
if( margin != null )
text += "Margin: " + toString( margin ) + '\n';
appendRow( buf, "Margin", toString( margin ) );
Dimension prefSize = c.getPreferredSize();
Dimension minSize = c.getMinimumSize();
Dimension maxSize = c.getMaximumSize();
text += "Pref size: " + prefSize.width + ',' + prefSize.height + '\n' +
"Min size: " + minSize.width + ',' + minSize.height + '\n' +
"Max size: " + maxSize.width + ',' + maxSize.height + '\n';
appendRow( buf, "Pref size", prefSize.width + ", " + prefSize.height );
appendRow( buf, "Min size", minSize.width + ", " + minSize.height );
appendRow( buf, "Max size", maxSize.width + ", " + maxSize.height );
if( c instanceof JComponent )
text += "Border: " + toString( ((JComponent)c).getBorder() ) + '\n';
appendRow( buf, "Border", toString( ((JComponent)c).getBorder() ) );
text += "Background: " + toString( c.getBackground() ) + '\n' +
"Foreground: " + toString( c.getForeground() ) + '\n' +
"Font: " + toString( c.getFont() ) + '\n';
appendRow( buf, "Background", toString( c.getBackground() ) );
appendRow( buf, "Foreground", toString( c.getForeground() ) );
appendRow( buf, "Font", toString( c.getFont() ) );
if( c instanceof JComponent ) {
try {
Field f = JComponent.class.getDeclaredField( "ui" );
f.setAccessible( true );
Object ui = f.get( c );
text += "UI: " + (ui != null ? ui.getClass().getName() : "null") + '\n';
} catch( NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException ex ) {
appendRow( buf, "UI", (ui != null ? ui.getClass().getName() : "null") );
} catch( Exception ex ) {
// ignore
}
}
@@ -448,34 +483,46 @@ public class FlatInspector
if( c instanceof Container ) {
LayoutManager layout = ((Container)c).getLayout();
if( layout != null )
text += "Layout: " + layout.getClass().getName() + '\n';
appendRow( buf, "Layout", layout.getClass().getName() );
}
text += "Enabled: " + c.isEnabled() + '\n';
text += "Opaque: " + c.isOpaque() + (c instanceof JComponent &&
FlatUIUtils.hasOpaqueBeenExplicitlySet( (JComponent) c ) ? " EXPLICIT" : "") + '\n';
appendRow( buf, "Enabled", String.valueOf( c.isEnabled() ) );
appendRow( buf, "Opaque", String.valueOf( c.isOpaque() )
+ (c instanceof JComponent && FlatUIUtils.hasOpaqueBeenExplicitlySet( (JComponent) c ) ? " EXPLICIT" : "") );
if( c instanceof AbstractButton )
text += "ContentAreaFilled: " + ((AbstractButton)c).isContentAreaFilled() + '\n';
text += "Focusable: " + c.isFocusable() + '\n';
text += "Left-to-right: " + c.getComponentOrientation().isLeftToRight() + '\n';
text += "Parent: " + (c.getParent() != null ? c.getParent().getClass().getName() : "null");
appendRow( buf, "ContentAreaFilled", String.valueOf( ((AbstractButton)c).isContentAreaFilled() ) );
appendRow( buf, "Focusable", String.valueOf( c.isFocusable() ) );
appendRow( buf, "Left-to-right", String.valueOf( c.getComponentOrientation().isLeftToRight() ) );
appendRow( buf, "Parent", (c.getParent() != null ? c.getParent().getClass().getName() : "null") );
buf.append( "<tr><td colspan=\"2\">" );
if( parentLevel > 0 )
buf.append( "<br>Parent level: " + parentLevel );
if( parentLevel > 0 )
text += "\n\nParent level: " + parentLevel;
if( parentLevel > 0 )
text += "\n(press Ctrl/Shift to increase/decrease level)";
buf.append( "<br>(press Ctrl/Shift to increase/decrease level)" );
else
text += "\n\n(press Ctrl key to inspect parent)";
buf.append( "<br>(press Ctrl key to inspect parent)" );
return text;
buf.append( "</td></tr>" );
buf.append( "</table></html>" );
return buf.toString();
}
private static void appendRow( StringBuilder buf, String key, String value ) {
buf.append( "<tr><td>" )
.append( key )
.append( ":</td><td>" )
.append( value )
.append( "</td></tr>" );
}
private static String toString( Insets insets ) {
if( insets == null )
return "null";
return insets.top + "," + insets.left + ',' + insets.bottom + ',' + insets.right
return insets.top + ", " + insets.left + ", " + insets.bottom + ", " + insets.right
+ (insets instanceof UIResource ? " UI" : "");
}
@@ -483,10 +530,29 @@ public class FlatInspector
if( c == null )
return "null";
String s = Long.toString( c.getRGB() & 0xffffffffl, 16 );
StringBuilder buf = new StringBuilder( 150 );
buf.append( "<tt>" ); // <tt> is similar to <code>, but uses same font size as body
buf.append( (c.getAlpha() != 255)
? String.format( "#%06x%02x", c.getRGB() & 0xffffff, (c.getRGB() >> 24) & 0xff )
: String.format( "#%06x", c.getRGB() & 0xffffff ) );
buf.append( "</tt>" );
if( c instanceof UIResource )
s += " UI";
return s;
buf.append( " UI" );
// color preview
buf.append( "&nbsp; &nbsp;" )
.append( "<span style=\"background: " )
.append( String.format( "#%06x", c.getRGB() & 0xffffff ) ) // Java CSS does not support alpha; see CSS.hexToColor()
.append( ";\">" )
.append( "&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;" )
.append( "</span>" );
if( c.getAlpha() != 255 )
buf.append( " " ).append( Math.round( c.getAlpha() / 2.55f ) ).append( '%' );
return buf.toString();
}
private static String toString( Font f ) {

View File

@@ -322,10 +322,11 @@ public class FlatUIDefaultsInspector
continue;
// resolve derived color
Object info = null;
if( value instanceof DerivedColor ) {
Color resolvedColor = resolveDerivedColor( defaults, (String) key, (DerivedColor) value, pBaseColor );
if( resolvedColor != value )
value = new Color[] { resolvedColor, pBaseColor[0], (Color) value };
info = new Color[] { resolvedColor, pBaseColor[0] };
}
// check whether key was overridden using UIManager.put(key,value)
@@ -334,7 +335,7 @@ public class FlatUIDefaultsInspector
lafValue = lafDefaults.get( key );
// add item
items.add( new Item( String.valueOf( key ), value, lafValue ) );
items.add( new Item( String.valueOf( key ), value, lafValue, info ) );
}
return items.toArray( new Item[items.size()] );
@@ -445,7 +446,7 @@ public class FlatUIDefaultsInspector
model.setFilter( item -> {
if( valueType != null &&
!valueType.equals( "(any)" ) &&
!valueType.equals( typeOfValue( item.value ) ) )
!typeOfValue( item.value ).startsWith( valueType ) )
return false;
if( filters == null )
@@ -477,8 +478,13 @@ public class FlatUIDefaultsInspector
return "Boolean";
if( value instanceof Border )
return "Border";
if( value instanceof Color || value instanceof Color[] )
if( value instanceof Color ) {
if( ((Color)value).getAlpha() != 255 )
return "Color (\u03b1)";
if( value instanceof DerivedColor )
return "Color (\u0192)";
return "Color";
}
if( value instanceof Dimension )
return "Dimension";
if( value instanceof Float )
@@ -594,6 +600,8 @@ public class FlatUIDefaultsInspector
"Boolean",
"Border",
"Color",
"Color (\u03b1)",
"Color (\u0192)",
"Dimension",
"Float",
"Font",
@@ -669,24 +677,26 @@ public class FlatUIDefaultsInspector
final String key;
final Object value;
final Object lafValue;
final Object info;
private String valueStr;
Item( String key, Object value, Object lafValue ) {
Item( String key, Object value, Object lafValue, Object info ) {
this.key = key;
this.value = value;
this.lafValue = lafValue;
this.info = info;
}
String getValueAsString() {
if( valueStr == null )
valueStr = valueAsString( value );
valueStr = valueAsString( value, info );
return valueStr;
}
static String valueAsString( Object value ) {
if( value instanceof Color || value instanceof Color[] ) {
Color color = (value instanceof Color[]) ? ((Color[])value)[0] : (Color) value;
static String valueAsString( Object value, Object info ) {
if( value instanceof Color ) {
Color color = (info instanceof Color[]) ? ((Color[])info)[0] : (Color) value;
HSLColor hslColor = new HSLColor( color );
if( color.getAlpha() == 255 ) {
return String.format( "%-9s HSL %3d %3d %3d",
@@ -720,7 +730,7 @@ public class FlatUIDefaultsInspector
Border border = (Border) value;
if( border instanceof FlatLineBorder ) {
FlatLineBorder lineBorder = (FlatLineBorder) border;
return valueAsString( lineBorder.getUnscaledBorderInsets() )
return valueAsString( lineBorder.getUnscaledBorderInsets(), null )
+ " " + color2hex( lineBorder.getLineColor() )
+ " " + lineBorder.getLineThickness()
+ " " + border.getClass().getName();
@@ -728,7 +738,7 @@ public class FlatUIDefaultsInspector
Insets insets = (border instanceof FlatEmptyBorder)
? ((FlatEmptyBorder)border).getUnscaledBorderInsets()
: ((EmptyBorder)border).getBorderInsets();
return valueAsString( insets ) + " " + border.getClass().getName();
return valueAsString( insets, null ) + " " + border.getClass().getName();
} else if( border instanceof FlatBorder || border instanceof FlatMarginBorder )
return border.getClass().getName();
else
@@ -991,7 +1001,7 @@ public class FlatUIDefaultsInspector
init( table, item.key, isSelected, row );
// reset background, foreground and icon
if( !(item.value instanceof Color) && !(item.value instanceof Color[]) ) {
if( !(item.value instanceof Color) ) {
setBackground( null );
setForeground( null );
}
@@ -1003,8 +1013,8 @@ public class FlatUIDefaultsInspector
super.getTableCellRendererComponent( table, value, isSelected, hasFocus, row, column );
if( item.value instanceof Color || item.value instanceof Color[] ) {
Color color = (item.value instanceof Color[]) ? ((Color[])item.value)[0] : (Color) item.value;
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 );
setForeground( isDark ? Color.white : Color.black );
@@ -1019,7 +1029,7 @@ public class FlatUIDefaultsInspector
: String.valueOf( item.value );
if( item.lafValue != null ) {
toolTipText += " \n\nLaF UI default value was overridden with UIManager.put(key,value):\n "
+ Item.valueAsString( item.lafValue ) + "\n " + String.valueOf( item.lafValue );
+ Item.valueAsString( item.lafValue, null ) + "\n " + String.valueOf( item.lafValue );
}
setToolTipText( toolTipText );
@@ -1028,7 +1038,7 @@ public class FlatUIDefaultsInspector
@Override
protected void paintComponent( Graphics g ) {
if( item.value instanceof Color || item.value instanceof Color[] ) {
if( item.value instanceof Color ) {
int width = getWidth();
int height = getHeight();
Color background = getBackground();
@@ -1036,13 +1046,13 @@ public class FlatUIDefaultsInspector
// paint color
fillRect( g, background, 0, 0, width, height );
if( item.value instanceof Color[] ) {
if( item.info instanceof Color[] ) {
// paint base color
int width2 = height * 2;
fillRect( g, ((Color[])item.value)[1], width - width2, 0, width2, height );
fillRect( g, ((Color[])item.info)[1], width - width2, 0, width2, height );
// paint default color
Color defaultColor = ((Color[])item.value)[2];
Color defaultColor = (Color) item.value;
if( defaultColor != null && !defaultColor.equals( background ) ) {
int width3 = height / 2;
fillRect( g, defaultColor, width - width3, 0, width3, height );

View File

@@ -42,6 +42,8 @@ new FormModel {
addElement( "Boolean" )
addElement( "Border" )
addElement( "Color" )
addElement( "Color (α)" )
addElement( "Color (ƒ)" )
addElement( "Dimension" )
addElement( "Float" )
addElement( "Font" )

View File

@@ -164,14 +164,16 @@ public class FlatTabbedPane
/**
* Returns the height of a tab.
* Returns the minimum height of a tab.
*/
public int getTabHeight() {
return getClientPropertyInt( TABBED_PANE_TAB_HEIGHT, "TabbedPane.tabHeight" );
}
/**
* Specifies the height of a tab.
* Specifies the minimum height of a tab.
*
* @see #setTabInsets(Insets)
*/
public void setTabHeight( int tabHeight ) {
putClientProperty( TABBED_PANE_TAB_HEIGHT, (tabHeight >= 0) ? tabHeight : null );
@@ -187,6 +189,8 @@ public class FlatTabbedPane
/**
* Specifies the insets of a tab.
*
* @see #setTabHeight(int)
*/
public void setTabInsets( Insets tabInsets ) {
putClientProperty( TABBED_PANE_TAB_INSETS, tabInsets );
@@ -203,6 +207,8 @@ public class FlatTabbedPane
/**
* Specifies the insets of the tab at the given tab index.
*
* @see #setTabHeight(int)
*/
public void setTabInsets( int tabIndex, Insets tabInsets ) {
JComponent c = (JComponent) getComponentAt( tabIndex );

View File

@@ -0,0 +1,59 @@
/*
* 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.*;
import javax.swing.JTree;
/**
* Subclass of {@link JTree} that provides easy access to FlatLaf specific client properties.
*
*/
public class FlatTree
extends JTree
implements FlatComponentExtension
{
/**
* Returns if the tree shows a wide selection
*/
public boolean isWideSelection() {
return getClientPropertyBoolean( TREE_WIDE_SELECTION, "Tree.wideSelection" );
}
/**
* Sets if the tree shows a wide selection
*/
public void setWideSelection( boolean wideSelection ) {
putClientProperty( TREE_WIDE_SELECTION, wideSelection );
}
/**
* Returns whether tree item selection is painted. Default is {@code true}.
* If set to {@code false}, then the tree cell renderer is responsible for painting selection.
*/
public boolean isPaintSelection() {
return getClientPropertyBoolean( TREE_PAINT_SELECTION, true );
}
/**
* Specifies whether tree item selection is painted. Default is {@code true}.
* If set to {@code false}, then the tree cell renderer is responsible for painting selection.
*/
public void setPaintSelection( boolean paintSelection ) {
putClientProperty( TREE_PAINT_SELECTION, paintSelection );
}
}

View File

@@ -0,0 +1,28 @@
/*
* 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.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.
*
* @author Karl Tauber
*/
interface EmptyPackage
{
}

View File

@@ -210,3 +210,13 @@ ToggleButton.toolbar.pressedBackground = ToggleButton.background
ToggleButton.toolbar.selectedBackground = ToggleButton.background
ToggleButton.tab.hoverBackground = null
#---- JideButton ----
JideButton.focusedBackground = JideButton.background
JideButton.selectedAndFocusedBackground = JideButton.background
JideButton.selectedBackground = JideButton.background
JideButton.highlight = null

View File

@@ -11,8 +11,7 @@ out.
Download
--------
FlatLaf IntelliJ Themes Pack binaries are available on **JCenter** and **Maven
Central**.
FlatLaf IntelliJ Themes Pack binaries are available on **Maven Central**.
If you use Maven or Gradle, add a dependency with following coordinates to your
build script:
@@ -23,7 +22,7 @@ build script:
Otherwise download `flatlaf-intellij-themes-<version>.jar` here:
[![Download](https://api.bintray.com/packages/jformdesigner/flatlaf/flatlaf-intellij-themes/images/download.svg)](https://bintray.com/jformdesigner/flatlaf/flatlaf-intellij-themes/_latestVersion)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.formdev/flatlaf-intellij-themes/badge.svg?style=flat-square&color=007ec6)](https://maven-badges.herokuapp.com/maven-central/com.formdev/flatlaf-intellij-themes)
How to use?

View File

@@ -17,25 +17,21 @@
package com.formdev.flatlaf.intellijthemes;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.formdev.flatlaf.FlatLaf;
import com.formdev.flatlaf.IntelliJTheme;
import com.formdev.flatlaf.util.LoggingFacade;
/**
* @author Karl Tauber
*/
class Utils
{
static final Logger LOG = Logger.getLogger( FlatLaf.class.getName() );
static IntelliJTheme loadTheme( String name ) {
try {
return new IntelliJTheme( Utils.class.getResourceAsStream(
"/com/formdev/flatlaf/intellijthemes/themes/" + name ) );
} catch( IOException ex ) {
String msg = "FlatLaf: Failed to load IntelliJ theme '" + name + "'";
LOG.log( Level.SEVERE, msg, ex );
LoggingFacade.INSTANCE.logSevere( msg, ex );
throw new RuntimeException( msg, ex );
}
}

View File

@@ -17,25 +17,21 @@
package com.formdev.flatlaf.intellijthemes.materialthemeuilite;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import com.formdev.flatlaf.FlatLaf;
import com.formdev.flatlaf.IntelliJTheme;
import com.formdev.flatlaf.util.LoggingFacade;
/**
* @author Karl Tauber
*/
class Utils
{
static final Logger LOG = Logger.getLogger( FlatLaf.class.getName() );
static IntelliJTheme loadTheme( String name ) {
try {
return new IntelliJTheme( Utils.class.getResourceAsStream(
"/com/formdev/flatlaf/intellijthemes/themes/material-theme-ui-lite/" + name ) );
} catch( IOException ex ) {
String msg = "FlatLaf: Failed to load IntelliJ theme '" + name + "'";
LOG.log( Level.SEVERE, msg, ex );
LoggingFacade.INSTANCE.logSevere( msg, ex );
throw new RuntimeException( msg, ex );
}
}

View File

@@ -19,7 +19,6 @@
*/
module com.formdev.flatlaf.intellijthemes {
requires java.desktop;
requires java.logging;
requires com.formdev.flatlaf;
exports com.formdev.flatlaf.intellijthemes;

View File

@@ -4,22 +4,27 @@
"author": "Zihan Ma",
"editorScheme": "/themes/Dracula.xml",
"colors": {
"accentColor": "#ff79c6",
"secondaryAccentColor": "#bd93f9",
"primaryForeground": "#f8f8f2",
"primaryBackground": "#414450",
"secondaryBackground": "#44475a",
"secondaryBackground": "#3a3d4c",
"hoverBackground": "#282a36",
"selectionBackground": "#6272a4",
"selectionInactiveBackground": "#4e5a82",
"borderColor": "#282a36",
"separatorColor": "#282a36"
"separatorColor": "#5d5e66"
},
"ui": {
"*": {
"arc": "7",
"background": "primaryBackground",
"selectionForeground": "primaryForeground",
"selectionInactiveForeground": "primaryForeground",
"selectionBackground": "selectionBackground",
"selectionInactiveBackground": "selectionInactiveBackground",
"inactiveBackground": "primaryBackground",
"disabledBackground": "primaryBackground",
"borderColor": "borderColor",
"separatorColor": "separatorColor"
},
@@ -37,17 +42,18 @@
"foreground": "primaryForeground",
"startBorderColor": "selectionBackground",
"endBorderColor": "selectionBackground",
"startBackground": "selectionBackground",
"endBackground": "selectionBackground",
"focusedBorderColor": "#bd93f9",
"startBackground": "#4f566d",
"endBackground": "#4f566d",
"focusedBorderColor": "secondaryAccentColor",
"disabledBorderColor": "#4f566d",
"default": {
"foreground": "primaryForeground",
"startBackground": "selectionBackground",
"endBackground": "selectionBackground",
"startBorderColor": "#bd93f9",
"endBorderColor": "#bd93f9",
"focusColor": "#bd93f9",
"focusedBorderColor": "#bd93f9"
"startBorderColor": "secondaryAccentColor",
"endBorderColor": "secondaryAccentColor",
"focusColor": "secondaryAccentColor",
"focusedBorderColor": "secondaryAccentColor"
}
},
"Counter": {
@@ -55,27 +61,29 @@
"background": "#2fc864"
},
"CheckBoxMenuItem": {
"acceleratorSelectionForeground": "#ff79c6"
"acceleratorSelectionForeground": "accentColor"
},
"ComboBox": {
"modifiedItemForeground": "#ff79c6",
"modifiedItemForeground": "accentColor",
"ArrowButton": {
"background": "secondaryBackground",
"nonEditableBackground": "secondaryBackground",
"iconColor": "#bd93f9"
"disabledIconColor": "#576285",
"iconColor": "secondaryAccentColor"
},
"selectionBackground": "#bd93f9",
"selectionBackground": "secondaryAccentColor",
"nonEditableBackground": "secondaryBackground"
},
"CompletionPopup": {
"selectionBackground": "selectionBackground",
"selectionInactiveBackground": "selectionInactiveBackground",
"matchForeground": "#ff79c6"
"matchForeground": "accentColor"
},
"Component": {
"focusColor": "#bd93f9",
"focusColor": "secondaryAccentColor",
"borderColor": "selectionBackground",
"focusedBorderColor": "selectionBackground",
"disabledBorderColor": "selectionBackground",
"errorFocusColor": "#ff5554",
"inactiveErrorFocusColor": "#ff5554",
"warningFocusColor": "#f1fa8c",
@@ -86,31 +94,30 @@
},
"Editor": {
"background": "secondaryBackground",
"shortcutForeground": "#ff79c6"
"shortcutForeground": "accentColor"
},
"EditorTabs": {
"background": "secondaryBackground",
"underlinedTabBackground": "#313341",
"underlineColor": "#bd93f9",
"underlinedTabBackground": "#292b38",
"underlineColor": "secondaryAccentColor",
"underlineHeight": 2
},
"FileColor": {
"Blue": "#8be9fd",
"Green": "#63667E",
"Orange": "#ffb86c",
"Yellow": "secondaryBackground",
"Rose": "#ff79c6",
"Violet": "#bd93f9"
"Blue": "#344f54",
"Green": "#344535",
"Orange": "#533f30",
"Yellow": "#4f4b41",
"Rose": "#4c273c",
"Violet": "#382b4a"
},
"Label": {
"foreground": "primaryForeground",
"errorForeground": "#ff5554"
},
"Link": {
"activeForeground": "#ff79c6",
"hoverForeground": "#ff79c6",
"visitedForeground": "#bd93f9",
"pressedForeground": "#bd93f9"
"activeForeground": "accentColor",
"hoverForeground": "accentColor",
"visitedForeground": "secondaryAccentColor",
"pressedForeground": "secondaryAccentColor"
},
"Notification": {
"borderColor": "selectionBackground",
@@ -129,6 +136,9 @@
"informativeBorderColor": "#50fa7b"
}
},
"PasswordField": {
"background": "secondaryBackground"
},
"Plugins": {
"SearchField": {
"background": "secondaryBackground"
@@ -139,11 +149,11 @@
"hoverBackground": "hoverBackground",
"lightSelectionBackground": "hoverBackground",
"Button": {
"installBorderColor": "#bd93f9",
"installForeground": "#bd93f9",
"installBorderColor": "secondaryAccentColor",
"installForeground": "secondaryAccentColor",
"installBackground": "primaryBackground",
"installFillForeground": "primaryBackground",
"installFillBackground": "#bd93f9",
"installFillBackground": "secondaryAccentColor",
"installFocusedBackground": "primaryBackground",
"updateBorderColor": "#5da3f4",
"updateForeground": "primaryForeground",
@@ -159,9 +169,9 @@
"failedColor": "#ff5554",
"failedEndColor": "#ff5554",
"trackColor": "selectionBackground",
"progressColor": "#ff79c6",
"progressColor": "accentColor",
"indeterminateStartColor": "#93b8f9",
"indeterminateEndColor": "#bd93f9",
"indeterminateEndColor": "secondaryAccentColor",
"passedColor": "#50fa7b",
"passedEndColor": "#50fa7b"
},
@@ -173,9 +183,9 @@
},
"ScrollBar": {
"Mac": {
"hoverThumbColor": "#bd93f9",
"hoverThumbColor": "secondaryAccentColor",
"Transparent": {
"hoverThumbColor": "#bd93f9"
"hoverThumbColor": "secondaryAccentColor"
}
}
},
@@ -189,8 +199,8 @@
}
},
"SearchMatch": {
"startBackground": "#ff79c6",
"endBackground": "#ff79c6"
"startBackground": "accentColor",
"endBackground": "accentColor"
},
"Separator": {
"separatorColor": "separatorColor"
@@ -205,7 +215,7 @@
"tabSelectionHeight": 1,
"focusColor": "hoverBackground",
"hoverColor": "hoverBackground",
"underlineColor": "#bd93f9",
"underlineColor": "secondaryAccentColor",
"contentAreaColor": "hoverBackground"
},
"Table": {
@@ -215,6 +225,9 @@
"TableHeader": {
"bottomSeparatorColor": "separatorColor"
},
"TextField": {
"background": "secondaryBackground"
},
"ToggleButton": {
"onBackground": "#50fa7b",
"onForeground": "hoverBackground",
@@ -227,18 +240,18 @@
"hoverBackground": "hoverBackground"
},
"Header": {
"background": "secondaryBackground",
"background": "#484c60",
"inactiveBackground": "secondaryBackground"
},
"HeaderTab": {
"underlineColor": "#bd93f9",
"underlineHeight": 1,
"underlinedTabBackground": "#313341",
"underlineColor": "secondaryAccentColor",
"underlineHeight": 2,
"underlinedTabBackground": "#292b38",
"underlinedTabInactiveBackground": "#313341"
}
},
"Tree": {
"modifiedItemForeground": "#ff79c6",
"modifiedItemForeground": "accentColor",
"selectionBackground": "selectionBackground",
"selectionInactiveBackground": "selectionInactiveBackground"
},
@@ -257,8 +270,8 @@
"GitLog": {
"headIconColor": "#f1fa8c",
"localBranchIconColor": "#50fa7b",
"remoteBranchIconColor": "#bd93f9",
"tagIconColor": "#ff79c6",
"remoteBranchIconColor": "secondaryAccentColor",
"tagIconColor": "accentColor",
"otherIconColor": "#8be9fd"
},
"Log": {
@@ -266,6 +279,9 @@
"hoveredBackground": "selectionBackground",
"currentBranchBackground": "secondaryBackground"
}
},
"RefLabel": {
"foreground": "primaryForeground"
}
},
"WelcomeScreen": {
@@ -303,10 +319,12 @@
"Objects.Yellow": "#f1fa8c",
"Objects.YellowDark": "#f1fa8c",
"Objects.BlackText": "#282a35",
"Checkbox.Foreground.Selected.Dark": "#f8f8f2",
"Checkbox.Border.Default.Dark": "#bd93f9",
"Checkbox.Border.Selected.Dark": "#bd93f9",
"Checkbox.Border.Disabled.Dark": "#6272a4",
"Checkbox.Background.Default.Dark": "#6272a4",
"Checkbox.Foreground.Selected.Dark": "#f8f8f2",
"Checkbox.Background.Disabled.Dark": "#414450",
"Checkbox.Focus.Wide.Dark": "#bd93f9",
"Checkbox.Focus.Thin.Selected.Dark": "#bd93f9",
"Checkbox.Focus.Thin.Default.Dark": "#bd93f9"

View File

@@ -14,19 +14,19 @@
"acceleratorSelectionForeground": "#8b9eb5",
"background": "#2f343f",
"borderColor": "#404552",
"disabledBackground": "#474B57",
"disabledBackground": "#37373d",
"disabledForeground": "#D3DAE3",
"disabledText": "#D3DAE3",
"focusColor": "#3F3F46",
"focusColor": "#393f4c",
"focusedBorderColor": "#42A5F5",
"foreground": "#D3DAE3",
"inactiveBackground": "#474B57",
"inactiveBackground": "#37373d",
"inactiveForeground": "#8b9eb5",
"infoForeground": "#8b9eb5",
"selectionBackground": "#8888FF",
"selectionBackgroundInactive": "#393f4c",
"selectionBackground": "#8888FF55",
"selectionBackgroundInactive": "#393f4c45",
"selectionForeground": "#FFFFFF",
"selectionInactiveBackground": "#393f4c",
"selectionInactiveBackground": "#393f4c45",
"separatorColor": "#404552"
},
"activeCaption": "#2f343f",
@@ -39,7 +39,7 @@
"pressedBorderColor": "#42A5F550"
},
"Autocomplete": {
"selectionBackground": "#8888FF"
"selectionBackground": "#8888FF55"
},
"Borders.ContrastBorderColor": "#2f343f",
"Borders.color": "#404552",
@@ -60,7 +60,7 @@
"disabledText": "#D3DAE3",
"endBackground": "#383C4A",
"endBorderColor": "#383C4A",
"focus": "#3F3F46",
"focus": "#393f4c",
"focusedBorderColor": "#42A5F5",
"foreground": "#8b9eb5",
"highlight": "#FFFFFF",
@@ -80,7 +80,7 @@
},
"Content": {
"background": "#262b33",
"selectionBackground": "#8888FF"
"selectionBackground": "#8888FF55"
},
"CheckBox": {
"background": "#2f343f",
@@ -95,14 +95,14 @@
"disabledBackground": "#2f343f",
"disabledForeground": "#D3DAE3",
"foreground": "#D3DAE3",
"selectionBackground": "#8888FF",
"selectionBackground": "#8888FF55",
"selectionForeground": "#FFFFFF"
},
"CodeWithMe": {
"Avatar.foreground": "#D3DAE3",
"AccessEnabled": {
"accessDot": "#42A5F5",
"dropdownBorder": "#393f4c",
"dropdownBorder": "#393f4c45",
"pillBackground": "$second"
}
},
@@ -125,14 +125,14 @@
"disabledForeground": "#D3DAE3",
"foreground": "#D3DAE3",
"modifiedItemForeground": "#42A5F5",
"nonEditableBackground": "#393f4c",
"nonEditableBackground": "#393f4c45",
"padding": "5,5,5,5",
"selectionBackground": "#41416A",
"selectionForeground": "#FFFFFF"
},
"ComboPopup.border": "#404552",
"CompletionPopup": {
"background": "#393f4c",
"background": "#393f4c45",
"foreground": "#D3DAE3",
"infoForeground": "#8b9eb5",
"matchForeground": "#42A5F5",
@@ -141,14 +141,14 @@
"selectedGrayedForeground": "#FFFFFF",
"selectionGrayForeground": "#FFFFFF",
"selectionInactiveInfoForeground": "#8b9eb5",
"selectionInactiveBackground": "#8888FF50",
"selectionBackground": "#8888FF80",
"selectionInactiveBackground": "#8888FF55",
"selectionBackground": "#8888FF55",
"selectionForeground": "#FFFFFF",
"selectionInfoForeground": "#FFFFFF"
},
"Component": {
"arc": 4,
"borderColor": "#3F3F46",
"borderColor": "#393f4c",
"disabledBorderColor": "#383C4A",
"focusColor": "#42A5F5",
"focusedBorderColor": "#42A5F5",
@@ -174,18 +174,18 @@
}
},
"DebuggerTabs": {
"selectedBackground": "#3F3F46",
"underlinedTabBackground": "#3F3F46"
"selectedBackground": "#393f4c",
"underlinedTabBackground": "#393f4c"
},
"DebuggerPopup": {
"borderColor": "#3F3F46"
"borderColor": "#393f4c"
},
"DefaultTabs": {
"background": "#2f343f",
"borderColor": "#2f343f",
"hoverBackground": "#41416A",
"hoverColor": "#262b33",
"hoverMaskColor": "#3F3F46",
"hoverMaskColor": "#393f4c",
"inactiveColoredTabBackground": "#2f343f",
"inactiveColoredFileBackground": "#383C4A",
"inactiveUnderlineColor": "#42A5F5",
@@ -213,14 +213,14 @@
"foreground": "#D3DAE3",
"inactiveBackground": "#2f343f",
"inactiveForeground": "#D3DAE3",
"selectionBackground": "#8888FF",
"selectionBackground": "#8888FF55",
"selectionForeground": "#FFFFFF"
},
"EditorTabs": {
"borderColor": "#393f4c",
"hoverBackground": "#3F3F46",
"hoverColor": "#3F3F46",
"hoverMaskColor": "#3F3F46",
"borderColor": "#393f4c45",
"hoverBackground": "#393f4c",
"hoverColor": "#393f4c",
"hoverMaskColor": "#393f4c",
"inactiveMaskColor": "#2f343f",
"inactiveColoredFileBackground": "#2f343f",
"inactiveUnderlineColor": "#D3DAE3",
@@ -232,9 +232,9 @@
},
"EditorGroupsTabs": {
"background": "#2f343f",
"borderColor": "#393f4c",
"hoverBackground": "#3F3F46",
"hoverColor": "#3F3F46",
"borderColor": "#393f4c45",
"hoverBackground": "#393f4c",
"hoverColor": "#393f4c",
"inactiveUnderlineColor": "#42A5F5",
"underlineColor": "#42A5F5",
"underlinedTabBackground": "#41416A",
@@ -243,7 +243,7 @@
"FileColor": {
"Green": "#387002",
"Blue": "#004BA0",
"Yellow": "#474B57",
"Yellow": "#37373d",
"Orange": "#B53D00",
"Violet": "#4D2C91",
"Rose": "#A00037"
@@ -289,7 +289,7 @@
"shortcutForeground": "#8b9eb5"
},
"Hyperlink.linkColor": "#42A5F5",
"inactiveCaption": "#393f4c",
"inactiveCaption": "#393f4c45",
"inactiveCaptionBorder": "#2f343f",
"inactiveCaptionText": "#8b9eb5",
"info": "#8b9eb5",
@@ -323,14 +323,14 @@
},
"link.foreground": "#42A5F5",
"List": {
"background": "#393f4c",
"background": "#393f4c45",
"foreground": "#D3DAE3",
"hoverBackground": "#08507C70",
"hoverBackground": "#09477170",
"hoverInactiveBackground": "#41416A",
"selectionBackground": "#8888FF50",
"selectionBackground": "#8888FF55",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveBackground": "#08507C70"
"selectionInactiveBackground": "#09477170"
},
"material": {
"background": "#2f343f",
@@ -345,20 +345,20 @@
"tagColor": "#8b9eb5"
},
"MemoryIndicator": {
"allocatedBackground": "#393f4c",
"usedColor": "#3F3F46",
"usedBackground": "#3F3F46"
"allocatedBackground": "#393f4c45",
"usedColor": "#393f4c",
"usedBackground": "#393f4c"
},
"Menu": {
"acceleratorForeground": "#8b9eb5",
"acceleratorSelectionForeground": "#FFFFFF",
"background": "#2f343f",
"border": "4,2,4,2",
"borderColor": "#393f4c",
"disabledBackground": "#393f4c",
"borderColor": "#393f4c45",
"disabledBackground": "#393f4c45",
"disabledForeground": "#D3DAE3",
"foreground": "#D3DAE3",
"selectionBackground": "#8888FF",
"selectionBackground": "#8888FF55",
"selectionForeground": "#FFFFFF",
"separatorColor": "#404552"
},
@@ -369,7 +369,7 @@
"disabledForeground": "#D3DAE3",
"foreground": "#D3DAE3",
"highlight": "#2f343f",
"selectionBackground": "#8888FF",
"selectionBackground": "#8888FF55",
"selectionForeground": "#FFFFFF",
"shadow": "#262b33"
},
@@ -381,7 +381,7 @@
"disabledBackground": "#2f343f",
"disabledForeground": "#D3DAE3",
"foreground": "#D3DAE3",
"selectionBackground": "#8888FF",
"selectionBackground": "#8888FF55",
"selectionForeground": "#FFFFFF"
},
"NavBar": {
@@ -433,9 +433,9 @@
"foreground": "#D3DAE3"
},
"ParameterInfo": {
"background": "#393f4c",
"background": "#393f4c45",
"borderColor": "#41416A",
"currentOverloadBackground": "#3F3F46",
"currentOverloadBackground": "#393f4c",
"currentParameterForeground": "#42A5F5",
"disabledForeground": "#D3DAE3",
"foreground": "#D3DAE3",
@@ -454,19 +454,19 @@
"Plugins": {
"background": "#2f343f",
"disabledForeground": "#D3DAE3",
"eapTagBackground": "#3F3F46",
"hoverBackground": "#08507C70",
"eapTagBackground": "#393f4c",
"hoverBackground": "#09477170",
"lightSelectionBackground": "#41416A",
"paidTagBackground": "#3F3F46",
"selectionBackground": "#8888FF",
"paidTagBackground": "#393f4c",
"selectionBackground": "#8888FF55",
"tagForeground": "#42A5F5",
"tagBackground": "#3F3F46",
"trialTagBackground": "#3F3F46",
"tagBackground": "#393f4c",
"trialTagBackground": "#393f4c",
"Button": {
"installBackground": "#383C4A",
"installBorderColor": "#383C4A",
"installForeground": "#D3DAE3",
"installFocusedBackground": "#3F3F46",
"installFocusedBackground": "#393f4c",
"installFillForeground": "#D3DAE3",
"installFillBackground": "#383C4A",
"updateBackground": "#42A5F5",
@@ -478,7 +478,7 @@
"borderColor": "#404552"
},
"SectionHeader": {
"background": "#393f4c",
"background": "#393f4c45",
"foreground": "#D3DAE3"
},
"Tab": {
@@ -495,14 +495,14 @@
},
"borderColor": "#262b33",
"inactiveBorderColor": "#2f343f",
"innerBorderColor": "#393f4c",
"innerBorderColor": "#393f4c45",
"Header": {
"activeBackground": "#2f343f",
"inactiveBackground": "#262b33"
},
"paintBorder": true,
"separatorForeground": "#D3DAE3",
"separatorColor": "#393f4c",
"separatorColor": "#393f4c45",
"Toolbar": {
"Floating.background": "#262b33",
"background": "#262b33",
@@ -523,8 +523,8 @@
"indeterminateEndColor": "#42A5F5",
"indeterminateStartColor": "#42A5F5",
"progressColor": "#42A5F5",
"selectionBackground": "#3F3F46",
"trackColor": "#3F3F46"
"selectionBackground": "#393f4c",
"trackColor": "#393f4c"
},
"PsiViewer": {
"referenceHighlightColor": "#42A5F5"
@@ -541,7 +541,7 @@
"disabledBackground": "#2f343f",
"disabledForeground": "#D3DAE3",
"foreground": "#D3DAE3",
"selectionBackground": "#8888FF",
"selectionBackground": "#8888FF55",
"selectionForeground": "#FFFFFF"
},
"ScreenView.borderColor": "#404552",
@@ -566,7 +566,7 @@
"trackColor": "#2f343f30"
}
},
"thumb": "#3F3F46",
"thumb": "#393f4c",
"thumbBorderColor": "#42A5F570",
"thumbColor": "#42A5F570",
"trackColor": "#2f343f30",
@@ -599,7 +599,7 @@
"Tab": {
"active.foreground": "#FFFFFF",
"selectedForeground": "#FFFFFF",
"selectedBackground": "#3F3F46"
"selectedBackground": "#393f4c"
}
},
"SearchMatch": {
@@ -617,9 +617,9 @@
"Repeated.File.Foreground": "#D3DAE3"
},
"Separator": {
"background": "#393f4c",
"foreground": "#393f4c",
"separatorColor": "#393f4c"
"background": "#393f4c45",
"foreground": "#393f4c45",
"separatorColor": "#393f4c45"
},
"SidePanel": {
"background": "#262b33"
@@ -630,13 +630,13 @@
"buttonColor": "#42A5F5",
"foreground": "#D3DAE3",
"majorTickLength": 6,
"tickColor": "#393f4c",
"tickColor": "#393f4c45",
"trackColor": "#41416A",
"trackWidth": 7,
"thumb": "#42A5F5"
},
"SpeedSearch": {
"background": "#3F3F46",
"background": "#393f4c",
"borderColor": "#404552",
"foreground": "#D3DAE3",
"errorForeground": "#D3DAE3"
@@ -651,15 +651,15 @@
"background": "#2f343f",
"highlight": "#262b33"
},
"SplitPaneDivider.draggingColor": "#393f4c",
"SplitPaneDivider.draggingColor": "#393f4c45",
"StatusBar": {
"borderColor": "#2f343f",
"hoverBackground": "#3F3F46",
"hoverBackground": "#393f4c",
"LightEditBackground": "#41416A"
},
"TabbedPane": {
"background": "#2f343f",
"contentAreaColor": "#3F3F46",
"contentAreaColor": "#393f4c",
"contentBorderInsets": "3,1,1,1",
"darkShadow": "#404552",
"disabledForeground": "#D3DAE3",
@@ -669,7 +669,7 @@
"fontSizeOffset": 0,
"foreground": "#D3DAE3",
"highlight": "#404552",
"hoverColor": "#3F3F46",
"hoverColor": "#393f4c",
"labelShift": 0,
"selectedForeground": "#FFFFFF",
"selectedLabelShift": 0,
@@ -694,11 +694,11 @@
"foreground": "#D3DAE3",
"gridColor": "#2f343f",
"highlightOuter": "#41416A",
"hoverBackground": "#08507C70",
"hoverBackground": "#09477170",
"hoverInactiveBackground": "#41416A",
"lightSelectionForeground": "#FFFFFF",
"lightSelectionInactiveForeground": "#8b9eb5",
"lightSelectionInactiveBackground": "#393f4c",
"lightSelectionInactiveBackground": "#393f4c45",
"selectionBackground": "#41416A",
"selectionForeground": "#FFFFFF",
"selectionInactiveBackground": "#41416A",
@@ -709,14 +709,14 @@
"TableHeader": {
"background": "#2f343f",
"borderColor": "#2f343f",
"bottomSeparatorColor": "#393f4c",
"bottomSeparatorColor": "#393f4c45",
"cellBorder": "4,0,4,0",
"disabledForeground": "#D3DAE3",
"foreground": "#D3DAE3",
"focusCellBackground": "#41416A",
"focusCellForeground": "#FFFFFF",
"height": 25,
"separatorColor": "#393f4c"
"separatorColor": "#393f4c45"
},
"text": "#8b9eb5",
"textInactiveText": "#8b9eb5",
@@ -747,7 +747,7 @@
},
"TitlePane": {
"background": "#262b33",
"Button.hoverBackground": "#3F3F46",
"Button.hoverBackground": "#393f4c",
"inactiveBackground": "#2f343f",
"infoForeground": "#8b9eb5",
"inactiveInfoForeground": "#8b9eb5"
@@ -787,22 +787,22 @@
},
"Header": {
"background": "#2f343f",
"borderColor": "#393f4c",
"borderColor": "#393f4c45",
"inactiveBackground": "#2f343f"
},
"HeaderCloseButton": {
"background": "#2f343f"
},
"HeaderTab": {
"borderColor": "#3F3F46",
"hoverBackground": "#3F3F46",
"hoverInactiveBackground": "#3F3F46",
"borderColor": "#393f4c",
"hoverBackground": "#393f4c",
"hoverInactiveBackground": "#393f4c",
"inactiveUnderlineColor": "#42A5F5",
"selectedBackground": "#262b33",
"selectedInactiveBackground": "#262b33",
"underlineColor": "#42A5F5",
"underlinedTabBackground": "#41416A",
"underlinedTabInactiveBackground": "#393f4c",
"underlinedTabInactiveBackground": "#393f4c45",
"underlinedTabForeground": "#FFFFFF",
"underlinedTabInactiveForeground": "#D3DAE3"
}
@@ -811,14 +811,14 @@
"background": "#262b33",
"foreground": "#8b9eb5",
"hash": "#404552",
"hoverBackground": "#08507C70",
"hoverBackground": "#09477170",
"hoverInactiveBackground": "#41416A",
"modifiedItemForeground": "#42A5F5",
"rowHeight": 28,
"selectionBackground": "#08507C70",
"selectionBackground": "#09477170",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveBackground": "#08507C70",
"selectionInactiveBackground": "#09477170",
"textBackground": "#262b33"
},
"Tree.leftChildIndent": 10,
@@ -834,35 +834,35 @@
"borderColor": "#404552",
"background": "#2f343f",
"foreground": "#D3DAE3",
"hoverBorderColor": "#3F3F46"
"hoverBorderColor": "#393f4c"
},
"Connector": {
"borderColor": "#404552",
"hoverBorderColor": "#3F3F46"
"hoverBorderColor": "#393f4c"
},
"Canvas.background": "#262b33",
"highStroke.foreground": "#D3DAE3",
"Label.foreground": "#8b9eb5",
"List.selectionBackground": "#08507C70",
"List.selectionBackground": "#09477170",
"motion": {
"borderColor": "#404552",
"Component.foreground": "#D3DAE3",
"ConstraintSetText.foreground": "#8b9eb5",
"ConstraintSet.background": "#393f4c",
"CSPanel.SelectedFocusBackground": "#8888FF",
"CSPanel.SelectedBackground": "#08507C70",
"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": "#393f4c",
"ourCS.background": "#393f4c",
"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": "#3F3F46",
"ourCS_SelectedBorder.pressedBorderColor": "#393f4c",
"ourML_BarColor.separatorColor": "#404552",
"PrimaryPanel.background": "#262b33",
"SecondaryPanel.background": "#2f343f",
@@ -895,7 +895,7 @@
"selectedBranchBackground": "#2f343f"
},
"GitCommits": {
"graphColor": "#3F3F46"
"graphColor": "#393f4c"
},
"GitLog": {
"localBranchIconColor": "#42A5F5",
@@ -914,12 +914,12 @@
},
"Log": {
"Commit.unmatchedForeground": "#8b9eb5",
"Commit.currentBranchBackground": "#393f4c",
"Commit.hoveredBackground": "#08507C70"
"Commit.currentBranchBackground": "#393f4c45",
"Commit.hoveredBackground": "#09477170"
},
"RefLabel": {
"foreground": "#FFFFFF",
"backgroundBase": "#3F3F46"
"backgroundBase": "#393f4c"
}
},
"Viewport": {
@@ -939,13 +939,13 @@
"headerForeground": "#D3DAE3",
"List.background": "#262b33",
"separatorColor": "#404552",
"SidePanel.background": "#393f4c",
"SidePanel.background": "#393f4c45",
"Projects": {
"actions.background": "#262b33",
"actions.selectionBackground": "#3F3F46",
"background": "#393f4c",
"selectionBackground": "#8888FF",
"selectionInactiveBackground": "#393f4c"
"actions.selectionBackground": "#393f4c",
"background": "#393f4c45",
"selectionBackground": "#8888FF55",
"selectionInactiveBackground": "#393f4c45"
}
},
"window": "#262b33",
@@ -968,14 +968,14 @@
"Actions.Blue": "#7587A6",
"Actions.Green": "#8F9D6A",
"Actions.Grey": "#8b9eb5",
"Actions.GreyInline": "#747C84",
"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": "#474B57",
"Checkbox.Background.Disabled.Dark": "#474B57",
"Checkbox.Background.Disabled": "#37373d",
"Checkbox.Background.Disabled.Dark": "#37373d",
"Checkbox.Border.Default": "#404552",
"Checkbox.Border.Default.Dark": "#404552",
"Checkbox.Border.Disabled": "#D3DAE3",
@@ -994,7 +994,7 @@
"Checkbox.Foreground.Selected.Dark": "#42A5F5",
"Checkbox.Focus.Thin.Selected": "#D3DAE3",
"Checkbox.Focus.Thin.Selected.Dark": "#D3DAE3",
"Objects.Grey": "#747C84",
"Objects.Grey": "#747c84",
"Objects.Blue": "#7587A6",
"Objects.RedStatus": "#CF6A4C",
"Objects.Red": "#CF6A4C",

View File

@@ -14,19 +14,19 @@
"acceleratorSelectionForeground": "#8b9eb5",
"background": "#2f343f",
"borderColor": "#404552",
"disabledBackground": "#474B57",
"disabledBackground": "#37373d",
"disabledForeground": "#D3DAE3",
"disabledText": "#D3DAE3",
"focusColor": "#3F3F46",
"focusColor": "#393f4c",
"focusedBorderColor": "#42A5F5",
"foreground": "#D3DAE3",
"inactiveBackground": "#474B57",
"inactiveBackground": "#37373d",
"inactiveForeground": "#8b9eb5",
"infoForeground": "#8b9eb5",
"selectionBackground": "#8888FF",
"selectionBackgroundInactive": "#393f4c",
"selectionBackground": "#8888FF55",
"selectionBackgroundInactive": "#393f4c45",
"selectionForeground": "#FFFFFF",
"selectionInactiveBackground": "#393f4c",
"selectionInactiveBackground": "#393f4c45",
"separatorColor": "#404552"
},
"activeCaption": "#2f343f",
@@ -39,7 +39,7 @@
"pressedBorderColor": "#42A5F550"
},
"Autocomplete": {
"selectionBackground": "#8888FF"
"selectionBackground": "#8888FF55"
},
"Borders.ContrastBorderColor": "#2f343f",
"Borders.color": "#404552",
@@ -60,7 +60,7 @@
"disabledText": "#D3DAE3",
"endBackground": "#383C4A",
"endBorderColor": "#383C4A",
"focus": "#3F3F46",
"focus": "#393f4c",
"focusedBorderColor": "#42A5F5",
"foreground": "#8b9eb5",
"highlight": "#FFFFFF",
@@ -80,7 +80,7 @@
},
"Content": {
"background": "#262b33",
"selectionBackground": "#8888FF"
"selectionBackground": "#8888FF55"
},
"CheckBox": {
"background": "#2f343f",
@@ -95,14 +95,14 @@
"disabledBackground": "#2f343f",
"disabledForeground": "#D3DAE3",
"foreground": "#D3DAE3",
"selectionBackground": "#8888FF",
"selectionBackground": "#8888FF55",
"selectionForeground": "#FFFFFF"
},
"CodeWithMe": {
"Avatar.foreground": "#D3DAE3",
"AccessEnabled": {
"accessDot": "#42A5F5",
"dropdownBorder": "#393f4c",
"dropdownBorder": "#393f4c45",
"pillBackground": "$second"
}
},
@@ -125,14 +125,14 @@
"disabledForeground": "#D3DAE3",
"foreground": "#D3DAE3",
"modifiedItemForeground": "#42A5F5",
"nonEditableBackground": "#393f4c",
"nonEditableBackground": "#393f4c45",
"padding": "5,5,5,5",
"selectionBackground": "#41416A",
"selectionForeground": "#FFFFFF"
},
"ComboPopup.border": "#404552",
"CompletionPopup": {
"background": "#393f4c",
"background": "#393f4c45",
"foreground": "#D3DAE3",
"infoForeground": "#8b9eb5",
"matchForeground": "#42A5F5",
@@ -141,14 +141,14 @@
"selectedGrayedForeground": "#FFFFFF",
"selectionGrayForeground": "#FFFFFF",
"selectionInactiveInfoForeground": "#8b9eb5",
"selectionInactiveBackground": "#8888FF50",
"selectionBackground": "#8888FF80",
"selectionInactiveBackground": "#8888FF55",
"selectionBackground": "#8888FF55",
"selectionForeground": "#FFFFFF",
"selectionInfoForeground": "#FFFFFF"
},
"Component": {
"arc": 4,
"borderColor": "#3F3F46",
"borderColor": "#393f4c",
"disabledBorderColor": "#383C4A",
"focusColor": "#42A5F5",
"focusedBorderColor": "#42A5F5",
@@ -174,18 +174,18 @@
}
},
"DebuggerTabs": {
"selectedBackground": "#3F3F46",
"underlinedTabBackground": "#3F3F46"
"selectedBackground": "#393f4c",
"underlinedTabBackground": "#393f4c"
},
"DebuggerPopup": {
"borderColor": "#3F3F46"
"borderColor": "#393f4c"
},
"DefaultTabs": {
"background": "#2f343f",
"borderColor": "#2f343f",
"hoverBackground": "#41416A",
"hoverColor": "#2f343f",
"hoverMaskColor": "#3F3F46",
"hoverMaskColor": "#393f4c",
"inactiveColoredTabBackground": "#2f343f",
"inactiveColoredFileBackground": "#383C4A",
"inactiveUnderlineColor": "#42A5F5",
@@ -213,14 +213,14 @@
"foreground": "#D3DAE3",
"inactiveBackground": "#2f343f",
"inactiveForeground": "#D3DAE3",
"selectionBackground": "#8888FF",
"selectionBackground": "#8888FF55",
"selectionForeground": "#FFFFFF"
},
"EditorTabs": {
"borderColor": "#393f4c",
"hoverBackground": "#3F3F46",
"hoverColor": "#3F3F46",
"hoverMaskColor": "#3F3F46",
"borderColor": "#393f4c45",
"hoverBackground": "#393f4c",
"hoverColor": "#393f4c",
"hoverMaskColor": "#393f4c",
"inactiveMaskColor": "#2f343f",
"inactiveColoredFileBackground": "#2f343f",
"inactiveUnderlineColor": "#D3DAE3",
@@ -232,9 +232,9 @@
},
"EditorGroupsTabs": {
"background": "#2f343f",
"borderColor": "#393f4c",
"hoverBackground": "#3F3F46",
"hoverColor": "#3F3F46",
"borderColor": "#393f4c45",
"hoverBackground": "#393f4c",
"hoverColor": "#393f4c",
"inactiveUnderlineColor": "#42A5F5",
"underlineColor": "#42A5F5",
"underlinedTabBackground": "#41416A",
@@ -243,7 +243,7 @@
"FileColor": {
"Green": "#387002",
"Blue": "#004BA0",
"Yellow": "#474B57",
"Yellow": "#37373d",
"Orange": "#B53D00",
"Violet": "#4D2C91",
"Rose": "#A00037"
@@ -289,7 +289,7 @@
"shortcutForeground": "#8b9eb5"
},
"Hyperlink.linkColor": "#42A5F5",
"inactiveCaption": "#393f4c",
"inactiveCaption": "#393f4c45",
"inactiveCaptionBorder": "#2f343f",
"inactiveCaptionText": "#8b9eb5",
"info": "#8b9eb5",
@@ -323,14 +323,14 @@
},
"link.foreground": "#42A5F5",
"List": {
"background": "#393f4c",
"background": "#393f4c45",
"foreground": "#D3DAE3",
"hoverBackground": "#08507C70",
"hoverBackground": "#09477170",
"hoverInactiveBackground": "#41416A",
"selectionBackground": "#8888FF50",
"selectionBackground": "#8888FF55",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveBackground": "#08507C70"
"selectionInactiveBackground": "#09477170"
},
"material": {
"background": "#2f343f",
@@ -345,20 +345,20 @@
"tagColor": "#8b9eb5"
},
"MemoryIndicator": {
"allocatedBackground": "#393f4c",
"usedColor": "#3F3F46",
"usedBackground": "#3F3F46"
"allocatedBackground": "#393f4c45",
"usedColor": "#393f4c",
"usedBackground": "#393f4c"
},
"Menu": {
"acceleratorForeground": "#8b9eb5",
"acceleratorSelectionForeground": "#FFFFFF",
"background": "#2f343f",
"border": "4,2,4,2",
"borderColor": "#393f4c",
"disabledBackground": "#393f4c",
"borderColor": "#393f4c45",
"disabledBackground": "#393f4c45",
"disabledForeground": "#D3DAE3",
"foreground": "#D3DAE3",
"selectionBackground": "#8888FF",
"selectionBackground": "#8888FF55",
"selectionForeground": "#FFFFFF",
"separatorColor": "#404552"
},
@@ -369,7 +369,7 @@
"disabledForeground": "#D3DAE3",
"foreground": "#D3DAE3",
"highlight": "#2f343f",
"selectionBackground": "#8888FF",
"selectionBackground": "#8888FF55",
"selectionForeground": "#FFFFFF",
"shadow": "#2f343f"
},
@@ -381,7 +381,7 @@
"disabledBackground": "#2f343f",
"disabledForeground": "#D3DAE3",
"foreground": "#D3DAE3",
"selectionBackground": "#8888FF",
"selectionBackground": "#8888FF55",
"selectionForeground": "#FFFFFF"
},
"NavBar": {
@@ -433,9 +433,9 @@
"foreground": "#D3DAE3"
},
"ParameterInfo": {
"background": "#393f4c",
"background": "#393f4c45",
"borderColor": "#41416A",
"currentOverloadBackground": "#3F3F46",
"currentOverloadBackground": "#393f4c",
"currentParameterForeground": "#42A5F5",
"disabledForeground": "#D3DAE3",
"foreground": "#D3DAE3",
@@ -454,19 +454,19 @@
"Plugins": {
"background": "#2f343f",
"disabledForeground": "#D3DAE3",
"eapTagBackground": "#3F3F46",
"hoverBackground": "#08507C70",
"eapTagBackground": "#393f4c",
"hoverBackground": "#09477170",
"lightSelectionBackground": "#41416A",
"paidTagBackground": "#3F3F46",
"selectionBackground": "#8888FF",
"paidTagBackground": "#393f4c",
"selectionBackground": "#8888FF55",
"tagForeground": "#42A5F5",
"tagBackground": "#3F3F46",
"trialTagBackground": "#3F3F46",
"tagBackground": "#393f4c",
"trialTagBackground": "#393f4c",
"Button": {
"installBackground": "#383C4A",
"installBorderColor": "#383C4A",
"installForeground": "#D3DAE3",
"installFocusedBackground": "#3F3F46",
"installFocusedBackground": "#393f4c",
"installFillForeground": "#D3DAE3",
"installFillBackground": "#383C4A",
"updateBackground": "#42A5F5",
@@ -478,7 +478,7 @@
"borderColor": "#404552"
},
"SectionHeader": {
"background": "#393f4c",
"background": "#393f4c45",
"foreground": "#D3DAE3"
},
"Tab": {
@@ -495,14 +495,14 @@
},
"borderColor": "#262b33",
"inactiveBorderColor": "#2f343f",
"innerBorderColor": "#393f4c",
"innerBorderColor": "#393f4c45",
"Header": {
"activeBackground": "#2f343f",
"inactiveBackground": "#262b33"
},
"paintBorder": true,
"separatorForeground": "#D3DAE3",
"separatorColor": "#393f4c",
"separatorColor": "#393f4c45",
"Toolbar": {
"Floating.background": "#262b33",
"background": "#262b33",
@@ -523,8 +523,8 @@
"indeterminateEndColor": "#42A5F5",
"indeterminateStartColor": "#42A5F5",
"progressColor": "#42A5F5",
"selectionBackground": "#3F3F46",
"trackColor": "#3F3F46"
"selectionBackground": "#393f4c",
"trackColor": "#393f4c"
},
"PsiViewer": {
"referenceHighlightColor": "#42A5F5"
@@ -541,7 +541,7 @@
"disabledBackground": "#2f343f",
"disabledForeground": "#D3DAE3",
"foreground": "#D3DAE3",
"selectionBackground": "#8888FF",
"selectionBackground": "#8888FF55",
"selectionForeground": "#FFFFFF"
},
"ScreenView.borderColor": "#404552",
@@ -566,7 +566,7 @@
"trackColor": "#2f343f30"
}
},
"thumb": "#3F3F46",
"thumb": "#393f4c",
"thumbBorderColor": "#42A5F570",
"thumbColor": "#42A5F570",
"trackColor": "#2f343f30",
@@ -599,7 +599,7 @@
"Tab": {
"active.foreground": "#FFFFFF",
"selectedForeground": "#FFFFFF",
"selectedBackground": "#3F3F46"
"selectedBackground": "#393f4c"
}
},
"SearchMatch": {
@@ -617,9 +617,9 @@
"Repeated.File.Foreground": "#D3DAE3"
},
"Separator": {
"background": "#393f4c",
"foreground": "#393f4c",
"separatorColor": "#393f4c"
"background": "#393f4c45",
"foreground": "#393f4c45",
"separatorColor": "#393f4c45"
},
"SidePanel": {
"background": "#2f343f"
@@ -630,13 +630,13 @@
"buttonColor": "#42A5F5",
"foreground": "#D3DAE3",
"majorTickLength": 6,
"tickColor": "#393f4c",
"tickColor": "#393f4c45",
"trackColor": "#41416A",
"trackWidth": 7,
"thumb": "#42A5F5"
},
"SpeedSearch": {
"background": "#3F3F46",
"background": "#393f4c",
"borderColor": "#404552",
"foreground": "#D3DAE3",
"errorForeground": "#D3DAE3"
@@ -651,15 +651,15 @@
"background": "#2f343f",
"highlight": "#2f343f"
},
"SplitPaneDivider.draggingColor": "#393f4c",
"SplitPaneDivider.draggingColor": "#393f4c45",
"StatusBar": {
"borderColor": "#2f343f",
"hoverBackground": "#3F3F46",
"hoverBackground": "#393f4c",
"LightEditBackground": "#41416A"
},
"TabbedPane": {
"background": "#2f343f",
"contentAreaColor": "#3F3F46",
"contentAreaColor": "#393f4c",
"contentBorderInsets": "3,1,1,1",
"darkShadow": "#404552",
"disabledForeground": "#D3DAE3",
@@ -669,7 +669,7 @@
"fontSizeOffset": 0,
"foreground": "#D3DAE3",
"highlight": "#404552",
"hoverColor": "#3F3F46",
"hoverColor": "#393f4c",
"labelShift": 0,
"selectedForeground": "#FFFFFF",
"selectedLabelShift": 0,
@@ -694,11 +694,11 @@
"foreground": "#D3DAE3",
"gridColor": "#2f343f",
"highlightOuter": "#41416A",
"hoverBackground": "#08507C70",
"hoverBackground": "#09477170",
"hoverInactiveBackground": "#41416A",
"lightSelectionForeground": "#FFFFFF",
"lightSelectionInactiveForeground": "#8b9eb5",
"lightSelectionInactiveBackground": "#393f4c",
"lightSelectionInactiveBackground": "#393f4c45",
"selectionBackground": "#41416A",
"selectionForeground": "#FFFFFF",
"selectionInactiveBackground": "#41416A",
@@ -709,14 +709,14 @@
"TableHeader": {
"background": "#2f343f",
"borderColor": "#2f343f",
"bottomSeparatorColor": "#393f4c",
"bottomSeparatorColor": "#393f4c45",
"cellBorder": "4,0,4,0",
"disabledForeground": "#D3DAE3",
"foreground": "#D3DAE3",
"focusCellBackground": "#41416A",
"focusCellForeground": "#FFFFFF",
"height": 25,
"separatorColor": "#393f4c"
"separatorColor": "#393f4c45"
},
"text": "#8b9eb5",
"textInactiveText": "#8b9eb5",
@@ -747,7 +747,7 @@
},
"TitlePane": {
"background": "#262b33",
"Button.hoverBackground": "#3F3F46",
"Button.hoverBackground": "#393f4c",
"inactiveBackground": "#2f343f",
"infoForeground": "#8b9eb5",
"inactiveInfoForeground": "#8b9eb5"
@@ -787,22 +787,22 @@
},
"Header": {
"background": "#2f343f",
"borderColor": "#393f4c",
"borderColor": "#393f4c45",
"inactiveBackground": "#2f343f"
},
"HeaderCloseButton": {
"background": "#2f343f"
},
"HeaderTab": {
"borderColor": "#3F3F46",
"hoverBackground": "#3F3F46",
"hoverInactiveBackground": "#3F3F46",
"borderColor": "#393f4c",
"hoverBackground": "#393f4c",
"hoverInactiveBackground": "#393f4c",
"inactiveUnderlineColor": "#42A5F5",
"selectedBackground": "#262b33",
"selectedInactiveBackground": "#262b33",
"underlineColor": "#42A5F5",
"underlinedTabBackground": "#41416A",
"underlinedTabInactiveBackground": "#393f4c",
"underlinedTabInactiveBackground": "#393f4c45",
"underlinedTabForeground": "#FFFFFF",
"underlinedTabInactiveForeground": "#D3DAE3"
}
@@ -811,14 +811,14 @@
"background": "#2f343f",
"foreground": "#8b9eb5",
"hash": "#404552",
"hoverBackground": "#08507C70",
"hoverBackground": "#09477170",
"hoverInactiveBackground": "#41416A",
"modifiedItemForeground": "#42A5F5",
"rowHeight": 28,
"selectionBackground": "#08507C70",
"selectionBackground": "#09477170",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveBackground": "#08507C70",
"selectionInactiveBackground": "#09477170",
"textBackground": "#2f343f"
},
"Tree.leftChildIndent": 10,
@@ -834,35 +834,35 @@
"borderColor": "#404552",
"background": "#2f343f",
"foreground": "#D3DAE3",
"hoverBorderColor": "#3F3F46"
"hoverBorderColor": "#393f4c"
},
"Connector": {
"borderColor": "#404552",
"hoverBorderColor": "#3F3F46"
"hoverBorderColor": "#393f4c"
},
"Canvas.background": "#262b33",
"highStroke.foreground": "#D3DAE3",
"Label.foreground": "#8b9eb5",
"List.selectionBackground": "#08507C70",
"List.selectionBackground": "#09477170",
"motion": {
"borderColor": "#404552",
"Component.foreground": "#D3DAE3",
"ConstraintSetText.foreground": "#8b9eb5",
"ConstraintSet.background": "#393f4c",
"CSPanel.SelectedFocusBackground": "#8888FF",
"CSPanel.SelectedBackground": "#08507C70",
"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": "#393f4c",
"ourCS.background": "#393f4c",
"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": "#3F3F46",
"ourCS_SelectedBorder.pressedBorderColor": "#393f4c",
"ourML_BarColor.separatorColor": "#404552",
"PrimaryPanel.background": "#262b33",
"SecondaryPanel.background": "#2f343f",
@@ -895,7 +895,7 @@
"selectedBranchBackground": "#2f343f"
},
"GitCommits": {
"graphColor": "#3F3F46"
"graphColor": "#393f4c"
},
"GitLog": {
"localBranchIconColor": "#42A5F5",
@@ -914,12 +914,12 @@
},
"Log": {
"Commit.unmatchedForeground": "#8b9eb5",
"Commit.currentBranchBackground": "#393f4c",
"Commit.hoveredBackground": "#08507C70"
"Commit.currentBranchBackground": "#393f4c45",
"Commit.hoveredBackground": "#09477170"
},
"RefLabel": {
"foreground": "#FFFFFF",
"backgroundBase": "#3F3F46"
"backgroundBase": "#393f4c"
}
},
"Viewport": {
@@ -939,13 +939,13 @@
"headerForeground": "#D3DAE3",
"List.background": "#262b33",
"separatorColor": "#404552",
"SidePanel.background": "#393f4c",
"SidePanel.background": "#393f4c45",
"Projects": {
"actions.background": "#262b33",
"actions.selectionBackground": "#3F3F46",
"background": "#393f4c",
"selectionBackground": "#8888FF",
"selectionInactiveBackground": "#393f4c"
"actions.selectionBackground": "#393f4c",
"background": "#393f4c45",
"selectionBackground": "#8888FF55",
"selectionInactiveBackground": "#393f4c45"
}
},
"window": "#2f343f",
@@ -968,14 +968,14 @@
"Actions.Blue": "#7587A6",
"Actions.Green": "#8F9D6A",
"Actions.Grey": "#8b9eb5",
"Actions.GreyInline": "#747C84",
"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": "#474B57",
"Checkbox.Background.Disabled.Dark": "#474B57",
"Checkbox.Background.Disabled": "#37373d",
"Checkbox.Background.Disabled.Dark": "#37373d",
"Checkbox.Border.Default": "#404552",
"Checkbox.Border.Default.Dark": "#404552",
"Checkbox.Border.Disabled": "#D3DAE3",
@@ -994,7 +994,7 @@
"Checkbox.Foreground.Selected.Dark": "#42A5F5",
"Checkbox.Focus.Thin.Selected": "#D3DAE3",
"Checkbox.Focus.Thin.Selected.Dark": "#D3DAE3",
"Objects.Grey": "#747C84",
"Objects.Grey": "#747c84",
"Objects.Blue": "#7587A6",
"Objects.RedStatus": "#CF6A4C",
"Objects.Red": "#CF6A4C",

View File

@@ -23,7 +23,7 @@
"inactiveBackground": "#3c4150",
"inactiveForeground": "#979FAD",
"infoForeground": "#979FAD",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"selectionBackgroundInactive": "#2F333D",
"selectionForeground": "#FFFFFF",
"selectionInactiveBackground": "#2F333D",
@@ -39,7 +39,7 @@
"pressedBorderColor": "#2979ff50"
},
"Autocomplete": {
"selectionBackground": "#3A3F4B"
"selectionBackground": "#4D515D"
},
"Borders.ContrastBorderColor": "#282C34",
"Borders.color": "#282C34",
@@ -80,7 +80,7 @@
},
"Content": {
"background": "#21252B",
"selectionBackground": "#3A3F4B"
"selectionBackground": "#4D515D"
},
"CheckBox": {
"background": "#282C34",
@@ -95,7 +95,7 @@
"disabledBackground": "#282C34",
"disabledForeground": "#6B727D",
"foreground": "#979FAD",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"selectionForeground": "#FFFFFF"
},
"CodeWithMe": {
@@ -141,8 +141,8 @@
"selectedGrayedForeground": "#FFFFFF",
"selectionGrayForeground": "#FFFFFF",
"selectionInactiveInfoForeground": "#979FAD",
"selectionInactiveBackground": "#3A3F4B50",
"selectionBackground": "#3A3F4B80",
"selectionInactiveBackground": "#4D515D",
"selectionBackground": "#4D515D",
"selectionForeground": "#FFFFFF",
"selectionInfoForeground": "#FFFFFF"
},
@@ -166,7 +166,7 @@
"Variables": {
"collectingDataForeground": "#979FAD",
"changedValueForeground": "#2979ff",
"errorMessageForeground": "#F07178",
"errorMessageForeground": "#e06c75",
"evaluatingExpressionForeground": "#979FAD",
"exceptionForeground": "#E5C17C",
"modifyingValueForeground": "#2979ff",
@@ -213,7 +213,7 @@
"foreground": "#979FAD",
"inactiveBackground": "#282C34",
"inactiveForeground": "#6B727D",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"selectionForeground": "#FFFFFF"
},
"EditorTabs": {
@@ -325,12 +325,12 @@
"List": {
"background": "#2F333D",
"foreground": "#979FAD",
"hoverBackground": "#3A3F4B70",
"hoverBackground": "#3A3F4B80",
"hoverInactiveBackground": "#383E49",
"selectionBackground": "#3A3F4B50",
"selectionBackground": "#4D515D",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveBackground": "#3A3F4B70"
"selectionInactiveBackground": "#3A3F4B80"
},
"material": {
"background": "#282C34",
@@ -358,7 +358,7 @@
"disabledBackground": "#2F333D",
"disabledForeground": "#6B727D",
"foreground": "#979FAD",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"selectionForeground": "#FFFFFF",
"separatorColor": "#282C34"
},
@@ -369,7 +369,7 @@
"disabledForeground": "#6B727D",
"foreground": "#979FAD",
"highlight": "#282C34",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"selectionForeground": "#FFFFFF",
"shadow": "#21252B"
},
@@ -381,7 +381,7 @@
"disabledBackground": "#282C34",
"disabledForeground": "#6B727D",
"foreground": "#979FAD",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"selectionForeground": "#FFFFFF"
},
"NavBar": {
@@ -455,10 +455,10 @@
"background": "#282C34",
"disabledForeground": "#6B727D",
"eapTagBackground": "#383D48",
"hoverBackground": "#3A3F4B70",
"hoverBackground": "#3A3F4B80",
"lightSelectionBackground": "#383E49",
"paidTagBackground": "#383D48",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"tagForeground": "#2979ff",
"tagBackground": "#383D48",
"trialTagBackground": "#383D48",
@@ -541,7 +541,7 @@
"disabledBackground": "#282C34",
"disabledForeground": "#6B727D",
"foreground": "#979FAD",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"selectionForeground": "#FFFFFF"
},
"ScreenView.borderColor": "#282C34",
@@ -694,7 +694,7 @@
"foreground": "#979FAD",
"gridColor": "#282C34",
"highlightOuter": "#383E49",
"hoverBackground": "#3A3F4B70",
"hoverBackground": "#3A3F4B80",
"hoverInactiveBackground": "#383E49",
"lightSelectionForeground": "#FFFFFF",
"lightSelectionInactiveForeground": "#979FAD",
@@ -811,14 +811,14 @@
"background": "#21252B",
"foreground": "#979FAD",
"hash": "#282C34",
"hoverBackground": "#3A3F4B70",
"hoverBackground": "#3A3F4B80",
"hoverInactiveBackground": "#383E49",
"modifiedItemForeground": "#2979ff",
"rowHeight": 28,
"selectionBackground": "#3A3F4B70",
"selectionBackground": "#3A3F4B80",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveBackground": "#3A3F4B70",
"selectionInactiveBackground": "#3A3F4B80",
"textBackground": "#21252B"
},
"Tree.leftChildIndent": 10,
@@ -843,14 +843,14 @@
"Canvas.background": "#21252B",
"highStroke.foreground": "#979FAD",
"Label.foreground": "#979FAD",
"List.selectionBackground": "#3A3F4B70",
"List.selectionBackground": "#3A3F4B80",
"motion": {
"borderColor": "#282C34",
"Component.foreground": "#979FAD",
"ConstraintSetText.foreground": "#979FAD",
"ConstraintSet.background": "#2F333D",
"CSPanel.SelectedFocusBackground": "#3A3F4B",
"CSPanel.SelectedBackground": "#3A3F4B70",
"CSPanel.SelectedFocusBackground": "#4D515D",
"CSPanel.SelectedBackground": "#3A3F4B80",
"cs_FocusText.infoForeground": "#979FAD",
"CursorTextColor.foreground": "#979FAD",
"HoverColor.disabledBackground": "#6B727D",
@@ -915,7 +915,7 @@
"Log": {
"Commit.unmatchedForeground": "#979FAD",
"Commit.currentBranchBackground": "#2F333D",
"Commit.hoveredBackground": "#3A3F4B70"
"Commit.hoveredBackground": "#3A3F4B80"
},
"RefLabel": {
"foreground": "#FFFFFF",
@@ -944,7 +944,7 @@
"actions.background": "#21252B",
"actions.selectionBackground": "#383D48",
"background": "#2F333D",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"selectionInactiveBackground": "#2F333D"
}
},
@@ -970,7 +970,7 @@
"Actions.Grey": "#979FAD",
"Actions.GreyInline": "#59626F",
"Actions.GreyInline.Dark": "#979FAD",
"Actions.Red": "#F07178",
"Actions.Red": "#e06c75",
"Actions.Yellow": "#E5C17C",
"Checkbox.Background.Default": "#21252B",
"Checkbox.Background.Default.Dark": "#21252B",
@@ -996,8 +996,8 @@
"Checkbox.Focus.Thin.Selected.Dark": "#979FAD",
"Objects.Grey": "#59626F",
"Objects.Blue": "#61AEEF",
"Objects.RedStatus": "#F07178",
"Objects.Red": "#F07178",
"Objects.RedStatus": "#e06c75",
"Objects.Red": "#e06c75",
"Objects.Pink": "#C679DD",
"Objects.Yellow": "#E5C17C",
"Objects.Green": "#98C379",

View File

@@ -23,7 +23,7 @@
"inactiveBackground": "#3c4150",
"inactiveForeground": "#979FAD",
"infoForeground": "#979FAD",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"selectionBackgroundInactive": "#2F333D",
"selectionForeground": "#FFFFFF",
"selectionInactiveBackground": "#2F333D",
@@ -39,7 +39,7 @@
"pressedBorderColor": "#2979ff50"
},
"Autocomplete": {
"selectionBackground": "#3A3F4B"
"selectionBackground": "#4D515D"
},
"Borders.ContrastBorderColor": "#282C34",
"Borders.color": "#282C34",
@@ -80,7 +80,7 @@
},
"Content": {
"background": "#21252B",
"selectionBackground": "#3A3F4B"
"selectionBackground": "#4D515D"
},
"CheckBox": {
"background": "#282C34",
@@ -95,7 +95,7 @@
"disabledBackground": "#282C34",
"disabledForeground": "#6B727D",
"foreground": "#979FAD",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"selectionForeground": "#FFFFFF"
},
"CodeWithMe": {
@@ -141,8 +141,8 @@
"selectedGrayedForeground": "#FFFFFF",
"selectionGrayForeground": "#FFFFFF",
"selectionInactiveInfoForeground": "#979FAD",
"selectionInactiveBackground": "#3A3F4B50",
"selectionBackground": "#3A3F4B80",
"selectionInactiveBackground": "#4D515D",
"selectionBackground": "#4D515D",
"selectionForeground": "#FFFFFF",
"selectionInfoForeground": "#FFFFFF"
},
@@ -166,7 +166,7 @@
"Variables": {
"collectingDataForeground": "#979FAD",
"changedValueForeground": "#2979ff",
"errorMessageForeground": "#F07178",
"errorMessageForeground": "#e06c75",
"evaluatingExpressionForeground": "#979FAD",
"exceptionForeground": "#E5C17C",
"modifyingValueForeground": "#2979ff",
@@ -213,7 +213,7 @@
"foreground": "#979FAD",
"inactiveBackground": "#282C34",
"inactiveForeground": "#6B727D",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"selectionForeground": "#FFFFFF"
},
"EditorTabs": {
@@ -325,12 +325,12 @@
"List": {
"background": "#2F333D",
"foreground": "#979FAD",
"hoverBackground": "#3A3F4B70",
"hoverBackground": "#3A3F4B80",
"hoverInactiveBackground": "#383E49",
"selectionBackground": "#3A3F4B50",
"selectionBackground": "#4D515D",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveBackground": "#3A3F4B70"
"selectionInactiveBackground": "#3A3F4B80"
},
"material": {
"background": "#282C34",
@@ -358,7 +358,7 @@
"disabledBackground": "#2F333D",
"disabledForeground": "#6B727D",
"foreground": "#979FAD",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"selectionForeground": "#FFFFFF",
"separatorColor": "#282C34"
},
@@ -369,7 +369,7 @@
"disabledForeground": "#6B727D",
"foreground": "#979FAD",
"highlight": "#282C34",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"selectionForeground": "#FFFFFF",
"shadow": "#282C34"
},
@@ -381,7 +381,7 @@
"disabledBackground": "#282C34",
"disabledForeground": "#6B727D",
"foreground": "#979FAD",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"selectionForeground": "#FFFFFF"
},
"NavBar": {
@@ -455,10 +455,10 @@
"background": "#282C34",
"disabledForeground": "#6B727D",
"eapTagBackground": "#383D48",
"hoverBackground": "#3A3F4B70",
"hoverBackground": "#3A3F4B80",
"lightSelectionBackground": "#383E49",
"paidTagBackground": "#383D48",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"tagForeground": "#2979ff",
"tagBackground": "#383D48",
"trialTagBackground": "#383D48",
@@ -541,7 +541,7 @@
"disabledBackground": "#282C34",
"disabledForeground": "#6B727D",
"foreground": "#979FAD",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"selectionForeground": "#FFFFFF"
},
"ScreenView.borderColor": "#282C34",
@@ -694,7 +694,7 @@
"foreground": "#979FAD",
"gridColor": "#282C34",
"highlightOuter": "#383E49",
"hoverBackground": "#3A3F4B70",
"hoverBackground": "#3A3F4B80",
"hoverInactiveBackground": "#383E49",
"lightSelectionForeground": "#FFFFFF",
"lightSelectionInactiveForeground": "#979FAD",
@@ -811,14 +811,14 @@
"background": "#282C34",
"foreground": "#979FAD",
"hash": "#282C34",
"hoverBackground": "#3A3F4B70",
"hoverBackground": "#3A3F4B80",
"hoverInactiveBackground": "#383E49",
"modifiedItemForeground": "#2979ff",
"rowHeight": 28,
"selectionBackground": "#3A3F4B70",
"selectionBackground": "#3A3F4B80",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveBackground": "#3A3F4B70",
"selectionInactiveBackground": "#3A3F4B80",
"textBackground": "#282C34"
},
"Tree.leftChildIndent": 10,
@@ -843,14 +843,14 @@
"Canvas.background": "#21252B",
"highStroke.foreground": "#979FAD",
"Label.foreground": "#979FAD",
"List.selectionBackground": "#3A3F4B70",
"List.selectionBackground": "#3A3F4B80",
"motion": {
"borderColor": "#282C34",
"Component.foreground": "#979FAD",
"ConstraintSetText.foreground": "#979FAD",
"ConstraintSet.background": "#2F333D",
"CSPanel.SelectedFocusBackground": "#3A3F4B",
"CSPanel.SelectedBackground": "#3A3F4B70",
"CSPanel.SelectedFocusBackground": "#4D515D",
"CSPanel.SelectedBackground": "#3A3F4B80",
"cs_FocusText.infoForeground": "#979FAD",
"CursorTextColor.foreground": "#979FAD",
"HoverColor.disabledBackground": "#6B727D",
@@ -915,7 +915,7 @@
"Log": {
"Commit.unmatchedForeground": "#979FAD",
"Commit.currentBranchBackground": "#2F333D",
"Commit.hoveredBackground": "#3A3F4B70"
"Commit.hoveredBackground": "#3A3F4B80"
},
"RefLabel": {
"foreground": "#FFFFFF",
@@ -944,7 +944,7 @@
"actions.background": "#21252B",
"actions.selectionBackground": "#383D48",
"background": "#2F333D",
"selectionBackground": "#3A3F4B",
"selectionBackground": "#4D515D",
"selectionInactiveBackground": "#2F333D"
}
},
@@ -970,7 +970,7 @@
"Actions.Grey": "#979FAD",
"Actions.GreyInline": "#59626F",
"Actions.GreyInline.Dark": "#979FAD",
"Actions.Red": "#F07178",
"Actions.Red": "#e06c75",
"Actions.Yellow": "#E5C17C",
"Checkbox.Background.Default": "#21252B",
"Checkbox.Background.Default.Dark": "#21252B",
@@ -996,8 +996,8 @@
"Checkbox.Focus.Thin.Selected.Dark": "#979FAD",
"Objects.Grey": "#59626F",
"Objects.Blue": "#61AEEF",
"Objects.RedStatus": "#F07178",
"Objects.Red": "#F07178",
"Objects.RedStatus": "#e06c75",
"Objects.Red": "#e06c75",
"Objects.Pink": "#C679DD",
"Objects.Yellow": "#E5C17C",
"Objects.Green": "#98C379",

View File

@@ -14,29 +14,29 @@
"acceleratorSelectionForeground": "#6272A4",
"background": "#282A36",
"borderColor": "#21222C",
"disabledBackground": "#34353D",
"disabledBackground": "#313341",
"disabledForeground": "#6272A4",
"disabledText": "#6272A4",
"focusColor": "#44475a",
"focusedBorderColor": "#9580ff",
"focusColor": "#6272A4",
"focusedBorderColor": "#FF79C5",
"foreground": "#F8F8F2",
"inactiveBackground": "#34353D",
"inactiveBackground": "#313341",
"inactiveForeground": "#6272A4",
"infoForeground": "#6272A4",
"selectionBackground": "#44475A",
"selectionBackgroundInactive": "#282A36",
"selectionForeground": "#FFFFFF",
"selectionForeground": "#8BE9FD",
"selectionInactiveBackground": "#282A36",
"separatorColor": "#21222C"
},
"activeCaption": "#282A36",
"ActionButton": {
"hoverBackground": "#9580ff50",
"hoverBorderColor": "#9580ff50",
"hoverBackground": "#FF79C550",
"hoverBorderColor": "#FF79C550",
"hoverSeparatorColor": "#393C4B",
"focusedBorderColor": "#9580ff50",
"pressedBackground": "#9580ff50",
"pressedBorderColor": "#9580ff50"
"focusedBorderColor": "#FF79C550",
"pressedBackground": "#FF79C550",
"pressedBorderColor": "#FF79C550"
},
"Autocomplete": {
"selectionBackground": "#44475A"
@@ -49,9 +49,9 @@
"default": {
"endBackground": "#44475A",
"endBorderColor": "#44475A",
"foreground": "#8BE9FD",
"focusColor": "#9580ff",
"focusedBorderColor": "#9580ff",
"foreground": "#FFFFFF",
"focusColor": "#FF79C5",
"focusedBorderColor": "#FF79C5",
"shadowColor": "#44475A",
"startBackground": "#44475A",
"startBorderColor": "#44475A"
@@ -60,13 +60,13 @@
"disabledText": "#6272A4",
"endBackground": "#393C4B",
"endBorderColor": "#393C4B",
"focus": "#44475a",
"focusedBorderColor": "#9580ff",
"focus": "#6272A4",
"focusedBorderColor": "#FF79C5",
"foreground": "#6272A4",
"highlight": "#FFFFFF",
"highlight": "#8BE9FD",
"mt.background": "#393C4B",
"mt.foreground": "#6272A4",
"mt.selectedForeground": "#FFFFFF",
"mt.selectedForeground": "#8BE9FD",
"mt.selection.color1": "#44475A",
"mt.selection.color2": "#44475A",
"startBackground": "#393C4B",
@@ -86,7 +86,7 @@
"background": "#282A36",
"disabledText": "#6272A4",
"foreground": "#F8F8F2",
"select": "#9580ff"
"select": "#FF79C5"
},
"CheckBoxMenuItem": {
"acceleratorForeground": "#6272A4",
@@ -96,12 +96,12 @@
"disabledForeground": "#6272A4",
"foreground": "#F8F8F2",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD"
"selectionForeground": "#FFFFFF"
},
"CodeWithMe": {
"Avatar.foreground": "#F8F8F2",
"AccessEnabled": {
"accessDot": "#9580ff",
"accessDot": "#FF79C5",
"dropdownBorder": "#282A36",
"pillBackground": "$second"
}
@@ -121,78 +121,78 @@
},
"background": "#191A21",
"buttonBackground": "#393C4B",
"darcula.hoveredArrowButtonForeground": "#9580ff",
"darcula.hoveredArrowButtonForeground": "#FF79C5",
"disabledForeground": "#6272A4",
"foreground": "#F8F8F2",
"modifiedItemForeground": "#9580ff",
"modifiedItemForeground": "#FF79C5",
"nonEditableBackground": "#282A36",
"padding": "5,5,5,5",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD"
"selectionForeground": "#FFFFFF"
},
"ComboPopup.border": "#21222C",
"CompletionPopup": {
"background": "#282A36",
"foreground": "#F8F8F2",
"infoForeground": "#6272A4",
"matchForeground": "#9580ff",
"matchSelectionForeground": "#9580ff",
"matchForeground": "#FF79C5",
"matchSelectionForeground": "#FF79C5",
"nonFocusedState": "false",
"selectedGrayedForeground": "#FFFFFF",
"selectionGrayForeground": "#FFFFFF",
"selectedGrayedForeground": "#8BE9FD",
"selectionGrayForeground": "#8BE9FD",
"selectionInactiveInfoForeground": "#6272A4",
"selectionInactiveBackground": "#44475A50",
"selectionBackground": "#44475A80",
"selectionForeground": "#FFFFFF",
"selectionInfoForeground": "#FFFFFF"
"selectionInactiveBackground": "#44475A",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD",
"selectionInfoForeground": "#8BE9FD"
},
"Component": {
"arc": 4,
"borderColor": "#44475a",
"borderColor": "#6272A4",
"disabledBorderColor": "#393C4B",
"focusColor": "#9580ff",
"focusedBorderColor": "#9580ff",
"hoverIconColor": "#9580ff",
"focusColor": "#FF79C5",
"focusedBorderColor": "#FF79C5",
"hoverIconColor": "#FF79C5",
"infoForeground": "#6272A4",
"iconColor": "#F8F8F2"
},
"control": "#282A36",
"controlText": "#6272A4",
"Counter": {
"background": "#9580ff",
"foreground": "#FFFFFF"
"background": "#FF79C5",
"foreground": "#8BE9FD"
},
"Debugger": {
"Variables": {
"collectingDataForeground": "#6272A4",
"changedValueForeground": "#9580ff",
"errorMessageForeground": "#8BE9FD",
"changedValueForeground": "#FF79C5",
"errorMessageForeground": "#f780bf",
"evaluatingExpressionForeground": "#6272A4",
"exceptionForeground": "#50FA7B",
"modifyingValueForeground": "#9580ff",
"valueForeground": "#9580ff"
"exceptionForeground": "#8aff80",
"modifyingValueForeground": "#FF79C5",
"valueForeground": "#FF79C5"
}
},
"DebuggerTabs": {
"selectedBackground": "#44475a",
"underlinedTabBackground": "#44475a"
"selectedBackground": "#6272A4",
"underlinedTabBackground": "#6272A4"
},
"DebuggerPopup": {
"borderColor": "#44475a"
"borderColor": "#6272A4"
},
"DefaultTabs": {
"background": "#282A36",
"borderColor": "#282A36",
"hoverBackground": "#44475A",
"hoverColor": "#191A21",
"hoverMaskColor": "#44475a",
"hoverMaskColor": "#6272A4",
"inactiveColoredTabBackground": "#282A36",
"inactiveColoredFileBackground": "#393C4B",
"inactiveUnderlineColor": "#9580ff",
"inactiveUnderlineColor": "#FF79C5",
"inactiveMaskColor": "#191A21",
"underlineColor": "#9580ff",
"underlineColor": "#FF79C5",
"underlinedTabBackground": "#44475A",
"underlinedTabForeground": "#FFFFFF"
"underlinedTabForeground": "#8BE9FD"
},
"Desktop.background": "#282A36",
"DialogWrapper.southPanelBackground": "#282A36",
@@ -209,41 +209,41 @@
},
"EditorPane": {
"background": "#191A21",
"caretForeground": "#9580ff",
"caretForeground": "#FF79C5",
"foreground": "#F8F8F2",
"inactiveBackground": "#282A36",
"inactiveForeground": "#6272A4",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD"
"selectionForeground": "#FFFFFF"
},
"EditorTabs": {
"borderColor": "#282A36",
"hoverBackground": "#44475a",
"hoverColor": "#44475a",
"hoverMaskColor": "#44475a",
"hoverBackground": "#6272A4",
"hoverColor": "#6272A4",
"hoverMaskColor": "#6272A4",
"inactiveMaskColor": "#282A36",
"inactiveColoredFileBackground": "#282A36",
"inactiveUnderlineColor": "#6272A4",
"selectedForeground": "#F8F8F2",
"selectedBackground": "#44475A",
"underlineColor": "#9580ff",
"underlineColor": "#FF79C5",
"underlinedTabBackground": "#44475A",
"underlinedTabForeground": "#FFFFFF"
"underlinedTabForeground": "#8BE9FD"
},
"EditorGroupsTabs": {
"background": "#282A36",
"borderColor": "#282A36",
"hoverBackground": "#44475a",
"hoverColor": "#44475a",
"inactiveUnderlineColor": "#9580ff",
"underlineColor": "#9580ff",
"hoverBackground": "#6272A4",
"hoverColor": "#6272A4",
"inactiveUnderlineColor": "#FF79C5",
"underlineColor": "#FF79C5",
"underlinedTabBackground": "#44475A",
"underlinedTabForeground": "#F8F8F2"
},
"FileColor": {
"Green": "#387002",
"Blue": "#004BA0",
"Yellow": "#34353D",
"Yellow": "#313341",
"Orange": "#B53D00",
"Violet": "#4D2C91",
"Rose": "#A00037"
@@ -261,11 +261,11 @@
"Focus.color": "#21222C",
"FormattedTextField": {
"background": "#191A21",
"caretForeground": "#9580ff",
"caretForeground": "#FF79C5",
"foreground": "#F8F8F2",
"inactiveBackground": "#393C4B",
"inactiveForeground": "#6272A4",
"selectionForeground": "#8BE9FD",
"selectionForeground": "#FFFFFF",
"selectionBackground": "#44475A"
},
"GotItTooltip.borderColor": "#1D2228",
@@ -288,7 +288,7 @@
"infoForeground": "#6272A4",
"shortcutForeground": "#6272A4"
},
"Hyperlink.linkColor": "#9580ff",
"Hyperlink.linkColor": "#FF79C5",
"inactiveCaption": "#282A36",
"inactiveCaptionBorder": "#282A36",
"inactiveCaptionText": "#6272A4",
@@ -311,26 +311,26 @@
"disabledText": "#6272A4",
"foreground": "#F8F8F2",
"infoForeground": "#6272A4",
"selectedForeground": "#8BE9FD",
"selectedForeground": "#FFFFFF",
"selectedDisabledForeground": "#F8F8F2"
},
"Link": {
"activeForeground": "#9580ff",
"hoverForeground": "#9580ff",
"pressedForeground": "#9580ff",
"activeForeground": "#FF79C5",
"hoverForeground": "#FF79C5",
"pressedForeground": "#FF79C5",
"secondaryForeground": "#6272A4",
"visitedForeground": "#9580ff"
"visitedForeground": "#FF79C5"
},
"link.foreground": "#9580ff",
"link.foreground": "#FF79C5",
"List": {
"background": "#282A36",
"foreground": "#F8F8F2",
"hoverBackground": "#44475A70",
"hoverBackground": "#44475A50",
"hoverInactiveBackground": "#44475A",
"selectionBackground": "#44475A50",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#8BE9FD",
"selectionInactiveBackground": "#44475A70"
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveBackground": "#44475A50"
},
"material": {
"background": "#282A36",
@@ -339,19 +339,19 @@
"foreground": "#F8F8F2",
"mergeCommits": "#393C4B",
"primaryColor": "#6272A4",
"selectionForeground": "#FFFFFF",
"selectionForeground": "#8BE9FD",
"tab.backgroundColor": "#282A36",
"tab.borderColor": "#9580ff",
"tab.borderColor": "#FF79C5",
"tagColor": "#6272A4"
},
"MemoryIndicator": {
"allocatedBackground": "#282A36",
"usedColor": "#44475a",
"usedBackground": "#44475a"
"usedColor": "#6272A4",
"usedBackground": "#6272A4"
},
"Menu": {
"acceleratorForeground": "#6272A4",
"acceleratorSelectionForeground": "#FFFFFF",
"acceleratorSelectionForeground": "#8BE9FD",
"background": "#282A36",
"border": "4,2,4,2",
"borderColor": "#282A36",
@@ -359,7 +359,7 @@
"disabledForeground": "#6272A4",
"foreground": "#F8F8F2",
"selectionBackground": "#44475A",
"selectionForeground": "#FFFFFF",
"selectionForeground": "#8BE9FD",
"separatorColor": "#21222C"
},
"MenuBar": {
@@ -370,19 +370,19 @@
"foreground": "#F8F8F2",
"highlight": "#282A36",
"selectionBackground": "#44475A",
"selectionForeground": "#FFFFFF",
"selectionForeground": "#8BE9FD",
"shadow": "#191A21"
},
"MenuItem": {
"acceleratorForeground": "#6272A4",
"acceleratorSelectionForeground": "#FFFFFF",
"acceleratorSelectionForeground": "#8BE9FD",
"border": "4,2,4,2",
"background": "#282A36",
"disabledBackground": "#282A36",
"disabledForeground": "#6272A4",
"foreground": "#F8F8F2",
"selectionBackground": "#44475A",
"selectionForeground": "#FFFFFF"
"selectionForeground": "#8BE9FD"
},
"NavBar": {
"arrowColor": "#F8F8F2",
@@ -396,7 +396,7 @@
"background": "#191A21"
}
},
"NewPSD.warning": "#9580ff",
"NewPSD.warning": "#FF79C5",
"Notification": {
"background": "#1D2228",
"borderColor": "#1D2228",
@@ -425,7 +425,7 @@
},
"Outline": {
"color": "#393C4B",
"focusedColor": "#9580ff",
"focusedColor": "#FF79C5",
"disabledColor": "#6272A4"
},
"Panel": {
@@ -435,8 +435,8 @@
"ParameterInfo": {
"background": "#282A36",
"borderColor": "#44475A",
"currentOverloadBackground": "#44475a",
"currentParameterForeground": "#9580ff",
"currentOverloadBackground": "#6272A4",
"currentParameterForeground": "#FF79C5",
"disabledForeground": "#6272A4",
"foreground": "#F8F8F2",
"infoForeground": "#6272A4",
@@ -444,32 +444,32 @@
},
"PasswordField": {
"background": "#191A21",
"capsLockIconColor": "#9580ff",
"caretForeground": "#9580ff",
"capsLockIconColor": "#FF79C5",
"caretForeground": "#FF79C5",
"foreground": "#F8F8F2",
"inactiveForeground": "#6272A4",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD"
"selectionForeground": "#FFFFFF"
},
"Plugins": {
"background": "#282A36",
"disabledForeground": "#6272A4",
"eapTagBackground": "#44475a",
"hoverBackground": "#44475A70",
"eapTagBackground": "#6272A4",
"hoverBackground": "#44475A50",
"lightSelectionBackground": "#44475A",
"paidTagBackground": "#44475a",
"paidTagBackground": "#6272A4",
"selectionBackground": "#44475A",
"tagForeground": "#9580ff",
"tagBackground": "#44475a",
"trialTagBackground": "#44475a",
"tagForeground": "#FF79C5",
"tagBackground": "#6272A4",
"trialTagBackground": "#6272A4",
"Button": {
"installBackground": "#393C4B",
"installBorderColor": "#393C4B",
"installForeground": "#F8F8F2",
"installFocusedBackground": "#44475a",
"installFocusedBackground": "#6272A4",
"installFillForeground": "#6272A4",
"installFillBackground": "#393C4B",
"updateBackground": "#9580ff",
"updateBackground": "#FF79C5",
"updateBorderColor": "#393C4B",
"updateForeground": "#F8F8F2"
},
@@ -483,7 +483,7 @@
},
"Tab": {
"hoverBackground": "#44475A",
"selectedForeground": "#FFFFFF",
"selectedForeground": "#8BE9FD",
"selectedBackground": "#44475A"
}
},
@@ -491,7 +491,7 @@
"Advertiser": {
"background": "#282A36",
"borderColor": "#282A36",
"foreground": "#9580ff"
"foreground": "#FF79C5"
},
"borderColor": "#191A21",
"inactiveBorderColor": "#282A36",
@@ -519,15 +519,15 @@
"PopupMenuSeparator.stripeIndent": 5,
"ProgressBar": {
"background": "#282A36",
"foreground": "#9580ff",
"indeterminateEndColor": "#9580ff",
"indeterminateStartColor": "#9580ff",
"progressColor": "#9580ff",
"selectionBackground": "#44475a",
"trackColor": "#44475a"
"foreground": "#FF79C5",
"indeterminateEndColor": "#FF79C5",
"indeterminateStartColor": "#FF79C5",
"progressColor": "#FF79C5",
"selectionBackground": "#6272A4",
"trackColor": "#6272A4"
},
"PsiViewer": {
"referenceHighlightColor": "#9580ff"
"referenceHighlightColor": "#FF79C5"
},
"RadioButton": {
"background": "#282A36",
@@ -542,40 +542,40 @@
"disabledForeground": "#6272A4",
"foreground": "#F8F8F2",
"selectionBackground": "#44475A",
"selectionForeground": "#FFFFFF"
"selectionForeground": "#8BE9FD"
},
"ScreenView.borderColor": "#21222C",
"ScrollBar": {
"background": "#282A36",
"hoverThumbBorderColor": "#9580ff",
"hoverThumbColor": "#9580ff",
"hoverThumbBorderColor": "#FF79C5",
"hoverThumbColor": "#FF79C5",
"hoverTrackColor": "#282A3630",
"Mac": {
"hoverThumbBorderColor": "#9580ff",
"hoverThumbColor": "#9580ff",
"hoverThumbBorderColor": "#FF79C5",
"hoverThumbColor": "#FF79C5",
"hoverTrackColor": "#282A3630",
"thumbBorderColor": "#9580ff70",
"thumbColor": "#9580ff70",
"thumbBorderColor": "#FF79C570",
"thumbColor": "#FF79C570",
"trackColor": "#282A3630",
"Transparent": {
"hoverThumbBorderColor": "#9580ff",
"hoverThumbColor": "#9580ff",
"hoverThumbBorderColor": "#FF79C5",
"hoverThumbColor": "#FF79C5",
"hoverTrackColor": "#282A3630",
"thumbBorderColor": "#9580ff70",
"thumbColor": "#9580ff70",
"thumbBorderColor": "#FF79C570",
"thumbColor": "#FF79C570",
"trackColor": "#282A3630"
}
},
"thumb": "#44475a",
"thumbBorderColor": "#9580ff70",
"thumbColor": "#9580ff70",
"thumb": "#6272A4",
"thumbBorderColor": "#FF79C570",
"thumbColor": "#FF79C570",
"trackColor": "#282A3630",
"Transparent": {
"hoverThumbBorderColor": "#9580ff",
"hoverThumbColor": "#9580ff",
"hoverThumbBorderColor": "#FF79C5",
"hoverThumbColor": "#FF79C5",
"hoverTrackColor": "#282A3630",
"thumbBorderColor": "#9580ff70",
"thumbColor": "#9580ff70",
"thumbBorderColor": "#FF79C570",
"thumbColor": "#FF79C570",
"trackColor": "#282A3630"
}
},
@@ -597,16 +597,16 @@
"infoForeground": "#6272A4"
},
"Tab": {
"active.foreground": "#8BE9FD",
"selectedForeground": "#8BE9FD",
"selectedBackground": "#44475a"
"active.foreground": "#FFFFFF",
"selectedForeground": "#FFFFFF",
"selectedBackground": "#6272A4"
}
},
"SearchMatch": {
"endBackground": "#9580ff",
"startBackground": "#9580ff",
"endColor": "#9580ff",
"startColor": "#9580ff"
"endBackground": "#FF79C5",
"startBackground": "#FF79C5",
"endColor": "#FF79C5",
"startColor": "#FF79C5"
},
"SearchField.errorBackground": "#1D2228",
"SearchOption": {
@@ -626,17 +626,17 @@
},
"Slider": {
"background": "#282A36",
"buttonBorderColor": "#9580ff",
"buttonColor": "#9580ff",
"buttonBorderColor": "#FF79C5",
"buttonColor": "#FF79C5",
"foreground": "#F8F8F2",
"majorTickLength": 6,
"tickColor": "#282A36",
"trackColor": "#44475A",
"trackWidth": 7,
"thumb": "#9580ff"
"thumb": "#FF79C5"
},
"SpeedSearch": {
"background": "#44475a",
"background": "#6272A4",
"borderColor": "#21222C",
"foreground": "#F8F8F2",
"errorForeground": "#F8F8F2"
@@ -645,7 +645,7 @@
"background": "#282A36",
"border": "3,3,3,3",
"foreground": "#F8F8F2",
"selectionForeground": "#8BE9FD"
"selectionForeground": "#FFFFFF"
},
"SplitPane": {
"background": "#282A36",
@@ -654,12 +654,12 @@
"SplitPaneDivider.draggingColor": "#282A36",
"StatusBar": {
"borderColor": "#282A36",
"hoverBackground": "#44475a",
"hoverBackground": "#6272A4",
"LightEditBackground": "#44475A"
},
"TabbedPane": {
"background": "#282A36",
"contentAreaColor": "#44475a",
"contentAreaColor": "#6272A4",
"contentBorderInsets": "3,1,1,1",
"darkShadow": "#21222C",
"disabledForeground": "#6272A4",
@@ -669,16 +669,16 @@
"fontSizeOffset": 0,
"foreground": "#F8F8F2",
"highlight": "#21222C",
"hoverColor": "#44475a",
"hoverColor": "#6272A4",
"labelShift": 0,
"selectedForeground": "#8BE9FD",
"selectedForeground": "#FFFFFF",
"selectedLabelShift": 0,
"selectedTabPadInsets": "0,0,0,0",
"tabsOverlapBorder": true,
"tabHeight": 32,
"tabInsets": "5,10,5,10",
"tabSelectionHeight": 2,
"underlineColor": "#9580ff"
"underlineColor": "#FF79C5"
},
"TabbedPane.mt.tab.background": "#191A21",
"Table": {
@@ -687,22 +687,22 @@
"cellNoFocusBorder": "10,5,10,5",
"focusCellHighlightBorder": "10,5,10,5",
"disabledForeground": "#6272A4",
"dropLineColor": "#9580ff",
"dropLineShortColor": "#9580ff",
"dropLineColor": "#FF79C5",
"dropLineShortColor": "#FF79C5",
"focusCellBackground": "#44475A",
"focusCellForeground": "#8BE9FD",
"focusCellForeground": "#FFFFFF",
"foreground": "#F8F8F2",
"gridColor": "#282A36",
"highlightOuter": "#44475A",
"hoverBackground": "#44475A70",
"hoverBackground": "#44475A50",
"hoverInactiveBackground": "#44475A",
"lightSelectionForeground": "#8BE9FD",
"lightSelectionForeground": "#FFFFFF",
"lightSelectionInactiveForeground": "#6272A4",
"lightSelectionInactiveBackground": "#282A36",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD",
"selectionForeground": "#FFFFFF",
"selectionInactiveBackground": "#44475A",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveForeground": "#8BE9FD",
"sortIconColor": "#F8F8F2",
"stripeColor": "#191A21"
},
@@ -714,7 +714,7 @@
"disabledForeground": "#6272A4",
"foreground": "#F8F8F2",
"focusCellBackground": "#44475A",
"focusCellForeground": "#8BE9FD",
"focusCellForeground": "#FFFFFF",
"height": 25,
"separatorColor": "#282A36"
},
@@ -723,31 +723,31 @@
"textText": "#6272A4",
"TextArea": {
"background": "#191A21",
"caretForeground": "#9580ff",
"caretForeground": "#FF79C5",
"foreground": "#F8F8F2",
"inactiveForeground": "#6272A4",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD"
"selectionForeground": "#FFFFFF"
},
"TextField": {
"background": "#191A21",
"caretForeground": "#9580ff",
"caretForeground": "#FF79C5",
"foreground": "#F8F8F2",
"inactiveForeground": "#6272A4",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD"
"selectionForeground": "#FFFFFF"
},
"TextPane": {
"background": "#191A21",
"caretForeground": "#9580ff",
"caretForeground": "#FF79C5",
"foreground": "#F8F8F2",
"inactiveForeground": "#6272A4",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD"
"selectionForeground": "#FFFFFF"
},
"TitlePane": {
"background": "#191A21",
"Button.hoverBackground": "#44475a",
"Button.hoverBackground": "#6272A4",
"inactiveBackground": "#282A36",
"infoForeground": "#6272A4",
"inactiveInfoForeground": "#6272A4"
@@ -760,8 +760,8 @@
"foreground": "#F8F8F2",
"offForeground": "#282A36",
"offBackground": "#282A36",
"onBackground": "#9580ff",
"onForeground": "#9580ff"
"onBackground": "#FF79C5",
"onForeground": "#FF79C5"
},
"ToolBar": {
"background": "#191A21",
@@ -782,7 +782,7 @@
"ToolWindow": {
"Button": {
"hoverBackground": "#44475A",
"selectedForeground": "#8BE9FD",
"selectedForeground": "#FFFFFF",
"selectedBackground": "#191A21"
},
"Header": {
@@ -794,16 +794,16 @@
"background": "#282A36"
},
"HeaderTab": {
"borderColor": "#44475a",
"hoverBackground": "#44475a",
"hoverInactiveBackground": "#44475a",
"inactiveUnderlineColor": "#9580ff",
"borderColor": "#6272A4",
"hoverBackground": "#6272A4",
"hoverInactiveBackground": "#6272A4",
"inactiveUnderlineColor": "#FF79C5",
"selectedBackground": "#191A21",
"selectedInactiveBackground": "#191A21",
"underlineColor": "#9580ff",
"underlineColor": "#FF79C5",
"underlinedTabBackground": "#44475A",
"underlinedTabInactiveBackground": "#282A36",
"underlinedTabForeground": "#FFFFFF",
"underlinedTabForeground": "#8BE9FD",
"underlinedTabInactiveForeground": "#F8F8F2"
}
},
@@ -811,14 +811,14 @@
"background": "#191A21",
"foreground": "#6272A4",
"hash": "#21222C",
"hoverBackground": "#44475A70",
"hoverBackground": "#44475A50",
"hoverInactiveBackground": "#44475A",
"modifiedItemForeground": "#9580ff",
"modifiedItemForeground": "#FF79C5",
"rowHeight": 28,
"selectionBackground": "#44475A70",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveBackground": "#44475A70",
"selectionBackground": "#44475A50",
"selectionForeground": "#8BE9FD",
"selectionInactiveForeground": "#8BE9FD",
"selectionInactiveBackground": "#44475A50",
"textBackground": "#191A21"
},
"Tree.leftChildIndent": 10,
@@ -834,23 +834,23 @@
"borderColor": "#21222C",
"background": "#282A36",
"foreground": "#F8F8F2",
"hoverBorderColor": "#44475a"
"hoverBorderColor": "#6272A4"
},
"Connector": {
"borderColor": "#21222C",
"hoverBorderColor": "#44475a"
"hoverBorderColor": "#6272A4"
},
"Canvas.background": "#191A21",
"highStroke.foreground": "#F8F8F2",
"Label.foreground": "#6272A4",
"List.selectionBackground": "#44475A70",
"List.selectionBackground": "#44475A50",
"motion": {
"borderColor": "#21222C",
"Component.foreground": "#F8F8F2",
"ConstraintSetText.foreground": "#6272A4",
"ConstraintSet.background": "#282A36",
"CSPanel.SelectedFocusBackground": "#44475A",
"CSPanel.SelectedBackground": "#44475A70",
"CSPanel.SelectedBackground": "#44475A50",
"cs_FocusText.infoForeground": "#6272A4",
"CursorTextColor.foreground": "#F8F8F2",
"HoverColor.disabledBackground": "#6272A4",
@@ -860,9 +860,9 @@
"ourCS.background": "#282A36",
"ourCS_Border.borderColor": "#21222C",
"ourCS_TextColor.foreground": "#6272A4",
"ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF",
"ourCS_SelectedFocusBackground.selectionForeground": "#8BE9FD",
"ourCS_SelectedBackground.selectionInactiveBackground": "#44475A",
"ourCS_SelectedBorder.pressedBorderColor": "#44475a",
"ourCS_SelectedBorder.pressedBorderColor": "#6272A4",
"ourML_BarColor.separatorColor": "#21222C",
"PrimaryPanel.background": "#191A21",
"SecondaryPanel.background": "#282A36",
@@ -879,7 +879,7 @@
"background": "#282A36",
"borderColor": "#21222C",
"foreground": "#F8F8F2",
"selectedForeground": "#FFFFFF"
"selectedForeground": "#8BE9FD"
},
"Preview.background": "#282A36",
"stroke.acceleratorForeground": "#6272A4"
@@ -895,17 +895,17 @@
"selectedBranchBackground": "#282A36"
},
"GitCommits": {
"graphColor": "#44475a"
"graphColor": "#6272A4"
},
"GitLog": {
"localBranchIconColor": "#9580ff",
"localBranchIconColor": "#FF79C5",
"otherIconColor": "#6272A4",
"remoteBranchIconColor": "#F8F8F2",
"tagIconColor": "#6272A4"
},
"HgLog": {
"branchIconColor": "#9580ff",
"bookmarkIconColor": "#8BE9FD",
"branchIconColor": "#FF79C5",
"bookmarkIconColor": "#FFFFFF",
"closedBranchIconColor": "#6272A4",
"localTagIconColor": "#6272A4",
"mqTagIconColor": "#6272A4",
@@ -915,11 +915,11 @@
"Log": {
"Commit.unmatchedForeground": "#6272A4",
"Commit.currentBranchBackground": "#282A36",
"Commit.hoveredBackground": "#44475A70"
"Commit.hoveredBackground": "#44475A50"
},
"RefLabel": {
"foreground": "#8BE9FD",
"backgroundBase": "#44475a"
"foreground": "#FFFFFF",
"backgroundBase": "#6272A4"
}
},
"Viewport": {
@@ -942,7 +942,7 @@
"SidePanel.background": "#282A36",
"Projects": {
"actions.background": "#191A21",
"actions.selectionBackground": "#44475a",
"actions.selectionBackground": "#6272A4",
"background": "#282A36",
"selectionBackground": "#44475A",
"selectionInactiveBackground": "#282A36"
@@ -958,53 +958,53 @@
"#43494A": "#191A21",
"#6B6B6B": "#6272A4",
"#A7A7A7": "#282A36",
"#3D6185": "#9580ff",
"#466D94": "#9580ff",
"#3D6185": "#FF79C5",
"#466D94": "#FF79C5",
"#3C3F41": "#282A36",
"#545556": "#6272A4",
"#606060": "#6272A4",
"#9AA7B0": "#F8F8F2",
"#675133": "#9580ff",
"Actions.Blue": "#50FA78",
"Actions.Green": "#F1FA8C",
"#675133": "#FF79C5",
"Actions.Blue": "#8aff80",
"Actions.Green": "#feff80",
"Actions.Grey": "#6272A4",
"Actions.GreyInline": "#6272A4",
"Actions.GreyInline.Dark": "#F8F8F2",
"Actions.Red": "#8BE9FD",
"Actions.Yellow": "#50FA7B",
"Actions.Red": "#f780bf",
"Actions.Yellow": "#8aff80",
"Checkbox.Background.Default": "#191A21",
"Checkbox.Background.Default.Dark": "#191A21",
"Checkbox.Background.Disabled": "#34353D",
"Checkbox.Background.Disabled.Dark": "#34353D",
"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": "#9580ff",
"Checkbox.Focus.Thin.Default.Dark": "#9580ff",
"Checkbox.Focus.Wide": "#9580ff",
"Checkbox.Focus.Wide.Dark": "#9580ff",
"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": "#9580ff",
"Checkbox.Background.Selected": "#FF79C5",
"Checkbox.Background.Selected.Dark": "#282A36",
"Checkbox.Border.Selected": "#9580ff",
"Checkbox.Border.Selected.Dark": "#9580ff",
"Checkbox.Foreground.Selected": "#9580ff",
"Checkbox.Foreground.Selected.Dark": "#9580ff",
"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": "#50FA78",
"Objects.RedStatus": "#8BE9FD",
"Objects.Red": "#8BE9FD",
"Objects.Pink": "#FF79C6",
"Objects.Yellow": "#50FA7B",
"Objects.Green": "#F1FA8C",
"Objects.Purple": "#FF79C6",
"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": "#BD93F9",
"Objects.GreenAndroid": "#F1FA8C"
"Objects.YellowDark": "#9580ff",
"Objects.GreenAndroid": "#feff80"
}
}
}

View File

@@ -14,29 +14,29 @@
"acceleratorSelectionForeground": "#6272A4",
"background": "#282A36",
"borderColor": "#21222C",
"disabledBackground": "#34353D",
"disabledBackground": "#313341",
"disabledForeground": "#6272A4",
"disabledText": "#6272A4",
"focusColor": "#44475a",
"focusedBorderColor": "#9580ff",
"focusColor": "#6272A4",
"focusedBorderColor": "#FF79C5",
"foreground": "#F8F8F2",
"inactiveBackground": "#34353D",
"inactiveBackground": "#313341",
"inactiveForeground": "#6272A4",
"infoForeground": "#6272A4",
"selectionBackground": "#44475A",
"selectionBackgroundInactive": "#282A36",
"selectionForeground": "#FFFFFF",
"selectionForeground": "#8BE9FD",
"selectionInactiveBackground": "#282A36",
"separatorColor": "#21222C"
},
"activeCaption": "#282A36",
"ActionButton": {
"hoverBackground": "#9580ff50",
"hoverBorderColor": "#9580ff50",
"hoverBackground": "#FF79C550",
"hoverBorderColor": "#FF79C550",
"hoverSeparatorColor": "#393C4B",
"focusedBorderColor": "#9580ff50",
"pressedBackground": "#9580ff50",
"pressedBorderColor": "#9580ff50"
"focusedBorderColor": "#FF79C550",
"pressedBackground": "#FF79C550",
"pressedBorderColor": "#FF79C550"
},
"Autocomplete": {
"selectionBackground": "#44475A"
@@ -49,9 +49,9 @@
"default": {
"endBackground": "#44475A",
"endBorderColor": "#44475A",
"foreground": "#8BE9FD",
"focusColor": "#9580ff",
"focusedBorderColor": "#9580ff",
"foreground": "#FFFFFF",
"focusColor": "#FF79C5",
"focusedBorderColor": "#FF79C5",
"shadowColor": "#44475A",
"startBackground": "#44475A",
"startBorderColor": "#44475A"
@@ -60,13 +60,13 @@
"disabledText": "#6272A4",
"endBackground": "#393C4B",
"endBorderColor": "#393C4B",
"focus": "#44475a",
"focusedBorderColor": "#9580ff",
"focus": "#6272A4",
"focusedBorderColor": "#FF79C5",
"foreground": "#6272A4",
"highlight": "#FFFFFF",
"highlight": "#8BE9FD",
"mt.background": "#393C4B",
"mt.foreground": "#6272A4",
"mt.selectedForeground": "#FFFFFF",
"mt.selectedForeground": "#8BE9FD",
"mt.selection.color1": "#44475A",
"mt.selection.color2": "#44475A",
"startBackground": "#393C4B",
@@ -86,7 +86,7 @@
"background": "#282A36",
"disabledText": "#6272A4",
"foreground": "#F8F8F2",
"select": "#9580ff"
"select": "#FF79C5"
},
"CheckBoxMenuItem": {
"acceleratorForeground": "#6272A4",
@@ -96,12 +96,12 @@
"disabledForeground": "#6272A4",
"foreground": "#F8F8F2",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD"
"selectionForeground": "#FFFFFF"
},
"CodeWithMe": {
"Avatar.foreground": "#F8F8F2",
"AccessEnabled": {
"accessDot": "#9580ff",
"accessDot": "#FF79C5",
"dropdownBorder": "#282A36",
"pillBackground": "$second"
}
@@ -121,78 +121,78 @@
},
"background": "#282A36",
"buttonBackground": "#393C4B",
"darcula.hoveredArrowButtonForeground": "#9580ff",
"darcula.hoveredArrowButtonForeground": "#FF79C5",
"disabledForeground": "#6272A4",
"foreground": "#F8F8F2",
"modifiedItemForeground": "#9580ff",
"modifiedItemForeground": "#FF79C5",
"nonEditableBackground": "#282A36",
"padding": "5,5,5,5",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD"
"selectionForeground": "#FFFFFF"
},
"ComboPopup.border": "#21222C",
"CompletionPopup": {
"background": "#282A36",
"foreground": "#F8F8F2",
"infoForeground": "#6272A4",
"matchForeground": "#9580ff",
"matchSelectionForeground": "#9580ff",
"matchForeground": "#FF79C5",
"matchSelectionForeground": "#FF79C5",
"nonFocusedState": "false",
"selectedGrayedForeground": "#FFFFFF",
"selectionGrayForeground": "#FFFFFF",
"selectedGrayedForeground": "#8BE9FD",
"selectionGrayForeground": "#8BE9FD",
"selectionInactiveInfoForeground": "#6272A4",
"selectionInactiveBackground": "#44475A50",
"selectionBackground": "#44475A80",
"selectionForeground": "#FFFFFF",
"selectionInfoForeground": "#FFFFFF"
"selectionInactiveBackground": "#44475A",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD",
"selectionInfoForeground": "#8BE9FD"
},
"Component": {
"arc": 4,
"borderColor": "#44475a",
"borderColor": "#6272A4",
"disabledBorderColor": "#393C4B",
"focusColor": "#9580ff",
"focusedBorderColor": "#9580ff",
"hoverIconColor": "#9580ff",
"focusColor": "#FF79C5",
"focusedBorderColor": "#FF79C5",
"hoverIconColor": "#FF79C5",
"infoForeground": "#6272A4",
"iconColor": "#F8F8F2"
},
"control": "#282A36",
"controlText": "#6272A4",
"Counter": {
"background": "#9580ff",
"foreground": "#FFFFFF"
"background": "#FF79C5",
"foreground": "#8BE9FD"
},
"Debugger": {
"Variables": {
"collectingDataForeground": "#6272A4",
"changedValueForeground": "#9580ff",
"errorMessageForeground": "#8BE9FD",
"changedValueForeground": "#FF79C5",
"errorMessageForeground": "#f780bf",
"evaluatingExpressionForeground": "#6272A4",
"exceptionForeground": "#50FA7B",
"modifyingValueForeground": "#9580ff",
"valueForeground": "#9580ff"
"exceptionForeground": "#8aff80",
"modifyingValueForeground": "#FF79C5",
"valueForeground": "#FF79C5"
}
},
"DebuggerTabs": {
"selectedBackground": "#44475a",
"underlinedTabBackground": "#44475a"
"selectedBackground": "#6272A4",
"underlinedTabBackground": "#6272A4"
},
"DebuggerPopup": {
"borderColor": "#44475a"
"borderColor": "#6272A4"
},
"DefaultTabs": {
"background": "#282A36",
"borderColor": "#282A36",
"hoverBackground": "#44475A",
"hoverColor": "#282A36",
"hoverMaskColor": "#44475a",
"hoverMaskColor": "#6272A4",
"inactiveColoredTabBackground": "#282A36",
"inactiveColoredFileBackground": "#393C4B",
"inactiveUnderlineColor": "#9580ff",
"inactiveUnderlineColor": "#FF79C5",
"inactiveMaskColor": "#282A36",
"underlineColor": "#9580ff",
"underlineColor": "#FF79C5",
"underlinedTabBackground": "#44475A",
"underlinedTabForeground": "#FFFFFF"
"underlinedTabForeground": "#8BE9FD"
},
"Desktop.background": "#282A36",
"DialogWrapper.southPanelBackground": "#282A36",
@@ -209,41 +209,41 @@
},
"EditorPane": {
"background": "#282A36",
"caretForeground": "#9580ff",
"caretForeground": "#FF79C5",
"foreground": "#F8F8F2",
"inactiveBackground": "#282A36",
"inactiveForeground": "#6272A4",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD"
"selectionForeground": "#FFFFFF"
},
"EditorTabs": {
"borderColor": "#282A36",
"hoverBackground": "#44475a",
"hoverColor": "#44475a",
"hoverMaskColor": "#44475a",
"hoverBackground": "#6272A4",
"hoverColor": "#6272A4",
"hoverMaskColor": "#6272A4",
"inactiveMaskColor": "#282A36",
"inactiveColoredFileBackground": "#282A36",
"inactiveUnderlineColor": "#6272A4",
"selectedForeground": "#F8F8F2",
"selectedBackground": "#44475A",
"underlineColor": "#9580ff",
"underlineColor": "#FF79C5",
"underlinedTabBackground": "#44475A",
"underlinedTabForeground": "#FFFFFF"
"underlinedTabForeground": "#8BE9FD"
},
"EditorGroupsTabs": {
"background": "#282A36",
"borderColor": "#282A36",
"hoverBackground": "#44475a",
"hoverColor": "#44475a",
"inactiveUnderlineColor": "#9580ff",
"underlineColor": "#9580ff",
"hoverBackground": "#6272A4",
"hoverColor": "#6272A4",
"inactiveUnderlineColor": "#FF79C5",
"underlineColor": "#FF79C5",
"underlinedTabBackground": "#44475A",
"underlinedTabForeground": "#F8F8F2"
},
"FileColor": {
"Green": "#387002",
"Blue": "#004BA0",
"Yellow": "#34353D",
"Yellow": "#313341",
"Orange": "#B53D00",
"Violet": "#4D2C91",
"Rose": "#A00037"
@@ -261,11 +261,11 @@
"Focus.color": "#21222C",
"FormattedTextField": {
"background": "#282A36",
"caretForeground": "#9580ff",
"caretForeground": "#FF79C5",
"foreground": "#F8F8F2",
"inactiveBackground": "#393C4B",
"inactiveForeground": "#6272A4",
"selectionForeground": "#8BE9FD",
"selectionForeground": "#FFFFFF",
"selectionBackground": "#44475A"
},
"GotItTooltip.borderColor": "#1D2228",
@@ -288,7 +288,7 @@
"infoForeground": "#6272A4",
"shortcutForeground": "#6272A4"
},
"Hyperlink.linkColor": "#9580ff",
"Hyperlink.linkColor": "#FF79C5",
"inactiveCaption": "#282A36",
"inactiveCaptionBorder": "#282A36",
"inactiveCaptionText": "#6272A4",
@@ -311,26 +311,26 @@
"disabledText": "#6272A4",
"foreground": "#F8F8F2",
"infoForeground": "#6272A4",
"selectedForeground": "#8BE9FD",
"selectedForeground": "#FFFFFF",
"selectedDisabledForeground": "#F8F8F2"
},
"Link": {
"activeForeground": "#9580ff",
"hoverForeground": "#9580ff",
"pressedForeground": "#9580ff",
"activeForeground": "#FF79C5",
"hoverForeground": "#FF79C5",
"pressedForeground": "#FF79C5",
"secondaryForeground": "#6272A4",
"visitedForeground": "#9580ff"
"visitedForeground": "#FF79C5"
},
"link.foreground": "#9580ff",
"link.foreground": "#FF79C5",
"List": {
"background": "#282A36",
"foreground": "#F8F8F2",
"hoverBackground": "#44475A70",
"hoverBackground": "#44475A50",
"hoverInactiveBackground": "#44475A",
"selectionBackground": "#44475A50",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#8BE9FD",
"selectionInactiveBackground": "#44475A70"
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveBackground": "#44475A50"
},
"material": {
"background": "#282A36",
@@ -339,19 +339,19 @@
"foreground": "#F8F8F2",
"mergeCommits": "#393C4B",
"primaryColor": "#6272A4",
"selectionForeground": "#FFFFFF",
"selectionForeground": "#8BE9FD",
"tab.backgroundColor": "#282A36",
"tab.borderColor": "#9580ff",
"tab.borderColor": "#FF79C5",
"tagColor": "#6272A4"
},
"MemoryIndicator": {
"allocatedBackground": "#282A36",
"usedColor": "#44475a",
"usedBackground": "#44475a"
"usedColor": "#6272A4",
"usedBackground": "#6272A4"
},
"Menu": {
"acceleratorForeground": "#6272A4",
"acceleratorSelectionForeground": "#FFFFFF",
"acceleratorSelectionForeground": "#8BE9FD",
"background": "#282A36",
"border": "4,2,4,2",
"borderColor": "#282A36",
@@ -359,7 +359,7 @@
"disabledForeground": "#6272A4",
"foreground": "#F8F8F2",
"selectionBackground": "#44475A",
"selectionForeground": "#FFFFFF",
"selectionForeground": "#8BE9FD",
"separatorColor": "#21222C"
},
"MenuBar": {
@@ -370,19 +370,19 @@
"foreground": "#F8F8F2",
"highlight": "#282A36",
"selectionBackground": "#44475A",
"selectionForeground": "#FFFFFF",
"selectionForeground": "#8BE9FD",
"shadow": "#282A36"
},
"MenuItem": {
"acceleratorForeground": "#6272A4",
"acceleratorSelectionForeground": "#FFFFFF",
"acceleratorSelectionForeground": "#8BE9FD",
"border": "4,2,4,2",
"background": "#282A36",
"disabledBackground": "#282A36",
"disabledForeground": "#6272A4",
"foreground": "#F8F8F2",
"selectionBackground": "#44475A",
"selectionForeground": "#FFFFFF"
"selectionForeground": "#8BE9FD"
},
"NavBar": {
"arrowColor": "#F8F8F2",
@@ -396,7 +396,7 @@
"background": "#282A36"
}
},
"NewPSD.warning": "#9580ff",
"NewPSD.warning": "#FF79C5",
"Notification": {
"background": "#1D2228",
"borderColor": "#1D2228",
@@ -425,7 +425,7 @@
},
"Outline": {
"color": "#393C4B",
"focusedColor": "#9580ff",
"focusedColor": "#FF79C5",
"disabledColor": "#6272A4"
},
"Panel": {
@@ -435,8 +435,8 @@
"ParameterInfo": {
"background": "#282A36",
"borderColor": "#44475A",
"currentOverloadBackground": "#44475a",
"currentParameterForeground": "#9580ff",
"currentOverloadBackground": "#6272A4",
"currentParameterForeground": "#FF79C5",
"disabledForeground": "#6272A4",
"foreground": "#F8F8F2",
"infoForeground": "#6272A4",
@@ -444,32 +444,32 @@
},
"PasswordField": {
"background": "#282A36",
"capsLockIconColor": "#9580ff",
"caretForeground": "#9580ff",
"capsLockIconColor": "#FF79C5",
"caretForeground": "#FF79C5",
"foreground": "#F8F8F2",
"inactiveForeground": "#6272A4",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD"
"selectionForeground": "#FFFFFF"
},
"Plugins": {
"background": "#282A36",
"disabledForeground": "#6272A4",
"eapTagBackground": "#44475a",
"hoverBackground": "#44475A70",
"eapTagBackground": "#6272A4",
"hoverBackground": "#44475A50",
"lightSelectionBackground": "#44475A",
"paidTagBackground": "#44475a",
"paidTagBackground": "#6272A4",
"selectionBackground": "#44475A",
"tagForeground": "#9580ff",
"tagBackground": "#44475a",
"trialTagBackground": "#44475a",
"tagForeground": "#FF79C5",
"tagBackground": "#6272A4",
"trialTagBackground": "#6272A4",
"Button": {
"installBackground": "#393C4B",
"installBorderColor": "#393C4B",
"installForeground": "#F8F8F2",
"installFocusedBackground": "#44475a",
"installFocusedBackground": "#6272A4",
"installFillForeground": "#6272A4",
"installFillBackground": "#393C4B",
"updateBackground": "#9580ff",
"updateBackground": "#FF79C5",
"updateBorderColor": "#393C4B",
"updateForeground": "#F8F8F2"
},
@@ -483,7 +483,7 @@
},
"Tab": {
"hoverBackground": "#44475A",
"selectedForeground": "#FFFFFF",
"selectedForeground": "#8BE9FD",
"selectedBackground": "#44475A"
}
},
@@ -491,7 +491,7 @@
"Advertiser": {
"background": "#282A36",
"borderColor": "#282A36",
"foreground": "#9580ff"
"foreground": "#FF79C5"
},
"borderColor": "#191A21",
"inactiveBorderColor": "#282A36",
@@ -519,15 +519,15 @@
"PopupMenuSeparator.stripeIndent": 5,
"ProgressBar": {
"background": "#282A36",
"foreground": "#9580ff",
"indeterminateEndColor": "#9580ff",
"indeterminateStartColor": "#9580ff",
"progressColor": "#9580ff",
"selectionBackground": "#44475a",
"trackColor": "#44475a"
"foreground": "#FF79C5",
"indeterminateEndColor": "#FF79C5",
"indeterminateStartColor": "#FF79C5",
"progressColor": "#FF79C5",
"selectionBackground": "#6272A4",
"trackColor": "#6272A4"
},
"PsiViewer": {
"referenceHighlightColor": "#9580ff"
"referenceHighlightColor": "#FF79C5"
},
"RadioButton": {
"background": "#282A36",
@@ -542,40 +542,40 @@
"disabledForeground": "#6272A4",
"foreground": "#F8F8F2",
"selectionBackground": "#44475A",
"selectionForeground": "#FFFFFF"
"selectionForeground": "#8BE9FD"
},
"ScreenView.borderColor": "#21222C",
"ScrollBar": {
"background": "#282A36",
"hoverThumbBorderColor": "#9580ff",
"hoverThumbColor": "#9580ff",
"hoverThumbBorderColor": "#FF79C5",
"hoverThumbColor": "#FF79C5",
"hoverTrackColor": "#282A3630",
"Mac": {
"hoverThumbBorderColor": "#9580ff",
"hoverThumbColor": "#9580ff",
"hoverThumbBorderColor": "#FF79C5",
"hoverThumbColor": "#FF79C5",
"hoverTrackColor": "#282A3630",
"thumbBorderColor": "#9580ff70",
"thumbColor": "#9580ff70",
"thumbBorderColor": "#FF79C570",
"thumbColor": "#FF79C570",
"trackColor": "#282A3630",
"Transparent": {
"hoverThumbBorderColor": "#9580ff",
"hoverThumbColor": "#9580ff",
"hoverThumbBorderColor": "#FF79C5",
"hoverThumbColor": "#FF79C5",
"hoverTrackColor": "#282A3630",
"thumbBorderColor": "#9580ff70",
"thumbColor": "#9580ff70",
"thumbBorderColor": "#FF79C570",
"thumbColor": "#FF79C570",
"trackColor": "#282A3630"
}
},
"thumb": "#44475a",
"thumbBorderColor": "#9580ff70",
"thumbColor": "#9580ff70",
"thumb": "#6272A4",
"thumbBorderColor": "#FF79C570",
"thumbColor": "#FF79C570",
"trackColor": "#282A3630",
"Transparent": {
"hoverThumbBorderColor": "#9580ff",
"hoverThumbColor": "#9580ff",
"hoverThumbBorderColor": "#FF79C5",
"hoverThumbColor": "#FF79C5",
"hoverTrackColor": "#282A3630",
"thumbBorderColor": "#9580ff70",
"thumbColor": "#9580ff70",
"thumbBorderColor": "#FF79C570",
"thumbColor": "#FF79C570",
"trackColor": "#282A3630"
}
},
@@ -597,16 +597,16 @@
"infoForeground": "#6272A4"
},
"Tab": {
"active.foreground": "#8BE9FD",
"selectedForeground": "#8BE9FD",
"selectedBackground": "#44475a"
"active.foreground": "#FFFFFF",
"selectedForeground": "#FFFFFF",
"selectedBackground": "#6272A4"
}
},
"SearchMatch": {
"endBackground": "#9580ff",
"startBackground": "#9580ff",
"endColor": "#9580ff",
"startColor": "#9580ff"
"endBackground": "#FF79C5",
"startBackground": "#FF79C5",
"endColor": "#FF79C5",
"startColor": "#FF79C5"
},
"SearchField.errorBackground": "#1D2228",
"SearchOption": {
@@ -626,17 +626,17 @@
},
"Slider": {
"background": "#282A36",
"buttonBorderColor": "#9580ff",
"buttonColor": "#9580ff",
"buttonBorderColor": "#FF79C5",
"buttonColor": "#FF79C5",
"foreground": "#F8F8F2",
"majorTickLength": 6,
"tickColor": "#282A36",
"trackColor": "#44475A",
"trackWidth": 7,
"thumb": "#9580ff"
"thumb": "#FF79C5"
},
"SpeedSearch": {
"background": "#44475a",
"background": "#6272A4",
"borderColor": "#21222C",
"foreground": "#F8F8F2",
"errorForeground": "#F8F8F2"
@@ -645,7 +645,7 @@
"background": "#282A36",
"border": "3,3,3,3",
"foreground": "#F8F8F2",
"selectionForeground": "#8BE9FD"
"selectionForeground": "#FFFFFF"
},
"SplitPane": {
"background": "#282A36",
@@ -654,12 +654,12 @@
"SplitPaneDivider.draggingColor": "#282A36",
"StatusBar": {
"borderColor": "#282A36",
"hoverBackground": "#44475a",
"hoverBackground": "#6272A4",
"LightEditBackground": "#44475A"
},
"TabbedPane": {
"background": "#282A36",
"contentAreaColor": "#44475a",
"contentAreaColor": "#6272A4",
"contentBorderInsets": "3,1,1,1",
"darkShadow": "#21222C",
"disabledForeground": "#6272A4",
@@ -669,16 +669,16 @@
"fontSizeOffset": 0,
"foreground": "#F8F8F2",
"highlight": "#21222C",
"hoverColor": "#44475a",
"hoverColor": "#6272A4",
"labelShift": 0,
"selectedForeground": "#8BE9FD",
"selectedForeground": "#FFFFFF",
"selectedLabelShift": 0,
"selectedTabPadInsets": "0,0,0,0",
"tabsOverlapBorder": true,
"tabHeight": 32,
"tabInsets": "5,10,5,10",
"tabSelectionHeight": 2,
"underlineColor": "#9580ff"
"underlineColor": "#FF79C5"
},
"TabbedPane.mt.tab.background": "#282A36",
"Table": {
@@ -687,22 +687,22 @@
"cellNoFocusBorder": "10,5,10,5",
"focusCellHighlightBorder": "10,5,10,5",
"disabledForeground": "#6272A4",
"dropLineColor": "#9580ff",
"dropLineShortColor": "#9580ff",
"dropLineColor": "#FF79C5",
"dropLineShortColor": "#FF79C5",
"focusCellBackground": "#44475A",
"focusCellForeground": "#8BE9FD",
"focusCellForeground": "#FFFFFF",
"foreground": "#F8F8F2",
"gridColor": "#282A36",
"highlightOuter": "#44475A",
"hoverBackground": "#44475A70",
"hoverBackground": "#44475A50",
"hoverInactiveBackground": "#44475A",
"lightSelectionForeground": "#8BE9FD",
"lightSelectionForeground": "#FFFFFF",
"lightSelectionInactiveForeground": "#6272A4",
"lightSelectionInactiveBackground": "#282A36",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD",
"selectionForeground": "#FFFFFF",
"selectionInactiveBackground": "#44475A",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveForeground": "#8BE9FD",
"sortIconColor": "#F8F8F2",
"stripeColor": "#191A21"
},
@@ -714,7 +714,7 @@
"disabledForeground": "#6272A4",
"foreground": "#F8F8F2",
"focusCellBackground": "#44475A",
"focusCellForeground": "#8BE9FD",
"focusCellForeground": "#FFFFFF",
"height": 25,
"separatorColor": "#282A36"
},
@@ -723,31 +723,31 @@
"textText": "#6272A4",
"TextArea": {
"background": "#282A36",
"caretForeground": "#9580ff",
"caretForeground": "#FF79C5",
"foreground": "#F8F8F2",
"inactiveForeground": "#6272A4",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD"
"selectionForeground": "#FFFFFF"
},
"TextField": {
"background": "#282A36",
"caretForeground": "#9580ff",
"caretForeground": "#FF79C5",
"foreground": "#F8F8F2",
"inactiveForeground": "#6272A4",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD"
"selectionForeground": "#FFFFFF"
},
"TextPane": {
"background": "#282A36",
"caretForeground": "#9580ff",
"caretForeground": "#FF79C5",
"foreground": "#F8F8F2",
"inactiveForeground": "#6272A4",
"selectionBackground": "#44475A",
"selectionForeground": "#8BE9FD"
"selectionForeground": "#FFFFFF"
},
"TitlePane": {
"background": "#191A21",
"Button.hoverBackground": "#44475a",
"Button.hoverBackground": "#6272A4",
"inactiveBackground": "#282A36",
"infoForeground": "#6272A4",
"inactiveInfoForeground": "#6272A4"
@@ -760,8 +760,8 @@
"foreground": "#F8F8F2",
"offForeground": "#282A36",
"offBackground": "#282A36",
"onBackground": "#9580ff",
"onForeground": "#9580ff"
"onBackground": "#FF79C5",
"onForeground": "#FF79C5"
},
"ToolBar": {
"background": "#282A36",
@@ -782,7 +782,7 @@
"ToolWindow": {
"Button": {
"hoverBackground": "#44475A",
"selectedForeground": "#8BE9FD",
"selectedForeground": "#FFFFFF",
"selectedBackground": "#191A21"
},
"Header": {
@@ -794,16 +794,16 @@
"background": "#282A36"
},
"HeaderTab": {
"borderColor": "#44475a",
"hoverBackground": "#44475a",
"hoverInactiveBackground": "#44475a",
"inactiveUnderlineColor": "#9580ff",
"borderColor": "#6272A4",
"hoverBackground": "#6272A4",
"hoverInactiveBackground": "#6272A4",
"inactiveUnderlineColor": "#FF79C5",
"selectedBackground": "#191A21",
"selectedInactiveBackground": "#191A21",
"underlineColor": "#9580ff",
"underlineColor": "#FF79C5",
"underlinedTabBackground": "#44475A",
"underlinedTabInactiveBackground": "#282A36",
"underlinedTabForeground": "#FFFFFF",
"underlinedTabForeground": "#8BE9FD",
"underlinedTabInactiveForeground": "#F8F8F2"
}
},
@@ -811,14 +811,14 @@
"background": "#282A36",
"foreground": "#6272A4",
"hash": "#21222C",
"hoverBackground": "#44475A70",
"hoverBackground": "#44475A50",
"hoverInactiveBackground": "#44475A",
"modifiedItemForeground": "#9580ff",
"modifiedItemForeground": "#FF79C5",
"rowHeight": 28,
"selectionBackground": "#44475A70",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveBackground": "#44475A70",
"selectionBackground": "#44475A50",
"selectionForeground": "#8BE9FD",
"selectionInactiveForeground": "#8BE9FD",
"selectionInactiveBackground": "#44475A50",
"textBackground": "#282A36"
},
"Tree.leftChildIndent": 10,
@@ -834,23 +834,23 @@
"borderColor": "#21222C",
"background": "#282A36",
"foreground": "#F8F8F2",
"hoverBorderColor": "#44475a"
"hoverBorderColor": "#6272A4"
},
"Connector": {
"borderColor": "#21222C",
"hoverBorderColor": "#44475a"
"hoverBorderColor": "#6272A4"
},
"Canvas.background": "#191A21",
"highStroke.foreground": "#F8F8F2",
"Label.foreground": "#6272A4",
"List.selectionBackground": "#44475A70",
"List.selectionBackground": "#44475A50",
"motion": {
"borderColor": "#21222C",
"Component.foreground": "#F8F8F2",
"ConstraintSetText.foreground": "#6272A4",
"ConstraintSet.background": "#282A36",
"CSPanel.SelectedFocusBackground": "#44475A",
"CSPanel.SelectedBackground": "#44475A70",
"CSPanel.SelectedBackground": "#44475A50",
"cs_FocusText.infoForeground": "#6272A4",
"CursorTextColor.foreground": "#F8F8F2",
"HoverColor.disabledBackground": "#6272A4",
@@ -860,9 +860,9 @@
"ourCS.background": "#282A36",
"ourCS_Border.borderColor": "#21222C",
"ourCS_TextColor.foreground": "#6272A4",
"ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF",
"ourCS_SelectedFocusBackground.selectionForeground": "#8BE9FD",
"ourCS_SelectedBackground.selectionInactiveBackground": "#44475A",
"ourCS_SelectedBorder.pressedBorderColor": "#44475a",
"ourCS_SelectedBorder.pressedBorderColor": "#6272A4",
"ourML_BarColor.separatorColor": "#21222C",
"PrimaryPanel.background": "#191A21",
"SecondaryPanel.background": "#282A36",
@@ -879,7 +879,7 @@
"background": "#282A36",
"borderColor": "#21222C",
"foreground": "#F8F8F2",
"selectedForeground": "#FFFFFF"
"selectedForeground": "#8BE9FD"
},
"Preview.background": "#282A36",
"stroke.acceleratorForeground": "#6272A4"
@@ -895,17 +895,17 @@
"selectedBranchBackground": "#282A36"
},
"GitCommits": {
"graphColor": "#44475a"
"graphColor": "#6272A4"
},
"GitLog": {
"localBranchIconColor": "#9580ff",
"localBranchIconColor": "#FF79C5",
"otherIconColor": "#6272A4",
"remoteBranchIconColor": "#F8F8F2",
"tagIconColor": "#6272A4"
},
"HgLog": {
"branchIconColor": "#9580ff",
"bookmarkIconColor": "#8BE9FD",
"branchIconColor": "#FF79C5",
"bookmarkIconColor": "#FFFFFF",
"closedBranchIconColor": "#6272A4",
"localTagIconColor": "#6272A4",
"mqTagIconColor": "#6272A4",
@@ -915,11 +915,11 @@
"Log": {
"Commit.unmatchedForeground": "#6272A4",
"Commit.currentBranchBackground": "#282A36",
"Commit.hoveredBackground": "#44475A70"
"Commit.hoveredBackground": "#44475A50"
},
"RefLabel": {
"foreground": "#8BE9FD",
"backgroundBase": "#44475a"
"foreground": "#FFFFFF",
"backgroundBase": "#6272A4"
}
},
"Viewport": {
@@ -942,7 +942,7 @@
"SidePanel.background": "#282A36",
"Projects": {
"actions.background": "#191A21",
"actions.selectionBackground": "#44475a",
"actions.selectionBackground": "#6272A4",
"background": "#282A36",
"selectionBackground": "#44475A",
"selectionInactiveBackground": "#282A36"
@@ -958,53 +958,53 @@
"#43494A": "#191A21",
"#6B6B6B": "#6272A4",
"#A7A7A7": "#282A36",
"#3D6185": "#9580ff",
"#466D94": "#9580ff",
"#3D6185": "#FF79C5",
"#466D94": "#FF79C5",
"#3C3F41": "#282A36",
"#545556": "#6272A4",
"#606060": "#6272A4",
"#9AA7B0": "#F8F8F2",
"#675133": "#9580ff",
"Actions.Blue": "#50FA78",
"Actions.Green": "#F1FA8C",
"#675133": "#FF79C5",
"Actions.Blue": "#8aff80",
"Actions.Green": "#feff80",
"Actions.Grey": "#6272A4",
"Actions.GreyInline": "#6272A4",
"Actions.GreyInline.Dark": "#F8F8F2",
"Actions.Red": "#8BE9FD",
"Actions.Yellow": "#50FA7B",
"Actions.Red": "#f780bf",
"Actions.Yellow": "#8aff80",
"Checkbox.Background.Default": "#191A21",
"Checkbox.Background.Default.Dark": "#191A21",
"Checkbox.Background.Disabled": "#34353D",
"Checkbox.Background.Disabled.Dark": "#34353D",
"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": "#9580ff",
"Checkbox.Focus.Thin.Default.Dark": "#9580ff",
"Checkbox.Focus.Wide": "#9580ff",
"Checkbox.Focus.Wide.Dark": "#9580ff",
"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": "#9580ff",
"Checkbox.Background.Selected": "#FF79C5",
"Checkbox.Background.Selected.Dark": "#282A36",
"Checkbox.Border.Selected": "#9580ff",
"Checkbox.Border.Selected.Dark": "#9580ff",
"Checkbox.Foreground.Selected": "#9580ff",
"Checkbox.Foreground.Selected.Dark": "#9580ff",
"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": "#50FA78",
"Objects.RedStatus": "#8BE9FD",
"Objects.Red": "#8BE9FD",
"Objects.Pink": "#FF79C6",
"Objects.Yellow": "#50FA7B",
"Objects.Green": "#F1FA8C",
"Objects.Purple": "#FF79C6",
"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": "#BD93F9",
"Objects.GreenAndroid": "#F1FA8C"
"Objects.YellowDark": "#9580ff",
"Objects.GreenAndroid": "#feff80"
}
}
}

View File

@@ -2,7 +2,7 @@
"name": "GitHub Contrast",
"dark": false,
"author": "Mallowigi",
"editorScheme": "/colors/GitHub (Material).xml",
"editorScheme": "/colors/GitHub.xml",
"emptyFrameBackground": {
"anchor": "center",
"image": "/walls/github.svg",
@@ -14,32 +14,32 @@
"acceleratorSelectionForeground": "#292D31",
"background": "#F7F8FA",
"borderColor": "#DFE1E4",
"disabledBackground": "#FDFDFD",
"disabledForeground": "#6C737C",
"disabledText": "#6C737C",
"disabledBackground": "#dcdcdc",
"disabledForeground": "#9ba0a3",
"disabledText": "#9ba0a3",
"focusColor": "#CCE5FF",
"focusedBorderColor": "#79CB60",
"foreground": "#5B6168",
"inactiveBackground": "#FDFDFD",
"inactiveBackground": "#dcdcdc",
"inactiveForeground": "#292D31",
"infoForeground": "#292D31",
"selectionBackground": "#3A66D1",
"selectionBackgroundInactive": "#F7F8FA",
"selectionForeground": "#111111",
"selectionInactiveBackground": "#F7F8FA",
"selectionBackground": "#3A66D150",
"selectionBackgroundInactive": "#F3f3f3",
"selectionForeground": "#FFFFFF",
"selectionInactiveBackground": "#F3f3f3",
"separatorColor": "#DFE1E4"
},
"activeCaption": "#F7F8FA",
"ActionButton": {
"hoverBackground": "#79CB6050",
"hoverBorderColor": "#79CB6050",
"hoverSeparatorColor": "#F1F3F6",
"hoverSeparatorColor": "#edf1f5",
"focusedBorderColor": "#79CB6050",
"pressedBackground": "#79CB6050",
"pressedBorderColor": "#79CB6050"
},
"Autocomplete": {
"selectionBackground": "#3A66D1"
"selectionBackground": "#3A66D150"
},
"Borders.ContrastBorderColor": "#F7F8FA",
"Borders.color": "#DFE1E4",
@@ -56,22 +56,22 @@
"startBackground": "#cce5ff",
"startBorderColor": "#cce5ff"
},
"disabledBorderColor": "#F1F3F6",
"disabledText": "#6C737C",
"endBackground": "#F1F3F6",
"endBorderColor": "#F1F3F6",
"disabledBorderColor": "#edf1f5",
"disabledText": "#9ba0a3",
"endBackground": "#edf1f5",
"endBorderColor": "#edf1f5",
"focus": "#CCE5FF",
"focusedBorderColor": "#79CB60",
"foreground": "#292D31",
"highlight": "#111111",
"mt.background": "#F1F3F6",
"highlight": "#FFFFFF",
"mt.background": "#edf1f5",
"mt.foreground": "#292D31",
"mt.selectedForeground": "#111111",
"mt.selectedForeground": "#FFFFFF",
"mt.selection.color1": "#cce5ff",
"mt.selection.color2": "#cce5ff",
"startBackground": "#F1F3F6",
"startBorderColor": "#F1F3F6",
"shadowColor": "#F1F3F6",
"startBackground": "#edf1f5",
"startBorderColor": "#edf1f5",
"shadowColor": "#edf1f5",
"shadowWidth": 0
},
"Canvas": {
@@ -79,12 +79,12 @@
"Tooltip.background": "#DFECFE"
},
"Content": {
"background": "#FFFFFF",
"selectionBackground": "#3A66D1"
"background": "#fafbfc",
"selectionBackground": "#3A66D150"
},
"CheckBox": {
"background": "#F7F8FA",
"disabledText": "#6C737C",
"disabledText": "#9ba0a3",
"foreground": "#5B6168",
"select": "#79CB60"
},
@@ -93,16 +93,16 @@
"acceleratorSelectionForeground": "#292D31",
"background": "#F7F8FA",
"disabledBackground": "#F7F8FA",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"foreground": "#5B6168",
"selectionBackground": "#3A66D1",
"selectionBackground": "#3A66D150",
"selectionForeground": "#111111"
},
"CodeWithMe": {
"Avatar.foreground": "#5B6168",
"AccessEnabled": {
"accessDot": "#79CB60",
"dropdownBorder": "#F7F8FA",
"dropdownBorder": "#F3f3f3",
"pillBackground": "$second"
}
},
@@ -111,45 +111,45 @@
"foreground": "#5B6168",
"swatchesDefaultRecentColor": "#5B6168"
},
"ComboBoxButton.background": "#F1F3F6",
"ComboBoxButton.background": "#edf1f5",
"ComboBox": {
"ArrowButton": {
"background": "#F1F3F6",
"disabledIconColor": "#6C737C",
"background": "#edf1f5",
"disabledIconColor": "#9ba0a3",
"iconColor": "#5B6168",
"nonEditableBackground": "#F7F8FA"
},
"background": "#FFFFFF",
"buttonBackground": "#F1F3F6",
"background": "#fafbfc",
"buttonBackground": "#edf1f5",
"darcula.hoveredArrowButtonForeground": "#79CB60",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"foreground": "#5B6168",
"modifiedItemForeground": "#79CB60",
"nonEditableBackground": "#F7F8FA",
"nonEditableBackground": "#F3f3f3",
"padding": "5,5,5,5",
"selectionBackground": "#cce5ff",
"selectionForeground": "#111111"
},
"ComboPopup.border": "#DFE1E4",
"CompletionPopup": {
"background": "#F7F8FA",
"background": "#F3f3f3",
"foreground": "#5B6168",
"infoForeground": "#292D31",
"matchForeground": "#79CB60",
"matchSelectionForeground": "#79CB60",
"nonFocusedState": "false",
"selectedGrayedForeground": "#111111",
"selectionGrayForeground": "#111111",
"selectedGrayedForeground": "#FFFFFF",
"selectionGrayForeground": "#FFFFFF",
"selectionInactiveInfoForeground": "#292D31",
"selectionInactiveBackground": "#3A66D150",
"selectionBackground": "#3A66D180",
"selectionForeground": "#111111",
"selectionInfoForeground": "#111111"
"selectionBackground": "#3A66D150",
"selectionForeground": "#FFFFFF",
"selectionInfoForeground": "#FFFFFF"
},
"Component": {
"arc": 4,
"borderColor": "#CCE5FF",
"disabledBorderColor": "#F1F3F6",
"disabledBorderColor": "#edf1f5",
"focusColor": "#79CB60",
"focusedBorderColor": "#79CB60",
"hoverIconColor": "#79CB60",
@@ -160,7 +160,7 @@
"controlText": "#292D31",
"Counter": {
"background": "#79CB60",
"foreground": "#111111"
"foreground": "#FFFFFF"
},
"Debugger": {
"Variables": {
@@ -184,15 +184,15 @@
"background": "#F7F8FA",
"borderColor": "#F7F8FA",
"hoverBackground": "#cce5ff",
"hoverColor": "#FFFFFF",
"hoverColor": "#fafbfc",
"hoverMaskColor": "#CCE5FF",
"inactiveColoredTabBackground": "#F7F8FA",
"inactiveColoredFileBackground": "#F1F3F6",
"inactiveColoredFileBackground": "#edf1f5",
"inactiveUnderlineColor": "#79CB60",
"inactiveMaskColor": "#FFFFFF",
"inactiveMaskColor": "#fafbfc",
"underlineColor": "#79CB60",
"underlinedTabBackground": "#cce5ff",
"underlinedTabForeground": "#111111"
"underlinedTabForeground": "#FFFFFF"
},
"Desktop.background": "#F7F8FA",
"DialogWrapper.southPanelBackground": "#F7F8FA",
@@ -203,36 +203,36 @@
"areaForeground": "#5B6168"
},
"Editor": {
"background": "#FFFFFF",
"background": "#fafbfc",
"foreground": "#5B6168",
"shortcutForeground": "#292D31"
},
"EditorPane": {
"background": "#FFFFFF",
"background": "#fafbfc",
"caretForeground": "#79CB60",
"foreground": "#5B6168",
"inactiveBackground": "#F7F8FA",
"inactiveForeground": "#6C737C",
"selectionBackground": "#3A66D1",
"inactiveForeground": "#9ba0a3",
"selectionBackground": "#3A66D150",
"selectionForeground": "#111111"
},
"EditorTabs": {
"borderColor": "#F7F8FA",
"borderColor": "#F3f3f3",
"hoverBackground": "#CCE5FF",
"hoverColor": "#CCE5FF",
"hoverMaskColor": "#CCE5FF",
"inactiveMaskColor": "#F7F8FA",
"inactiveColoredFileBackground": "#F7F8FA",
"inactiveUnderlineColor": "#6C737C",
"inactiveUnderlineColor": "#9ba0a3",
"selectedForeground": "#5B6168",
"selectedBackground": "#cce5ff",
"underlineColor": "#79CB60",
"underlinedTabBackground": "#cce5ff",
"underlinedTabForeground": "#111111"
"underlinedTabForeground": "#FFFFFF"
},
"EditorGroupsTabs": {
"background": "#F7F8FA",
"borderColor": "#F7F8FA",
"borderColor": "#F3f3f3",
"hoverBackground": "#CCE5FF",
"hoverColor": "#CCE5FF",
"inactiveUnderlineColor": "#79CB60",
@@ -243,7 +243,7 @@
"FileColor": {
"Green": "#387002",
"Blue": "#004BA0",
"Yellow": "#FDFDFD",
"Yellow": "#dcdcdc",
"Orange": "#B53D00",
"Violet": "#4D2C91",
"Rose": "#A00037"
@@ -260,11 +260,11 @@
},
"Focus.color": "#DFE1E4",
"FormattedTextField": {
"background": "#FFFFFF",
"background": "#fafbfc",
"caretForeground": "#79CB60",
"foreground": "#5B6168",
"inactiveBackground": "#F1F3F6",
"inactiveForeground": "#6C737C",
"inactiveBackground": "#edf1f5",
"inactiveForeground": "#9ba0a3",
"selectionForeground": "#111111",
"selectionBackground": "#cce5ff"
},
@@ -279,7 +279,7 @@
},
"HeaderColor": {
"active": "#F7F8FA",
"inactive": "#FFFFFF"
"inactive": "#fafbfc"
},
"HelpTooltip": {
"background": "#F7F8FA",
@@ -289,7 +289,7 @@
"shortcutForeground": "#292D31"
},
"Hyperlink.linkColor": "#79CB60",
"inactiveCaption": "#F7F8FA",
"inactiveCaption": "#F3f3f3",
"inactiveCaptionBorder": "#F7F8FA",
"inactiveCaptionText": "#292D31",
"info": "#292D31",
@@ -306,9 +306,9 @@
},
"Label": {
"background": "#F7F8FA",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"disabledShadow": "#F7F8FA",
"disabledText": "#6C737C",
"disabledText": "#9ba0a3",
"foreground": "#5B6168",
"infoForeground": "#292D31",
"selectedForeground": "#111111",
@@ -323,66 +323,66 @@
},
"link.foreground": "#79CB60",
"List": {
"background": "#F7F8FA",
"background": "#F3f3f3",
"foreground": "#5B6168",
"hoverBackground": "#3A66D170",
"hoverBackground": "#3A66D1",
"hoverInactiveBackground": "#cce5ff",
"selectionBackground": "#3A66D150",
"selectionForeground": "#111111",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#111111",
"selectionInactiveBackground": "#3A66D170"
"selectionInactiveBackground": "#3A66D1"
},
"material": {
"background": "#F7F8FA",
"branchColor": "#5B6168",
"contrast": "#FFFFFF",
"contrast": "#fafbfc",
"foreground": "#5B6168",
"mergeCommits": "#F1F3F6",
"mergeCommits": "#edf1f5",
"primaryColor": "#292D31",
"selectionForeground": "#111111",
"selectionForeground": "#FFFFFF",
"tab.backgroundColor": "#F7F8FA",
"tab.borderColor": "#79CB60",
"tagColor": "#292D31"
},
"MemoryIndicator": {
"allocatedBackground": "#F7F8FA",
"allocatedBackground": "#F3f3f3",
"usedColor": "#CCE5FF",
"usedBackground": "#CCE5FF"
},
"Menu": {
"acceleratorForeground": "#292D31",
"acceleratorSelectionForeground": "#111111",
"acceleratorSelectionForeground": "#FFFFFF",
"background": "#F7F8FA",
"border": "4,2,4,2",
"borderColor": "#F7F8FA",
"disabledBackground": "#F7F8FA",
"disabledForeground": "#6C737C",
"borderColor": "#F3f3f3",
"disabledBackground": "#F3f3f3",
"disabledForeground": "#9ba0a3",
"foreground": "#5B6168",
"selectionBackground": "#3A66D1",
"selectionForeground": "#111111",
"selectionBackground": "#3A66D150",
"selectionForeground": "#FFFFFF",
"separatorColor": "#DFE1E4"
},
"MenuBar": {
"background": "#FFFFFF",
"background": "#fafbfc",
"borderColor": "#F7F8FA",
"disabledBackground": "#F7F8FA",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"foreground": "#5B6168",
"highlight": "#F7F8FA",
"selectionBackground": "#3A66D1",
"selectionForeground": "#111111",
"shadow": "#FFFFFF"
"selectionBackground": "#3A66D150",
"selectionForeground": "#FFFFFF",
"shadow": "#fafbfc"
},
"MenuItem": {
"acceleratorForeground": "#292D31",
"acceleratorSelectionForeground": "#111111",
"acceleratorSelectionForeground": "#FFFFFF",
"border": "4,2,4,2",
"background": "#F7F8FA",
"disabledBackground": "#F7F8FA",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"foreground": "#5B6168",
"selectionBackground": "#3A66D1",
"selectionForeground": "#111111"
"selectionBackground": "#3A66D150",
"selectionForeground": "#FFFFFF"
},
"NavBar": {
"arrowColor": "#5B6168",
@@ -393,7 +393,7 @@
"background": "#F7F8FA"
},
"SearchField": {
"background": "#FFFFFF"
"background": "#fafbfc"
}
},
"NewPSD.warning": "#79CB60",
@@ -404,9 +404,9 @@
"errorBorderColor": "#DFECFE",
"foreground": "#5B6168",
"MoreButton": {
"background": "#F1F3F6",
"background": "#edf1f5",
"foreground": "#5B6168",
"innerBorderColor": "#F1F3F6"
"innerBorderColor": "#edf1f5"
},
"ToolWindow": {
"errorBackground": "#DFECFE",
@@ -424,66 +424,66 @@
"messageForeground": "#5B6168"
},
"Outline": {
"color": "#F1F3F6",
"color": "#edf1f5",
"focusedColor": "#79CB60",
"disabledColor": "#6C737C"
"disabledColor": "#9ba0a3"
},
"Panel": {
"background": "#F7F8FA",
"foreground": "#5B6168"
},
"ParameterInfo": {
"background": "#F7F8FA",
"background": "#F3f3f3",
"borderColor": "#cce5ff",
"currentOverloadBackground": "#CCE5FF",
"currentParameterForeground": "#79CB60",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"foreground": "#5B6168",
"infoForeground": "#292D31",
"lineSeparatorColor": "#cce5ff"
},
"PasswordField": {
"background": "#FFFFFF",
"background": "#fafbfc",
"capsLockIconColor": "#79CB60",
"caretForeground": "#79CB60",
"foreground": "#5B6168",
"inactiveForeground": "#6C737C",
"inactiveForeground": "#9ba0a3",
"selectionBackground": "#cce5ff",
"selectionForeground": "#111111"
},
"Plugins": {
"background": "#F7F8FA",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"eapTagBackground": "#CCE5FF",
"hoverBackground": "#3A66D170",
"hoverBackground": "#3A66D1",
"lightSelectionBackground": "#cce5ff",
"paidTagBackground": "#CCE5FF",
"selectionBackground": "#3A66D1",
"selectionBackground": "#3A66D150",
"tagForeground": "#79CB60",
"tagBackground": "#CCE5FF",
"trialTagBackground": "#CCE5FF",
"Button": {
"installBackground": "#F1F3F6",
"installBorderColor": "#F1F3F6",
"installBackground": "#edf1f5",
"installBorderColor": "#edf1f5",
"installForeground": "#5B6168",
"installFocusedBackground": "#CCE5FF",
"installFillForeground": "#6C737C",
"installFillBackground": "#F1F3F6",
"installFillForeground": "#9ba0a3",
"installFillBackground": "#edf1f5",
"updateBackground": "#79CB60",
"updateBorderColor": "#F1F3F6",
"updateBorderColor": "#edf1f5",
"updateForeground": "#5B6168"
},
"SearchField": {
"background": "#FFFFFF",
"background": "#fafbfc",
"borderColor": "#DFE1E4"
},
"SectionHeader": {
"background": "#F7F8FA",
"background": "#F3f3f3",
"foreground": "#5B6168"
},
"Tab": {
"hoverBackground": "#cce5ff",
"selectedForeground": "#111111",
"selectedForeground": "#FFFFFF",
"selectedBackground": "#cce5ff"
}
},
@@ -493,20 +493,20 @@
"borderColor": "#F7F8FA",
"foreground": "#79CB60"
},
"borderColor": "#FFFFFF",
"borderColor": "#fafbfc",
"inactiveBorderColor": "#F7F8FA",
"innerBorderColor": "#F7F8FA",
"innerBorderColor": "#F3f3f3",
"Header": {
"activeBackground": "#F7F8FA",
"inactiveBackground": "#FFFFFF"
"inactiveBackground": "#fafbfc"
},
"paintBorder": true,
"separatorForeground": "#5B6168",
"separatorColor": "#F7F8FA",
"separatorColor": "#F3f3f3",
"Toolbar": {
"Floating.background": "#FFFFFF",
"background": "#FFFFFF",
"borderColor": "#FFFFFF"
"Floating.background": "#fafbfc",
"background": "#fafbfc",
"borderColor": "#fafbfc"
}
},
"PopupMenu": {
@@ -531,7 +531,7 @@
},
"RadioButton": {
"background": "#F7F8FA",
"disabledText": "#6C737C",
"disabledText": "#9ba0a3",
"foreground": "#5B6168"
},
"RadioButtonMenuItem": {
@@ -539,10 +539,10 @@
"acceleratorSelectionForeground": "#292D31",
"background": "#F7F8FA",
"disabledBackground": "#F7F8FA",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"foreground": "#5B6168",
"selectionBackground": "#3A66D1",
"selectionForeground": "#111111"
"selectionBackground": "#3A66D150",
"selectionForeground": "#FFFFFF"
},
"ScreenView.borderColor": "#DFE1E4",
"ScrollBar": {
@@ -581,7 +581,7 @@
},
"SearchEverywhere": {
"Advertiser": {
"background": "#FFFFFF",
"background": "#fafbfc",
"foreground": "#292D31"
},
"Header": {
@@ -593,7 +593,7 @@
},
"SearchField": {
"background": "#F7F8FA",
"borderColor": "#FFFFFF",
"borderColor": "#fafbfc",
"infoForeground": "#292D31"
},
"Tab": {
@@ -617,12 +617,12 @@
"Repeated.File.Foreground": "#5B6168"
},
"Separator": {
"background": "#F7F8FA",
"foreground": "#F7F8FA",
"separatorColor": "#F7F8FA"
"background": "#F3f3f3",
"foreground": "#F3f3f3",
"separatorColor": "#F3f3f3"
},
"SidePanel": {
"background": "#FFFFFF"
"background": "#fafbfc"
},
"Slider": {
"background": "#F7F8FA",
@@ -630,7 +630,7 @@
"buttonColor": "#79CB60",
"foreground": "#5B6168",
"majorTickLength": 6,
"tickColor": "#F7F8FA",
"tickColor": "#F3f3f3",
"trackColor": "#cce5ff",
"trackWidth": 7,
"thumb": "#79CB60"
@@ -649,9 +649,9 @@
},
"SplitPane": {
"background": "#F7F8FA",
"highlight": "#FFFFFF"
"highlight": "#fafbfc"
},
"SplitPaneDivider.draggingColor": "#F7F8FA",
"SplitPaneDivider.draggingColor": "#F3f3f3",
"StatusBar": {
"borderColor": "#F7F8FA",
"hoverBackground": "#CCE5FF",
@@ -662,8 +662,8 @@
"contentAreaColor": "#CCE5FF",
"contentBorderInsets": "3,1,1,1",
"darkShadow": "#DFE1E4",
"disabledForeground": "#6C737C",
"disabledUnderlineColor": "#6C737C",
"disabledForeground": "#9ba0a3",
"disabledUnderlineColor": "#9ba0a3",
"focus": "#cce5ff",
"focusColor": "#cce5ff",
"fontSizeOffset": 0,
@@ -680,13 +680,13 @@
"tabSelectionHeight": 2,
"underlineColor": "#79CB60"
},
"TabbedPane.mt.tab.background": "#FFFFFF",
"TabbedPane.mt.tab.background": "#fafbfc",
"Table": {
"alternativeRowBackground": "#FFFFFF",
"alternativeRowBackground": "#fafbfc",
"background": "#F7F8FA",
"cellNoFocusBorder": "10,5,10,5",
"focusCellHighlightBorder": "10,5,10,5",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"dropLineColor": "#79CB60",
"dropLineShortColor": "#79CB60",
"focusCellBackground": "#cce5ff",
@@ -694,59 +694,59 @@
"foreground": "#5B6168",
"gridColor": "#F7F8FA",
"highlightOuter": "#cce5ff",
"hoverBackground": "#3A66D170",
"hoverBackground": "#3A66D1",
"hoverInactiveBackground": "#cce5ff",
"lightSelectionForeground": "#111111",
"lightSelectionInactiveForeground": "#292D31",
"lightSelectionInactiveBackground": "#F7F8FA",
"lightSelectionInactiveBackground": "#F3f3f3",
"selectionBackground": "#cce5ff",
"selectionForeground": "#111111",
"selectionInactiveBackground": "#cce5ff",
"selectionInactiveForeground": "#111111",
"selectionInactiveForeground": "#FFFFFF",
"sortIconColor": "#5B6168",
"stripeColor": "#FFFFFF"
"stripeColor": "#fafbfc"
},
"TableHeader": {
"background": "#F7F8FA",
"borderColor": "#F7F8FA",
"bottomSeparatorColor": "#F7F8FA",
"bottomSeparatorColor": "#F3f3f3",
"cellBorder": "4,0,4,0",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"foreground": "#5B6168",
"focusCellBackground": "#cce5ff",
"focusCellForeground": "#111111",
"height": 25,
"separatorColor": "#F7F8FA"
"separatorColor": "#F3f3f3"
},
"text": "#292D31",
"textInactiveText": "#292D31",
"textText": "#292D31",
"TextArea": {
"background": "#FFFFFF",
"background": "#fafbfc",
"caretForeground": "#79CB60",
"foreground": "#5B6168",
"inactiveForeground": "#6C737C",
"inactiveForeground": "#9ba0a3",
"selectionBackground": "#cce5ff",
"selectionForeground": "#111111"
},
"TextField": {
"background": "#FFFFFF",
"background": "#fafbfc",
"caretForeground": "#79CB60",
"foreground": "#5B6168",
"inactiveForeground": "#6C737C",
"inactiveForeground": "#9ba0a3",
"selectionBackground": "#cce5ff",
"selectionForeground": "#111111"
},
"TextPane": {
"background": "#FFFFFF",
"background": "#fafbfc",
"caretForeground": "#79CB60",
"foreground": "#5B6168",
"inactiveForeground": "#6C737C",
"inactiveForeground": "#9ba0a3",
"selectionBackground": "#cce5ff",
"selectionForeground": "#111111"
},
"TitlePane": {
"background": "#FFFFFF",
"background": "#fafbfc",
"Button.hoverBackground": "#CCE5FF",
"inactiveBackground": "#F7F8FA",
"infoForeground": "#292D31",
@@ -754,9 +754,9 @@
},
"TitledBorder.titleColor": "#5B6168",
"ToggleButton": {
"borderColor": "#F1F3F6",
"borderColor": "#edf1f5",
"buttonColor": "#5B6168",
"disabledText": "#6C737C",
"disabledText": "#9ba0a3",
"foreground": "#5B6168",
"offForeground": "#F7F8FA",
"offBackground": "#F7F8FA",
@@ -764,7 +764,7 @@
"onForeground": "#79CB60"
},
"ToolBar": {
"background": "#FFFFFF",
"background": "#fafbfc",
"borderHandleColor": "#292D31",
"floatingForeground": "#292D31",
"foreground": "#5B6168"
@@ -783,11 +783,11 @@
"Button": {
"hoverBackground": "#cce5ff",
"selectedForeground": "#111111",
"selectedBackground": "#FFFFFF"
"selectedBackground": "#fafbfc"
},
"Header": {
"background": "#F7F8FA",
"borderColor": "#F7F8FA",
"borderColor": "#F3f3f3",
"inactiveBackground": "#F7F8FA"
},
"HeaderCloseButton": {
@@ -798,34 +798,34 @@
"hoverBackground": "#CCE5FF",
"hoverInactiveBackground": "#CCE5FF",
"inactiveUnderlineColor": "#79CB60",
"selectedBackground": "#FFFFFF",
"selectedInactiveBackground": "#FFFFFF",
"selectedBackground": "#fafbfc",
"selectedInactiveBackground": "#fafbfc",
"underlineColor": "#79CB60",
"underlinedTabBackground": "#cce5ff",
"underlinedTabInactiveBackground": "#F7F8FA",
"underlinedTabForeground": "#111111",
"underlinedTabInactiveBackground": "#F3f3f3",
"underlinedTabForeground": "#FFFFFF",
"underlinedTabInactiveForeground": "#5B6168"
}
},
"Tree": {
"background": "#FFFFFF",
"background": "#fafbfc",
"foreground": "#292D31",
"hash": "#DFE1E4",
"hoverBackground": "#3A66D170",
"hoverBackground": "#3A66D1",
"hoverInactiveBackground": "#cce5ff",
"modifiedItemForeground": "#79CB60",
"rowHeight": 28,
"selectionBackground": "#3A66D170",
"selectionForeground": "#111111",
"selectionInactiveForeground": "#111111",
"selectionInactiveBackground": "#3A66D170",
"textBackground": "#FFFFFF"
"selectionBackground": "#3A66D1",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveBackground": "#3A66D1",
"textBackground": "#fafbfc"
},
"Tree.leftChildIndent": 10,
"Tree.rightChildIndent": 5,
"UIDesigner": {
"Activity.borderColor": "#DFE1E4",
"Canvas.background": "#FFFFFF",
"Canvas.background": "#fafbfc",
"ColorPicker": {
"background": "#F7F8FA",
"foreground": "#5B6168"
@@ -840,34 +840,34 @@
"borderColor": "#DFE1E4",
"hoverBorderColor": "#CCE5FF"
},
"Canvas.background": "#FFFFFF",
"Canvas.background": "#fafbfc",
"highStroke.foreground": "#5B6168",
"Label.foreground": "#292D31",
"List.selectionBackground": "#3A66D170",
"List.selectionBackground": "#3A66D1",
"motion": {
"borderColor": "#DFE1E4",
"Component.foreground": "#5B6168",
"ConstraintSetText.foreground": "#292D31",
"ConstraintSet.background": "#F7F8FA",
"CSPanel.SelectedFocusBackground": "#3A66D1",
"CSPanel.SelectedBackground": "#3A66D170",
"ConstraintSet.background": "#F3f3f3",
"CSPanel.SelectedFocusBackground": "#3A66D150",
"CSPanel.SelectedBackground": "#3A66D1",
"cs_FocusText.infoForeground": "#292D31",
"CursorTextColor.foreground": "#5B6168",
"HoverColor.disabledBackground": "#6C737C",
"HoverColor.disabledBackground": "#9ba0a3",
"motionGraph.background": "#F7F8FA",
"Notification.background": "#DFECFE",
"ourAvg.background": "#F7F8FA",
"ourCS.background": "#F7F8FA",
"ourAvg.background": "#F3f3f3",
"ourCS.background": "#F3f3f3",
"ourCS_Border.borderColor": "#DFE1E4",
"ourCS_TextColor.foreground": "#292D31",
"ourCS_SelectedFocusBackground.selectionForeground": "#111111",
"ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF",
"ourCS_SelectedBackground.selectionInactiveBackground": "#cce5ff",
"ourCS_SelectedBorder.pressedBorderColor": "#CCE5FF",
"ourML_BarColor.separatorColor": "#DFE1E4",
"PrimaryPanel.background": "#FFFFFF",
"PrimaryPanel.background": "#fafbfc",
"SecondaryPanel.background": "#F7F8FA",
"SecondaryPanel.header.foreground": "#292D31",
"SecondaryPanel.header.background": "#FFFFFF",
"SecondaryPanel.header.background": "#fafbfc",
"timeLine.disabledBorderColor": "#DFE1E4"
},
"Panel": {
@@ -879,7 +879,7 @@
"background": "#F7F8FA",
"borderColor": "#DFE1E4",
"foreground": "#5B6168",
"selectedForeground": "#111111"
"selectedForeground": "#FFFFFF"
},
"Preview.background": "#F7F8FA",
"stroke.acceleratorForeground": "#292D31"
@@ -906,7 +906,7 @@
"HgLog": {
"branchIconColor": "#79CB60",
"bookmarkIconColor": "#111111",
"closedBranchIconColor": "#6C737C",
"closedBranchIconColor": "#9ba0a3",
"localTagIconColor": "#292D31",
"mqTagIconColor": "#292D31",
"tagIconColor": "#292D31",
@@ -914,8 +914,8 @@
},
"Log": {
"Commit.unmatchedForeground": "#292D31",
"Commit.currentBranchBackground": "#F7F8FA",
"Commit.hoveredBackground": "#3A66D170"
"Commit.currentBranchBackground": "#F3f3f3",
"Commit.hoveredBackground": "#3A66D1"
},
"RefLabel": {
"foreground": "#111111",
@@ -923,46 +923,46 @@
}
},
"Viewport": {
"background": "#FFFFFF",
"background": "#fafbfc",
"foreground": "#5B6168"
},
"WelcomeScreen": {
"AssociatedComponent.background": "#F7F8FA",
"background": "#F7F8FA",
"borderColor": "#F7F8FA",
"captionBackground": "#FFFFFF",
"captionBackground": "#fafbfc",
"captionForeground": "#5B6168",
"Details.background": "#F7F8FA",
"footerBackground": "#FFFFFF",
"footerBackground": "#fafbfc",
"footerForeground": "#5B6168",
"headerBackground": "#F7F8FA",
"headerForeground": "#5B6168",
"List.background": "#FFFFFF",
"List.background": "#fafbfc",
"separatorColor": "#DFE1E4",
"SidePanel.background": "#F7F8FA",
"SidePanel.background": "#F3f3f3",
"Projects": {
"actions.background": "#FFFFFF",
"actions.background": "#fafbfc",
"actions.selectionBackground": "#CCE5FF",
"background": "#F7F8FA",
"selectionBackground": "#3A66D1",
"selectionInactiveBackground": "#F7F8FA"
"background": "#F3f3f3",
"selectionBackground": "#3A66D150",
"selectionInactiveBackground": "#F3f3f3"
}
},
"window": "#FFFFFF",
"window": "#fafbfc",
"windowBorder": "#DFE1E4",
"windowText": "#292D31",
"Window.border": "#DFE1E4"
},
"icons": {
"ColorPalette": {
"#43494A": "#FFFFFF",
"#43494A": "#fafbfc",
"#6B6B6B": "#292D31",
"#A7A7A7": "#F7F8FA",
"#3D6185": "#79CB60",
"#466D94": "#79CB60",
"#3C3F41": "#F7F8FA",
"#545556": "#6C737C",
"#606060": "#6C737C",
"#545556": "#9ba0a3",
"#606060": "#9ba0a3",
"#9AA7B0": "#5B6168",
"#675133": "#79CB60",
"Actions.Blue": "#6F42C1",
@@ -972,20 +972,20 @@
"Actions.GreyInline.Dark": "#5B6168",
"Actions.Red": "#22863A",
"Actions.Yellow": "#6F42C1",
"Checkbox.Background.Default": "#FFFFFF",
"Checkbox.Background.Default.Dark": "#FFFFFF",
"Checkbox.Background.Disabled": "#FDFDFD",
"Checkbox.Background.Disabled.Dark": "#FDFDFD",
"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": "#6C737C",
"Checkbox.Border.Disabled.Dark": "#6C737C",
"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": "#6C737C",
"Checkbox.Foreground.Disabled.Dark": "#6C737C",
"Checkbox.Foreground.Disabled": "#9ba0a3",
"Checkbox.Foreground.Disabled.Dark": "#9ba0a3",
"Checkbox.Background.Selected": "#79CB60",
"Checkbox.Background.Selected.Dark": "#F7F8FA",
"Checkbox.Border.Selected": "#79CB60",

View File

@@ -2,7 +2,7 @@
"name": "GitHub",
"dark": false,
"author": "Mallowigi",
"editorScheme": "/colors/GitHub (Material).xml",
"editorScheme": "/colors/GitHub.xml",
"emptyFrameBackground": {
"anchor": "center",
"image": "/walls/github.svg",
@@ -14,32 +14,32 @@
"acceleratorSelectionForeground": "#292D31",
"background": "#F7F8FA",
"borderColor": "#DFE1E4",
"disabledBackground": "#FDFDFD",
"disabledForeground": "#6C737C",
"disabledText": "#6C737C",
"disabledBackground": "#dcdcdc",
"disabledForeground": "#9ba0a3",
"disabledText": "#9ba0a3",
"focusColor": "#CCE5FF",
"focusedBorderColor": "#79CB60",
"foreground": "#5B6168",
"inactiveBackground": "#FDFDFD",
"inactiveBackground": "#dcdcdc",
"inactiveForeground": "#292D31",
"infoForeground": "#292D31",
"selectionBackground": "#3A66D1",
"selectionBackgroundInactive": "#F7F8FA",
"selectionForeground": "#111111",
"selectionInactiveBackground": "#F7F8FA",
"selectionBackground": "#3A66D150",
"selectionBackgroundInactive": "#F3f3f3",
"selectionForeground": "#FFFFFF",
"selectionInactiveBackground": "#F3f3f3",
"separatorColor": "#DFE1E4"
},
"activeCaption": "#F7F8FA",
"ActionButton": {
"hoverBackground": "#79CB6050",
"hoverBorderColor": "#79CB6050",
"hoverSeparatorColor": "#F1F3F6",
"hoverSeparatorColor": "#edf1f5",
"focusedBorderColor": "#79CB6050",
"pressedBackground": "#79CB6050",
"pressedBorderColor": "#79CB6050"
},
"Autocomplete": {
"selectionBackground": "#3A66D1"
"selectionBackground": "#3A66D150"
},
"Borders.ContrastBorderColor": "#F7F8FA",
"Borders.color": "#DFE1E4",
@@ -56,22 +56,22 @@
"startBackground": "#cce5ff",
"startBorderColor": "#cce5ff"
},
"disabledBorderColor": "#F1F3F6",
"disabledText": "#6C737C",
"endBackground": "#F1F3F6",
"endBorderColor": "#F1F3F6",
"disabledBorderColor": "#edf1f5",
"disabledText": "#9ba0a3",
"endBackground": "#edf1f5",
"endBorderColor": "#edf1f5",
"focus": "#CCE5FF",
"focusedBorderColor": "#79CB60",
"foreground": "#292D31",
"highlight": "#111111",
"mt.background": "#F1F3F6",
"highlight": "#FFFFFF",
"mt.background": "#edf1f5",
"mt.foreground": "#292D31",
"mt.selectedForeground": "#111111",
"mt.selectedForeground": "#FFFFFF",
"mt.selection.color1": "#cce5ff",
"mt.selection.color2": "#cce5ff",
"startBackground": "#F1F3F6",
"startBorderColor": "#F1F3F6",
"shadowColor": "#F1F3F6",
"startBackground": "#edf1f5",
"startBorderColor": "#edf1f5",
"shadowColor": "#edf1f5",
"shadowWidth": 0
},
"Canvas": {
@@ -79,12 +79,12 @@
"Tooltip.background": "#DFECFE"
},
"Content": {
"background": "#FFFFFF",
"selectionBackground": "#3A66D1"
"background": "#fafbfc",
"selectionBackground": "#3A66D150"
},
"CheckBox": {
"background": "#F7F8FA",
"disabledText": "#6C737C",
"disabledText": "#9ba0a3",
"foreground": "#5B6168",
"select": "#79CB60"
},
@@ -93,16 +93,16 @@
"acceleratorSelectionForeground": "#292D31",
"background": "#F7F8FA",
"disabledBackground": "#F7F8FA",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"foreground": "#5B6168",
"selectionBackground": "#3A66D1",
"selectionBackground": "#3A66D150",
"selectionForeground": "#111111"
},
"CodeWithMe": {
"Avatar.foreground": "#5B6168",
"AccessEnabled": {
"accessDot": "#79CB60",
"dropdownBorder": "#F7F8FA",
"dropdownBorder": "#F3f3f3",
"pillBackground": "$second"
}
},
@@ -111,45 +111,45 @@
"foreground": "#5B6168",
"swatchesDefaultRecentColor": "#5B6168"
},
"ComboBoxButton.background": "#F1F3F6",
"ComboBoxButton.background": "#edf1f5",
"ComboBox": {
"ArrowButton": {
"background": "#F1F3F6",
"disabledIconColor": "#6C737C",
"background": "#edf1f5",
"disabledIconColor": "#9ba0a3",
"iconColor": "#5B6168",
"nonEditableBackground": "#F7F8FA"
},
"background": "#F7F8FA",
"buttonBackground": "#F1F3F6",
"buttonBackground": "#edf1f5",
"darcula.hoveredArrowButtonForeground": "#79CB60",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"foreground": "#5B6168",
"modifiedItemForeground": "#79CB60",
"nonEditableBackground": "#F7F8FA",
"nonEditableBackground": "#F3f3f3",
"padding": "5,5,5,5",
"selectionBackground": "#cce5ff",
"selectionForeground": "#111111"
},
"ComboPopup.border": "#DFE1E4",
"CompletionPopup": {
"background": "#F7F8FA",
"background": "#F3f3f3",
"foreground": "#5B6168",
"infoForeground": "#292D31",
"matchForeground": "#79CB60",
"matchSelectionForeground": "#79CB60",
"nonFocusedState": "false",
"selectedGrayedForeground": "#111111",
"selectionGrayForeground": "#111111",
"selectedGrayedForeground": "#FFFFFF",
"selectionGrayForeground": "#FFFFFF",
"selectionInactiveInfoForeground": "#292D31",
"selectionInactiveBackground": "#3A66D150",
"selectionBackground": "#3A66D180",
"selectionForeground": "#111111",
"selectionInfoForeground": "#111111"
"selectionBackground": "#3A66D150",
"selectionForeground": "#FFFFFF",
"selectionInfoForeground": "#FFFFFF"
},
"Component": {
"arc": 4,
"borderColor": "#CCE5FF",
"disabledBorderColor": "#F1F3F6",
"disabledBorderColor": "#edf1f5",
"focusColor": "#79CB60",
"focusedBorderColor": "#79CB60",
"hoverIconColor": "#79CB60",
@@ -160,7 +160,7 @@
"controlText": "#292D31",
"Counter": {
"background": "#79CB60",
"foreground": "#111111"
"foreground": "#FFFFFF"
},
"Debugger": {
"Variables": {
@@ -187,12 +187,12 @@
"hoverColor": "#F7F8FA",
"hoverMaskColor": "#CCE5FF",
"inactiveColoredTabBackground": "#F7F8FA",
"inactiveColoredFileBackground": "#F1F3F6",
"inactiveColoredFileBackground": "#edf1f5",
"inactiveUnderlineColor": "#79CB60",
"inactiveMaskColor": "#F7F8FA",
"underlineColor": "#79CB60",
"underlinedTabBackground": "#cce5ff",
"underlinedTabForeground": "#111111"
"underlinedTabForeground": "#FFFFFF"
},
"Desktop.background": "#F7F8FA",
"DialogWrapper.southPanelBackground": "#F7F8FA",
@@ -212,27 +212,27 @@
"caretForeground": "#79CB60",
"foreground": "#5B6168",
"inactiveBackground": "#F7F8FA",
"inactiveForeground": "#6C737C",
"selectionBackground": "#3A66D1",
"inactiveForeground": "#9ba0a3",
"selectionBackground": "#3A66D150",
"selectionForeground": "#111111"
},
"EditorTabs": {
"borderColor": "#F7F8FA",
"borderColor": "#F3f3f3",
"hoverBackground": "#CCE5FF",
"hoverColor": "#CCE5FF",
"hoverMaskColor": "#CCE5FF",
"inactiveMaskColor": "#F7F8FA",
"inactiveColoredFileBackground": "#F7F8FA",
"inactiveUnderlineColor": "#6C737C",
"inactiveUnderlineColor": "#9ba0a3",
"selectedForeground": "#5B6168",
"selectedBackground": "#cce5ff",
"underlineColor": "#79CB60",
"underlinedTabBackground": "#cce5ff",
"underlinedTabForeground": "#111111"
"underlinedTabForeground": "#FFFFFF"
},
"EditorGroupsTabs": {
"background": "#F7F8FA",
"borderColor": "#F7F8FA",
"borderColor": "#F3f3f3",
"hoverBackground": "#CCE5FF",
"hoverColor": "#CCE5FF",
"inactiveUnderlineColor": "#79CB60",
@@ -243,7 +243,7 @@
"FileColor": {
"Green": "#387002",
"Blue": "#004BA0",
"Yellow": "#FDFDFD",
"Yellow": "#dcdcdc",
"Orange": "#B53D00",
"Violet": "#4D2C91",
"Rose": "#A00037"
@@ -263,8 +263,8 @@
"background": "#F7F8FA",
"caretForeground": "#79CB60",
"foreground": "#5B6168",
"inactiveBackground": "#F1F3F6",
"inactiveForeground": "#6C737C",
"inactiveBackground": "#edf1f5",
"inactiveForeground": "#9ba0a3",
"selectionForeground": "#111111",
"selectionBackground": "#cce5ff"
},
@@ -279,7 +279,7 @@
},
"HeaderColor": {
"active": "#F7F8FA",
"inactive": "#FFFFFF"
"inactive": "#fafbfc"
},
"HelpTooltip": {
"background": "#F7F8FA",
@@ -289,7 +289,7 @@
"shortcutForeground": "#292D31"
},
"Hyperlink.linkColor": "#79CB60",
"inactiveCaption": "#F7F8FA",
"inactiveCaption": "#F3f3f3",
"inactiveCaptionBorder": "#F7F8FA",
"inactiveCaptionText": "#292D31",
"info": "#292D31",
@@ -306,9 +306,9 @@
},
"Label": {
"background": "#F7F8FA",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"disabledShadow": "#F7F8FA",
"disabledText": "#6C737C",
"disabledText": "#9ba0a3",
"foreground": "#5B6168",
"infoForeground": "#292D31",
"selectedForeground": "#111111",
@@ -323,66 +323,66 @@
},
"link.foreground": "#79CB60",
"List": {
"background": "#F7F8FA",
"background": "#F3f3f3",
"foreground": "#5B6168",
"hoverBackground": "#3A66D170",
"hoverBackground": "#3A66D1",
"hoverInactiveBackground": "#cce5ff",
"selectionBackground": "#3A66D150",
"selectionForeground": "#111111",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#111111",
"selectionInactiveBackground": "#3A66D170"
"selectionInactiveBackground": "#3A66D1"
},
"material": {
"background": "#F7F8FA",
"branchColor": "#5B6168",
"contrast": "#FFFFFF",
"contrast": "#fafbfc",
"foreground": "#5B6168",
"mergeCommits": "#F1F3F6",
"mergeCommits": "#edf1f5",
"primaryColor": "#292D31",
"selectionForeground": "#111111",
"selectionForeground": "#FFFFFF",
"tab.backgroundColor": "#F7F8FA",
"tab.borderColor": "#79CB60",
"tagColor": "#292D31"
},
"MemoryIndicator": {
"allocatedBackground": "#F7F8FA",
"allocatedBackground": "#F3f3f3",
"usedColor": "#CCE5FF",
"usedBackground": "#CCE5FF"
},
"Menu": {
"acceleratorForeground": "#292D31",
"acceleratorSelectionForeground": "#111111",
"acceleratorSelectionForeground": "#FFFFFF",
"background": "#F7F8FA",
"border": "4,2,4,2",
"borderColor": "#F7F8FA",
"disabledBackground": "#F7F8FA",
"disabledForeground": "#6C737C",
"borderColor": "#F3f3f3",
"disabledBackground": "#F3f3f3",
"disabledForeground": "#9ba0a3",
"foreground": "#5B6168",
"selectionBackground": "#3A66D1",
"selectionForeground": "#111111",
"selectionBackground": "#3A66D150",
"selectionForeground": "#FFFFFF",
"separatorColor": "#DFE1E4"
},
"MenuBar": {
"background": "#F7F8FA",
"borderColor": "#F7F8FA",
"disabledBackground": "#F7F8FA",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"foreground": "#5B6168",
"highlight": "#F7F8FA",
"selectionBackground": "#3A66D1",
"selectionForeground": "#111111",
"selectionBackground": "#3A66D150",
"selectionForeground": "#FFFFFF",
"shadow": "#F7F8FA"
},
"MenuItem": {
"acceleratorForeground": "#292D31",
"acceleratorSelectionForeground": "#111111",
"acceleratorSelectionForeground": "#FFFFFF",
"border": "4,2,4,2",
"background": "#F7F8FA",
"disabledBackground": "#F7F8FA",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"foreground": "#5B6168",
"selectionBackground": "#3A66D1",
"selectionForeground": "#111111"
"selectionBackground": "#3A66D150",
"selectionForeground": "#FFFFFF"
},
"NavBar": {
"arrowColor": "#5B6168",
@@ -404,9 +404,9 @@
"errorBorderColor": "#DFECFE",
"foreground": "#5B6168",
"MoreButton": {
"background": "#F1F3F6",
"background": "#edf1f5",
"foreground": "#5B6168",
"innerBorderColor": "#F1F3F6"
"innerBorderColor": "#edf1f5"
},
"ToolWindow": {
"errorBackground": "#DFECFE",
@@ -424,20 +424,20 @@
"messageForeground": "#5B6168"
},
"Outline": {
"color": "#F1F3F6",
"color": "#edf1f5",
"focusedColor": "#79CB60",
"disabledColor": "#6C737C"
"disabledColor": "#9ba0a3"
},
"Panel": {
"background": "#F7F8FA",
"foreground": "#5B6168"
},
"ParameterInfo": {
"background": "#F7F8FA",
"background": "#F3f3f3",
"borderColor": "#cce5ff",
"currentOverloadBackground": "#CCE5FF",
"currentParameterForeground": "#79CB60",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"foreground": "#5B6168",
"infoForeground": "#292D31",
"lineSeparatorColor": "#cce5ff"
@@ -447,30 +447,30 @@
"capsLockIconColor": "#79CB60",
"caretForeground": "#79CB60",
"foreground": "#5B6168",
"inactiveForeground": "#6C737C",
"inactiveForeground": "#9ba0a3",
"selectionBackground": "#cce5ff",
"selectionForeground": "#111111"
},
"Plugins": {
"background": "#F7F8FA",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"eapTagBackground": "#CCE5FF",
"hoverBackground": "#3A66D170",
"hoverBackground": "#3A66D1",
"lightSelectionBackground": "#cce5ff",
"paidTagBackground": "#CCE5FF",
"selectionBackground": "#3A66D1",
"selectionBackground": "#3A66D150",
"tagForeground": "#79CB60",
"tagBackground": "#CCE5FF",
"trialTagBackground": "#CCE5FF",
"Button": {
"installBackground": "#F1F3F6",
"installBorderColor": "#F1F3F6",
"installBackground": "#edf1f5",
"installBorderColor": "#edf1f5",
"installForeground": "#5B6168",
"installFocusedBackground": "#CCE5FF",
"installFillForeground": "#6C737C",
"installFillBackground": "#F1F3F6",
"installFillForeground": "#9ba0a3",
"installFillBackground": "#edf1f5",
"updateBackground": "#79CB60",
"updateBorderColor": "#F1F3F6",
"updateBorderColor": "#edf1f5",
"updateForeground": "#5B6168"
},
"SearchField": {
@@ -478,12 +478,12 @@
"borderColor": "#DFE1E4"
},
"SectionHeader": {
"background": "#F7F8FA",
"background": "#F3f3f3",
"foreground": "#5B6168"
},
"Tab": {
"hoverBackground": "#cce5ff",
"selectedForeground": "#111111",
"selectedForeground": "#FFFFFF",
"selectedBackground": "#cce5ff"
}
},
@@ -493,20 +493,20 @@
"borderColor": "#F7F8FA",
"foreground": "#79CB60"
},
"borderColor": "#FFFFFF",
"borderColor": "#fafbfc",
"inactiveBorderColor": "#F7F8FA",
"innerBorderColor": "#F7F8FA",
"innerBorderColor": "#F3f3f3",
"Header": {
"activeBackground": "#F7F8FA",
"inactiveBackground": "#FFFFFF"
"inactiveBackground": "#fafbfc"
},
"paintBorder": true,
"separatorForeground": "#5B6168",
"separatorColor": "#F7F8FA",
"separatorColor": "#F3f3f3",
"Toolbar": {
"Floating.background": "#FFFFFF",
"background": "#FFFFFF",
"borderColor": "#FFFFFF"
"Floating.background": "#fafbfc",
"background": "#fafbfc",
"borderColor": "#fafbfc"
}
},
"PopupMenu": {
@@ -531,7 +531,7 @@
},
"RadioButton": {
"background": "#F7F8FA",
"disabledText": "#6C737C",
"disabledText": "#9ba0a3",
"foreground": "#5B6168"
},
"RadioButtonMenuItem": {
@@ -539,10 +539,10 @@
"acceleratorSelectionForeground": "#292D31",
"background": "#F7F8FA",
"disabledBackground": "#F7F8FA",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"foreground": "#5B6168",
"selectionBackground": "#3A66D1",
"selectionForeground": "#111111"
"selectionBackground": "#3A66D150",
"selectionForeground": "#FFFFFF"
},
"ScreenView.borderColor": "#DFE1E4",
"ScrollBar": {
@@ -581,7 +581,7 @@
},
"SearchEverywhere": {
"Advertiser": {
"background": "#FFFFFF",
"background": "#fafbfc",
"foreground": "#292D31"
},
"Header": {
@@ -593,7 +593,7 @@
},
"SearchField": {
"background": "#F7F8FA",
"borderColor": "#FFFFFF",
"borderColor": "#fafbfc",
"infoForeground": "#292D31"
},
"Tab": {
@@ -617,9 +617,9 @@
"Repeated.File.Foreground": "#5B6168"
},
"Separator": {
"background": "#F7F8FA",
"foreground": "#F7F8FA",
"separatorColor": "#F7F8FA"
"background": "#F3f3f3",
"foreground": "#F3f3f3",
"separatorColor": "#F3f3f3"
},
"SidePanel": {
"background": "#F7F8FA"
@@ -630,7 +630,7 @@
"buttonColor": "#79CB60",
"foreground": "#5B6168",
"majorTickLength": 6,
"tickColor": "#F7F8FA",
"tickColor": "#F3f3f3",
"trackColor": "#cce5ff",
"trackWidth": 7,
"thumb": "#79CB60"
@@ -651,7 +651,7 @@
"background": "#F7F8FA",
"highlight": "#F7F8FA"
},
"SplitPaneDivider.draggingColor": "#F7F8FA",
"SplitPaneDivider.draggingColor": "#F3f3f3",
"StatusBar": {
"borderColor": "#F7F8FA",
"hoverBackground": "#CCE5FF",
@@ -662,8 +662,8 @@
"contentAreaColor": "#CCE5FF",
"contentBorderInsets": "3,1,1,1",
"darkShadow": "#DFE1E4",
"disabledForeground": "#6C737C",
"disabledUnderlineColor": "#6C737C",
"disabledForeground": "#9ba0a3",
"disabledUnderlineColor": "#9ba0a3",
"focus": "#cce5ff",
"focusColor": "#cce5ff",
"fontSizeOffset": 0,
@@ -682,11 +682,11 @@
},
"TabbedPane.mt.tab.background": "#F7F8FA",
"Table": {
"alternativeRowBackground": "#FFFFFF",
"alternativeRowBackground": "#fafbfc",
"background": "#F7F8FA",
"cellNoFocusBorder": "10,5,10,5",
"focusCellHighlightBorder": "10,5,10,5",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"dropLineColor": "#79CB60",
"dropLineShortColor": "#79CB60",
"focusCellBackground": "#cce5ff",
@@ -694,29 +694,29 @@
"foreground": "#5B6168",
"gridColor": "#F7F8FA",
"highlightOuter": "#cce5ff",
"hoverBackground": "#3A66D170",
"hoverBackground": "#3A66D1",
"hoverInactiveBackground": "#cce5ff",
"lightSelectionForeground": "#111111",
"lightSelectionInactiveForeground": "#292D31",
"lightSelectionInactiveBackground": "#F7F8FA",
"lightSelectionInactiveBackground": "#F3f3f3",
"selectionBackground": "#cce5ff",
"selectionForeground": "#111111",
"selectionInactiveBackground": "#cce5ff",
"selectionInactiveForeground": "#111111",
"selectionInactiveForeground": "#FFFFFF",
"sortIconColor": "#5B6168",
"stripeColor": "#FFFFFF"
"stripeColor": "#fafbfc"
},
"TableHeader": {
"background": "#F7F8FA",
"borderColor": "#F7F8FA",
"bottomSeparatorColor": "#F7F8FA",
"bottomSeparatorColor": "#F3f3f3",
"cellBorder": "4,0,4,0",
"disabledForeground": "#6C737C",
"disabledForeground": "#9ba0a3",
"foreground": "#5B6168",
"focusCellBackground": "#cce5ff",
"focusCellForeground": "#111111",
"height": 25,
"separatorColor": "#F7F8FA"
"separatorColor": "#F3f3f3"
},
"text": "#292D31",
"textInactiveText": "#292D31",
@@ -725,7 +725,7 @@
"background": "#F7F8FA",
"caretForeground": "#79CB60",
"foreground": "#5B6168",
"inactiveForeground": "#6C737C",
"inactiveForeground": "#9ba0a3",
"selectionBackground": "#cce5ff",
"selectionForeground": "#111111"
},
@@ -733,7 +733,7 @@
"background": "#F7F8FA",
"caretForeground": "#79CB60",
"foreground": "#5B6168",
"inactiveForeground": "#6C737C",
"inactiveForeground": "#9ba0a3",
"selectionBackground": "#cce5ff",
"selectionForeground": "#111111"
},
@@ -741,12 +741,12 @@
"background": "#F7F8FA",
"caretForeground": "#79CB60",
"foreground": "#5B6168",
"inactiveForeground": "#6C737C",
"inactiveForeground": "#9ba0a3",
"selectionBackground": "#cce5ff",
"selectionForeground": "#111111"
},
"TitlePane": {
"background": "#FFFFFF",
"background": "#fafbfc",
"Button.hoverBackground": "#CCE5FF",
"inactiveBackground": "#F7F8FA",
"infoForeground": "#292D31",
@@ -754,9 +754,9 @@
},
"TitledBorder.titleColor": "#5B6168",
"ToggleButton": {
"borderColor": "#F1F3F6",
"borderColor": "#edf1f5",
"buttonColor": "#5B6168",
"disabledText": "#6C737C",
"disabledText": "#9ba0a3",
"foreground": "#5B6168",
"offForeground": "#F7F8FA",
"offBackground": "#F7F8FA",
@@ -783,11 +783,11 @@
"Button": {
"hoverBackground": "#cce5ff",
"selectedForeground": "#111111",
"selectedBackground": "#FFFFFF"
"selectedBackground": "#fafbfc"
},
"Header": {
"background": "#F7F8FA",
"borderColor": "#F7F8FA",
"borderColor": "#F3f3f3",
"inactiveBackground": "#F7F8FA"
},
"HeaderCloseButton": {
@@ -798,12 +798,12 @@
"hoverBackground": "#CCE5FF",
"hoverInactiveBackground": "#CCE5FF",
"inactiveUnderlineColor": "#79CB60",
"selectedBackground": "#FFFFFF",
"selectedInactiveBackground": "#FFFFFF",
"selectedBackground": "#fafbfc",
"selectedInactiveBackground": "#fafbfc",
"underlineColor": "#79CB60",
"underlinedTabBackground": "#cce5ff",
"underlinedTabInactiveBackground": "#F7F8FA",
"underlinedTabForeground": "#111111",
"underlinedTabInactiveBackground": "#F3f3f3",
"underlinedTabForeground": "#FFFFFF",
"underlinedTabInactiveForeground": "#5B6168"
}
},
@@ -811,21 +811,21 @@
"background": "#F7F8FA",
"foreground": "#292D31",
"hash": "#DFE1E4",
"hoverBackground": "#3A66D170",
"hoverBackground": "#3A66D1",
"hoverInactiveBackground": "#cce5ff",
"modifiedItemForeground": "#79CB60",
"rowHeight": 28,
"selectionBackground": "#3A66D170",
"selectionForeground": "#111111",
"selectionInactiveForeground": "#111111",
"selectionInactiveBackground": "#3A66D170",
"selectionBackground": "#3A66D1",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveBackground": "#3A66D1",
"textBackground": "#F7F8FA"
},
"Tree.leftChildIndent": 10,
"Tree.rightChildIndent": 5,
"UIDesigner": {
"Activity.borderColor": "#DFE1E4",
"Canvas.background": "#FFFFFF",
"Canvas.background": "#fafbfc",
"ColorPicker": {
"background": "#F7F8FA",
"foreground": "#5B6168"
@@ -840,34 +840,34 @@
"borderColor": "#DFE1E4",
"hoverBorderColor": "#CCE5FF"
},
"Canvas.background": "#FFFFFF",
"Canvas.background": "#fafbfc",
"highStroke.foreground": "#5B6168",
"Label.foreground": "#292D31",
"List.selectionBackground": "#3A66D170",
"List.selectionBackground": "#3A66D1",
"motion": {
"borderColor": "#DFE1E4",
"Component.foreground": "#5B6168",
"ConstraintSetText.foreground": "#292D31",
"ConstraintSet.background": "#F7F8FA",
"CSPanel.SelectedFocusBackground": "#3A66D1",
"CSPanel.SelectedBackground": "#3A66D170",
"ConstraintSet.background": "#F3f3f3",
"CSPanel.SelectedFocusBackground": "#3A66D150",
"CSPanel.SelectedBackground": "#3A66D1",
"cs_FocusText.infoForeground": "#292D31",
"CursorTextColor.foreground": "#5B6168",
"HoverColor.disabledBackground": "#6C737C",
"HoverColor.disabledBackground": "#9ba0a3",
"motionGraph.background": "#F7F8FA",
"Notification.background": "#DFECFE",
"ourAvg.background": "#F7F8FA",
"ourCS.background": "#F7F8FA",
"ourAvg.background": "#F3f3f3",
"ourCS.background": "#F3f3f3",
"ourCS_Border.borderColor": "#DFE1E4",
"ourCS_TextColor.foreground": "#292D31",
"ourCS_SelectedFocusBackground.selectionForeground": "#111111",
"ourCS_SelectedFocusBackground.selectionForeground": "#FFFFFF",
"ourCS_SelectedBackground.selectionInactiveBackground": "#cce5ff",
"ourCS_SelectedBorder.pressedBorderColor": "#CCE5FF",
"ourML_BarColor.separatorColor": "#DFE1E4",
"PrimaryPanel.background": "#FFFFFF",
"PrimaryPanel.background": "#fafbfc",
"SecondaryPanel.background": "#F7F8FA",
"SecondaryPanel.header.foreground": "#292D31",
"SecondaryPanel.header.background": "#FFFFFF",
"SecondaryPanel.header.background": "#fafbfc",
"timeLine.disabledBorderColor": "#DFE1E4"
},
"Panel": {
@@ -879,7 +879,7 @@
"background": "#F7F8FA",
"borderColor": "#DFE1E4",
"foreground": "#5B6168",
"selectedForeground": "#111111"
"selectedForeground": "#FFFFFF"
},
"Preview.background": "#F7F8FA",
"stroke.acceleratorForeground": "#292D31"
@@ -906,7 +906,7 @@
"HgLog": {
"branchIconColor": "#79CB60",
"bookmarkIconColor": "#111111",
"closedBranchIconColor": "#6C737C",
"closedBranchIconColor": "#9ba0a3",
"localTagIconColor": "#292D31",
"mqTagIconColor": "#292D31",
"tagIconColor": "#292D31",
@@ -914,8 +914,8 @@
},
"Log": {
"Commit.unmatchedForeground": "#292D31",
"Commit.currentBranchBackground": "#F7F8FA",
"Commit.hoveredBackground": "#3A66D170"
"Commit.currentBranchBackground": "#F3f3f3",
"Commit.hoveredBackground": "#3A66D1"
},
"RefLabel": {
"foreground": "#111111",
@@ -930,22 +930,22 @@
"AssociatedComponent.background": "#F7F8FA",
"background": "#F7F8FA",
"borderColor": "#F7F8FA",
"captionBackground": "#FFFFFF",
"captionBackground": "#fafbfc",
"captionForeground": "#5B6168",
"Details.background": "#F7F8FA",
"footerBackground": "#FFFFFF",
"footerBackground": "#fafbfc",
"footerForeground": "#5B6168",
"headerBackground": "#F7F8FA",
"headerForeground": "#5B6168",
"List.background": "#FFFFFF",
"List.background": "#fafbfc",
"separatorColor": "#DFE1E4",
"SidePanel.background": "#F7F8FA",
"SidePanel.background": "#F3f3f3",
"Projects": {
"actions.background": "#FFFFFF",
"actions.background": "#fafbfc",
"actions.selectionBackground": "#CCE5FF",
"background": "#F7F8FA",
"selectionBackground": "#3A66D1",
"selectionInactiveBackground": "#F7F8FA"
"background": "#F3f3f3",
"selectionBackground": "#3A66D150",
"selectionInactiveBackground": "#F3f3f3"
}
},
"window": "#F7F8FA",
@@ -955,14 +955,14 @@
},
"icons": {
"ColorPalette": {
"#43494A": "#FFFFFF",
"#43494A": "#fafbfc",
"#6B6B6B": "#292D31",
"#A7A7A7": "#F7F8FA",
"#3D6185": "#79CB60",
"#466D94": "#79CB60",
"#3C3F41": "#F7F8FA",
"#545556": "#6C737C",
"#606060": "#6C737C",
"#545556": "#9ba0a3",
"#606060": "#9ba0a3",
"#9AA7B0": "#5B6168",
"#675133": "#79CB60",
"Actions.Blue": "#6F42C1",
@@ -972,20 +972,20 @@
"Actions.GreyInline.Dark": "#5B6168",
"Actions.Red": "#22863A",
"Actions.Yellow": "#6F42C1",
"Checkbox.Background.Default": "#FFFFFF",
"Checkbox.Background.Default.Dark": "#FFFFFF",
"Checkbox.Background.Disabled": "#FDFDFD",
"Checkbox.Background.Disabled.Dark": "#FDFDFD",
"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": "#6C737C",
"Checkbox.Border.Disabled.Dark": "#6C737C",
"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": "#6C737C",
"Checkbox.Foreground.Disabled.Dark": "#6C737C",
"Checkbox.Foreground.Disabled": "#9ba0a3",
"Checkbox.Foreground.Disabled.Dark": "#9ba0a3",
"Checkbox.Background.Selected": "#79CB60",
"Checkbox.Background.Selected.Dark": "#F7F8FA",
"Checkbox.Border.Selected": "#79CB60",

View File

@@ -23,7 +23,7 @@
"inactiveBackground": "#323232",
"inactiveForeground": "#727272",
"infoForeground": "#727272",
"selectionBackground": "#353535",
"selectionBackground": "#404040",
"selectionBackgroundInactive": "#292929",
"selectionForeground": "#FFFFFF",
"selectionInactiveBackground": "#292929",
@@ -39,7 +39,7 @@
"pressedBorderColor": "#FF980050"
},
"Autocomplete": {
"selectionBackground": "#353535"
"selectionBackground": "#404040"
},
"Borders.ContrastBorderColor": "#212121",
"Borders.color": "#292929",
@@ -80,7 +80,7 @@
},
"Content": {
"background": "#1A1A1A",
"selectionBackground": "#353535"
"selectionBackground": "#404040"
},
"CheckBox": {
"background": "#212121",
@@ -95,7 +95,7 @@
"disabledBackground": "#212121",
"disabledForeground": "#474747",
"foreground": "#B0BEC5",
"selectionBackground": "#353535",
"selectionBackground": "#404040",
"selectionForeground": "#FFFFFF"
},
"CodeWithMe": {
@@ -141,8 +141,8 @@
"selectedGrayedForeground": "#FFFFFF",
"selectionGrayForeground": "#FFFFFF",
"selectionInactiveInfoForeground": "#727272",
"selectionInactiveBackground": "#35353550",
"selectionBackground": "#35353580",
"selectionInactiveBackground": "#404040",
"selectionBackground": "#404040",
"selectionForeground": "#FFFFFF",
"selectionInfoForeground": "#FFFFFF"
},
@@ -213,7 +213,7 @@
"foreground": "#B0BEC5",
"inactiveBackground": "#212121",
"inactiveForeground": "#474747",
"selectionBackground": "#353535",
"selectionBackground": "#404040",
"selectionForeground": "#FFFFFF"
},
"EditorTabs": {
@@ -325,12 +325,12 @@
"List": {
"background": "#292929",
"foreground": "#B0BEC5",
"hoverBackground": "#32323270",
"hoverBackground": "#323232C0",
"hoverInactiveBackground": "#323232",
"selectionBackground": "#35353550",
"selectionBackground": "#404040",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveBackground": "#32323270"
"selectionInactiveBackground": "#323232C0"
},
"material": {
"background": "#212121",
@@ -358,7 +358,7 @@
"disabledBackground": "#292929",
"disabledForeground": "#474747",
"foreground": "#B0BEC5",
"selectionBackground": "#353535",
"selectionBackground": "#404040",
"selectionForeground": "#FFFFFF",
"separatorColor": "#292929"
},
@@ -369,7 +369,7 @@
"disabledForeground": "#474747",
"foreground": "#B0BEC5",
"highlight": "#212121",
"selectionBackground": "#353535",
"selectionBackground": "#404040",
"selectionForeground": "#FFFFFF",
"shadow": "#1A1A1A"
},
@@ -381,7 +381,7 @@
"disabledBackground": "#212121",
"disabledForeground": "#474747",
"foreground": "#B0BEC5",
"selectionBackground": "#353535",
"selectionBackground": "#404040",
"selectionForeground": "#FFFFFF"
},
"NavBar": {
@@ -455,10 +455,10 @@
"background": "#212121",
"disabledForeground": "#474747",
"eapTagBackground": "#3F3F3F",
"hoverBackground": "#32323270",
"hoverBackground": "#323232C0",
"lightSelectionBackground": "#323232",
"paidTagBackground": "#3F3F3F",
"selectionBackground": "#353535",
"selectionBackground": "#404040",
"tagForeground": "#FF9800",
"tagBackground": "#3F3F3F",
"trialTagBackground": "#3F3F3F",
@@ -541,7 +541,7 @@
"disabledBackground": "#212121",
"disabledForeground": "#474747",
"foreground": "#B0BEC5",
"selectionBackground": "#353535",
"selectionBackground": "#404040",
"selectionForeground": "#FFFFFF"
},
"ScreenView.borderColor": "#292929",
@@ -694,7 +694,7 @@
"foreground": "#B0BEC5",
"gridColor": "#212121",
"highlightOuter": "#323232",
"hoverBackground": "#32323270",
"hoverBackground": "#323232C0",
"hoverInactiveBackground": "#323232",
"lightSelectionForeground": "#FFFFFF",
"lightSelectionInactiveForeground": "#727272",
@@ -811,14 +811,14 @@
"background": "#1A1A1A",
"foreground": "#727272",
"hash": "#292929",
"hoverBackground": "#32323270",
"hoverBackground": "#323232C0",
"hoverInactiveBackground": "#323232",
"modifiedItemForeground": "#FF9800",
"rowHeight": 28,
"selectionBackground": "#32323270",
"selectionBackground": "#323232C0",
"selectionForeground": "#FFFFFF",
"selectionInactiveForeground": "#FFFFFF",
"selectionInactiveBackground": "#32323270",
"selectionInactiveBackground": "#323232C0",
"textBackground": "#1A1A1A"
},
"Tree.leftChildIndent": 10,
@@ -843,14 +843,14 @@
"Canvas.background": "#1A1A1A",
"highStroke.foreground": "#B0BEC5",
"Label.foreground": "#727272",
"List.selectionBackground": "#32323270",
"List.selectionBackground": "#323232C0",
"motion": {
"borderColor": "#292929",
"Component.foreground": "#B0BEC5",
"ConstraintSetText.foreground": "#727272",
"ConstraintSet.background": "#292929",
"CSPanel.SelectedFocusBackground": "#353535",
"CSPanel.SelectedBackground": "#32323270",
"CSPanel.SelectedFocusBackground": "#404040",
"CSPanel.SelectedBackground": "#323232C0",
"cs_FocusText.infoForeground": "#727272",
"CursorTextColor.foreground": "#B0BEC5",
"HoverColor.disabledBackground": "#474747",
@@ -915,7 +915,7 @@
"Log": {
"Commit.unmatchedForeground": "#727272",
"Commit.currentBranchBackground": "#292929",
"Commit.hoveredBackground": "#32323270"
"Commit.hoveredBackground": "#323232C0"
},
"RefLabel": {
"foreground": "#FFFFFF",
@@ -944,7 +944,7 @@
"actions.background": "#1A1A1A",
"actions.selectionBackground": "#3F3F3F",
"background": "#292929",
"selectionBackground": "#353535",
"selectionBackground": "#404040",
"selectionInactiveBackground": "#292929"
}
},

Some files were not shown because too many files have changed in this diff Show More