From 74701b586597711cca0aa0146f185bc0ffe90a7b Mon Sep 17 00:00:00 2001 From: weisj Date: Wed, 16 Oct 2019 23:14:40 +0200 Subject: [PATCH] added darcula licence notice. Reversed cache class (instead values are cached in the ui classes). Added the possibility to access ui defaults ui class constructors by resolving them after the defaults have been loaded. Added popup menu to move tabs in tabFrame. Fixed an issue where a popup would loose the focus painting when popup menus were opened or the popup was resized. --- licence/DARCULA_LICENCE.txt | 201 ++ src/jniplatform/cpp/JNIDecorations.cpp | 23 +- src/main/java/com/weis/darklaf/DarkLaf.java | 23 +- .../components/DefaultColorPipette.java | 5 +- .../weis/darklaf/components/JXPopupMenu.java | 69 + .../components/border/MutableLineBorder.java | 9 +- .../darklaf/components/tabframe/TabFrame.java | 81 +- .../tabframe/TabFrameContentPane.java | 22 +- .../components/tabframe/TabFrameControl.java | 27 + .../components/tabframe/TabFrameTab.java | 1 + .../components/tabframe/ToggleSplitPane.java | 1 - .../com/weis/darklaf/defaults/DarkColors.java | 1823 ----------------- .../weis/darklaf/defaults/DarkDefaults.java | 156 -- .../com/weis/darklaf/defaults/DarkIcons.java | 411 ---- .../java/com/weis/darklaf/theme/Theme.java | 28 +- .../darklaf/ui/button/DarkButtonBorder.java | 85 +- .../weis/darklaf/ui/button/DarkButtonUI.java | 153 +- .../darklaf/ui/button/DarkToggleButtonUI.java | 35 +- .../ui/cell/DarkCellRendererToggleButton.java | 5 +- .../darklaf/ui/checkbox/DarkCheckBoxUI.java | 33 +- .../colorchooser/ColorPreviewComponent.java | 5 +- .../darklaf/ui/colorchooser/ColorWheel.java | 22 +- .../colorchooser/DarkColorChooserPanel.java | 9 +- .../DarkSwatchesChooserPanel.java | 4 +- .../ui/colorchooser/RecentSwatchPanel.java | 3 +- .../ui/colorchooser/SlideComponent.java | 29 +- .../darklaf/ui/colorchooser/SwatchPanel.java | 3 +- .../darklaf/ui/combobox/DarkComboBoxUI.java | 30 +- .../DarkFileChooserListViewBorder.java | 12 +- .../ui/filechooser/DarkFilePaneUIBridge.java | 3 +- .../internalframe/DarkDesktopIconBorder.java | 14 +- .../ui/internalframe/DarkDesktopIconUI.java | 5 +- .../DarkInternalFrameBorder.java | 5 +- .../DarkInternalFrameTitlePane.java | 23 +- .../ui/list/DarkListCellFocusBorder.java | 10 +- .../darklaf/ui/menu/DarkMenuBarBorder.java | 10 +- .../weis/darklaf/ui/menu/DarkMenuBarUI.java | 11 +- .../darklaf/ui/menu/DarkMenuItemUIBase.java | 5 +- .../com/weis/darklaf/ui/menu/DarkMenuUI.java | 5 +- .../ui/progressbar/DarkProgressBarUI.java | 19 +- .../DarkRadioButtonMenuItemUI.java | 5 +- .../ui/radiobutton/DarkRadioButtonUI.java | 33 +- .../darklaf/ui/rootpane/CloseButtonUI.java | 16 +- .../darklaf/ui/rootpane/DarkTitlePane.java | 23 +- .../ui/scrollpane/DarkScrollBarUI.java | 17 +- .../weis/darklaf/ui/slider/DarkSliderUI.java | 87 +- .../darklaf/ui/spinner/DarkSpinnerBorder.java | 33 +- .../darklaf/ui/spinner/DarkSpinnerUI.java | 45 +- .../ui/splitpane/DarkSplitPaneDivider.java | 26 +- .../darklaf/ui/splitpane/DarkSplitPaneUI.java | 10 +- .../darklaf/ui/statusbar/DarkStatusBarUI.java | 16 +- .../ui/tabbedpane/DarkTabbedPaneUI.java | 55 +- .../ui/tabbedpane/DarkTabbedPaneUIBridge.java | 6 +- .../darklaf/ui/tabbedpane/MoreTabsButton.java | 8 +- .../ui/tabbedpane/ScrollableTabPanel.java | 3 +- .../ui/tabbedpane/ScrollableTabViewport.java | 5 +- .../darklaf/ui/tabframe/DarkPanelPopupUI.java | 19 +- .../DarkTabFrameComponentPopupMenu.java | 153 ++ .../tabframe/DarkTabFrameTabContainerUI.java | 5 +- .../ui/tabframe/DarkTabFrameTabLabelUI.java | 10 +- .../darklaf/ui/tabframe/DarkTabFrameUI.java | 8 +- .../ui/tabframe/DarkTabbedPopupUI.java | 81 +- .../darklaf/ui/table/DarkTableBorder.java | 20 +- .../darklaf/ui/table/DarkTableCellEditor.java | 5 +- .../DarkTableCellEditorToggleButton.java | 5 +- .../ui/table/DarkTableCellFocusBorder.java | 13 +- .../ui/table/DarkTableCellRenderer.java | 5 +- .../ui/table/DarkTableHeaderBorder.java | 21 +- .../ui/table/DarkTableHeaderCorner.java | 14 +- .../darklaf/ui/table/DarkTableHeaderUI.java | 15 +- .../weis/darklaf/ui/table/DarkTableUI.java | 14 +- .../darklaf/ui/table/DarkTableUIBridge.java | 15 +- .../table/TextFieldTableCellEditorBorder.java | 9 +- .../darklaf/ui/taskpane/DarkTaskPaneUI.java | 39 +- .../darklaf/ui/text/DarkPasswordFieldUI.java | 65 +- .../weis/darklaf/ui/text/DarkTextBorder.java | 84 +- .../weis/darklaf/ui/text/DarkTextFieldUI.java | 83 +- .../ui/titledborder/DarkTitledBorder.java | 11 +- .../darklaf/ui/toolbar/DarkToolBarBorder.java | 14 +- .../darklaf/ui/toolbar/DarkToolBarUI.java | 10 +- .../ui/toolbar/DarkToolBarUIBridge.java | 9 +- .../darklaf/ui/toolbar/DropPreviewPanel.java | 8 +- .../darklaf/ui/tooltip/DarkTooltipBorder.java | 8 +- .../darklaf/ui/tree/DarkTreeCellBorder.java | 10 +- .../com/weis/darklaf/ui/tree/DarkTreeUI.java | 65 +- .../com/weis/darklaf/util/DarkUIUtil.java | 17 +- .../{LafUtil.java => PropertyLoader.java} | 120 +- .../pbjar/jxlayer/plaf/ext/TransformUI.java | 13 +- .../dark/navigation/moveToBottomLeft.svg | 4 + .../dark/navigation/moveToBottomRight.svg | 5 + .../dark/navigation/moveToLeftBottom.svg | 4 + .../icons/dark/navigation/moveToLeftTop.svg | 4 + .../dark/navigation/moveToRightBottom.svg | 5 + .../icons/dark/navigation/moveToRightTop.svg | 5 + .../icons/dark/navigation/moveToTopLeft.svg | 5 + .../icons/dark/navigation/moveToTopRight.svg | 5 + .../light/navigation/moveToBottomLeft.svg | 4 + .../light/navigation/moveToBottomRight.svg | 5 + .../light/navigation/moveToLeftBottom.svg | 4 + .../icons/light/navigation/moveToLeftTop.svg | 4 + .../light/navigation/moveToRightBottom.svg | 5 + .../icons/light/navigation/moveToRightTop.svg | 5 + .../icons/light/navigation/moveToTopLeft.svg | 5 + .../icons/light/navigation/moveToTopRight.svg | 5 + .../darklaf/properties/ui/checkBox.properties | 2 +- .../properties/ui/colorChooser.properties | 1 + .../darklaf/properties/ui/menuBar.properties | 3 +- .../darklaf/properties/ui/tabFrame.properties | 18 + .../darklaf/properties/ui/table.properties | 1 + .../darklaf/properties/ui/text.properties | 4 + .../theme/darcula/darcula_defaults.properties | 160 +- .../resources/library/x64/jniplatform.dll | Bin 2691649 -> 2691861 bytes .../resources/library/x86/jniplatform.dll | Bin 1683306 -> 1683526 bytes 113 files changed, 1796 insertions(+), 3241 deletions(-) create mode 100644 licence/DARCULA_LICENCE.txt create mode 100644 src/main/java/com/weis/darklaf/components/JXPopupMenu.java create mode 100644 src/main/java/com/weis/darklaf/components/tabframe/TabFrameControl.java delete mode 100644 src/main/java/com/weis/darklaf/defaults/DarkColors.java delete mode 100644 src/main/java/com/weis/darklaf/defaults/DarkDefaults.java delete mode 100644 src/main/java/com/weis/darklaf/defaults/DarkIcons.java create mode 100644 src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameComponentPopupMenu.java rename src/main/java/com/weis/darklaf/util/{LafUtil.java => PropertyLoader.java} (66%) create mode 100644 src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToBottomLeft.svg create mode 100644 src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToBottomRight.svg create mode 100644 src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToLeftBottom.svg create mode 100644 src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToLeftTop.svg create mode 100644 src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToRightBottom.svg create mode 100644 src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToRightTop.svg create mode 100644 src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToTopLeft.svg create mode 100644 src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToTopRight.svg create mode 100644 src/main/resources/com/weis/darklaf/icons/light/navigation/moveToBottomLeft.svg create mode 100644 src/main/resources/com/weis/darklaf/icons/light/navigation/moveToBottomRight.svg create mode 100644 src/main/resources/com/weis/darklaf/icons/light/navigation/moveToLeftBottom.svg create mode 100644 src/main/resources/com/weis/darklaf/icons/light/navigation/moveToLeftTop.svg create mode 100644 src/main/resources/com/weis/darklaf/icons/light/navigation/moveToRightBottom.svg create mode 100644 src/main/resources/com/weis/darklaf/icons/light/navigation/moveToRightTop.svg create mode 100644 src/main/resources/com/weis/darklaf/icons/light/navigation/moveToTopLeft.svg create mode 100644 src/main/resources/com/weis/darklaf/icons/light/navigation/moveToTopRight.svg diff --git a/licence/DARCULA_LICENCE.txt b/licence/DARCULA_LICENCE.txt new file mode 100644 index 00000000..9c8f3ea0 --- /dev/null +++ b/licence/DARCULA_LICENCE.txt @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + 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 + + http://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. \ No newline at end of file diff --git a/src/jniplatform/cpp/JNIDecorations.cpp b/src/jniplatform/cpp/JNIDecorations.cpp index 6a10289c..7dd05e57 100644 --- a/src/jniplatform/cpp/JNIDecorations.cpp +++ b/src/jniplatform/cpp/JNIDecorations.cpp @@ -66,12 +66,11 @@ LRESULT HitTestNCA(HWND hWnd, WPARAM wParam, LPARAM lParam, WindowWrapper *wrapp } // Hit test (HTTOPLEFT, ... HTBOTTOMRIGHT) - LRESULT hitTests[3][3] = - { - {HTTOPLEFT, HTTOP, HTTOPRIGHT}, - {HTLEFT, HTNOWHERE, HTRIGHT}, - {HTBOTTOMLEFT, HTBOTTOM, HTBOTTOMRIGHT}, - }; + LRESULT hitTests[3][3] = { + {HTTOPLEFT, HTTOP, HTTOPRIGHT}, + {HTLEFT, HTNOWHERE, HTRIGHT}, + {HTBOTTOMLEFT, HTBOTTOM, HTBOTTOMRIGHT}, + }; LRESULT hit = hitTests[uRow][uCol]; if (hit == HTNOWHERE || !wrapper->resizable) { @@ -105,6 +104,18 @@ LRESULT CALLBACK WindowWrapper::WindowProc(_In_ HWND hwnd, _In_ UINT uMsg, _In_ { return HitTestNCA(hwnd, wParam, lParam, wrapper); } + else if (uMsg == WM_GETMINMAXINFO) + { + MINMAXINFO *min_max_info = reinterpret_cast(lParam); + RECT max_rect; + SystemParametersInfo(SPI_GETWORKAREA, 0, &max_rect, 0); + min_max_info->ptMaxSize.x = max_rect.right - max_rect.left; + min_max_info->ptMaxSize.y = max_rect.bottom - max_rect.top; + min_max_info->ptMaxPosition.x = max_rect.left; + min_max_info->ptMaxPosition.y = max_rect.top; + return 0; + } + return CallWindowProc(wrapper->prev_proc, hwnd, uMsg, wParam, lParam); } diff --git a/src/main/java/com/weis/darklaf/DarkLaf.java b/src/main/java/com/weis/darklaf/DarkLaf.java index f7b402b4..b765caef 100644 --- a/src/main/java/com/weis/darklaf/DarkLaf.java +++ b/src/main/java/com/weis/darklaf/DarkLaf.java @@ -23,12 +23,10 @@ */ package com.weis.darklaf; -import com.weis.darklaf.defaults.DarkColors; -import com.weis.darklaf.defaults.DarkDefaults; -import com.weis.darklaf.defaults.DarkIcons; import com.weis.darklaf.platform.windows.JNIDecorations; import com.weis.darklaf.theme.Theme; import com.weis.darklaf.ui.menu.DarkPopupMenuUI; +import com.weis.darklaf.util.PropertyLoader; import com.weis.darklaf.util.SystemInfo; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -42,6 +40,8 @@ import javax.swing.text.html.HTMLEditorKit; import javax.swing.text.html.StyleSheet; import java.awt.event.InputEvent; import java.awt.event.KeyEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.lang.reflect.Method; import java.util.HashMap; import java.util.Properties; @@ -51,7 +51,7 @@ import java.util.logging.Logger; /** * @author Jannis Weis */ -public class DarkLaf extends BasicLookAndFeel { +public class DarkLaf extends BasicLookAndFeel implements PropertyChangeListener { private static final Logger LOGGER = Logger.getLogger(DarkLaf.class.getName()); @@ -256,6 +256,18 @@ public class DarkLaf extends BasicLookAndFeel { @Override public void initialize() { call("initialize"); + PropertyLoader.reset(); + UIManager.addPropertyChangeListener(this); + } + + @Override + public void propertyChange(@NotNull final PropertyChangeEvent evt) { + if ("lookAndFeel".equals(evt.getPropertyName())) { + if (UIManager.getLookAndFeel() == this) { + PropertyLoader.finish(); + } + UIManager.removePropertyChangeListener(this); + } } @Override @@ -268,9 +280,6 @@ public class DarkLaf extends BasicLookAndFeel { ((DarkPopupMenuUI.MouseGrabber) grabber).uninstall(); } } - DarkColors.uninstall(); - DarkIcons.uninstall(); - DarkDefaults.uninstall(); } @SuppressWarnings({"HardCodedStringLiteral"}) diff --git a/src/main/java/com/weis/darklaf/components/DefaultColorPipette.java b/src/main/java/com/weis/darklaf/components/DefaultColorPipette.java index e9a22fcb..cc0cc086 100644 --- a/src/main/java/com/weis/darklaf/components/DefaultColorPipette.java +++ b/src/main/java/com/weis/darklaf/components/DefaultColorPipette.java @@ -1,7 +1,6 @@ // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.weis.darklaf.components; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.ui.colorchooser.ColorListener; import com.weis.darklaf.util.GraphicsUtil; import com.weis.darklaf.util.TimerUtil; @@ -28,10 +27,12 @@ public class DefaultColorPipette extends ColorPipetteBase { private final Timer timer; private Graphics2D zoomGraphics; private BufferedImage zoomImage; + protected Color borderColor; public DefaultColorPipette(@NotNull final JComponent parent, @NotNull final ColorListener colorListener) { super(parent, colorListener); timer = TimerUtil.createNamedTimer("DefaultColorPipette", 5, e -> updatePipette()); + borderColor = UIManager.getColor("ColorChooser.pipetteBorderColor"); } protected void updatePipette() { @@ -160,7 +161,7 @@ public class DefaultColorPipette extends ColorPipetteBase { } protected Color getPipetteBorderColor() { - return DarkColors.get().getColorChooserPipetteBorderColor(); + return borderColor; } protected static class DefaultPickerWindow extends PickerWindow { diff --git a/src/main/java/com/weis/darklaf/components/JXPopupMenu.java b/src/main/java/com/weis/darklaf/components/JXPopupMenu.java new file mode 100644 index 00000000..2bbf8726 --- /dev/null +++ b/src/main/java/com/weis/darklaf/components/JXPopupMenu.java @@ -0,0 +1,69 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.weis.darklaf.components; + +import com.weis.darklaf.util.DarkUIUtil; +import org.jdesktop.jxlayer.JXLayer; +import org.pbjar.jxlayer.plaf.ext.TransformUI; + +import javax.swing.*; +import java.awt.*; + +/** + * Popup menu that is aware of {@link org.pbjar.jxlayer.plaf.ext.TransformUI}. + */ +public class JXPopupMenu extends JPopupMenu { + + public JXPopupMenu() { + this(null); + } + + /** + * Constructs a JPopupMenu with the specified title. + * + * @param label the string that a UI may use to display as a title + * for the popup menu. + */ + public JXPopupMenu(final String label) { + super(label); + } + + @Override + public void show(final Component invoker, final int x, final int y) { + Point p = new Point(x, y); + if (invoker != null) { + JXLayer layer = DarkUIUtil.getParentOfType(JXLayer.class, invoker); + if (layer != null && layer.getUI() instanceof TransformUI) { + var ui = (TransformUI) layer.getUI(); + p = SwingUtilities.convertPoint(invoker, p, layer); + //noinspection unchecked + var transform = ui.getPreferredTransform(layer.getSize(), layer); + transform.transform(p, p); + super.show(layer, p.x, p.y); + return; + } + } + super.show(invoker, p.x, p.y); + } +} diff --git a/src/main/java/com/weis/darklaf/components/border/MutableLineBorder.java b/src/main/java/com/weis/darklaf/components/border/MutableLineBorder.java index f80bef20..426066c1 100644 --- a/src/main/java/com/weis/darklaf/components/border/MutableLineBorder.java +++ b/src/main/java/com/weis/darklaf/components/border/MutableLineBorder.java @@ -22,11 +22,10 @@ public class MutableLineBorder extends EmptyBorder { public void paintBorder(final Component c, @NotNull final Graphics g, final int x, final int y, final int width, final int height) { g.setColor(getColor()); - var insets = getBorderInsets(); - g.fillRect(x, y, width - insets.right, insets.top); - g.fillRect(x, y + insets.top, insets.left, height - insets.top); - g.fillRect(x + insets.left, y + height - insets.bottom, width - insets.left, insets.bottom); - g.fillRect(x + width - insets.right, y, insets.right, height - insets.bottom); + g.fillRect(x, y, width - right, top); + g.fillRect(x, y + top, left, height - top); + g.fillRect(x + left, y + height - bottom, width - left, bottom); + g.fillRect(x + width - right, y, right, height - bottom); } @Override diff --git a/src/main/java/com/weis/darklaf/components/tabframe/TabFrame.java b/src/main/java/com/weis/darklaf/components/tabframe/TabFrame.java index ca8c67ea..38b56f5e 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/TabFrame.java +++ b/src/main/java/com/weis/darklaf/components/tabframe/TabFrame.java @@ -303,8 +303,23 @@ public class TabFrame extends JComponent { if (a == Alignment.CENTER) { return; } - var tabComponent = createDefaultTab(title, icon, a, index); - insertTabComp(tabComponent, a, index); + insertTab(c, createDefaultTab(title, icon, a, index), a, index); + } + + /** + * Insert a tab. + * A default tab component will be created. + * + * @param c the popup to add. + * @param tab the corresponding tab. + * @param a the alignment position to add at.{@link TabFramePosition#getAlignment()} + * @param index the index to insert at.{@link TabFramePosition#getIndex()} + */ + public void insertTab(@NotNull final TabFramePopup c, final TabFrameTab tab, final Alignment a, final int index) { + if (a == Alignment.CENTER) { + return; + } + insertTabComp(tab, a, index); compsForAlignment(a).add(index, c); c.setEnabled(false); c.setTabFrame(this); @@ -658,6 +673,35 @@ public class TabFrame extends JComponent { insertTab(c, title, icon, a, tabsForAlignment(a).size()); } + /** + * Move a tab to a new position. + * + * @param tabComp the tab to move. + * @param a the new alignment position.{@link TabFramePosition#getAlignment()} + */ + public void moveTab(@NotNull final TabFrameTab tabComp, final Alignment a) { + if (a == tabComp.getOrientation()) { + return; + } + boolean oldSelected = tabComp.isSelected(); + + var oldAlign = tabComp.getOrientation(); + var oldIndex = tabComp.getIndex(); + + closeTab(oldAlign, oldIndex); + + var comp = compsForAlignment(oldAlign).get(oldIndex); + removeTab(oldAlign, oldIndex); + addTab(comp, tabComp, a); + + if (oldSelected) { + openTab(a, tabComp.getIndex()); + } + + doLayout(); + getTabContainer(a).repaint(); + } + /** * Remove a popup. * @@ -675,35 +719,14 @@ public class TabFrame extends JComponent { } /** - * Move a tab to a new position. + * Add a popup. * - * @param tabComp the tab to move. - * @param a the new alignment position.{@link TabFramePosition#getAlignment()} + * @param c the popup. + * @param tab the corresponding tab. + * @param a the alignment position.{@link TabFramePosition#getAlignment()} */ - public void moveTab(@NotNull final TabFrameTab tabComp, final Alignment a) { - if (a == tabComp.getOrientation()) { - return; - } - boolean oldSelected = tabComp.isSelected(); - var oldAlign = tabComp.getOrientation(); - int index = tabComp.getIndex(); - compsForAlignment(oldAlign).get(index).close(); - removeTabComp(oldAlign, index); - - var comp = compsForAlignment(oldAlign).remove(index); - int newIndex = tabsForAlignment(a).size(); - - insertTabComp(tabComp, a, newIndex); - compsForAlignment(a).add(newIndex, comp); - tabComp.setSelected(oldSelected); - notifySelectionChange(tabComp); - - comp.setIndex(newIndex); - comp.setAlignment(a); - - doLayout(); - getTabContainer(oldAlign).repaint(); - getTabContainer(a).repaint(); + public void addTab(final TabFramePopup c, final TabFrameTab tab, final Alignment a) { + insertTab(c, tab, a, tabsForAlignment(a).size()); } /* diff --git a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameContentPane.java b/src/main/java/com/weis/darklaf/components/tabframe/TabFrameContentPane.java index 92820231..e86fa4cb 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameContentPane.java +++ b/src/main/java/com/weis/darklaf/components/tabframe/TabFrameContentPane.java @@ -70,29 +70,29 @@ public class TabFrameContentPane extends JPanel implements TabFrameContent { PopupContainer bottomRightPanel = new PopupContainer(); PopupContainer leftTopPanel = new PopupContainer(); - rightSplitter = new ToggleSplitPane("rightSplitter"); + rightSplitter = new TabFrameSplitPane("rightSplitter"); rightSplitter.setOrientation(JSplitPane.VERTICAL_SPLIT); rightSplitter.setTopComponent(rightTopPanel); rightSplitter.setBottomComponent(rightBottomPanel); - leftSplitter = new ToggleSplitPane("leftSplitter"); + leftSplitter = new TabFrameSplitPane("leftSplitter"); leftSplitter.setOrientation(JSplitPane.VERTICAL_SPLIT); leftSplitter.setTopComponent(leftTopPanel); leftSplitter.setBottomComponent(leftBottomPanel); - topSplitter = new ToggleSplitPane("topSplitter"); + topSplitter = new TabFrameSplitPane("topSplitter"); topSplitter.setOrientation(JSplitPane.HORIZONTAL_SPLIT); topSplitter.setLeftComponent(topLeftPanel); topSplitter.setRightComponent(topRightPanel); - bottomSplitter = new ToggleSplitPane("bottomSplitter"); + bottomSplitter = new TabFrameSplitPane("bottomSplitter"); bottomSplitter.setOrientation(JSplitPane.HORIZONTAL_SPLIT); bottomSplitter.setLeftComponent(bottomLeftPanel); bottomSplitter.setRightComponent(bottomRightPanel); - topSplit = new ToggleSplitPane("topSplit"); - bottomSplit = new ToggleSplitPane("bottomSplit"); + topSplit = new TabFrameSplitPane("topSplit"); + bottomSplit = new TabFrameSplitPane("bottomSplit"); topSplit.setOrientation(JSplitPane.VERTICAL_SPLIT); bottomSplit.setOrientation(JSplitPane.VERTICAL_SPLIT); @@ -100,8 +100,8 @@ public class TabFrameContentPane extends JPanel implements TabFrameContent { topSplit.setBottomComponent(bottomSplit); bottomSplit.setBottomComponent(bottomSplitter); - leftSplit = new ToggleSplitPane("leftSplit"); - rightSplit = new ToggleSplitPane("rightSplit"); + leftSplit = new TabFrameSplitPane("leftSplit"); + rightSplit = new TabFrameSplitPane("rightSplit"); leftSplit.setOrientation(JSplitPane.HORIZONTAL_SPLIT); rightSplit.setOrientation(JSplitPane.HORIZONTAL_SPLIT); @@ -446,4 +446,10 @@ public class TabFrameContentPane extends JPanel implements TabFrameContent { this.splitterPeerDisable = splitterPeerDisable; } } + + protected static class TabFrameSplitPane extends ToggleSplitPane implements TabFrameControl { + protected TabFrameSplitPane(final String name) { + super(name); + } + } } diff --git a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameControl.java b/src/main/java/com/weis/darklaf/components/tabframe/TabFrameControl.java new file mode 100644 index 00000000..ee373b8a --- /dev/null +++ b/src/main/java/com/weis/darklaf/components/tabframe/TabFrameControl.java @@ -0,0 +1,27 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.weis.darklaf.components.tabframe; + +public interface TabFrameControl { +} diff --git a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameTab.java b/src/main/java/com/weis/darklaf/components/tabframe/TabFrameTab.java index 31128ddf..6d5d75cf 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/TabFrameTab.java +++ b/src/main/java/com/weis/darklaf/components/tabframe/TabFrameTab.java @@ -105,4 +105,5 @@ public interface TabFrameTab { * @param tabFrame the TabFrame. */ void setTabFrame(TabFrame tabFrame); + } diff --git a/src/main/java/com/weis/darklaf/components/tabframe/ToggleSplitPane.java b/src/main/java/com/weis/darklaf/components/tabframe/ToggleSplitPane.java index cc160579..144a3051 100644 --- a/src/main/java/com/weis/darklaf/components/tabframe/ToggleSplitPane.java +++ b/src/main/java/com/weis/darklaf/components/tabframe/ToggleSplitPane.java @@ -155,5 +155,4 @@ public class ToggleSplitPane extends JSplitPane { : comp.getMinimumSize().height; } - } diff --git a/src/main/java/com/weis/darklaf/defaults/DarkColors.java b/src/main/java/com/weis/darklaf/defaults/DarkColors.java deleted file mode 100644 index 98e8c8b0..00000000 --- a/src/main/java/com/weis/darklaf/defaults/DarkColors.java +++ /dev/null @@ -1,1823 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2019 Jannis Weis - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -package com.weis.darklaf.defaults; - -import javax.swing.*; -import java.awt.*; - -@SuppressWarnings("WeakerAccess") -public class DarkColors { - protected static DarkColors instance; - protected Color OptionPaneErrorDialogTitleBackground; - protected Color OptionPaneErrorDialogTitleForeground; - protected Color OptionPaneQuestionDialogTitleBackground; - protected Color OptionPaneQuestionDialogTitleForeground; - protected Color OptionPaneWarningDialogTitleBackground; - protected Color OptionPaneWarningDialogTitleForeground; - protected Color TitleBackground; - protected Color TitleForeground; - protected Color TitleInactiveBackground; - protected Color TitleInactiveForeground; - protected Color TitleBorderColor; - protected Color SplitPaneDividerLineColor; - protected Color ToggleButtonBackground; - protected Color ToggleButtonInactiveBackground; - protected Color ToggleButtonFocusBorderColor; - protected Color ToggleButtonBorderColor; - protected Color ToggleButtonInactiveBorderColor; - protected Color ToggleButtonSliderColor; - protected Color ToggleButtonInactiveSliderColor; - protected Color ButtonShadowColor; - protected Color ButtonFocusBorderColor; - protected Color ButtonDefaultBorderColor; - protected Color ButtonBorderColor; - protected Color ButtonInactiveBorderColor; - protected Color ButtonInactiveForeground; - protected Color ButtonForeground; - protected Color ButtonDefaultBackground; - protected Color ButtonDefaultHoverBackground; - protected Color ButtonDefaultClickBackground; - protected Color ButtonBackground; - protected Color ButtonHoverBackground; - protected Color ButtonClickBackground; - protected Color ButtonInactiveBackground; - protected Color ButtonShadowHoverColor; - protected Color ButtonShadowClickColor; - protected Color SliderInactiveTickColor; - protected Color SliderTrackBackground; - protected Color SliderSelectedTrackBackground; - protected Color SliderSelectedTrackInactiveBackground; - protected Color SliderVolumeSelectedTrackBackground; - protected Color SliderVolumeSelectedTrackInactiveBackground; - protected Color SliderThumbBackground; - protected Color SliderThumbInactiveBackground; - protected Color SliderVolumeThumbBackground; - protected Color SliderVolumeThumbInactiveBackground; - protected Color SliderThumbInactiveBorderColor; - protected Color SliderThumbBorderColor; - protected Color SpinnerFocusBorderColor; - protected Color SpinnerBorderColor; - protected Color SpinnerInactiveBorderColor; - protected Color SpinnerBackground; - protected Color SpinnerInactiveBackground; - protected Color TextFieldFocusErrorBorderColor; - protected Color TextFieldFocusBorderColor; - protected Color TextFieldErrorBorderColor; - protected Color TextFieldBorderColor; - protected Color TextFieldInactiveBorderColor; - protected Color TextFieldBackground; - protected Color TextFieldInactiveBackground; - protected Color MenuBarBorderColor; - protected Color MenuItemAcceleratorForeground; - protected Color MenuItemAcceleratorSelectionForeground; - protected Color ComboBoxBackground; - protected Color ComboBoxInactiveBackground; - protected Color ComboBoxInactiveForeground; - protected Color ComboBoxFocusBorderColor; - protected Color ComboBoxBorderColor; - protected Color ComboBoxInactiveBorderColor; - protected Color StatusBarBackground; - protected Color StatusBarBorderColor; - protected Color CheckBoxBackground; - protected Color CheckBoxInactiveBackground; - protected Color CheckBoxBorderColor; - protected Color CheckBoxFocusBorderColor; - protected Color CheckBoxInactiveBorderColor; - protected Color CheckBoxCheckColor; - protected Color CheckBoxCheckInactiveColor; - protected Color TreeAlternativeBackground; - protected Color TreeLineColor; - protected Color TreeLineSelectedColor; - protected Color TreeLineFocusColor; - protected Color TreeSelectionBackground; - protected Color TreeFocusSelectionBackground; - protected Color ScrollBarThumbBorderColor; - protected Color ScrollBarThumbStartColor; - protected Color ScrollBarThumbEndColor; - protected Color ScrollBarTrackBackground; - protected Color TabbedPaneDragBorderColor; - protected Color TabbedPaneDropBackground; - protected Color TabbedPaneTabBorderColor; - protected Color TabbedPaneAccentColor; - protected Color TabbedPaneFocusAccentColor; - protected Color TabbedPaneTabSelectedHoverBackground; - protected Color TabbedPaneTabSelectedBackground; - protected Color TabbedPaneTabHoverBackground; - protected Color TableHeaderBorderColor; - protected Color ErrorGlow; - protected Color ErrorFocusGlow; - protected Color FocusGlow; - protected Color WarningGlow; - protected Color TitleCloseClickBackground; - protected Color TitleCloseHoverBackground; - protected Color TreeEditorBorderColor; - protected Color TabbedPaneTabAreaBackground; - protected Color ToolBarDropBackground; - protected Color ToolBarBackground; - protected Color ListFocusBorderColor; - protected Color TabFrameTabForeground; - protected Color TabFrameTabSelectedBackground; - protected Color TabFrameTabHoverBackground; - protected Color TabFrameTabSelectedForeground; - protected Color TabFramePopupHeaderHoverBackground; - protected Color TabFramePopupHeaderSelectedBackground; - protected Color TabFramePopupHeaderSelectedHoverBackground; - protected Color TabFramePopupHeaderFocusHoverBackground; - protected Color TabFramePopupHeaderFocusSelectedBackground; - protected Color TabFramePopupHeaderFocusSelectedHoverBackground; - protected Color TabFramePopupHeaderBackground; - protected Color TabFramePopupButtonHoverBackground; - protected Color TabFramePopupButtonClickBackground; - protected Color TabFramePopupFocusHeaderBackground; - protected Color TabFramePopupButtonFocusHoverBackground; - protected Color TabFramePopupButtonFocusClickBackground; - protected Color TabFramePopupBorderColor; - protected Color TabFrameBorderColor; - protected Color FileChooserListViewBorderColor; - protected Color FilePaneListViewBackground; - protected Color TableRowBorderColor; - protected Color TableFocusBorderColor; - protected Color TableHeaderBackground; - protected Color TableAlternativeBackground; - protected Color TableDropLineColor; - protected Color TableDropLineShortColor; - protected Color TableBackground; - protected Color ColorChooserPreviewBorderColor; - protected Color RadioButtonBackground; - protected Color RadioButtonInactiveBackground; - protected Color RadioButtonFocusBorderColor; - protected Color RadioButtonBorderColor; - protected Color RadioButtonInactiveBorderColor; - protected Color RadioButtonCheckColor; - protected Color RadioButtonCheckInactiveColor; - protected Color DesktopIconHoverBackground; - protected Color DesktopIconClickBackground; - protected Color InternalFrameBorderShadowColor; - protected Color InternalFrameTitleBackground; - protected Color InternalFrameTitleSelectedBackground; - protected Color InternalFrameTitleForeground; - protected Color InternalFrameSelectedButtonBackground; - protected Color InternalFrameSelectedButtonHoverBackground; - protected Color InternalFrameSelectedButtonClickBackground; - protected Color InternalFrameButtonBackground; - protected Color InternalFrameButtonHoverBackground; - protected Color InternalFrameButtonClickBackground; - protected Color InternalFrameBorderColor; - protected Color InternalFrameTitleSelectedForeground; - protected Color MenuItemBackground; - protected Color MenuItemForeground; - protected Color MenuItemSelectionForeground; - protected Color TabbedPaneSelectedForeground; - protected Color TaskPaneBorderColor; - protected Color TaskPaneTitleBorderColor; - protected Color ToolBarDockingBackground; - protected Color ToolBarFloatingBackground; - protected Color ToolBarDockingBorderColor; - protected Color ToolBarFloatingBorderColor; - protected Color TableFocusSelectionBackground; - protected Color TableSelectionBackground; - protected Color TableGridColor; - protected Color ColorChooserDefaultRecentColor; - protected Color ColorChooserSliderBorderColor; - protected Color ColorChooserSliderShadowColor; - protected Color ColorChooserSliderKnobColor; - protected Color ColorChooserColorWheelDropBackground; - protected Color ColorChooserColorWheelDropBorderColor; - protected Color ColorChooserSwatchBorderColor; - protected Color ColorChooserPipetteBorderColor; - protected Color ColorChooserSwatchGridColor; - protected Color PanelBackground; - protected Color DesktopIconBorderColor; - protected Color ToolTipBorderColor; - protected Color ToolTipShadowColor; - protected Color ProgressBarTrackBackground; - protected Color ProgressBarProgressColor; - protected Color ProgressBarIndeterminateStartColor; - protected Color ProgressBarIndeterminateEndColor; - protected Color ProgressBarFailedColor; - protected Color ProgressBarFailedEndColor; - protected Color ProgressBarPassedColor; - protected Color ProgressBarPassedEndColor; - protected Color TitledBorderBorderColor; - - public static DarkColors get() { - if (instance == null) { - instance = new DarkColors(); - } - return instance; - } - - public static void uninstall() { - if (instance == null) return; - instance.uninstallColor(); - instance = null; - } - - protected void uninstallColor() { - OptionPaneErrorDialogTitleBackground = null; - OptionPaneErrorDialogTitleForeground = null; - OptionPaneQuestionDialogTitleBackground = null; - OptionPaneQuestionDialogTitleForeground = null; - OptionPaneWarningDialogTitleBackground = null; - OptionPaneWarningDialogTitleForeground = null; - TitleBackground = null; - TitleForeground = null; - TitleInactiveBackground = null; - TitleInactiveForeground = null; - TitleBorderColor = null; - SplitPaneDividerLineColor = null; - ToggleButtonBackground = null; - ToggleButtonInactiveBackground = null; - ToggleButtonFocusBorderColor = null; - ToggleButtonBorderColor = null; - ToggleButtonInactiveBorderColor = null; - ToggleButtonSliderColor = null; - ToggleButtonInactiveSliderColor = null; - ButtonShadowColor = null; - ButtonFocusBorderColor = null; - ButtonDefaultBorderColor = null; - ButtonBorderColor = null; - ButtonInactiveBorderColor = null; - ButtonInactiveForeground = null; - ButtonForeground = null; - ButtonDefaultBackground = null; - ButtonDefaultHoverBackground = null; - ButtonDefaultClickBackground = null; - ButtonBackground = null; - ButtonHoverBackground = null; - ButtonClickBackground = null; - ButtonInactiveBackground = null; - ButtonShadowHoverColor = null; - ButtonShadowClickColor = null; - SliderInactiveTickColor = null; - SliderTrackBackground = null; - SliderSelectedTrackBackground = null; - SliderSelectedTrackInactiveBackground = null; - SliderVolumeSelectedTrackBackground = null; - SliderVolumeSelectedTrackInactiveBackground = null; - SliderThumbBackground = null; - SliderThumbInactiveBackground = null; - SliderVolumeThumbBackground = null; - SliderVolumeThumbInactiveBackground = null; - SliderThumbInactiveBorderColor = null; - SliderThumbBorderColor = null; - SpinnerFocusBorderColor = null; - SpinnerBorderColor = null; - SpinnerInactiveBorderColor = null; - SpinnerBackground = null; - SpinnerInactiveBackground = null; - TextFieldFocusErrorBorderColor = null; - TextFieldFocusBorderColor = null; - TextFieldErrorBorderColor = null; - TextFieldBorderColor = null; - TextFieldInactiveBorderColor = null; - TextFieldBackground = null; - TextFieldInactiveBackground = null; - MenuBarBorderColor = null; - MenuItemAcceleratorForeground = null; - MenuItemAcceleratorSelectionForeground = null; - ComboBoxBackground = null; - ComboBoxInactiveBackground = null; - ComboBoxInactiveForeground = null; - ComboBoxFocusBorderColor = null; - ComboBoxBorderColor = null; - ComboBoxInactiveBorderColor = null; - StatusBarBackground = null; - StatusBarBorderColor = null; - CheckBoxBackground = null; - CheckBoxInactiveBackground = null; - CheckBoxBorderColor = null; - CheckBoxFocusBorderColor = null; - CheckBoxInactiveBorderColor = null; - CheckBoxCheckColor = null; - CheckBoxCheckInactiveColor = null; - TreeAlternativeBackground = null; - TreeLineColor = null; - TreeLineSelectedColor = null; - TreeLineFocusColor = null; - TreeSelectionBackground = null; - TreeFocusSelectionBackground = null; - ScrollBarThumbBorderColor = null; - ScrollBarThumbStartColor = null; - ScrollBarThumbEndColor = null; - ScrollBarTrackBackground = null; - TabbedPaneDragBorderColor = null; - TabbedPaneDropBackground = null; - TabbedPaneTabBorderColor = null; - TabbedPaneAccentColor = null; - TabbedPaneFocusAccentColor = null; - TabbedPaneTabSelectedHoverBackground = null; - TabbedPaneTabSelectedBackground = null; - TabbedPaneTabHoverBackground = null; - TableHeaderBorderColor = null; - ErrorGlow = null; - ErrorFocusGlow = null; - FocusGlow = null; - WarningGlow = null; - TitleCloseClickBackground = null; - TitleCloseHoverBackground = null; - TreeEditorBorderColor = null; - TabbedPaneTabAreaBackground = null; - ToolBarDropBackground = null; - ToolBarBackground = null; - ListFocusBorderColor = null; - TabFrameTabForeground = null; - TabFrameTabSelectedBackground = null; - TabFrameTabHoverBackground = null; - TabFrameTabSelectedForeground = null; - TabFramePopupHeaderHoverBackground = null; - TabFramePopupHeaderSelectedBackground = null; - TabFramePopupHeaderSelectedHoverBackground = null; - TabFramePopupHeaderFocusHoverBackground = null; - TabFramePopupHeaderFocusSelectedBackground = null; - TabFramePopupHeaderFocusSelectedHoverBackground = null; - TabFramePopupHeaderBackground = null; - TabFramePopupButtonHoverBackground = null; - TabFramePopupButtonClickBackground = null; - TabFramePopupFocusHeaderBackground = null; - TabFramePopupButtonFocusHoverBackground = null; - TabFramePopupButtonFocusClickBackground = null; - TabFramePopupBorderColor = null; - TabFrameBorderColor = null; - FileChooserListViewBorderColor = null; - FilePaneListViewBackground = null; - TableRowBorderColor = null; - TableFocusBorderColor = null; - TableHeaderBackground = null; - TableAlternativeBackground = null; - TableDropLineColor = null; - TableDropLineShortColor = null; - TableBackground = null; - ColorChooserPreviewBorderColor = null; - RadioButtonBackground = null; - RadioButtonInactiveBackground = null; - RadioButtonFocusBorderColor = null; - RadioButtonBorderColor = null; - RadioButtonInactiveBorderColor = null; - RadioButtonCheckColor = null; - RadioButtonCheckInactiveColor = null; - DesktopIconHoverBackground = null; - DesktopIconClickBackground = null; - InternalFrameBorderShadowColor = null; - InternalFrameTitleBackground = null; - InternalFrameTitleSelectedBackground = null; - InternalFrameTitleForeground = null; - InternalFrameSelectedButtonBackground = null; - InternalFrameSelectedButtonHoverBackground = null; - InternalFrameSelectedButtonClickBackground = null; - InternalFrameButtonBackground = null; - InternalFrameButtonHoverBackground = null; - InternalFrameButtonClickBackground = null; - InternalFrameBorderColor = null; - InternalFrameTitleSelectedForeground = null; - MenuItemBackground = null; - MenuItemForeground = null; - MenuItemSelectionForeground = null; - TabbedPaneSelectedForeground = null; - TaskPaneBorderColor = null; - TaskPaneTitleBorderColor = null; - ToolBarDockingBackground = null; - ToolBarFloatingBackground = null; - ToolBarDockingBorderColor = null; - ToolBarFloatingBorderColor = null; - TableFocusSelectionBackground = null; - TableSelectionBackground = null; - TableGridColor = null; - ColorChooserDefaultRecentColor = null; - ColorChooserSliderBorderColor = null; - ColorChooserSliderShadowColor = null; - ColorChooserSliderKnobColor = null; - ColorChooserColorWheelDropBackground = null; - ColorChooserColorWheelDropBorderColor = null; - ColorChooserSwatchBorderColor = null; - ColorChooserPipetteBorderColor = null; - ColorChooserSwatchGridColor = null; - PanelBackground = null; - DesktopIconBorderColor = null; - ToolTipBorderColor = null; - ToolTipShadowColor = null; - ProgressBarTrackBackground = null; - ProgressBarProgressColor = null; - ProgressBarIndeterminateStartColor = null; - ProgressBarIndeterminateEndColor = null; - ProgressBarFailedColor = null; - ProgressBarFailedEndColor = null; - ProgressBarPassedColor = null; - ProgressBarPassedEndColor = null; - TitledBorderBorderColor = null; - } - - //TitlePane - - public Color getOptionPaneErrorDialogTitleBackground() { - if (OptionPaneErrorDialogTitleBackground == null) { - OptionPaneErrorDialogTitleBackground = UIManager.getColor("OptionPane.errorDialog.titlePane.background"); - } - return OptionPaneErrorDialogTitleBackground; - } - - public Color getOptionPaneErrorDialogTitleForeground() { - if (OptionPaneErrorDialogTitleForeground == null) { - OptionPaneErrorDialogTitleForeground = UIManager.getColor("OptionPane.errorDialog.titlePane.foreground"); - } - return OptionPaneErrorDialogTitleForeground; - } - - public Color getOptionPaneQuestionDialogTitleBackground() { - if (OptionPaneQuestionDialogTitleBackground == null) { - OptionPaneQuestionDialogTitleBackground = UIManager.getColor("OptionPane.questionDialog.titlePane.background"); - } - return OptionPaneQuestionDialogTitleBackground; - } - - public Color getOptionPaneQuestionDialogTitleForeground() { - if (OptionPaneQuestionDialogTitleForeground == null) { - OptionPaneQuestionDialogTitleForeground = UIManager.getColor("OptionPane.questionDialog.titlePane.foreground"); - } - return OptionPaneQuestionDialogTitleForeground; - } - - public Color getOptionPaneWarningDialogTitleBackground() { - if (OptionPaneWarningDialogTitleBackground == null) { - OptionPaneWarningDialogTitleBackground = UIManager.getColor("OptionPane.warningDialog.titlePane.background"); - } - return OptionPaneWarningDialogTitleBackground; - } - - public Color getOptionPaneWarningDialogTitleForeground() { - if (OptionPaneWarningDialogTitleForeground == null) { - OptionPaneWarningDialogTitleForeground = UIManager.getColor("OptionPane.warningDialog.titlePane.foreground"); - } - return OptionPaneWarningDialogTitleForeground; - } - - public Color getTitleBackground() { - if (TitleBackground == null) { - TitleBackground = UIManager.getColor("TitlePane.background"); - } - return TitleBackground; - } - - public Color getTitleForeground() { - if (TitleForeground == null) { - TitleForeground = UIManager.getColor("TitlePane.foreground"); - } - return TitleForeground; - } - - public Color getTitleInactiveBackground() { - if (TitleInactiveBackground == null) { - TitleInactiveBackground = UIManager.getColor("TitlePane.inactiveBackground"); - } - return TitleInactiveBackground; - } - - public Color getTitleInactiveForeground() { - if (TitleInactiveForeground == null) { - TitleInactiveForeground = UIManager.getColor("TitlePane.inactiveForeground"); - } - return TitleInactiveForeground; - } - - public Color getTitleBorderColor() { - if (TitleBorderColor == null) { - TitleBorderColor = UIManager.getColor("TitlePane.borderColor"); - } - return TitleBorderColor; - } - - public Color getTitleCloseClickBackground() { - if (TitleCloseClickBackground == null) { - TitleCloseClickBackground = UIManager.getColor("TitlePane.close.clickColor"); - } - return TitleCloseClickBackground; - } - - public Color getTitleCloseHoverBackground() { - if (TitleCloseHoverBackground == null) { - TitleCloseHoverBackground = UIManager.getColor("TitlePane.close.rollOverColor"); - } - return TitleCloseHoverBackground; - } - - //ToggleButton - - public Color getSplitPaneDividerLineColor() { - if (SplitPaneDividerLineColor == null) { - SplitPaneDividerLineColor = UIManager.getColor("SplitPane.dividerLineColor"); - } - return SplitPaneDividerLineColor; - } - - public Color getToggleButtonBackground() { - if (ToggleButtonBackground == null) { - ToggleButtonBackground = UIManager.getColor("ToggleButton.activeFillColor"); - } - return ToggleButtonBackground; - } - - public Color getToggleButtonInactiveBackground() { - if (ToggleButtonInactiveBackground == null) { - ToggleButtonInactiveBackground = UIManager.getColor("ToggleButton.inactiveFillColor"); - } - return ToggleButtonInactiveBackground; - } - - public Color getToggleButtonFocusBorderColor() { - if (ToggleButtonFocusBorderColor == null) { - ToggleButtonFocusBorderColor = UIManager.getColor("ToggleButton.focusedSliderBorderColor"); - } - return ToggleButtonFocusBorderColor; - } - - public Color getToggleButtonBorderColor() { - if (ToggleButtonBorderColor == null) { - ToggleButtonBorderColor = UIManager.getColor("ToggleButton.sliderBorderColor"); - } - return ToggleButtonBorderColor; - } - - public Color getToggleButtonInactiveBorderColor() { - if (ToggleButtonInactiveBorderColor == null) { - ToggleButtonInactiveBorderColor = UIManager.getColor("ToggleButton.disabledSliderBorderColor"); - } - return ToggleButtonInactiveBorderColor; - } - - public Color getToggleButtonSliderColor() { - if (ToggleButtonSliderColor == null) { - ToggleButtonSliderColor = UIManager.getColor("ToggleButton.sliderColor"); - } - return ToggleButtonSliderColor; - } - - public Color getToggleButtonInactiveSliderColor() { - if (ToggleButtonInactiveSliderColor == null) { - ToggleButtonInactiveSliderColor = UIManager.getColor("ToggleButton.disabledSliderColor"); - } - return ToggleButtonInactiveSliderColor; - } - - //Button - - public Color getButtonShadowColor() { - if (ButtonShadowColor == null) { - ButtonShadowColor = UIManager.getColor("Button.shadow"); - } - return ButtonShadowColor; - } - - public Color getButtonFocusBorderColor() { - if (ButtonFocusBorderColor == null) { - ButtonFocusBorderColor = UIManager.getColor("Button.focusBorderColor"); - } - return ButtonFocusBorderColor; - } - - public Color getButtonDefaultBorderColor() { - if (ButtonDefaultBorderColor == null) { - ButtonDefaultBorderColor = UIManager.getColor("Button.defaultBorderColor"); - } - return ButtonDefaultBorderColor; - } - - public Color getButtonBorderColor() { - if (ButtonBorderColor == null) { - ButtonBorderColor = UIManager.getColor("Button.activeBorderColor"); - } - return ButtonBorderColor; - } - - public Color getButtonInactiveBorderColor() { - if (ButtonInactiveBorderColor == null) { - ButtonInactiveBorderColor = UIManager.getColor("Button.inactiveBorderColor"); - } - return ButtonInactiveBorderColor; - } - - public Color getButtonInactiveForeground() { - if (ButtonInactiveForeground == null) { - ButtonInactiveForeground = UIManager.getColor("Button.disabledText"); - } - return ButtonInactiveForeground; - } - - public Color getButtonForeground() { - if (ButtonForeground == null) { - ButtonForeground = UIManager.getColor("Button.selectedButtonForeground"); - } - return ButtonForeground; - } - - public Color getButtonDefaultBackground() { - if (ButtonDefaultBackground == null) { - ButtonDefaultBackground = UIManager.getColor("Button.defaultFillColor"); - } - return ButtonDefaultBackground; - } - - public Color getButtonDefaultHoverBackground() { - if (ButtonDefaultHoverBackground == null) { - ButtonDefaultHoverBackground = UIManager.getColor("Button.defaultFillColorRollOver"); - } - return ButtonDefaultHoverBackground; - } - - public Color getButtonDefaultClickBackground() { - if (ButtonDefaultClickBackground == null) { - ButtonDefaultClickBackground = UIManager.getColor("Button.defaultFillColorClick"); - } - return ButtonDefaultClickBackground; - } - - public Color getButtonBackground() { - if (ButtonBackground == null) { - ButtonBackground = UIManager.getColor("Button.activeFillColor"); - } - return ButtonBackground; - } - - public Color getButtonHoverBackground() { - if (ButtonHoverBackground == null) { - ButtonHoverBackground = UIManager.getColor("Button.activeFillColorRollOver"); - } - return ButtonHoverBackground; - } - - public Color getButtonClickBackground() { - if (ButtonClickBackground == null) { - ButtonClickBackground = UIManager.getColor("Button.activeFillColorClick"); - } - return ButtonClickBackground; - } - - public Color getButtonInactiveBackground() { - if (ButtonInactiveBackground == null) { - ButtonInactiveBackground = UIManager.getColor("Button.inactiveFillColor"); - } - return ButtonInactiveBackground; - } - - public Color getButtonShadowHoverColor() { - if (ButtonShadowHoverColor == null) { - ButtonShadowHoverColor = UIManager.getColor("Button.shadow.hover"); - } - return ButtonShadowHoverColor; - } - - public Color getButtonShadowClickColor() { - if (ButtonShadowClickColor == null) { - ButtonShadowClickColor = UIManager.getColor("Button.shadow.click"); - } - return ButtonShadowClickColor; - } - - //Slider - - public Color getSliderInactiveTickColor() { - if (SliderInactiveTickColor == null) { - SliderInactiveTickColor = UIManager.getColor("Slider.disabledTickColor"); - } - return SliderInactiveTickColor; - } - - public Color getSliderTrackBackground() { - if (SliderTrackBackground == null) { - SliderTrackBackground = UIManager.getColor("Slider.trackBackground"); - } - return SliderTrackBackground; - } - - public Color getSliderSelectedTrackBackground() { - if (SliderSelectedTrackBackground == null) { - SliderSelectedTrackBackground = UIManager.getColor("Slider.selectedTrackColor"); - } - return SliderSelectedTrackBackground; - } - - public Color getSliderSelectedTrackInactiveBackground() { - if (SliderSelectedTrackInactiveBackground == null) { - SliderSelectedTrackInactiveBackground = UIManager.getColor("Slider.disabledTrackColor"); - } - return SliderSelectedTrackInactiveBackground; - } - - public Color getSliderVolumeSelectedTrackBackground() { - if (SliderVolumeSelectedTrackBackground == null) { - SliderVolumeSelectedTrackBackground = UIManager.getColor("Slider.volume.selectedTrackColor"); - } - return SliderVolumeSelectedTrackBackground; - } - - public Color getSliderVolumeSelectedTrackInactiveBackground() { - if (SliderVolumeSelectedTrackInactiveBackground == null) { - SliderVolumeSelectedTrackInactiveBackground = UIManager.getColor("Slider.volume.disabledTrackColor"); - } - return SliderVolumeSelectedTrackInactiveBackground; - } - - public Color getSliderThumbBackground() { - if (SliderThumbBackground == null) { - SliderThumbBackground = UIManager.getColor("Slider.activeThumbFill"); - } - return SliderThumbBackground; - } - - public Color getSliderThumbInactiveBackground() { - if (SliderThumbInactiveBackground == null) { - SliderThumbInactiveBackground = UIManager.getColor("Slider.inactiveThumbFill"); - } - return SliderThumbInactiveBackground; - } - - public Color getSliderVolumeThumbBackground() { - if (SliderVolumeThumbBackground == null) { - SliderVolumeThumbBackground = UIManager.getColor("Slider.volume.activeThumbFill"); - } - return SliderVolumeThumbBackground; - } - - public Color getSliderVolumeThumbInactiveBackground() { - if (SliderVolumeThumbInactiveBackground == null) { - SliderVolumeThumbInactiveBackground = UIManager.getColor("Slider.volume.inactiveThumbFill"); - } - return SliderVolumeThumbInactiveBackground; - } - - public Color getSliderThumbInactiveBorderColor() { - if (SliderThumbInactiveBorderColor == null) { - SliderThumbInactiveBorderColor = UIManager.getColor("Slider.thumbBorderColor"); - } - return SliderThumbInactiveBorderColor; - } - - public Color getSliderThumbBorderColor() { - if (SliderThumbBorderColor == null) { - SliderThumbBorderColor = UIManager.getColor("Slider.thumbBorderColorDisabled"); - } - return SliderThumbBorderColor; - } - - //Spinner - - public Color getSpinnerFocusBorderColor() { - if (SpinnerFocusBorderColor == null) { - SpinnerFocusBorderColor = UIManager.getColor("Spinner.focusBorderColor"); - } - return SpinnerFocusBorderColor; - } - - public Color getSpinnerBorderColor() { - if (SpinnerBorderColor == null) { - SpinnerBorderColor = UIManager.getColor("Spinner.activeBorderColor"); - } - return SpinnerBorderColor; - } - - public Color getSpinnerInactiveBorderColor() { - if (SpinnerInactiveBorderColor == null) { - SpinnerInactiveBorderColor = UIManager.getColor("Spinner.inactiveBorderColor"); - } - return SpinnerInactiveBorderColor; - } - - public Color getSpinnerBackground() { - if (SpinnerBackground == null) { - SpinnerBackground = UIManager.getColor("Spinner.activeBackground"); - } - return SpinnerBackground; - } - - public Color getSpinnerInactiveBackground() { - if (SpinnerInactiveBackground == null) { - SpinnerInactiveBackground = UIManager.getColor("Spinner.inactiveBackground"); - } - return SpinnerInactiveBackground; - } - - //TextField - - public Color getTextFieldFocusErrorBorderColor() { - if (TextFieldFocusErrorBorderColor == null) { - TextFieldFocusErrorBorderColor = UIManager.getColor("TextField.border.focusError"); - } - return TextFieldFocusErrorBorderColor; - } - - public Color getTextFieldFocusBorderColor() { - if (TextFieldFocusBorderColor == null) { - TextFieldFocusBorderColor = UIManager.getColor("TextField.border.focus"); - } - return TextFieldFocusBorderColor; - } - - public Color getTextFieldErrorBorderColor() { - if (TextFieldErrorBorderColor == null) { - TextFieldErrorBorderColor = UIManager.getColor("TextField.border.error"); - } - return TextFieldErrorBorderColor; - } - - public Color getTextFieldBorderColor() { - if (TextFieldBorderColor == null) { - TextFieldBorderColor = UIManager.getColor("TextField.border.enabled"); - } - return TextFieldBorderColor; - } - - public Color getTextFieldInactiveBorderColor() { - if (TextFieldInactiveBorderColor == null) { - TextFieldInactiveBorderColor = UIManager.getColor("TextField.border.disabled"); - } - return TextFieldInactiveBorderColor; - } - - public Color getTextFieldBackground() { - if (TextFieldBackground == null) { - TextFieldBackground = UIManager.getColor("TextField.background"); - } - return TextFieldBackground; - } - - public Color getTextFieldInactiveBackground() { - if (TextFieldInactiveBackground == null) { - TextFieldInactiveBackground = UIManager.getColor("TextField.disabledBackground"); - } - return TextFieldInactiveBackground; - } - - //Menu - - public Color getMenuBarBorderColor() { - if (MenuBarBorderColor == null) { - MenuBarBorderColor = UIManager.getColor("MenuBar.borderColor"); - } - return MenuBarBorderColor; - } - - public Color getMenuItemAcceleratorForeground() { - if (MenuItemAcceleratorForeground == null) { - MenuItemAcceleratorForeground = UIManager.getColor("MenuItem.foreground"); - } - return MenuItemAcceleratorForeground; - } - - public Color getMenuItemAcceleratorSelectionForeground() { - if (MenuItemAcceleratorSelectionForeground == null) { - MenuItemAcceleratorSelectionForeground = UIManager.getColor("MenuItem.selectionForeground"); - } - return MenuItemAcceleratorSelectionForeground; - } - - public Color getMenuItemBackground() { - if (MenuItemBackground == null) { - MenuItemBackground = UIManager.getColor("MenuItem.background"); - } - return MenuItemBackground; - } - - public Color getMenuItemForeground() { - if (MenuItemForeground == null) { - MenuItemForeground = UIManager.getColor("MenuItem.foreground"); - } - return MenuItemForeground; - } - - public Color getMenuItemSelectionForeground() { - if (MenuItemSelectionForeground == null) { - MenuItemSelectionForeground = UIManager.getColor("MenuItem.selectionForeground"); - } - return MenuItemSelectionForeground; - } - - //ComboBox - - public Color getComboBoxBackground() { - if (ComboBoxBackground == null) { - ComboBoxBackground = UIManager.getColor("ComboBox.activeBackground"); - } - return ComboBoxBackground; - } - - public Color getComboBoxInactiveBackground() { - if (ComboBoxInactiveBackground == null) { - ComboBoxInactiveBackground = UIManager.getColor("ComboBox.inactiveBackground"); - } - return ComboBoxInactiveBackground; - } - - public Color getComboBoxInactiveForeground() { - if (ComboBoxInactiveForeground == null) { - ComboBoxInactiveForeground = UIManager.getColor("ComboBox.disabledForeground"); - } - return ComboBoxInactiveForeground; - } - - public Color getComboBoxFocusBorderColor() { - if (ComboBoxFocusBorderColor == null) { - ComboBoxFocusBorderColor = UIManager.getColor("ComboBox.focusBorderColor"); - } - return ComboBoxFocusBorderColor; - } - - public Color getComboBoxBorderColor() { - if (ComboBoxBorderColor == null) { - ComboBoxBorderColor = UIManager.getColor("ComboBox.activeBorderColor"); - } - return ComboBoxBorderColor; - } - - public Color getComboBoxInactiveBorderColor() { - if (ComboBoxInactiveBorderColor == null) { - ComboBoxInactiveBorderColor = UIManager.getColor("ComboBox.inactiveBorderColor"); - } - return ComboBoxInactiveBorderColor; - } - - //StatusBar - - public Color getStatusBarBackground() { - if (StatusBarBackground == null) { - StatusBarBackground = UIManager.getColor("StatusBar.background"); - } - return StatusBarBackground; - } - - public Color getStatusBarBorderColor() { - if (StatusBarBorderColor == null) { - StatusBarBorderColor = UIManager.getColor("StatusBar.topColor"); - } - return StatusBarBorderColor; - } - - //CheckBox - - public Color getCheckBoxBackground() { - if (CheckBoxBackground == null) { - CheckBoxBackground = UIManager.getColor("CheckBox.activeFillColor"); - } - return CheckBoxBackground; - } - - public Color getCheckBoxInactiveBackground() { - if (CheckBoxInactiveBackground == null) { - CheckBoxInactiveBackground = UIManager.getColor("CheckBox.inactiveFillColor"); - } - return CheckBoxInactiveBackground; - } - - public Color getCheckBoxBorderColor() { - if (CheckBoxBorderColor == null) { - CheckBoxBorderColor = UIManager.getColor("CheckBox.activeBorderColor"); - } - return CheckBoxBorderColor; - } - - public Color getCheckBoxFocusBorderColor() { - if (CheckBoxFocusBorderColor == null) { - CheckBoxFocusBorderColor = UIManager.getColor("CheckBox.focusBorderColor"); - } - return CheckBoxFocusBorderColor; - } - - public Color getCheckBoxInactiveBorderColor() { - if (CheckBoxInactiveBorderColor == null) { - CheckBoxInactiveBorderColor = UIManager.getColor("CheckBox.inactiveBorderColor"); - } - return CheckBoxInactiveBorderColor; - } - - public Color getCheckBoxCheckColor() { - if (CheckBoxCheckColor == null) { - CheckBoxCheckColor = UIManager.getColor("CheckBox.selectionEnabledColor"); - } - return CheckBoxCheckColor; - } - - public Color getCheckBoxCheckInactiveColor() { - if (CheckBoxCheckInactiveColor == null) { - CheckBoxCheckInactiveColor = UIManager.getColor("CheckBox.selectionDisabledColor"); - } - return CheckBoxCheckInactiveColor; - } - - //Tree - - public Color getTreeAlternativeBackground() { - if (TreeAlternativeBackground == null) { - TreeAlternativeBackground = UIManager.getColor("Tree.alternateRowBackground"); - } - return TreeAlternativeBackground; - } - - public Color getTreeLineColor() { - if (TreeLineColor == null) { - TreeLineColor = UIManager.getColor("Tree.lineUnselected"); - } - return TreeLineColor; - } - - public Color getTreeLineSelectedColor() { - if (TreeLineSelectedColor == null) { - TreeLineSelectedColor = UIManager.getColor("Tree.lineSelected"); - } - return TreeLineSelectedColor; - } - - public Color getTreeLineFocusColor() { - if (TreeLineFocusColor == null) { - TreeLineFocusColor = UIManager.getColor("Tree.lineFocusSelected"); - } - return TreeLineFocusColor; - } - - public Color getTreeSelectionBackground() { - if (TreeSelectionBackground == null) { - TreeSelectionBackground = UIManager.getColor("Tree.unfocusedSelectionBackground"); - } - return TreeSelectionBackground; - } - - public Color getTreeFocusSelectionBackground() { - if (TreeFocusSelectionBackground == null) { - TreeFocusSelectionBackground = UIManager.getColor("Tree.selectionBackground"); - } - return TreeFocusSelectionBackground; - } - - public Color getTreeEditorBorderColor() { - if (TreeEditorBorderColor == null) { - TreeEditorBorderColor = UIManager.getColor("Tree.editorBorderColor"); - } - return TreeEditorBorderColor; - } - - //ScrollBar - - public Color getScrollBarThumbBorderColor() { - if (ScrollBarThumbBorderColor == null) { - ScrollBarThumbBorderColor = UIManager.getColor("ScrollBar.thumbBorderColor"); - } - return ScrollBarThumbBorderColor; - } - - public Color getScrollBarThumbStartColor() { - if (ScrollBarThumbStartColor == null) { - ScrollBarThumbStartColor = UIManager.getColor("ScrollBar.fadeStartColor"); - } - return ScrollBarThumbStartColor; - } - - public Color getScrollBarThumbEndColor() { - if (ScrollBarThumbEndColor == null) { - ScrollBarThumbEndColor = UIManager.getColor("ScrollBar.fadeEndColor"); - } - return ScrollBarThumbEndColor; - } - - public Color getScrollBarTrackBackground() { - if (ScrollBarTrackBackground == null) { - ScrollBarTrackBackground = UIManager.getColor("ScrollBar.trackColor"); - } - return ScrollBarTrackBackground; - } - - //TabbedPane - - public Color getTabbedPaneDragBorderColor() { - if (TabbedPaneDragBorderColor == null) { - TabbedPaneDragBorderColor = UIManager.getColor("TabbedPane.dragBorderColor"); - } - return TabbedPaneDragBorderColor; - } - - public Color getTabbedPaneDropBackground() { - if (TabbedPaneDropBackground == null) { - TabbedPaneDropBackground = UIManager.getColor("TabbedPane.dropFill"); - } - return TabbedPaneDropBackground; - } - - public Color getTabbedPaneTabBorderColor() { - if (TabbedPaneTabBorderColor == null) { - TabbedPaneTabBorderColor = UIManager.getColor("TabbedPane.tabBorderColor"); - } - return TabbedPaneTabBorderColor; - } - - public Color getTabbedPaneAccentColor() { - if (TabbedPaneAccentColor == null) { - TabbedPaneAccentColor = UIManager.getColor("TabbedPane.accent"); - } - return TabbedPaneAccentColor; - } - - public Color getTabbedPaneFocusAccentColor() { - if (TabbedPaneFocusAccentColor == null) { - TabbedPaneFocusAccentColor = UIManager.getColor("TabbedPane.accentFocus"); - } - return TabbedPaneFocusAccentColor; - } - - public Color getTabbedPaneTabSelectedHoverBackground() { - if (TabbedPaneTabSelectedHoverBackground == null) { - TabbedPaneTabSelectedHoverBackground = UIManager.getColor("TabbedPane.selectedHoverBackground"); - } - return TabbedPaneTabSelectedHoverBackground; - } - - public Color getTabbedPaneTabSelectedBackground() { - if (TabbedPaneTabSelectedBackground == null) { - TabbedPaneTabSelectedBackground = UIManager.getColor("TabbedPane.selectedBackground"); - } - return TabbedPaneTabSelectedBackground; - } - - public Color getTabbedPaneTabHoverBackground() { - if (TabbedPaneTabHoverBackground == null) { - TabbedPaneTabHoverBackground = UIManager.getColor("TabbedPane.hoverBackground"); - } - return TabbedPaneTabHoverBackground; - } - - public Color getTabbedPaneTabAreaBackground() { - if (TabbedPaneTabAreaBackground == null) { - TabbedPaneTabAreaBackground = UIManager.getColor("TabbedPane.tabAreaBackground"); - } - return TabbedPaneTabAreaBackground; - } - - public Color getTabbedPaneSelectedForeground() { - if (TabbedPaneSelectedForeground == null) { - TabbedPaneSelectedForeground = UIManager.getColor("TabbedPane.selectedForeground"); - } - return TabbedPaneSelectedForeground; - } - - //TaskPane - - public Color getTaskPaneBorderColor() { - if (TaskPaneBorderColor == null) { - TaskPaneBorderColor = UIManager.getColor("TaskPane.borderColor"); - } - return TaskPaneBorderColor; - } - - public Color getTaskPaneTitleBorderColor() { - if (TaskPaneTitleBorderColor == null) { - TaskPaneTitleBorderColor = UIManager.getColor("TaskPane.titleBorderColor"); - } - return TaskPaneTitleBorderColor; - } - - - //ToolBar - - public Color getToolBarDropBackground() { - if (ToolBarDropBackground == null) { - ToolBarDropBackground = UIManager.getColor("ToolBar.dropColor"); - } - return ToolBarDropBackground; - } - - public Color getToolBarBackground() { - if (ToolBarBackground == null) { - ToolBarBackground = UIManager.getColor("ToolBar.background"); - } - return ToolBarBackground; - } - - public Color getToolBarDockingBackground() { - if (ToolBarDockingBackground == null) { - ToolBarDockingBackground = UIManager.getColor("ToolBar.dockingBackground"); - } - return ToolBarDockingBackground; - } - - public Color getToolBarFloatingBackground() { - if (ToolBarFloatingBackground == null) { - ToolBarFloatingBackground = UIManager.getColor("ToolBar.floatingBackground"); - } - return ToolBarFloatingBackground; - } - - public Color getToolBarDockingBorderColor() { - if (ToolBarDockingBorderColor == null) { - ToolBarDockingBorderColor = UIManager.getColor("ToolBar.dockingForeground"); - } - return ToolBarDockingBorderColor; - } - - public Color getToolBarFloatingBorderColor() { - if (ToolBarFloatingBorderColor == null) { - ToolBarFloatingBorderColor = UIManager.getColor("ToolBar.floatingForeground"); - } - return ToolBarFloatingBorderColor; - } - - - //List - - public Color getListFocusBorderColor() { - if (ListFocusBorderColor == null) { - ListFocusBorderColor = UIManager.getColor("List.focusBorderColor"); - } - return ListFocusBorderColor; - } - - //TabFrame - - public Color getTabFrameTabForeground() { - if (TabFrameTabForeground == null) { - TabFrameTabForeground = UIManager.getColor("TabFrameTab.foreground"); - } - return TabFrameTabForeground; - } - - public Color getTabFrameTabSelectedBackground() { - if (TabFrameTabSelectedBackground == null) { - TabFrameTabSelectedBackground = UIManager.getColor("TabFrameTab.selectedBackground"); - } - return TabFrameTabSelectedBackground; - } - - public Color getTabFrameTabHoverBackground() { - if (TabFrameTabHoverBackground == null) { - TabFrameTabHoverBackground = UIManager.getColor("TabFrameTab.hoverBackground"); - } - return TabFrameTabHoverBackground; - } - - public Color getTabFrameTabSelectedForeground() { - if (TabFrameTabSelectedForeground == null) { - TabFrameTabSelectedForeground = UIManager.getColor("TabFrameTab.selectedForeground"); - } - return TabFrameTabSelectedForeground; - } - - public Color getTabFramePopupHeaderHoverBackground() { - if (TabFramePopupHeaderHoverBackground == null) { - TabFramePopupHeaderHoverBackground = UIManager.getColor("TabFramePopup.headerHoverBackground"); - } - return TabFramePopupHeaderHoverBackground; - } - - public Color getTabFramePopupHeaderSelectedBackground() { - if (TabFramePopupHeaderSelectedBackground == null) { - TabFramePopupHeaderSelectedBackground = UIManager.getColor("TabFramePopup.headerSelectedBackground"); - } - return TabFramePopupHeaderSelectedBackground; - } - - public Color getTabFramePopupHeaderSelectedHoverBackground() { - if (TabFramePopupHeaderSelectedHoverBackground == null) { - TabFramePopupHeaderSelectedHoverBackground = UIManager.getColor("TabFramePopup.headerSelectedHoverBackground"); - } - return TabFramePopupHeaderSelectedHoverBackground; - } - - public Color getTabFramePopupHeaderFocusHoverBackground() { - if (TabFramePopupHeaderFocusHoverBackground == null) { - TabFramePopupHeaderFocusHoverBackground = UIManager.getColor("TabFramePopup.headerFocusHoverBackground"); - } - return TabFramePopupHeaderFocusHoverBackground; - } - - public Color getTabFramePopupHeaderFocusSelectedBackground() { - if (TabFramePopupHeaderFocusSelectedBackground == null) { - TabFramePopupHeaderFocusSelectedBackground = UIManager.getColor("TabFramePopup.headerFocusSelectedBackground"); - } - return TabFramePopupHeaderFocusSelectedBackground; - } - - public Color getTabFramePopupHeaderFocusSelectedHoverBackground() { - if (TabFramePopupHeaderFocusSelectedHoverBackground == null) { - TabFramePopupHeaderFocusSelectedHoverBackground = UIManager.getColor("TabFramePopup.headerFocusSelectedHoverBackground"); - } - return TabFramePopupHeaderFocusSelectedHoverBackground; - } - - public Color getTabFramePopupHeaderBackground() { - if (TabFramePopupHeaderBackground == null) { - TabFramePopupHeaderBackground = UIManager.getColor("TabFramePopup.headerBackground"); - } - return TabFramePopupHeaderBackground; - } - - public Color getTabFramePopupButtonHoverBackground() { - if (TabFramePopupButtonHoverBackground == null) { - TabFramePopupButtonHoverBackground = UIManager.getColor("TabFramePopup.headerButtonHoverBackground"); - } - return TabFramePopupButtonHoverBackground; - } - - public Color getTabFramePopupButtonClickBackground() { - if (TabFramePopupButtonClickBackground == null) { - TabFramePopupButtonClickBackground = UIManager.getColor("TabFramePopup.headerButtonClickBackground"); - } - return TabFramePopupButtonClickBackground; - } - - public Color getTabFramePopupFocusHeaderBackground() { - if (TabFramePopupFocusHeaderBackground == null) { - TabFramePopupFocusHeaderBackground = UIManager.getColor("TabFramePopup.headerFocusBackground"); - } - return TabFramePopupFocusHeaderBackground; - } - - public Color getTabFramePopupButtonFocusHoverBackground() { - if (TabFramePopupButtonFocusHoverBackground == null) { - TabFramePopupButtonFocusHoverBackground = UIManager.getColor("TabFramePopup.headerButtonFocusHoverBackground"); - } - return TabFramePopupButtonFocusHoverBackground; - } - - public Color getTabFramePopupButtonFocusClickBackground() { - if (TabFramePopupButtonFocusClickBackground == null) { - TabFramePopupButtonFocusClickBackground = UIManager.getColor("TabFramePopup.headerButtonFocusClickBackground"); - } - return TabFramePopupButtonFocusClickBackground; - } - - public Color getTabFramePopupBorderColor() { - if (TabFramePopupBorderColor == null) { - TabFramePopupBorderColor = UIManager.getColor("TabFramePopup.borderColor"); - } - return TabFramePopupBorderColor; - } - - public Color getTabFrameBorderColor() { - if (TabFrameBorderColor == null) { - TabFrameBorderColor = UIManager.getColor("TabFrame.line"); - } - return TabFrameBorderColor; - } - - //FileChooser - - public Color getFileChooserListViewBorderColor() { - if (FileChooserListViewBorderColor == null) { - FileChooserListViewBorderColor = UIManager.getColor("FileChooser.borderColor"); - } - return FileChooserListViewBorderColor; - } - - public Color getFilePaneListViewBackground() { - if (FilePaneListViewBackground == null) { - FilePaneListViewBackground = UIManager.getColor("FileChooser.listViewBackground"); - } - return FilePaneListViewBackground; - } - - //Table - - public Color getTableHeaderBorderColor() { - if (TableHeaderBorderColor == null) { - TableHeaderBorderColor = UIManager.getColor("TableHeader.borderColor"); - } - return TableHeaderBorderColor; - } - - public Color getTableRowBorderColor() { - if (TableRowBorderColor == null) { - TableRowBorderColor = UIManager.getColor("Table.focusRowBorderColor"); - } - return TableRowBorderColor; - } - - public Color getTableFocusBorderColor() { - if (TableFocusBorderColor == null) { - TableFocusBorderColor = UIManager.getColor("Table.focusBorderColor"); - } - return TableFocusBorderColor; - } - - public Color getTableHeaderBackground() { - if (TableHeaderBackground == null) { - TableHeaderBackground = UIManager.getColor("TableHeader.background"); - } - return TableHeaderBackground; - } - - public Color getTableAlternativeBackground() { - if (TableAlternativeBackground == null) { - TableAlternativeBackground = UIManager.getColor("Table.alternateRowBackground"); - } - return TableAlternativeBackground; - } - - public Color getTableDropLineColor() { - if (TableDropLineColor == null) { - TableDropLineColor = UIManager.getColor("Table.dropLineColor"); - } - return TableDropLineColor; - } - - public Color getTableDropLineShortColor() { - if (TableDropLineShortColor == null) { - TableDropLineShortColor = UIManager.getColor("Table.dropLineShortColor"); - } - return TableDropLineShortColor; - } - - public Color getTableBackground() { - if (TableBackground == null) { - TableBackground = UIManager.getColor("Table.background"); - } - return TableBackground; - } - - public Color getTableFocusSelectionBackground() { - if (TableFocusSelectionBackground == null) { - TableFocusSelectionBackground = UIManager.getColor("Table.focusSelectionBackground"); - } - return TableFocusSelectionBackground; - } - - public Color getTableSelectionBackground() { - if (TableSelectionBackground == null) { - TableSelectionBackground = UIManager.getColor("Table.selectionNoFocusBackground"); - } - return TableSelectionBackground; - } - - public Color getTableGridColor() { - if (TableGridColor == null) { - TableGridColor = UIManager.getColor("Table.gridColor"); - } - return TableGridColor; - } - - //ColorChooser - - public Color getColorChooserPreviewBorderColor() { - if (ColorChooserPreviewBorderColor == null) { - ColorChooserPreviewBorderColor = UIManager.getColor("ColorChooser.previewBorderColor"); - } - return ColorChooserPreviewBorderColor; - } - - public Color getColorChooserDefaultRecentColor() { - if (ColorChooserDefaultRecentColor == null) { - ColorChooserDefaultRecentColor = UIManager.getColor("ColorChooser.swatchesDefaultRecentColor"); - } - return ColorChooserDefaultRecentColor; - } - - public Color getColorChooserSliderBorderColor() { - if (ColorChooserSliderBorderColor == null) { - ColorChooserSliderBorderColor = UIManager.getColor("ColorChooser.sliderBorderColor"); - } - return ColorChooserSliderBorderColor; - } - - public Color getColorChooserSliderShadowColor() { - if (ColorChooserSliderShadowColor == null) { - ColorChooserSliderShadowColor = UIManager.getColor("ColorChooser.sliderShadow"); - } - return ColorChooserSliderShadowColor; - } - - public Color getColorChooserSliderKnobColor() { - if (ColorChooserSliderKnobColor == null) { - ColorChooserSliderKnobColor = UIManager.getColor("ColorChooser.sliderKnobColor"); - } - return ColorChooserSliderKnobColor; - } - - public Color getColorChooserColorWheelDropBackground() { - if (ColorChooserColorWheelDropBackground == null) { - ColorChooserColorWheelDropBackground = UIManager.getColor("ColorChooser.colorWheelDropBackgroundColor"); - } - return ColorChooserColorWheelDropBackground; - } - - public Color getColorChooserColorWheelDropBorderColor() { - if (ColorChooserColorWheelDropBorderColor == null) { - ColorChooserColorWheelDropBorderColor = UIManager.getColor("ColorChooser.colorWheelDropBorderColor"); - } - return ColorChooserColorWheelDropBorderColor; - } - - public Color getColorChooserSwatchBorderColor() { - if (ColorChooserSwatchBorderColor == null) { - ColorChooserSwatchBorderColor = UIManager.getColor("ColorChooser.swatchBorderColor"); - } - return ColorChooserSwatchBorderColor; - } - - public Color getColorChooserPipetteBorderColor() { - if (ColorChooserPipetteBorderColor == null) { - ColorChooserPipetteBorderColor = UIManager.getColor("ColorChooser.pipetteBorderColor"); - } - return ColorChooserPipetteBorderColor; - } - - public Color getColorChooserSwatchGridColor() { - if (ColorChooserSwatchGridColor == null) { - ColorChooserSwatchGridColor = UIManager.getColor("ColorChooser.swatchGridColor"); - } - return ColorChooserSwatchGridColor; - } - - //Panel - - public Color getPanelBackground() { - if (PanelBackground == null) { - PanelBackground = UIManager.getColor("Panel.background"); - } - return PanelBackground; - } - - //RadioButton - - public Color getRadioButtonBackground() { - if (RadioButtonBackground == null) { - RadioButtonBackground = UIManager.getColor("RadioButton.activeFillColor"); - } - return RadioButtonBackground; - } - - public Color getRadioButtonInactiveBackground() { - if (RadioButtonInactiveBackground == null) { - RadioButtonInactiveBackground = UIManager.getColor("RadioButton.inactiveFillColor"); - } - return RadioButtonInactiveBackground; - } - - public Color getRadioButtonFocusBorderColor() { - if (RadioButtonFocusBorderColor == null) { - RadioButtonFocusBorderColor = UIManager.getColor("RadioButton.focusBorderColor"); - } - return RadioButtonFocusBorderColor; - } - - public Color getRadioButtonBorderColor() { - if (RadioButtonBorderColor == null) { - RadioButtonBorderColor = UIManager.getColor("RadioButton.activeBorderColor"); - } - return RadioButtonBorderColor; - } - - public Color getRadioButtonInactiveBorderColor() { - if (RadioButtonInactiveBorderColor == null) { - RadioButtonInactiveBorderColor = UIManager.getColor("RadioButton.inactiveBorderColor"); - } - return RadioButtonInactiveBorderColor; - } - - public Color getRadioButtonCheckColor() { - if (RadioButtonCheckColor == null) { - RadioButtonCheckColor = UIManager.getColor("RadioButton.selectionEnabledColor"); - } - return RadioButtonCheckColor; - } - - public Color getRadioButtonCheckInactiveColor() { - if (RadioButtonCheckInactiveColor == null) { - RadioButtonCheckInactiveColor = UIManager.getColor("RadioButton.selectionDisabledColor"); - } - return RadioButtonCheckInactiveColor; - } - - //DesktopIcon - - public Color getDesktopIconHoverBackground() { - if (DesktopIconHoverBackground == null) { - DesktopIconHoverBackground = UIManager.getColor("DesktopIcon.hoverColor"); - } - return DesktopIconHoverBackground; - } - - public Color getDesktopIconClickBackground() { - if (DesktopIconClickBackground == null) { - DesktopIconClickBackground = UIManager.getColor("DesktopIcon.clickColor"); - } - return DesktopIconClickBackground; - } - - public Color getDesktopIconBorderColor() { - if (DesktopIconBorderColor == null) { - DesktopIconBorderColor = UIManager.getColor("DesktopIcon.borderColor"); - } - return DesktopIconBorderColor; - } - - //InternalFrame - - public Color getInternalFrameBorderShadowColor() { - if (InternalFrameBorderShadowColor == null) { - InternalFrameBorderShadowColor = UIManager.getColor("InternalFrame.borderShadowColor"); - } - return InternalFrameBorderShadowColor; - } - - public Color getInternalFrameTitleBackground() { - if (InternalFrameTitleBackground == null) { - InternalFrameTitleBackground = UIManager.getColor("InternalFrameTitlePane.backgroundColor"); - } - return InternalFrameTitleBackground; - } - - public Color getInternalFrameTitleSelectedBackground() { - if (InternalFrameTitleSelectedBackground == null) { - InternalFrameTitleSelectedBackground = UIManager.getColor("InternalFrameTitlePane.selectedBackgroundColor"); - } - return InternalFrameTitleSelectedBackground; - } - - public Color getInternalFrameTitleSelectedForeground() { - if (InternalFrameTitleSelectedForeground == null) { - InternalFrameTitleSelectedForeground = UIManager.getColor("InternalFrameTitlePane.selectedTextForeground"); - } - return InternalFrameTitleSelectedForeground; - } - - public Color getInternalFrameTitleForeground() { - if (InternalFrameTitleForeground == null) { - InternalFrameTitleForeground = UIManager.getColor("InternalFrameTitlePane.textForeground"); - } - return InternalFrameTitleForeground; - } - - public Color getInternalFrameSelectedButtonBackground() { - if (InternalFrameSelectedButtonBackground == null) { - InternalFrameSelectedButtonBackground = UIManager.getColor("InternalFrameTitlePane.selectedButtonColor"); - } - return InternalFrameSelectedButtonBackground; - } - - public Color getInternalFrameSelectedButtonHoverBackground() { - if (InternalFrameSelectedButtonHoverBackground == null) { - InternalFrameSelectedButtonHoverBackground = UIManager.getColor("InternalFrameTitlePane.selectedButtonHoverColor"); - } - return InternalFrameSelectedButtonHoverBackground; - } - - public Color getInternalFrameSelectedButtonClickBackground() { - if (InternalFrameSelectedButtonClickBackground == null) { - InternalFrameSelectedButtonClickBackground = UIManager.getColor("InternalFrameTitlePane.selectedButtonClickColor"); - } - return InternalFrameSelectedButtonClickBackground; - } - - public Color getInternalFrameButtonBackground() { - if (InternalFrameButtonBackground == null) { - InternalFrameButtonBackground = UIManager.getColor("InternalFrameTitlePane.buttonColor"); - } - return InternalFrameButtonBackground; - } - - public Color getInternalFrameButtonHoverBackground() { - if (InternalFrameButtonHoverBackground == null) { - InternalFrameButtonHoverBackground = UIManager.getColor("InternalFrameTitlePane.buttonHoverColor"); - } - return InternalFrameButtonHoverBackground; - } - - public Color getInternalFrameButtonClickBackground() { - if (InternalFrameButtonClickBackground == null) { - InternalFrameButtonClickBackground = UIManager.getColor("InternalFrameTitlePane.buttonClickColor"); - } - return InternalFrameButtonClickBackground; - } - - public Color getInternalFrameBorderColor() { - if (InternalFrameBorderColor == null) { - InternalFrameBorderColor = UIManager.getColor("InternalFrameTitlePane.borderColor"); - } - return InternalFrameBorderColor; - } - - //ToolTip - - public Color getToolTipBorderColor() { - if (ToolTipBorderColor == null) { - ToolTipBorderColor = UIManager.getColor("ToolTip.borderColor"); - } - return ToolTipBorderColor; - } - - public Color getToolTipShadowColor() { - if (ToolTipShadowColor == null) { - ToolTipShadowColor = UIManager.getColor("ToolTip.borderShadowColor"); - } - return ToolTipShadowColor; - } - - //ProgressBar - - public Color getProgressBarTrackBackground() { - if (ProgressBarTrackBackground == null) { - ProgressBarTrackBackground = UIManager.getColor("ProgressBar.trackColor"); - } - return ProgressBarTrackBackground; - } - - public Color getProgressBarProgressColor() { - if (ProgressBarProgressColor == null) { - ProgressBarProgressColor = UIManager.getColor("ProgressBar.progressColor"); - } - return ProgressBarProgressColor; - } - - public Color getProgressBarIndeterminateStartColor() { - if (ProgressBarIndeterminateStartColor == null) { - ProgressBarIndeterminateStartColor = UIManager.getColor("ProgressBar.indeterminateStartColor"); - } - return ProgressBarIndeterminateStartColor; - } - - public Color getProgressBarIndeterminateEndColor() { - if (ProgressBarIndeterminateEndColor == null) { - ProgressBarIndeterminateEndColor = UIManager.getColor("ProgressBar.indeterminateEndColor"); - } - return ProgressBarIndeterminateEndColor; - } - - public Color getProgressBarFailedColor() { - if (ProgressBarFailedColor == null) { - ProgressBarFailedColor = UIManager.getColor("ProgressBar.failedColor"); - } - return ProgressBarFailedColor; - } - - public Color getProgressBarFailedEndColor() { - if (ProgressBarFailedEndColor == null) { - ProgressBarFailedEndColor = UIManager.getColor("ProgressBar.failedEndColor"); - } - return ProgressBarFailedEndColor; - } - - public Color getProgressBarPassedColor() { - if (ProgressBarPassedColor == null) { - ProgressBarPassedColor = UIManager.getColor("ProgressBar.passedColor"); - } - return ProgressBarPassedColor; - } - - public Color getProgressBarPassedEndColor() { - if (ProgressBarPassedEndColor == null) { - ProgressBarPassedEndColor = UIManager.getColor("ProgressBar.passedEndColor"); - } - return ProgressBarPassedEndColor; - } - - //Glow - - public Color getErrorGlow() { - if (ErrorGlow == null) { - ErrorGlow = UIManager.getColor("glowError"); - } - return ErrorGlow; - } - - public Color getErrorFocusGlow() { - if (ErrorFocusGlow == null) { - ErrorFocusGlow = UIManager.getColor("glowFocusError"); - } - return ErrorFocusGlow; - } - - public Color getFocusGlow() { - if (FocusGlow == null) { - FocusGlow = UIManager.getColor("glowFocus"); - } - return FocusGlow; - } - - public Color getWarningGlow() { - if (WarningGlow == null) { - WarningGlow = UIManager.getColor("glowWarning"); - } - return WarningGlow; - } - - public Color getTitledBorderBorderColor() { - if (TitledBorderBorderColor == null) { - TitledBorderBorderColor = UIManager.getColor("TitledBorder.borderColor"); - } - return TitledBorderBorderColor; - } -} diff --git a/src/main/java/com/weis/darklaf/defaults/DarkDefaults.java b/src/main/java/com/weis/darklaf/defaults/DarkDefaults.java deleted file mode 100644 index 7e514690..00000000 --- a/src/main/java/com/weis/darklaf/defaults/DarkDefaults.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2019 Jannis Weis - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -package com.weis.darklaf.defaults; - -import javax.swing.*; - -@SuppressWarnings("WeakerAccess") -public class DarkDefaults { - - protected static DarkDefaults instance; - protected int ButtonArc = -1; - protected int ButtonFocusArc = -1; - protected int ButtonSquareFocusArc = -1; - protected int ButtonBorderSize = -1; - protected int ButtonShadowSize = -1; - protected int SpinnerArc = -1; - protected int TextFieldBorderSize = -1; - protected int SpinnerBorderSize = -1; - protected int TabFrameTabHeight = -1; - protected int TaskPaneArc = -1; - protected int ButtonSquareArc = -1; - protected int ButtonMinimumArc = -1; - - public static DarkDefaults get() { - if (instance == null) { - instance = new DarkDefaults(); - } - return instance; - } - - public static void uninstall() { - if (instance == null) return; - instance.uninstallDefaults(); - instance = null; - } - - protected void uninstallDefaults() { - ButtonArc = -1; - ButtonFocusArc = -1; - ButtonSquareFocusArc = -1; - ButtonBorderSize = -1; - ButtonShadowSize = -1; - SpinnerArc = -1; - TextFieldBorderSize = -1; - SpinnerBorderSize = -1; - TabFrameTabHeight = -1; - TaskPaneArc = -1; - ButtonSquareArc = -1; - ButtonMinimumArc = -1; - } - - public int getButtonArc() { - if (ButtonArc < 0) { - ButtonArc = UIManager.getInt("Button.arc"); - } - return ButtonArc; - } - - public int getButtonFocusArc() { - if (ButtonFocusArc < 0) { - ButtonFocusArc = UIManager.getInt("Button.focusArc"); - } - return ButtonFocusArc; - } - - public int getButtonSquareFocusArc() { - if (ButtonSquareFocusArc < 0) { - ButtonSquareFocusArc = UIManager.getInt("Button.squareFocusArc"); - } - return ButtonSquareFocusArc; - } - - public int getButtonBorderSize() { - if (ButtonBorderSize < 0) { - ButtonBorderSize = UIManager.getInt("Button.borderThickness"); - } - return ButtonBorderSize; - } - - public int getButtonShadowSize() { - if (ButtonShadowSize < 0) { - ButtonShadowSize = UIManager.getInt("Button.shadowHeight"); - } - return ButtonShadowSize; - } - - public int getSpinnerArc() { - if (SpinnerArc < 0) { - SpinnerArc = UIManager.getInt("Spinner.arc"); - } - return SpinnerArc; - } - - public int getTextFieldBorderSize() { - if (TextFieldBorderSize < 0) { - TextFieldBorderSize = UIManager.getInt("TextField.borderThickness"); - } - return TextFieldBorderSize; - } - - public int getSpinnerBorderSize() { - if (SpinnerBorderSize < 0) { - SpinnerBorderSize = UIManager.getInt("Spinner.borderThickness"); - } - return SpinnerBorderSize; - } - - public int getTabFrameTabHeight() { - if (TabFrameTabHeight < 0) { - TabFrameTabHeight = UIManager.getInt("TabFrame.tabHeight"); - } - return TabFrameTabHeight; - } - - public int getTaskPaneArc() { - if (TaskPaneArc < 0) { - TaskPaneArc = UIManager.getInt("TaskPane.arc"); - } - return TaskPaneArc; - } - - public int getButtonSquareArc() { - if (ButtonSquareArc < 0) { - ButtonSquareArc = UIManager.getInt("Button.squareArc"); - } - return ButtonSquareArc; - } - - public int getButtonMinimumArc() { - if (ButtonMinimumArc < 0) { - ButtonMinimumArc = UIManager.getInt("Button.minimumArc"); - } - return ButtonMinimumArc; - } -} diff --git a/src/main/java/com/weis/darklaf/defaults/DarkIcons.java b/src/main/java/com/weis/darklaf/defaults/DarkIcons.java deleted file mode 100644 index 61fd7404..00000000 --- a/src/main/java/com/weis/darklaf/defaults/DarkIcons.java +++ /dev/null @@ -1,411 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2019 Jannis Weis - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -package com.weis.darklaf.defaults; - -import com.weis.darklaf.icons.UIAwareIcon; - -import javax.swing.*; - -@SuppressWarnings("WeakerAccess") -public class DarkIcons { - - protected static DarkIcons instance; - protected Icon SplitPaneDividerLeftOneTouch; - protected Icon SplitPaneDividerRightOneTouch; - protected Icon SplitPaneDividerTopOneTouch; - protected Icon SplitPaneDividerBottomOneTouch; - protected Icon SplitPaneDividerVerticalSplit; - protected Icon SplitPaneDividerHorizontalSplit; - protected Icon PasswordFiledShow; - protected Icon PasswordFiledShowPressed; - protected Icon TreeExpandedFocusedSelected; - protected Icon TreeExpandedSelected; - protected Icon TreeExpandedFocused; - protected Icon TreeExpanded; - protected Icon TreeCollapsedFocusedSelected; - protected Icon TreeCollapsedSelected; - protected Icon TreeCollapsedFocused; - protected Icon TreeCollapsed; - protected Icon TextFieldClearHover; - protected Icon TextFieldClear; - protected Icon TextFieldSearchHistory; - protected Icon TextFieldSearch; - protected Icon SliderVolumeLevel0; - protected Icon SliderVolumeLevel1; - protected Icon SliderVolumeLevel2; - protected Icon SliderVolumeLevel3; - protected Icon SliderVolumeLevel4; - protected Icon SliderVolumeLevel0Inactive; - protected Icon SliderVolumeLevel1Inactive; - protected Icon SliderVolumeLevel2Inactive; - protected Icon SliderVolumeLevel3Inactive; - protected Icon SliderVolumeLevel4Inactive; - protected Icon ColorChooserPipette; - protected Icon ColorChooserPipetteHover; - protected Icon TabbedPaneMoreTabs; - protected Icon TabbedPaneNewTabs; - protected Icon ToolBarHorizontalGrip; - protected Icon ToolBarVerticalGrip; - protected UIAwareIcon SpinnerMathUp; - protected UIAwareIcon SpinnerMathDown; - protected UIAwareIcon SpinnerArrowUp; - protected UIAwareIcon SpinnerArrowDown; - - public static DarkIcons get() { - if (instance == null) { - instance = new DarkIcons(); - } - return instance; - } - - public static void uninstall() { - if (instance == null) return; - instance.uninstallIcons(); - instance = null; - } - - protected void uninstallIcons() { - SplitPaneDividerLeftOneTouch = null; - SplitPaneDividerRightOneTouch = null; - SplitPaneDividerTopOneTouch = null; - SplitPaneDividerBottomOneTouch = null; - SplitPaneDividerVerticalSplit = null; - SplitPaneDividerHorizontalSplit = null; - PasswordFiledShow = null; - PasswordFiledShowPressed = null; - TreeExpandedFocusedSelected = null; - TreeExpandedSelected = null; - TreeExpandedFocused = null; - TreeExpanded = null; - TreeCollapsedFocusedSelected = null; - TreeCollapsedSelected = null; - TreeCollapsedFocused = null; - TreeCollapsed = null; - TextFieldClearHover = null; - TextFieldClear = null; - TextFieldSearchHistory = null; - TextFieldSearch = null; - SliderVolumeLevel0 = null; - SliderVolumeLevel1 = null; - SliderVolumeLevel2 = null; - SliderVolumeLevel3 = null; - SliderVolumeLevel4 = null; - SliderVolumeLevel0Inactive = null; - SliderVolumeLevel1Inactive = null; - SliderVolumeLevel2Inactive = null; - SliderVolumeLevel3Inactive = null; - SliderVolumeLevel4Inactive = null; - ColorChooserPipette = null; - ColorChooserPipetteHover = null; - TabbedPaneMoreTabs = null; - TabbedPaneNewTabs = null; - ToolBarHorizontalGrip = null; - ToolBarVerticalGrip = null; - SpinnerMathUp = null; - SpinnerMathDown = null; - SpinnerArrowUp = null; - SpinnerArrowDown = null; - } - - public Icon getSplitPaneDividerLeftOneTouch() { - if (SplitPaneDividerLeftOneTouch == null) { - SplitPaneDividerLeftOneTouch = UIManager.getIcon("SplitPaneDivider.leftOneTouch.icon"); - } - return SplitPaneDividerLeftOneTouch; - } - - public Icon getSplitPaneDividerRightOneTouch() { - if (SplitPaneDividerRightOneTouch == null) { - SplitPaneDividerRightOneTouch = UIManager.getIcon("SplitPaneDivider.rightOneTouch.icon"); - } - return SplitPaneDividerRightOneTouch; - } - - public Icon getSplitPaneDividerTopOneTouch() { - if (SplitPaneDividerTopOneTouch == null) { - SplitPaneDividerTopOneTouch = UIManager.getIcon("SplitPaneDivider.topOneTouch.icon"); - } - return SplitPaneDividerTopOneTouch; - } - - public Icon getSplitPaneDividerBottomOneTouch() { - if (SplitPaneDividerBottomOneTouch == null) { - SplitPaneDividerBottomOneTouch = UIManager.getIcon("SplitPaneDivider.bottomOneTouch.icon"); - } - return SplitPaneDividerBottomOneTouch; - } - - public Icon getSplitPaneDividerVerticalSplit() { - if (SplitPaneDividerVerticalSplit == null) { - SplitPaneDividerVerticalSplit = UIManager.getIcon("SplitPane.verticalGlue.icon"); - } - return SplitPaneDividerVerticalSplit; - } - - public Icon getSplitPaneDividerHorizontalSplit() { - if (SplitPaneDividerHorizontalSplit == null) { - SplitPaneDividerHorizontalSplit = UIManager.getIcon("SplitPane.horizontalGlue.icon"); - } - return SplitPaneDividerHorizontalSplit; - } - - public Icon getPasswordFiledShow() { - if (PasswordFiledShow == null) { - PasswordFiledShow = UIManager.getIcon("PasswordField.show.icon"); - } - return PasswordFiledShow; - } - - public Icon getPasswordFiledShowPressed() { - if (PasswordFiledShowPressed == null) { - PasswordFiledShowPressed = UIManager.getIcon("PasswordField.showPressed.icon"); - } - return PasswordFiledShowPressed; - } - - public Icon getTreeExpandedFocusedSelected() { - if (TreeExpandedFocusedSelected == null) { - TreeExpandedFocusedSelected = UIManager.getIcon("Tree.expanded.selected.focused.icon"); - } - return TreeExpandedFocusedSelected; - } - - public Icon getTreeExpandedSelected() { - if (TreeExpandedSelected == null) { - TreeExpandedSelected = UIManager.getIcon("Tree.expanded.selected.unfocused.icon"); - } - return TreeExpandedSelected; - } - - public Icon getTreeExpandedFocused() { - if (TreeExpandedFocused == null) { - TreeExpandedFocused = UIManager.getIcon("Tree.expanded.unselected.focused.icon"); - } - return TreeExpandedFocused; - } - - public Icon getTreeExpanded() { - if (TreeExpanded == null) { - TreeExpanded = UIManager.getIcon("Tree.expanded.unselected.unfocused.icon"); - } - return TreeExpanded; - } - - public Icon getTreeCollapsedFocusedSelected() { - if (TreeCollapsedFocusedSelected == null) { - TreeCollapsedFocusedSelected = UIManager.getIcon("Tree.collapsed.selected.focused.icon"); - } - return TreeCollapsedFocusedSelected; - } - - public Icon getTreeCollapsedSelected() { - if (TreeCollapsedSelected == null) { - TreeCollapsedSelected = UIManager.getIcon("Tree.collapsed.selected.unfocused.icon"); - } - return TreeCollapsedSelected; - } - - public Icon getTreeCollapsedFocused() { - if (TreeCollapsedFocused == null) { - TreeCollapsedFocused = UIManager.getIcon("Tree.collapsed.unselected.focused.icon"); - } - return TreeCollapsedFocused; - } - - public Icon getTreeCollapsed() { - if (TreeCollapsed == null) { - TreeCollapsed = UIManager.getIcon("Tree.collapsed.unselected.unfocused.icon"); - } - return TreeCollapsed; - } - - public Icon getTextFieldClearHover() { - if (TextFieldClearHover == null) { - TextFieldClearHover = UIManager.getIcon("TextField.search.clearHover.icon"); - } - return TextFieldClearHover; - } - - public Icon getTextFieldClear() { - if (TextFieldClear == null) { - TextFieldClear = UIManager.getIcon("TextField.search.clear.icon"); - } - return TextFieldClear; - } - - public Icon getTextFieldSearchHistory() { - if (TextFieldSearchHistory == null) { - TextFieldSearchHistory = UIManager.getIcon("TextField.search.searchWithHistory.icon"); - } - return TextFieldSearchHistory; - } - - public Icon getTextFieldSearch() { - if (TextFieldSearch == null) { - TextFieldSearch = UIManager.getIcon("TextField.search.search.icon"); - } - return TextFieldSearch; - } - - public Icon getSliderVolumeLevel0() { - if (SliderVolumeLevel0 == null) { - SliderVolumeLevel0 = UIManager.getIcon("Slider.volume.enabled_level_0.icon"); - } - return SliderVolumeLevel0; - } - - public Icon getSliderVolumeLevel1() { - if (SliderVolumeLevel1 == null) { - SliderVolumeLevel1 = UIManager.getIcon("Slider.volume.enabled_level_1.icon"); - } - return SliderVolumeLevel1; - } - - public Icon getSliderVolumeLevel2() { - if (SliderVolumeLevel2 == null) { - SliderVolumeLevel2 = UIManager.getIcon("Slider.volume.enabled_level_2.icon"); - } - return SliderVolumeLevel2; - } - - public Icon getSliderVolumeLevel3() { - if (SliderVolumeLevel3 == null) { - SliderVolumeLevel3 = UIManager.getIcon("Slider.volume.enabled_level_3.icon"); - } - return SliderVolumeLevel3; - } - - public Icon getSliderVolumeLevel4() { - if (SliderVolumeLevel4 == null) { - SliderVolumeLevel4 = UIManager.getIcon("Slider.volume.enabled_level_4.icon"); - } - return SliderVolumeLevel4; - } - - public Icon getSliderVolumeLevel0Inactive() { - if (SliderVolumeLevel0Inactive == null) { - SliderVolumeLevel0Inactive = UIManager.getIcon("Slider.volume.disabled_level_0.icon"); - } - return SliderVolumeLevel0Inactive; - } - - public Icon getSliderVolumeLevel1Inactive() { - if (SliderVolumeLevel1Inactive == null) { - SliderVolumeLevel1Inactive = UIManager.getIcon("Slider.volume.disabled_level_1.icon"); - } - return SliderVolumeLevel1Inactive; - } - - public Icon getSliderVolumeLevel2Inactive() { - if (SliderVolumeLevel2Inactive == null) { - SliderVolumeLevel2Inactive = UIManager.getIcon("Slider.volume.disabled_level_2.icon"); - } - return SliderVolumeLevel2Inactive; - } - - public Icon getSliderVolumeLevel3Inactive() { - if (SliderVolumeLevel3Inactive == null) { - SliderVolumeLevel3Inactive = UIManager.getIcon("Slider.volume.disabled_level_3.icon"); - } - return SliderVolumeLevel3Inactive; - } - - public Icon getSliderVolumeLevel4Inactive() { - if (SliderVolumeLevel4Inactive == null) { - SliderVolumeLevel4Inactive = UIManager.getIcon("Slider.volume.disabled_level_4.icon"); - } - return SliderVolumeLevel4Inactive; - } - - public Icon getColorChooserPipette() { - if (ColorChooserPipette == null) { - ColorChooserPipette = UIManager.getIcon("ColorChooser.pipette.icon"); - } - return ColorChooserPipette; - } - - public Icon getColorChooserPipetteHover() { - if (ColorChooserPipetteHover == null) { - ColorChooserPipetteHover = UIManager.getIcon("ColorChooser.pipetteRollover.icon"); - } - return ColorChooserPipetteHover; - } - - public UIAwareIcon getSpinnerArrowDown() { - if (SpinnerArrowDown == null) { - SpinnerArrowDown = (UIAwareIcon) UIManager.getIcon("ArrowButton.down.icon"); - } - return SpinnerArrowDown; - } - - public UIAwareIcon getSpinnerArrowUp() { - if (SpinnerArrowUp == null) { - SpinnerArrowUp = (UIAwareIcon) UIManager.getIcon("ArrowButton.up.icon"); - } - return SpinnerArrowUp; - } - - public UIAwareIcon getSpinnerMathDown() { - if (SpinnerMathDown == null) { - SpinnerMathDown = (UIAwareIcon) UIManager.getIcon("Spinner.minus.icon"); - } - return SpinnerMathDown; - } - - public UIAwareIcon getSpinnerMathUp() { - if (SpinnerMathUp == null) { - SpinnerMathUp = (UIAwareIcon) UIManager.getIcon("Spinner.plus.icon"); - } - return SpinnerMathUp; - } - - public Icon getTabbedPaneMoreTabs() { - if (TabbedPaneMoreTabs == null) { - TabbedPaneMoreTabs = UIManager.getIcon("TabbedPane.moreTabs.icon"); - } - return TabbedPaneMoreTabs; - } - - public Icon getTabbedPaneNewTabs() { - if (TabbedPaneNewTabs == null) { - TabbedPaneNewTabs = UIManager.getIcon("TabbedPane.newTab.icon"); - } - return TabbedPaneNewTabs; - } - - public Icon getToolBarHorizontalGrip() { - if (ToolBarHorizontalGrip == null) { - ToolBarHorizontalGrip = UIManager.getIcon("ToolBar.horizontalGrip.icon"); - } - return ToolBarHorizontalGrip; - } - - public Icon getToolBarVerticalGrip() { - if (ToolBarVerticalGrip == null) { - ToolBarVerticalGrip = UIManager.getIcon("ToolBar.verticalGrip.icon"); - } - return ToolBarVerticalGrip; - } -} - diff --git a/src/main/java/com/weis/darklaf/theme/Theme.java b/src/main/java/com/weis/darklaf/theme/Theme.java index ec4c6b97..ea6ffb23 100644 --- a/src/main/java/com/weis/darklaf/theme/Theme.java +++ b/src/main/java/com/weis/darklaf/theme/Theme.java @@ -2,7 +2,7 @@ package com.weis.darklaf.theme; import com.weis.darklaf.DarkLaf; import com.weis.darklaf.DarkMetalTheme; -import com.weis.darklaf.util.LafUtil; +import com.weis.darklaf.util.PropertyLoader; import com.weis.darklaf.util.SystemInfo; import org.jetbrains.annotations.NotNull; @@ -39,39 +39,27 @@ public abstract class Theme { public void loadDefaults(@NotNull final Properties properties, final UIDefaults currentDefaults) { var name = getResourcePath() + getName() + "_defaults.properties"; - putProperties(load(name), properties, currentDefaults); + PropertyLoader.putProperties(load(name), properties, currentDefaults); } public void loadGlobals(@NotNull final Properties properties, final UIDefaults currentDefaults) { - putProperties(LafUtil.loadProperties(DarkLaf.class, "globals", "properties/"), properties, - currentDefaults); + PropertyLoader.putProperties(PropertyLoader.loadProperties(DarkLaf.class, "globals", "properties/"), + properties, currentDefaults); } public void loadPlatformProperties(final Properties properties, final UIDefaults currentDefaults) { final String osPrefix = SystemInfo.isMac ? "mac" : SystemInfo.isWindows ? "windows" : "linux"; - putProperties(LafUtil.loadProperties(DarkLaf.class, osPrefix, "properties/platform/"), properties, - currentDefaults); + PropertyLoader.putProperties(PropertyLoader.loadProperties(DarkLaf.class, osPrefix, "properties/platform/"), + properties, currentDefaults); } public void loadUIProperties(final Properties properties, final UIDefaults currentDefaults) { for (var property : UI_PROPERTIES) { - putProperties(LafUtil.loadProperties(DarkLaf.class, property, "properties/ui/"), properties, - currentDefaults); + PropertyLoader.putProperties(PropertyLoader.loadProperties(DarkLaf.class, property, "properties/ui/"), + properties, currentDefaults); } } - protected void putProperties(@NotNull final Properties properties, final Properties accumulator, - final UIDefaults currentDefaults) { - for (final String key : properties.stringPropertyNames()) { - final String value = properties.getProperty(key); - var parsed = LafUtil.parseValue(key, value, accumulator); - if (parsed != null) { - accumulator.put(key, parsed); - } else { - currentDefaults.remove(key); - } - } - } protected Properties load(final String name) { final Properties properties = new Properties(); diff --git a/src/main/java/com/weis/darklaf/ui/button/DarkButtonBorder.java b/src/main/java/com/weis/darklaf/ui/button/DarkButtonBorder.java index 9f1e91da..88b6bc23 100644 --- a/src/main/java/com/weis/darklaf/ui/button/DarkButtonBorder.java +++ b/src/main/java/com/weis/darklaf/ui/button/DarkButtonBorder.java @@ -23,8 +23,6 @@ */ package com.weis.darklaf.ui.button; -import com.weis.darklaf.defaults.DarkColors; -import com.weis.darklaf.defaults.DarkDefaults; import com.weis.darklaf.util.DarkUIUtil; import com.weis.darklaf.util.GraphicsContext; import org.jetbrains.annotations.Contract; @@ -44,6 +42,35 @@ import java.awt.geom.RoundRectangle2D; */ public class DarkButtonBorder implements Border, UIResource { + private Color shadowColor; + private Color focusBorderColor; + private Color defaultBorderColor; + private Color borderColor; + private Color inactiveBorderColor; + + private int arc; + private int focusArc; + private int squareFocusArc; + private int squareArc; + private int minimumArc; + private int borderSize; + private int shadowSize; + + public DarkButtonBorder() { + shadowColor = UIManager.getColor("Button.shadow"); + focusBorderColor = UIManager.getColor("Button.focusBorderColor"); + defaultBorderColor = UIManager.getColor("Button.defaultBorderColor"); + borderColor = UIManager.getColor("Button.activeBorderColor"); + inactiveBorderColor = UIManager.getColor("Button.inactiveBorderColor"); + arc = UIManager.getInt("Button.arc"); + focusArc = UIManager.getInt("Button.focusArc"); + squareFocusArc = UIManager.getInt("Button.squareFocusArc"); + squareArc = UIManager.getInt("Button.squareArc"); + minimumArc = UIManager.getInt("Button.minimumArc"); + borderSize = UIManager.getInt("Button.borderThickness"); + shadowSize = UIManager.getInt("Button.shadowHeight"); + } + @Override public void paintBorder(final Component c, @NotNull final Graphics g, final int x, final int y, final int width, final int height) { @@ -75,26 +102,18 @@ public class DarkButtonBorder implements Border, UIResource { config.restore(); } - public static int getArc(final Component c) { + protected int getArc(final Component c) { if (DarkButtonUI.isNoArc(c)) return 0; boolean square = DarkButtonUI.isSquare(c); boolean alt = DarkButtonUI.chooseAlternativeArc(c); - return square ? alt ? getArcSize() - : getSquareArcSize() - : alt ? getSquareArcSize() : getArcSize(); - } - - public static int getSquareArcSize() { - return DarkDefaults.get().getButtonSquareArc(); + return square ? alt ? arc : squareArc : alt ? squareArc : arc; } - public static int getFocusArc(final Component c) { - if (DarkButtonUI.isNoArc(c)) return getMinimumArc(); + protected int getFocusArc(final Component c) { + if (DarkButtonUI.isNoArc(c)) return minimumArc; boolean square = DarkButtonUI.isSquare(c); boolean alt = DarkButtonUI.chooseAlternativeArc(c); - return square ? alt ? getFocusArcSize() - : getSquareFocusArcSize() - : alt ? getSquareFocusArcSize() : getFocusArcSize(); + return square ? alt ? focusArc : squareFocusArc : alt ? squareFocusArc : focusArc; } private void paintShadow(@NotNull final Graphics2D g2, final int width, final int height, final int arc) { @@ -110,47 +129,31 @@ public class DarkButtonBorder implements Border, UIResource { arc, arc)); shadowShape.subtract(innerArea); g2.setComposite(DarkUIUtil.SHADOW_COMPOSITE); - g2.setColor(DarkColors.get().getButtonShadowColor()); + g2.setColor(shadowColor); g2.fill(shadowShape); context.restore(); } - public static int getShadowSize() { - return DarkDefaults.get().getButtonShadowSize(); + protected int getBorderSize() { + return borderSize; } - public static int getBorderSize() { - return DarkDefaults.get().getButtonBorderSize(); + protected int getShadowSize() { + return shadowSize; } - private Color getBorderColor(@NotNull final Component c) { + protected Color getBorderColor(@NotNull final Component c) { if (c.hasFocus()) { - return DarkColors.get().getButtonFocusBorderColor(); + return focusBorderColor; } else if (c instanceof JButton && ((JButton) c).isDefaultButton() && c.isEnabled()) { - return DarkColors.get().getButtonDefaultBorderColor(); + return defaultBorderColor; } else if (c.isEnabled()) { - return DarkColors.get().getButtonBorderColor(); + return borderColor; } else { - return DarkColors.get().getButtonInactiveBorderColor(); + return inactiveBorderColor; } } - public static int getArcSize() { - return DarkDefaults.get().getButtonArc(); - } - - public static int getMinimumArc() { - return DarkDefaults.get().getButtonMinimumArc(); - } - - public static int getSquareFocusArcSize() { - return DarkDefaults.get().getButtonSquareFocusArc(); - } - - public static int getFocusArcSize() { - return DarkDefaults.get().getButtonFocusArc(); - } - public Insets getBorderInsets(final Component c) { if (DarkButtonUI.isFullShadow(c) || DarkButtonUI.isLabelButton(c)) { return new InsetsUIResource(0, 0, 0, 0); diff --git a/src/main/java/com/weis/darklaf/ui/button/DarkButtonUI.java b/src/main/java/com/weis/darklaf/ui/button/DarkButtonUI.java index 06d488f7..e5b5bae2 100644 --- a/src/main/java/com/weis/darklaf/ui/button/DarkButtonUI.java +++ b/src/main/java/com/weis/darklaf/ui/button/DarkButtonUI.java @@ -23,7 +23,6 @@ */ package com.weis.darklaf.ui.button; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.util.DarkUIUtil; import com.weis.darklaf.util.GraphicsContext; import com.weis.darklaf.util.GraphicsUtil; @@ -53,6 +52,19 @@ public class DarkButtonUI extends BasicButtonUI { protected static final Rectangle iconRect = new Rectangle(); protected int borderSize; protected int shadowHeight; + protected Color inactiveForeground; + protected Color foreground; + protected Color defaultBackground; + protected Color defaultHoverBackground; + protected Color defaultClickBackground; + protected Color background; + protected Color hoverBackground; + protected Color clickBackground; + protected Color inactiveBackground; + protected Color shadowHover; + protected Color shadowClick; + private int arc; + private int squareArc; protected AbstractButton button; @NotNull @@ -70,22 +82,21 @@ public class DarkButtonUI extends BasicButtonUI { @Override protected void installDefaults(final AbstractButton b) { super.installDefaults(b); - borderSize = DarkButtonBorder.getBorderSize(); - shadowHeight = DarkButtonBorder.getShadowSize(); - } - - @Override - public void paint(final Graphics g, final JComponent c) { - GraphicsContext config = new GraphicsContext(g); - AbstractButton b = (AbstractButton) c; - paintButton(g, c); - - String text = layout(b, c, SwingUtilities2.getFontMetrics(b, g), - b.getWidth(), b.getHeight()); - - paintIcon(g, b, c); - paintText(g, b, c, text); - config.restore(); + borderSize = UIManager.getInt("Button.borderThickness"); + shadowHeight = UIManager.getInt("Button.shadowHeight"); + inactiveForeground = UIManager.getColor("Button.disabledText"); + foreground = UIManager.getColor("Button.selectedButtonForeground"); + defaultBackground = UIManager.getColor("Button.defaultFillColor"); + defaultHoverBackground = UIManager.getColor("Button.defaultFillColorRollOver"); + defaultClickBackground = UIManager.getColor("Button.defaultFillColorClick"); + background = UIManager.getColor("Button.activeFillColor"); + hoverBackground = UIManager.getColor("Button.activeFillColorRollOver"); + clickBackground = UIManager.getColor("Button.activeFillColorClick"); + inactiveBackground = UIManager.getColor("Button.inactiveFillColor"); + shadowHover = UIManager.getColor("Button.shadow.hover"); + shadowClick = UIManager.getColor("Button.shadow.click"); + arc = UIManager.getInt("Button.arc"); + squareArc = UIManager.getInt("Button.squareArc"); } @Override @@ -101,17 +112,31 @@ public class DarkButtonUI extends BasicButtonUI { textRect.x + this.getTextShiftOffset(), textRect.y + metrics.getAscent() + getTextShiftOffset()); } else { - g.setColor(DarkColors.get().getButtonInactiveForeground()); + g.setColor(inactiveForeground); SwingUtilities2.drawStringUnderlineCharAt(c, g, text, -1, textRect.x + getTextShiftOffset(), textRect.y + metrics.getAscent() + getTextShiftOffset()); } } + @Override + public void paint(final Graphics g, final JComponent c) { + GraphicsContext config = new GraphicsContext(g); + AbstractButton b = (AbstractButton) c; + paintButton(g, c); + + String text = layout(b, c, SwingUtilities2.getFontMetrics(b, g), + b.getWidth(), b.getHeight()); + + paintIcon(g, b, c); + paintText(g, b, c, text); + config.restore(); + } + protected Color getForeground(@NotNull final AbstractButton button) { Color fg = button.getForeground(); if (fg instanceof UIResource && button instanceof JButton && ((JButton) button).isDefaultButton()) { - Color selectedFg = DarkColors.get().getButtonForeground(); + Color selectedFg = foreground; if (selectedFg != null) { fg = selectedFg; } @@ -119,6 +144,34 @@ public class DarkButtonUI extends BasicButtonUI { return fg; } + protected void paintButton(final Graphics g, @NotNull final JComponent c) { + Graphics2D g2 = (Graphics2D) g; + if (shouldDrawBackground(c)) { + int arc = getArc(c); + if (isShadowVariant(c)) { + var b = (AbstractButton) c; + if (b.isEnabled() && b.getModel().isRollover()) { + GraphicsUtil.setupAAPainting(g2); + g.setColor(getShadowColor(b)); + if (isFullShadow(c)) { + g.fillRect(0, 0, c.getWidth(), c.getHeight()); + } else { + DarkUIUtil.paintRoundRect((Graphics2D) g, 0, 0, c.getWidth(), c.getHeight(), arc); + } + } + } else { + g2.setColor(getBackgroundColor(c)); + if (isSquare(c) && !chooseAlternativeArc(c)) { + g2.fillRect(borderSize, borderSize, c.getWidth() - 2 * borderSize, + c.getHeight() - 2 * borderSize - shadowHeight); + } else { + DarkUIUtil.paintRoundRect((Graphics2D) g, borderSize, borderSize, c.getWidth() - 2 * borderSize, + c.getHeight() - 2 * borderSize - shadowHeight, arc); + } + } + } + } + @Contract("null -> false") public static boolean isNoArc(final Component c) { return c instanceof JButton @@ -171,32 +224,11 @@ public class DarkButtonUI extends BasicButtonUI { return c.isEnabled() && border != null && button.isContentAreaFilled(); } - protected void paintButton(final Graphics g, @NotNull final JComponent c) { - Graphics2D g2 = (Graphics2D) g; - if (shouldDrawBackground(c)) { - int arc = getArcSize(c); - if (isShadowVariant(c)) { - var b = (AbstractButton) c; - if (b.isEnabled() && b.getModel().isRollover()) { - GraphicsUtil.setupAAPainting(g2); - g.setColor(getShadowColor(b)); - if (isFullShadow(c)) { - g.fillRect(0, 0, c.getWidth(), c.getHeight()); - } else { - DarkUIUtil.paintRoundRect((Graphics2D) g, 0, 0, c.getWidth(), c.getHeight(), arc); - } - } - } else { - g2.setColor(getBackgroundColor(c)); - if (isSquare(c) && !chooseAlternativeArc(c)) { - g2.fillRect(borderSize, borderSize, c.getWidth() - 2 * borderSize, - c.getHeight() - 2 * borderSize - shadowHeight); - } else { - DarkUIUtil.paintRoundRect((Graphics2D) g, borderSize, borderSize, c.getWidth() - 2 * borderSize, - c.getHeight() - 2 * borderSize - shadowHeight, arc); - } - } - } + protected int getArc(final Component c) { + if (DarkButtonUI.isNoArc(c)) return 0; + boolean square = DarkButtonUI.isSquare(c); + boolean alt = DarkButtonUI.chooseAlternativeArc(c); + return square ? alt ? arc : squareArc : alt ? squareArc : arc; } @Contract("null -> false") @@ -209,10 +241,8 @@ public class DarkButtonUI extends BasicButtonUI { protected Color getShadowColor(@NotNull final AbstractButton c) { var colorHover = c.getClientProperty("JButton.shadow.hover"); var colorClick = c.getClientProperty("JButton.shadow.click"); - return c.getModel().isArmed() ? colorClick instanceof Color ? (Color) colorClick - : DarkColors.get().getButtonShadowClickColor() - : colorHover instanceof Color ? (Color) colorHover - : DarkColors.get().getButtonShadowHoverColor(); + return c.getModel().isArmed() ? colorClick instanceof Color ? (Color) colorClick : shadowClick + : colorHover instanceof Color ? (Color) colorHover : shadowHover; } @Contract("null -> false") @@ -221,10 +251,6 @@ public class DarkButtonUI extends BasicButtonUI { && "fullShadow".equals(((JButton) c).getClientProperty("JButton.variant")); } - protected int getArcSize(final JComponent c) { - return DarkButtonBorder.getArc(c); - } - protected Color getBackgroundColor(@NotNull final JComponent c) { var defaultButton = (c instanceof JButton && (((JButton) c).isDefaultButton())); var rollOver = (c instanceof JButton && (((JButton) c).isRolloverEnabled() @@ -233,23 +259,23 @@ public class DarkButtonUI extends BasicButtonUI { if (c.isEnabled()) { if (defaultButton) { if (clicked) { - return DarkColors.get().getButtonDefaultClickBackground(); + return defaultClickBackground; } else if (rollOver) { - return DarkColors.get().getButtonDefaultHoverBackground(); + return defaultHoverBackground; } else { - return DarkColors.get().getButtonDefaultBackground(); + return defaultBackground; } } else { if (clicked) { - return DarkColors.get().getButtonClickBackground(); + return clickBackground; } else if (rollOver) { - return DarkColors.get().getButtonHoverBackground(); + return hoverBackground; } else { - return DarkColors.get().getButtonBackground(); + return background; } } } else { - return DarkColors.get().getButtonInactiveBackground(); + return inactiveBackground; } } @@ -284,8 +310,9 @@ public class DarkButtonUI extends BasicButtonUI { return super.contains(c, x, y); } if (!(x >= 0 && x <= c.getWidth() && y >= 0 && y <= c.getHeight())) return false; - int bs = DarkButtonBorder.getBorderSize(); - return new RoundRectangle2D.Float(bs, bs, c.getWidth() - 2 * bs, c.getWidth() - 2 * bs, getArcSize(c), - getArcSize(c)).contains(x, y); + int bs = borderSize; + int arc = getArc(c); + return new RoundRectangle2D.Float(bs, bs, c.getWidth() - 2 * bs, c.getWidth() - 2 * bs, + arc, arc).contains(x, y); } } diff --git a/src/main/java/com/weis/darklaf/ui/button/DarkToggleButtonUI.java b/src/main/java/com/weis/darklaf/ui/button/DarkToggleButtonUI.java index 54960551..09b74278 100644 --- a/src/main/java/com/weis/darklaf/ui/button/DarkToggleButtonUI.java +++ b/src/main/java/com/weis/darklaf/ui/button/DarkToggleButtonUI.java @@ -23,7 +23,6 @@ */ package com.weis.darklaf.ui.button; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.util.DarkUIUtil; import com.weis.darklaf.util.GraphicsContext; import com.weis.darklaf.util.GraphicsUtil; @@ -59,6 +58,13 @@ public class DarkToggleButtonUI extends DarkButtonUI { } }; protected Dimension sliderSize; + protected Color background; + protected Color backgroundInactive; + protected Color focusBorderColor; + protected Color borderColor; + protected Color inactiveBorderColor; + protected Color sliderColor; + protected Color inactiveSliderColor; @NotNull @Contract(value = "_ -> new", pure = true) @@ -70,6 +76,13 @@ public class DarkToggleButtonUI extends DarkButtonUI { protected void installDefaults(final AbstractButton b) { super.installDefaults(b); sliderSize = UIManager.getDimension("ToggleButton.sliderSize"); + background = UIManager.getColor("ToggleButton.activeFillColor"); + backgroundInactive = UIManager.getColor("ToggleButton.inactiveFillColor"); + focusBorderColor = UIManager.getColor("ToggleButton.focusedSliderBorderColor"); + borderColor = UIManager.getColor("ToggleButton.sliderBorderColor"); + inactiveBorderColor = UIManager.getColor("ToggleButton.disabledSliderBorderColor"); + sliderColor = UIManager.getColor("ToggleButton.sliderColor"); + inactiveSliderColor = UIManager.getColor("ToggleButton.disabledSliderColor"); } @Override @@ -90,7 +103,7 @@ public class DarkToggleButtonUI extends DarkButtonUI { if (isSlider(c)) { Insets i = b.getInsets(); var bounds = getSliderBounds(c); - viewRect.x = bounds.x + bounds.width + DarkButtonBorder.getBorderSize(); + viewRect.x = bounds.x + bounds.width + borderSize; viewRect.y = i.top; viewRect.width = width - (i.right + viewRect.x); viewRect.height = height - (i.bottom + viewRect.y); @@ -130,9 +143,9 @@ public class DarkToggleButtonUI extends DarkButtonUI { protected Color getBackgroundColor(@NotNull final JComponent c) { if (c instanceof JToggleButton && c.isEnabled()) { if (((JToggleButton) c).isSelected()) { - return DarkColors.get().getToggleButtonBackground(); + return background; } else { - return DarkColors.get().getToggleButtonInactiveBackground(); + return backgroundInactive; } } return super.getBackgroundColor(c); @@ -152,7 +165,7 @@ public class DarkToggleButtonUI extends DarkButtonUI { public Dimension getPreferredSize(final JComponent c) { Dimension d = super.getPreferredSize(c); if (isSlider(c)) { - d.width += sliderSize.width + DarkButtonBorder.getBorderSize(); + d.width += sliderSize.width + borderSize; } return d; } @@ -198,16 +211,14 @@ public class DarkToggleButtonUI extends DarkButtonUI { bounds.height, bounds.height).contains(x, y); } - private static Color getToggleBorderColor(@NotNull final AbstractButton b) { + protected Color getToggleBorderColor(@NotNull final AbstractButton b) { if (b.hasFocus()) { - return DarkColors.get().getToggleButtonFocusBorderColor(); + return focusBorderColor; } - return b.isEnabled() ? DarkColors.get().getToggleButtonBorderColor() - : DarkColors.get().getToggleButtonInactiveBorderColor(); + return b.isEnabled() ? borderColor : inactiveBorderColor; } - private static Color getSliderColor(@NotNull final AbstractButton b) { - return b.isEnabled() ? DarkColors.get().getToggleButtonSliderColor() - : DarkColors.get().getToggleButtonInactiveSliderColor(); + protected Color getSliderColor(@NotNull final AbstractButton b) { + return b.isEnabled() ? sliderColor : inactiveSliderColor; } } diff --git a/src/main/java/com/weis/darklaf/ui/cell/DarkCellRendererToggleButton.java b/src/main/java/com/weis/darklaf/ui/cell/DarkCellRendererToggleButton.java index 246564f8..c3e088dc 100644 --- a/src/main/java/com/weis/darklaf/ui/cell/DarkCellRendererToggleButton.java +++ b/src/main/java/com/weis/darklaf/ui/cell/DarkCellRendererToggleButton.java @@ -25,7 +25,6 @@ package com.weis.darklaf.ui.cell; import com.weis.darklaf.components.SelectableTreeNode; import com.weis.darklaf.decorators.CellRenderer; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.ui.tree.DarkTreeCellRenderer; import org.jetbrains.annotations.NotNull; @@ -61,8 +60,8 @@ public class DarkCellRendererToggleButton new") @@ -81,6 +87,13 @@ public class DarkCheckBoxUI extends MetalCheckBoxUI { checkBoxSelectedFocusedIcon = UIManager.getIcon("CheckBox.selectedFocused.icon"); arcSize = UIManager.getInt("CheckBox.arc"); borderSize = UIManager.getInt("CheckBox.borderThickness"); + background = UIManager.getColor("CheckBox.activeFillColor"); + inactiveBackground = UIManager.getColor("CheckBox.inactiveFillColor"); + borderColor = UIManager.getColor("CheckBox.activeBorderColor"); + focusBorderColor = UIManager.getColor("CheckBox.focusBorderColor"); + inactiveBorderColor = UIManager.getColor("CheckBox.inactiveBorderColor"); + checkColor = UIManager.getColor("CheckBox.selectionEnabledColor"); + inactiveCheckColor = UIManager.getColor("CheckBox.selectionDisabledColor"); } @Override @@ -219,14 +232,11 @@ public class DarkCheckBoxUI extends MetalCheckBoxUI { return new IconUIResource(EmptyIcon.create(20)); } - static void paintCheckBorder(@NotNull final Graphics2D g, final boolean enabled, final boolean focus, - final int arcSize, final int borderSize) { + protected void paintCheckBorder(@NotNull final Graphics2D g, final boolean enabled, final boolean focus, + final int arcSize, final int borderSize) { var g2 = (Graphics2D) g.create(); - Color bgColor = enabled ? DarkColors.get().getCheckBoxBackground() - : DarkColors.get().getCheckBoxInactiveBackground(); - Color borderColor = focus ? DarkColors.get().getCheckBoxFocusBorderColor() - : enabled ? DarkColors.get().getCheckBoxBorderColor() - : DarkColors.get().getCheckBoxInactiveBorderColor(); + Color bgColor = enabled ? background : inactiveBackground; + Color border = focus ? focusBorderColor : enabled ? borderColor : inactiveBorderColor; g.setColor(bgColor); DarkUIUtil.paintRoundRect(g, 0, 0, SIZE, SIZE, arcSize); @@ -237,17 +247,16 @@ public class DarkCheckBoxUI extends MetalCheckBoxUI { g2.translate(borderSize, borderSize); } - g.setColor(borderColor); + g.setColor(border); DarkUIUtil.paintLineBorder(g, 0, 0, SIZE, SIZE, arcSize, true); g2.dispose(); } - static void paintCheckArrow(@NotNull final Graphics2D g, final boolean enabled) { + protected void paintCheckArrow(@NotNull final Graphics2D g, final boolean enabled) { var config = GraphicsUtil.setupStrokePainting(g); g.setStroke(new BasicStroke(2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); - Color color = enabled ? DarkColors.get().getCheckBoxCheckColor() - : DarkColors.get().getCheckBoxCheckInactiveColor(); + Color color = enabled ? checkColor : inactiveCheckColor; g.setPaint(color); Path2D check = new Path2D.Float(Path2D.WIND_EVEN_ODD); diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorPreviewComponent.java b/src/main/java/com/weis/darklaf/ui/colorchooser/ColorPreviewComponent.java index 425e8595..1ef6e678 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorPreviewComponent.java +++ b/src/main/java/com/weis/darklaf/ui/colorchooser/ColorPreviewComponent.java @@ -1,6 +1,5 @@ package com.weis.darklaf.ui.colorchooser; -import com.weis.darklaf.defaults.DarkColors; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -12,9 +11,11 @@ import java.awt.*; */ final class ColorPreviewComponent extends JComponent { private Color myColor; + protected Color borderColor; ColorPreviewComponent() { setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2)); + borderColor = UIManager.getColor("ColorChooser.previewBorderColor"); } public void setColor(final Color c) { @@ -36,7 +37,7 @@ final class ColorPreviewComponent extends JComponent { g.setColor(myColor); g.fillRect(i.left + 1, i.top + 1, width - 2, height - 2); - g.setColor(DarkColors.get().getColorChooserPreviewBorderColor()); + g.setColor(borderColor); g.fillRect(i.left, i.top, width, 1); g.fillRect(i.left, i.top, 1, height); g.fillRect(i.left + width - 1, i.top, 1, height); diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorWheel.java b/src/main/java/com/weis/darklaf/ui/colorchooser/ColorWheel.java index 8f227f82..89665f42 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/ColorWheel.java +++ b/src/main/java/com/weis/darklaf/ui/colorchooser/ColorWheel.java @@ -24,7 +24,6 @@ package com.weis.darklaf.ui.colorchooser; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.util.ColorUtil; import com.weis.darklaf.util.DarkUIUtil; import com.weis.darklaf.util.GraphicsContext; @@ -51,6 +50,9 @@ public class ColorWheel extends JComponent { private Color myColor; private int myOpacity; private boolean pressedInside; + protected Color dropFill; + protected Color dropBorder; + protected Color background; public ColorWheel() { setOpaque(true); @@ -105,6 +107,18 @@ public class ColorWheel extends JComponent { pressedInside = false; } }); + + background = UIManager.getColor("ColorChooser.colorWheelBackground"); + dropFill = UIManager.getColor("ColorChooser.colorWheelDropBackgroundColor"); + dropBorder = UIManager.getColor("ColorChooser.colorWheelDropBorderColor"); + } + + @Override + public void updateUI() { + super.updateUI(); + background = UIManager.getColor("ColorChooser.colorWheelBackground"); + dropFill = UIManager.getColor("ColorChooser.colorWheelDropBackgroundColor"); + dropBorder = UIManager.getColor("ColorChooser.colorWheelDropBorderColor"); } private void setHSBValue(final float h, final float s, final float b, final int opacity) { @@ -171,7 +185,7 @@ public class ColorWheel extends JComponent { _size - BORDER_SIZE * 2); } - g2d.setColor(DarkColors.get().getPanelBackground()); + g2d.setColor(background); g2d.fillRect(0, 0, getWidth(), getHeight()); @@ -188,9 +202,9 @@ public class ColorWheel extends JComponent { final int x = (int) (mx + arcw * Math.cos(th)); final int y = (int) (my - arch * Math.sin(th)); - g2d.setColor(DarkColors.get().getColorChooserColorWheelDropBackground()); + g2d.setColor(dropFill); g2d.fillRect(x - 2, y - 2, 4, 4); - g2d.setColor(DarkColors.get().getColorChooserColorWheelDropBorderColor()); + g2d.setColor(dropBorder); DarkUIUtil.drawRect(g, x - 2, y - 2, 4, 4, 1); } diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/DarkColorChooserPanel.java b/src/main/java/com/weis/darklaf/ui/colorchooser/DarkColorChooserPanel.java index 0f3f4de1..5b57d222 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/DarkColorChooserPanel.java +++ b/src/main/java/com/weis/darklaf/ui/colorchooser/DarkColorChooserPanel.java @@ -27,7 +27,6 @@ package com.weis.darklaf.ui.colorchooser; import com.weis.darklaf.color.DarkColorModel; import com.weis.darklaf.components.DefaultColorPipette; import com.weis.darklaf.decorators.AncestorAdapter; -import com.weis.darklaf.defaults.DarkIcons; import com.weis.darklaf.util.ColorUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -60,6 +59,8 @@ public class DarkColorChooserPanel extends AbstractColorChooserPanel implements private final boolean doneInit; private Color currentColor; private boolean isChanging; + private Icon pipetteIcon; + private Icon pipetteHoverIcon; @Contract("null -> fail") public DarkColorChooserPanel(final DarkColorModel... colorModels) { @@ -70,6 +71,8 @@ public class DarkColorChooserPanel extends AbstractColorChooserPanel implements previewComponent = new ColorPreviewComponent(); colorWheelPanel = new ColorWheelPanel(this, true, true); pipette = new DefaultColorPipette(this, colorWheelPanel::setColor); + pipetteIcon = UIManager.getIcon("ColorChooser.pipette.icon"); + pipetteHoverIcon = UIManager.getIcon("ColorChooser.pipetteRollover.icon"); formatBox = new JComboBox<>(colorModels); formatBox.addActionListener(e -> { @@ -273,11 +276,11 @@ public class DarkColorChooserPanel extends AbstractColorChooserPanel implements } protected Icon getPipetteIcon() { - return DarkIcons.get().getColorChooserPipette(); + return pipetteIcon; } protected Icon getPipetteRolloverIcon() { - return DarkIcons.get().getColorChooserPipetteHover(); + return pipetteHoverIcon; } @Override diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/DarkSwatchesChooserPanel.java b/src/main/java/com/weis/darklaf/ui/colorchooser/DarkSwatchesChooserPanel.java index 0734ad1f..d6acd82a 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/DarkSwatchesChooserPanel.java +++ b/src/main/java/com/weis/darklaf/ui/colorchooser/DarkSwatchesChooserPanel.java @@ -23,8 +23,6 @@ */ package com.weis.darklaf.ui.colorchooser; -import com.weis.darklaf.defaults.DarkColors; - import javax.accessibility.AccessibleContext; import javax.swing.*; import javax.swing.border.Border; @@ -91,7 +89,7 @@ public class DarkSwatchesChooserPanel extends AbstractColorChooserPanel { recentSwatchPanel.addKeyListener(recentSwatchKeyListener); JPanel mainHolder = new JPanel(new FlowLayout(FlowLayout.CENTER)); - Border border = new LineBorder(DarkColors.get().getColorChooserSwatchBorderColor()); + Border border = new LineBorder(UIManager.getColor("ColorChooser.swatchBorderColor")); swatchPanel.setBorder(border); mainHolder.add(swatchPanel); diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/RecentSwatchPanel.java b/src/main/java/com/weis/darklaf/ui/colorchooser/RecentSwatchPanel.java index 3bf79a9f..916e8727 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/RecentSwatchPanel.java +++ b/src/main/java/com/weis/darklaf/ui/colorchooser/RecentSwatchPanel.java @@ -1,6 +1,5 @@ package com.weis.darklaf.ui.colorchooser; -import com.weis.darklaf.defaults.DarkColors; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -22,7 +21,7 @@ class RecentSwatchPanel extends SwatchPanel { protected void initColors() { - defaultRecentColor = DarkColors.get().getColorChooserDefaultRecentColor(); + defaultRecentColor = UIManager.getColor("ColorChooser.swatchesDefaultRecentColor"); int numColors = numSwatches.width * numSwatches.height; colors = new Color[numColors]; diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/SlideComponent.java b/src/main/java/com/weis/darklaf/ui/colorchooser/SlideComponent.java index 86cc546d..5980b319 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/SlideComponent.java +++ b/src/main/java/com/weis/darklaf/ui/colorchooser/SlideComponent.java @@ -26,7 +26,6 @@ package com.weis.darklaf.ui.colorchooser; import com.weis.darklaf.components.alignment.Alignment; import com.weis.darklaf.components.tooltip.ToolTipContext; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.util.ColorUtil; import com.weis.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; @@ -58,12 +57,18 @@ class SlideComponent extends JComponent implements ColorListener { private int value = 0; private Unit unitType = Unit.LEVEL; private Color color; + protected Color borderColor; + protected Color shadowColor; + protected Color knobFill; SlideComponent(final String title, final boolean vertical, final boolean isOpacity) { this.title = title; this.vertical = vertical; this.isOpacity = isOpacity; this.color = Color.WHITE; + this.borderColor = UIManager.getColor("ColorChooser.sliderBorderColor"); + this.shadowColor = UIManager.getColor("ColorChooser.sliderShadow"); + this.knobFill = UIManager.getColor("ColorChooser.sliderKnobColor"); toolTipContext.setAlignInside(false) .setAlignment(vertical ? Alignment.WEST : Alignment.NORTH) @@ -170,6 +175,14 @@ class SlideComponent extends JComponent implements ColorListener { listeners.add(listener); } + @Override + public void updateUI() { + super.updateUI(); + borderColor = UIManager.getColor("ColorChooser.sliderBorderColor"); + shadowColor = UIManager.getColor("ColorChooser.sliderShadow"); + knobFill = UIManager.getColor("ColorChooser.sliderKnobColor"); + } + @Override protected void paintComponent(final Graphics g) { final Graphics2D g2d = (Graphics2D) g; @@ -179,7 +192,7 @@ class SlideComponent extends JComponent implements ColorListener { g2d.setPaint(new GradientPaint(0f, 0f, beginColor, 0f, getHeight(), endColor)); g.fillRect(7, 10, 12, getHeight() - 20); - g.setColor(DarkColors.get().getColorChooserSliderBorderColor()); + g.setColor(borderColor); g.fillRect(7, 10, 12, 1); g.fillRect(7, 10, 1, getHeight() - 20); g.fillRect(7 + 12 - 1, 10, 1, getHeight() - 20); @@ -188,7 +201,7 @@ class SlideComponent extends JComponent implements ColorListener { g2d.setPaint(new GradientPaint(0f, 0f, endColor, getWidth(), 0f, beginColor)); g.fillRect(10, 7, getWidth() - 20, 12); - g.setColor(DarkColors.get().getColorChooserSliderBorderColor()); + g.setColor(borderColor); g.fillRect(10, 7, 1, 12); g.fillRect(10, 7, getWidth() - 20, 1); g.fillRect(10, 7 + 12 - 1, getWidth() - 20, 1); @@ -208,7 +221,7 @@ class SlideComponent extends JComponent implements ColorListener { } } - private static void drawKnob(@NotNull final Graphics2D g2d, int x, int y, final boolean vertical) { + protected void drawKnob(@NotNull final Graphics2D g2d, int x, int y, final boolean vertical) { g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); if (vertical) { y -= 6; @@ -217,7 +230,7 @@ class SlideComponent extends JComponent implements ColorListener { arrowShadow.addPoint(x + 7, y + 7); arrowShadow.addPoint(x - 5, y + 13); - g2d.setColor(ColorUtil.toAlpha(DarkColors.get().getColorChooserSliderShadowColor(), 0.5)); + g2d.setColor(ColorUtil.toAlpha(shadowColor, 0.5)); g2d.fill(arrowShadow); Polygon arrowHead = new Polygon(); @@ -225,7 +238,7 @@ class SlideComponent extends JComponent implements ColorListener { arrowHead.addPoint(x + 6, y + 6); arrowHead.addPoint(x - 6, y + 12); - g2d.setColor(DarkColors.get().getColorChooserSliderKnobColor()); + g2d.setColor(knobFill); g2d.fill(arrowHead); } else { x -= 6; @@ -235,7 +248,7 @@ class SlideComponent extends JComponent implements ColorListener { arrowShadow.addPoint(x + 13, y - 5); arrowShadow.addPoint(x + 7, y + 7); - g2d.setColor(ColorUtil.toAlpha(DarkColors.get().getColorChooserSliderShadowColor(), 0.5)); + g2d.setColor(ColorUtil.toAlpha(shadowColor, 0.5)); g2d.fill(arrowShadow); Polygon arrowHead = new Polygon(); @@ -243,7 +256,7 @@ class SlideComponent extends JComponent implements ColorListener { arrowHead.addPoint(x + 12, y - 6); arrowHead.addPoint(x + 6, y + 6); - g2d.setColor(DarkColors.get().getColorChooserSliderKnobColor()); + g2d.setColor(knobFill); g2d.fill(arrowHead); } } diff --git a/src/main/java/com/weis/darklaf/ui/colorchooser/SwatchPanel.java b/src/main/java/com/weis/darklaf/ui/colorchooser/SwatchPanel.java index c22c465d..dabc6913 100644 --- a/src/main/java/com/weis/darklaf/ui/colorchooser/SwatchPanel.java +++ b/src/main/java/com/weis/darklaf/ui/colorchooser/SwatchPanel.java @@ -2,7 +2,6 @@ package com.weis.darklaf.ui.colorchooser; import com.weis.darklaf.components.alignment.Alignment; import com.weis.darklaf.components.tooltip.ToolTipContext; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.util.DarkUIUtil; import com.weis.darklaf.util.GraphicsUtil; import org.jetbrains.annotations.Contract; @@ -40,7 +39,7 @@ abstract class SwatchPanel extends JPanel { initColors(); setToolTipText(""); // register for events setOpaque(true); - setBackground(DarkColors.get().getColorChooserSwatchGridColor()); + setBackground(UIManager.getColor("ColorChooser.swatchGridColor")); setFocusable(true); setInheritsPopupMenu(true); addFocusListener(new FocusAdapter() { diff --git a/src/main/java/com/weis/darklaf/ui/combobox/DarkComboBoxUI.java b/src/main/java/com/weis/darklaf/ui/combobox/DarkComboBoxUI.java index 27ece676..e5546f1c 100644 --- a/src/main/java/com/weis/darklaf/ui/combobox/DarkComboBoxUI.java +++ b/src/main/java/com/weis/darklaf/ui/combobox/DarkComboBoxUI.java @@ -24,7 +24,6 @@ package com.weis.darklaf.ui.combobox; import com.weis.darklaf.components.ArrowButton; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.util.DarkUIUtil; import com.weis.darklaf.util.GraphicsContext; import org.jetbrains.annotations.Contract; @@ -65,6 +64,12 @@ public class DarkComboBoxUI extends BasicComboBoxUI implements Border { private Insets boxPadding; protected int arcSize; protected int borderSize; + protected Color background; + protected Color inactiveBackground; + protected Color inactiveForeground; + protected Color focusBorderColor; + protected Color borderColor; + protected Color inactiveBorderColor; @NotNull @Contract("_ -> new") @@ -78,6 +83,12 @@ public class DarkComboBoxUI extends BasicComboBoxUI implements Border { comboBox.setBorder(this); boxPadding = UIManager.getInsets("ComboBox.padding"); borderSize = UIManager.getInt("ComboBox.borderThickness"); + background = UIManager.getColor("ComboBox.activeBackground"); + inactiveBackground = UIManager.getColor("ComboBox.inactiveBackground"); + inactiveForeground = UIManager.getColor("ComboBox.disabledForeground"); + focusBorderColor = UIManager.getColor("ComboBox.focusBorderColor"); + borderColor = UIManager.getColor("ComboBox.activeBorderColor"); + inactiveBorderColor = UIManager.getColor("ComboBox.inactiveBorderColor"); } @Override @@ -256,14 +267,8 @@ public class DarkComboBoxUI extends BasicComboBoxUI implements Border { return getMinimumSize(c); } - private Color getBackground() { - return comboBox.isEnabled() ? DarkColors.get().getComboBoxBackground() - : DarkColors.get().getComboBoxInactiveBackground(); - } - private Color getForeground() { - return comboBox.isEnabled() ? comboBox.getForeground() - : DarkColors.get().getComboBoxInactiveForeground(); + return comboBox.isEnabled() ? comboBox.getForeground() : inactiveForeground; } @Override @@ -310,7 +315,7 @@ public class DarkComboBoxUI extends BasicComboBoxUI implements Border { if (!isTableCellEditor && !isTreeCellEditor) { if (hasFocus) { DarkUIUtil.paintFocusBorder(g, width, height, arcSize, borderSize); - g.setColor(DarkColors.get().getComboBoxFocusBorderColor()); + g.setColor(focusBorderColor); } else { g.setColor(getBorderColor()); } @@ -338,6 +343,10 @@ public class DarkComboBoxUI extends BasicComboBoxUI implements Border { config.restore(); } + private Color getBackground() { + return comboBox.isEnabled() ? background : inactiveBackground; + } + public void paintCurrentValue(final Graphics g, final Rectangle bounds, final boolean hasFocus) { ListCellRenderer renderer = comboBox.getRenderer(); Component c = renderer.getListCellRendererComponent(listBox, comboBox.getSelectedItem(), @@ -379,8 +388,7 @@ public class DarkComboBoxUI extends BasicComboBoxUI implements Border { } private Color getBorderColor() { - return comboBox.isEnabled() ? DarkColors.get().getComboBoxBorderColor() - : DarkColors.get().getComboBoxInactiveBorderColor(); + return comboBox.isEnabled() ? borderColor : inactiveBorderColor; } @Override diff --git a/src/main/java/com/weis/darklaf/ui/filechooser/DarkFileChooserListViewBorder.java b/src/main/java/com/weis/darklaf/ui/filechooser/DarkFileChooserListViewBorder.java index e60dc97f..292685ce 100644 --- a/src/main/java/com/weis/darklaf/ui/filechooser/DarkFileChooserListViewBorder.java +++ b/src/main/java/com/weis/darklaf/ui/filechooser/DarkFileChooserListViewBorder.java @@ -24,18 +24,12 @@ package com.weis.darklaf.ui.filechooser; import com.weis.darklaf.components.border.MutableLineBorder; -import com.weis.darklaf.defaults.DarkColors; -import java.awt.*; +import javax.swing.*; public class DarkFileChooserListViewBorder extends MutableLineBorder.UIResource { - public DarkFileChooserListViewBorder() { - super(1, 1, 1, 1, Color.BLACK); - } - - @Override - protected Color getColor() { - return DarkColors.get().getFileChooserListViewBorderColor(); + super(1, 1, 1, 1, null); + setColor(UIManager.getColor("FileChooser.borderColor")); } } diff --git a/src/main/java/com/weis/darklaf/ui/filechooser/DarkFilePaneUIBridge.java b/src/main/java/com/weis/darklaf/ui/filechooser/DarkFilePaneUIBridge.java index 83324df8..a932f827 100644 --- a/src/main/java/com/weis/darklaf/ui/filechooser/DarkFilePaneUIBridge.java +++ b/src/main/java/com/weis/darklaf/ui/filechooser/DarkFilePaneUIBridge.java @@ -23,7 +23,6 @@ */ package com.weis.darklaf.ui.filechooser; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.ui.list.DarkListCellRenderer; import com.weis.darklaf.ui.table.DarkTableCellEditor; import com.weis.darklaf.ui.table.DarkTableCellRenderer; @@ -483,7 +482,7 @@ public class DarkFilePaneUIBridge extends JPanel implements PropertyChangeListen Locale l = getFileChooser().getLocale(); listViewBorder = UIManager.getBorder("FileChooser.listViewBorder"); - listViewBackground = DarkColors.get().getFilePaneListViewBackground(); + listViewBackground = UIManager.getColor("FileChooser.listViewBackground"); listViewWindowsStyle = UIManager.getBoolean("FileChooser.listViewWindowsStyle"); readOnly = UIManager.getBoolean("FileChooser.readOnly"); diff --git a/src/main/java/com/weis/darklaf/ui/internalframe/DarkDesktopIconBorder.java b/src/main/java/com/weis/darklaf/ui/internalframe/DarkDesktopIconBorder.java index 72f48521..24ae787f 100644 --- a/src/main/java/com/weis/darklaf/ui/internalframe/DarkDesktopIconBorder.java +++ b/src/main/java/com/weis/darklaf/ui/internalframe/DarkDesktopIconBorder.java @@ -1,11 +1,9 @@ package com.weis.darklaf.ui.internalframe; import com.weis.darklaf.components.border.MutableLineBorder; -import com.weis.darklaf.defaults.DarkColors; -import org.jetbrains.annotations.NotNull; +import javax.swing.*; import javax.swing.plaf.UIResource; -import java.awt.*; /** * @author Jannis Weis @@ -13,13 +11,7 @@ import java.awt.*; public class DarkDesktopIconBorder extends MutableLineBorder implements UIResource { public DarkDesktopIconBorder() { - super(1, 1, 1, 1, DarkColors.get().getDesktopIconBorderColor()); - } - - @Override - public void paintBorder(final Component c, @NotNull final Graphics g, final int x, final int y, - final int width, final int height) { - setColor(DarkColors.get().getDesktopIconBorderColor()); - super.paintBorder(c, g, x, y, width, height); + super(1, 1, 1, 1, null); + setColor(UIManager.getColor("DesktopIcon.borderColor")); } } diff --git a/src/main/java/com/weis/darklaf/ui/internalframe/DarkDesktopIconUI.java b/src/main/java/com/weis/darklaf/ui/internalframe/DarkDesktopIconUI.java index 64173d26..846a6e43 100644 --- a/src/main/java/com/weis/darklaf/ui/internalframe/DarkDesktopIconUI.java +++ b/src/main/java/com/weis/darklaf/ui/internalframe/DarkDesktopIconUI.java @@ -1,6 +1,5 @@ package com.weis.darklaf.ui.internalframe; -import com.weis.darklaf.defaults.DarkColors; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -40,8 +39,8 @@ public class DarkDesktopIconUI extends BasicDesktopIconUI { button = new JButton(title, icon); button.setOpaque(false); button.putClientProperty("JButton.variant", "fullShadow"); - button.putClientProperty("JButton.shadow.hover", DarkColors.get().getDesktopIconHoverBackground()); - button.putClientProperty("JButton.shadow.click", DarkColors.get().getDesktopIconClickBackground()); + button.putClientProperty("JButton.shadow.hover", UIManager.getColor("DesktopIcon.hoverColor")); + button.putClientProperty("JButton.shadow.click", UIManager.getColor("DesktopIcon.hoverColor")); button.setRolloverEnabled(true); button.addActionListener(e -> deiconize()); button.setFont(desktopIcon.getFont()); diff --git a/src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameBorder.java b/src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameBorder.java index 348d20c0..54444330 100644 --- a/src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameBorder.java +++ b/src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameBorder.java @@ -24,7 +24,6 @@ package com.weis.darklaf.ui.internalframe; import com.weis.darklaf.components.border.DropShadowBorder; -import com.weis.darklaf.defaults.DarkColors; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -38,8 +37,9 @@ import java.awt.*; public class DarkInternalFrameBorder extends DropShadowBorder implements UIResource { public DarkInternalFrameBorder() { - super(Color.BLACK, 9, .1f, 9, + super(null, 9, .1f, 9, true, true, true, true); + setShadowColor(UIManager.getColor("InternalFrame.borderShadowColor")); } @Override @@ -49,7 +49,6 @@ public class DarkInternalFrameBorder extends DropShadowBorder implements UIResou return; } updateSize(c); - setShadowColor(DarkColors.get().getInternalFrameBorderShadowColor()); super.paintBorder(c, graphics, x, y, width, height); } diff --git a/src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameTitlePane.java b/src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameTitlePane.java index 76bf187b..4b154db8 100644 --- a/src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameTitlePane.java +++ b/src/main/java/com/weis/darklaf/ui/internalframe/DarkInternalFrameTitlePane.java @@ -1,6 +1,5 @@ package com.weis.darklaf.ui.internalframe; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.icons.EmptyIcon; import com.weis.darklaf.ui.rootpane.TitlePaneIcon; import com.weis.darklaf.util.GraphicsUtil; @@ -87,20 +86,20 @@ public class DarkInternalFrameTitlePane extends BasicInternalFrameTitlePane { maxIcon = maximizeIcon; iconIcon = iconifyIcon; - selectedTitleColor = DarkColors.get().getInternalFrameTitleSelectedBackground(); - selectedTextColor = DarkColors.get().getInternalFrameTitleSelectedForeground(); - notSelectedTitleColor = DarkColors.get().getInternalFrameTitleBackground(); - notSelectedTextColor = DarkColors.get().getInternalFrameTitleForeground(); + selectedTitleColor = UIManager.getColor("InternalFrameTitlePane.selectedBackgroundColor"); + selectedTextColor = UIManager.getColor("InternalFrameTitlePane.selectedTextForeground"); + notSelectedTitleColor = UIManager.getColor("InternalFrameTitlePane.backgroundColor"); + notSelectedTextColor = UIManager.getColor("InternalFrameTitlePane.textForeground"); - selectedButtonColor = DarkColors.get().getInternalFrameSelectedButtonBackground(); - selectedButtonColorHover = DarkColors.get().getInternalFrameSelectedButtonHoverBackground(); - selectedButtonColorClick = DarkColors.get().getInternalFrameSelectedButtonClickBackground(); + selectedButtonColor = UIManager.getColor("InternalFrameTitlePane.selectedButtonColor"); + selectedButtonColorHover = UIManager.getColor("InternalFrameTitlePane.selectedButtonHoverColor"); + selectedButtonColorClick = UIManager.getColor("InternalFrameTitlePane.selectedButtonClickColor"); - buttonColor = DarkColors.get().getInternalFrameButtonBackground(); - buttonColorHover = DarkColors.get().getInternalFrameButtonHoverBackground(); - buttonColorClick = DarkColors.get().getInternalFrameButtonClickBackground(); + buttonColor = UIManager.getColor("InternalFrameTitlePane.buttonColor"); + buttonColorHover = UIManager.getColor("InternalFrameTitlePane.buttonHoverColor"); + buttonColorClick = UIManager.getColor("InternalFrameTitlePane.buttonClickColor"); - border = DarkColors.get().getInternalFrameBorderColor(); + border = UIManager.getColor("InternalFrameTitlePane.borderColor"); } @Override diff --git a/src/main/java/com/weis/darklaf/ui/list/DarkListCellFocusBorder.java b/src/main/java/com/weis/darklaf/ui/list/DarkListCellFocusBorder.java index 0a6e3a49..7c5966db 100644 --- a/src/main/java/com/weis/darklaf/ui/list/DarkListCellFocusBorder.java +++ b/src/main/java/com/weis/darklaf/ui/list/DarkListCellFocusBorder.java @@ -23,19 +23,25 @@ */ package com.weis.darklaf.ui.list; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.ui.cell.DarkCellBorder; import com.weis.darklaf.util.DarkUIUtil; +import javax.swing.*; import java.awt.*; public class DarkListCellFocusBorder extends DarkCellBorder { + protected Color borderColor; + + public DarkListCellFocusBorder() { + borderColor = UIManager.getColor("List.focusBorderColor"); + } + @Override public void paintBorder(final Component c, final Graphics g, final int x, final int y, final int width, final int height) { super.paintBorder(c, g, x, y, width, height); - g.setColor(DarkColors.get().getListFocusBorderColor()); + g.setColor(borderColor); DarkUIUtil.drawRect(g, 0, 0, width, height, 1); } } \ No newline at end of file diff --git a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuBarBorder.java b/src/main/java/com/weis/darklaf/ui/menu/DarkMenuBarBorder.java index bd10b4ee..b51e660e 100644 --- a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuBarBorder.java +++ b/src/main/java/com/weis/darklaf/ui/menu/DarkMenuBarBorder.java @@ -23,9 +23,9 @@ */ package com.weis.darklaf.ui.menu; -import com.weis.darklaf.defaults.DarkColors; import org.jetbrains.annotations.NotNull; +import javax.swing.*; import javax.swing.border.Border; import javax.swing.plaf.InsetsUIResource; import javax.swing.plaf.UIResource; @@ -36,10 +36,16 @@ import java.awt.*; */ public class DarkMenuBarBorder implements Border, UIResource { + protected Color borderColor; + + public DarkMenuBarBorder() { + borderColor = UIManager.getColor("MenuBar.borderColor"); + } + @Override public void paintBorder(final Component c, @NotNull final Graphics g, final int x, final int y, final int w, final int h) { - g.setColor(DarkColors.get().getMenuBarBorderColor()); + g.setColor(borderColor); g.fillRect(x, y + h - 1, w, 1); } diff --git a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuBarUI.java b/src/main/java/com/weis/darklaf/ui/menu/DarkMenuBarUI.java index 25a24aad..9cebf862 100644 --- a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuBarUI.java +++ b/src/main/java/com/weis/darklaf/ui/menu/DarkMenuBarUI.java @@ -23,7 +23,6 @@ */ package com.weis.darklaf.ui.menu; -import com.weis.darklaf.defaults.DarkColors; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -36,9 +35,17 @@ import java.awt.*; */ public class DarkMenuBarUI extends MetalMenuBarUI { + protected Color background; + + @Override + protected void installDefaults() { + super.installDefaults(); + background = UIManager.getColor("MenuBar.background"); + } + @Override public void paint(@NotNull final Graphics g, @NotNull final JComponent c) { - g.setColor(DarkColors.get().getMenuItemBackground()); + g.setColor(background); g.fillRect(0, 0, c.getWidth(), c.getHeight()); } } diff --git a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuItemUIBase.java b/src/main/java/com/weis/darklaf/ui/menu/DarkMenuItemUIBase.java index 8f4c6474..29b022a9 100644 --- a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuItemUIBase.java +++ b/src/main/java/com/weis/darklaf/ui/menu/DarkMenuItemUIBase.java @@ -23,7 +23,6 @@ */ package com.weis.darklaf.ui.menu; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.util.DarkUIUtil; import com.weis.darklaf.util.LazyActionMap; import org.jetbrains.annotations.Contract; @@ -58,8 +57,8 @@ public class DarkMenuItemUIBase extends BasicMenuItemUI { public void installUI(final JComponent c) { super.installUI(c); acceleratorFont = UIManager.getFont("MenuItem.font"); - acceleratorForeground = DarkColors.get().getMenuItemAcceleratorForeground(); - acceleratorSelectionForeground = DarkColors.get().getMenuItemAcceleratorSelectionForeground(); + acceleratorForeground = UIManager.getColor("MenuItem.foreground"); + acceleratorSelectionForeground = UIManager.getColor("MenuItem.selectionForeground"); arrowIcon = null; } diff --git a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuUI.java b/src/main/java/com/weis/darklaf/ui/menu/DarkMenuUI.java index d5f49eeb..f8a14d70 100644 --- a/src/main/java/com/weis/darklaf/ui/menu/DarkMenuUI.java +++ b/src/main/java/com/weis/darklaf/ui/menu/DarkMenuUI.java @@ -23,7 +23,6 @@ */ package com.weis.darklaf.ui.menu; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.NotNull; import sun.swing.MenuItemLayoutHelper; @@ -46,8 +45,8 @@ public class DarkMenuUI extends BasicMenuUI { protected void installDefaults() { super.installDefaults(); acceleratorFont = UIManager.getFont("MenuItem.font"); - acceleratorForeground = DarkColors.get().getMenuItemForeground(); - acceleratorSelectionForeground = DarkColors.get().getMenuItemSelectionForeground(); + acceleratorForeground = UIManager.getColor("MenuItem.foreground"); + acceleratorSelectionForeground = UIManager.getColor("MenuItem.selectionForeground"); arrowIconHover = UIManager.getIcon("MenuItem.arrowHover.icon"); } diff --git a/src/main/java/com/weis/darklaf/ui/progressbar/DarkProgressBarUI.java b/src/main/java/com/weis/darklaf/ui/progressbar/DarkProgressBarUI.java index a9dd9bce..2fa0d0b0 100644 --- a/src/main/java/com/weis/darklaf/ui/progressbar/DarkProgressBarUI.java +++ b/src/main/java/com/weis/darklaf/ui/progressbar/DarkProgressBarUI.java @@ -1,6 +1,5 @@ package com.weis.darklaf.ui.progressbar; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.util.DarkUIUtil; import com.weis.darklaf.util.GraphicsUtil; import org.jetbrains.annotations.Contract; @@ -49,15 +48,15 @@ public class DarkProgressBarUI extends BasicProgressBarUI { super.installDefaults(); UIManager.put("ProgressBar.repaintInterval", isSimplified() ? REPAINT_INTERVAL_SIMPLIFIED : REPAINT_INTERVAL_DEFAULT); UIManager.put("ProgressBar.cycleTime", isSimplified() ? CYCLE_TIME_SIMPLIFIED : CYCLE_TIME_DEFAULT); - trackColor = DarkColors.get().getProgressBarTrackBackground(); - progressColor = DarkColors.get().getProgressBarProgressColor(); - indeterminateStartColor = DarkColors.get().getProgressBarIndeterminateStartColor(); - indeterminateEndColor = DarkColors.get().getProgressBarIndeterminateEndColor(); - - failedColor = DarkColors.get().getProgressBarFailedColor(); - failedEndColor = DarkColors.get().getProgressBarFailedEndColor(); - passedColor = DarkColors.get().getProgressBarPassedColor(); - passedEndColor = DarkColors.get().getProgressBarPassedEndColor(); + trackColor = UIManager.getColor("ProgressBar.trackColor"); + progressColor = UIManager.getColor("ProgressBar.progressColor"); + indeterminateStartColor = UIManager.getColor("ProgressBar.indeterminateStartColor"); + indeterminateEndColor = UIManager.getColor("ProgressBar.indeterminateEndColor"); + + failedColor = UIManager.getColor("ProgressBar.failedColor"); + failedEndColor = UIManager.getColor("ProgressBar.failedEndColor"); + passedColor = UIManager.getColor("ProgressBar.passedColor"); + passedEndColor = UIManager.getColor("ProgressBar.passedEndColor"); } @Override diff --git a/src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonMenuItemUI.java b/src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonMenuItemUI.java index b7c4b8c0..224e214c 100644 --- a/src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonMenuItemUI.java +++ b/src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonMenuItemUI.java @@ -24,7 +24,6 @@ package com.weis.darklaf.ui.radiobutton; import com.weis.darklaf.decorators.MouseClickListener; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.ui.menu.DarkMenuItemUIBase; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -59,8 +58,8 @@ public class DarkRadioButtonMenuItemUI extends DarkMenuItemUIBase { public void installUI(final JComponent c) { super.installUI(c); acceleratorFont = UIManager.getFont("MenuItem.font"); - acceleratorForeground = DarkColors.get().getMenuItemAcceleratorForeground(); - acceleratorSelectionForeground = DarkColors.get().getMenuItemAcceleratorSelectionForeground(); + acceleratorForeground = UIManager.getColor("MenuItem.foreground"); + acceleratorSelectionForeground = UIManager.getColor("MenuItem.selectionForeground"); c.putClientProperty("RadioButtonMenuItem.doNotCloseOnMouseClick", Boolean.TRUE); } diff --git a/src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonUI.java b/src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonUI.java index 3e84b3e6..bf3c0225 100644 --- a/src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonUI.java +++ b/src/main/java/com/weis/darklaf/ui/radiobutton/DarkRadioButtonUI.java @@ -23,7 +23,6 @@ */ package com.weis.darklaf.ui.radiobutton; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.icons.EmptyIcon; import com.weis.darklaf.ui.checkbox.DarkCheckBoxUI; import com.weis.darklaf.util.DarkUIUtil; @@ -62,6 +61,14 @@ public class DarkRadioButtonUI extends MetalRadioButtonUI { private Icon radioSelectedDisabledIcon; private Icon radioSelectedFocusedIcon; + protected Color background; + protected Color inactiveBackground; + protected Color focusBorderColor; + protected Color borderColor; + protected Color inactiveBorderColor; + protected Color checkColor; + protected Color inactiveCheckColor; + @NotNull @Contract("_ -> new") @@ -78,6 +85,13 @@ public class DarkRadioButtonUI extends MetalRadioButtonUI { radioSelectedIcon = UIManager.getIcon("RadioButton.selected.icon"); radioSelectedDisabledIcon = UIManager.getIcon("RadioButton.selectedDisabled.icon"); radioSelectedFocusedIcon = UIManager.getIcon("RadioButton.selectedFocused.icon"); + background = UIManager.getColor("RadioButton.activeFillColor"); + inactiveBackground = UIManager.getColor("RadioButton.inactiveFillColor"); + focusBorderColor = UIManager.getColor("RadioButton.focusBorderColor"); + borderColor = UIManager.getColor("RadioButton.activeBorderColor"); + inactiveBorderColor = UIManager.getColor("RadioButton.inactiveBorderColor"); + checkColor = UIManager.getColor("RadioButton.selectionEnabledColor"); + inactiveCheckColor = UIManager.getColor("RadioButton.selectionDisabledColor"); } @Override @@ -169,13 +183,11 @@ public class DarkRadioButtonUI extends MetalRadioButtonUI { return new IconUIResource(EmptyIcon.create(20)); } - static void paintCheckBorder(@NotNull final Graphics2D g, final boolean enabled, final boolean focus) { + protected void paintCheckBorder(@NotNull final Graphics2D g, final boolean enabled, final boolean focus) { var g2 = (Graphics2D) g.create(); - Color bgColor = enabled ? DarkColors.get().getRadioButtonBackground() - : DarkColors.get().getRadioButtonInactiveBackground(); - Color borderColor = focus ? DarkColors.get().getRadioButtonFocusBorderColor() - : enabled ? DarkColors.get().getRadioButtonBorderColor() - : DarkColors.get().getRadioButtonInactiveBorderColor(); + Color bgColor = enabled ? background : inactiveBackground; + Color border = focus ? focusBorderColor + : enabled ? borderColor : inactiveBorderColor; g.setColor(bgColor); g.fillOval(0, 0, SIZE, SIZE); @@ -184,15 +196,14 @@ public class DarkRadioButtonUI extends MetalRadioButtonUI { DarkUIUtil.paintFocusOval(g2, 1, 1, SIZE - 1, SIZE - 1); } - g.setColor(borderColor); + g.setColor(border); g.drawOval(0, 0, SIZE, SIZE); g2.dispose(); } - static void paintCheckBullet(@NotNull final Graphics2D g, final boolean enabled) { - Color color = enabled ? DarkColors.get().getRadioButtonCheckColor() - : DarkColors.get().getRadioButtonCheckInactiveColor(); + protected void paintCheckBullet(@NotNull final Graphics2D g, final boolean enabled) { + Color color = enabled ? checkColor : inactiveCheckColor; g.setColor(color); g.translate(0.2, 0.2); g.fillOval((SIZE - BULLET_RAD) / 2, (SIZE - BULLET_RAD) / 2, BULLET_RAD, BULLET_RAD); diff --git a/src/main/java/com/weis/darklaf/ui/rootpane/CloseButtonUI.java b/src/main/java/com/weis/darklaf/ui/rootpane/CloseButtonUI.java index 1be0c161..139736df 100644 --- a/src/main/java/com/weis/darklaf/ui/rootpane/CloseButtonUI.java +++ b/src/main/java/com/weis/darklaf/ui/rootpane/CloseButtonUI.java @@ -1,6 +1,5 @@ package com.weis.darklaf.ui.rootpane; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.ui.button.DarkButtonUI; import org.jetbrains.annotations.NotNull; @@ -10,11 +9,20 @@ import java.awt.*; /** * @author Jannis Weis */ -class CloseButtonUI extends DarkButtonUI { +public class CloseButtonUI extends DarkButtonUI { + + protected Color closeHover; + protected Color closeClick; + + @Override + protected void installDefaults(final AbstractButton b) { + super.installDefaults(b); + closeHover = UIManager.getColor("TitlePane.close.rollOverColor"); + closeClick = UIManager.getColor("TitlePane.close.clickColor"); + } @Override protected Color getShadowColor(@NotNull final AbstractButton c) { - return c.getModel().isArmed() ? DarkColors.get().getTitleCloseClickBackground() - : DarkColors.get().getTitleCloseHoverBackground(); + return c.getModel().isArmed() ? closeClick : closeHover; } } diff --git a/src/main/java/com/weis/darklaf/ui/rootpane/DarkTitlePane.java b/src/main/java/com/weis/darklaf/ui/rootpane/DarkTitlePane.java index 76c311d5..e104145b 100644 --- a/src/main/java/com/weis/darklaf/ui/rootpane/DarkTitlePane.java +++ b/src/main/java/com/weis/darklaf/ui/rootpane/DarkTitlePane.java @@ -25,7 +25,6 @@ package com.weis.darklaf.ui.rootpane; import com.weis.darklaf.decorators.AncestorAdapter; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.platform.windows.JNIDecorations; import com.weis.darklaf.util.GraphicsUtil; import org.jetbrains.annotations.Contract; @@ -293,27 +292,27 @@ public class DarkTitlePane extends JComponent { private void determineColors() { switch (getWindowDecorationStyle()) { case JRootPane.ERROR_DIALOG: - activeBackground = DarkColors.get().getOptionPaneErrorDialogTitleBackground(); - activeForeground = DarkColors.get().getOptionPaneErrorDialogTitleForeground(); + activeBackground = UIManager.getColor("OptionPane.errorDialog.titlePane.background"); + activeForeground = UIManager.getColor("OptionPane.errorDialog.titlePane.foreground"); break; case JRootPane.QUESTION_DIALOG: case JRootPane.COLOR_CHOOSER_DIALOG: case JRootPane.FILE_CHOOSER_DIALOG: - activeBackground = DarkColors.get().getOptionPaneQuestionDialogTitleBackground(); - activeForeground = DarkColors.get().getOptionPaneQuestionDialogTitleForeground(); + activeBackground = UIManager.getColor("OptionPane.questionDialog.titlePane.background"); + activeForeground = UIManager.getColor("OptionPane.questionDialog.titlePane.foreground"); break; case JRootPane.WARNING_DIALOG: - activeBackground = DarkColors.get().getOptionPaneWarningDialogTitleBackground(); - activeForeground = DarkColors.get().getOptionPaneWarningDialogTitleForeground(); + activeBackground = UIManager.getColor("OptionPane.warningDialog.titlePane.background"); + activeForeground = UIManager.getColor("OptionPane.warningDialog.titlePane.foreground"); break; default: //JRootPane.Frame - activeBackground = DarkColors.get().getTitleBackground(); - activeForeground = DarkColors.get().getTitleForeground(); + activeBackground = UIManager.getColor("TitlePane.background"); + activeForeground = UIManager.getColor("TitlePane.foreground"); break; } - inactiveBackground = DarkColors.get().getTitleInactiveBackground(); - inactiveForeground = DarkColors.get().getTitleInactiveForeground(); - border = DarkColors.get().getTitleBorderColor(); + inactiveBackground = UIManager.getColor("TitlePane.inactiveBackground"); + inactiveForeground = UIManager.getColor("TitlePane.inactiveForeground"); + border = UIManager.getColor("TitlePane.borderColor"); } private void installDefaults() { diff --git a/src/main/java/com/weis/darklaf/ui/scrollpane/DarkScrollBarUI.java b/src/main/java/com/weis/darklaf/ui/scrollpane/DarkScrollBarUI.java index 9b7d845c..b71e3d64 100644 --- a/src/main/java/com/weis/darklaf/ui/scrollpane/DarkScrollBarUI.java +++ b/src/main/java/com/weis/darklaf/ui/scrollpane/DarkScrollBarUI.java @@ -24,7 +24,6 @@ package com.weis.darklaf.ui.scrollpane; import com.weis.darklaf.decorators.MouseMovementListener; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.util.Animator; import com.weis.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; @@ -162,6 +161,11 @@ public class DarkScrollBarUI extends BasicScrollBarUI { mouseMotionListener.mouseMoved(e); } }; + protected Color thumbBorderColor; + protected Color thumbFadeStartColor; + protected Color thumbFadeEndColor; + protected Color trackBackground; + @NotNull @Contract("_ -> new") @@ -358,6 +362,10 @@ public class DarkScrollBarUI extends BasicScrollBarUI { UIManager.put("ScrollBar.incrementButtonGap", incGap); UIManager.put("ScrollBar.decrementButtonGap", decGap); } + thumbBorderColor = UIManager.getColor("ScrollBar.thumbBorderColor"); + thumbFadeStartColor = UIManager.getColor("ScrollBar.fadeStartColor"); + thumbFadeEndColor = UIManager.getColor("ScrollBar.fadeEndColor"); + trackBackground = UIManager.getColor("ScrollBar.trackColor"); } @Override @@ -471,7 +479,7 @@ public class DarkScrollBarUI extends BasicScrollBarUI { protected void paintMaxiThumb(@NotNull final Graphics2D g, @NotNull final Rectangle rect) { final var c = g.getComposite(); g.setComposite(COMPOSITE.derive(THUMB_ALPHA)); - g.setColor(DarkColors.get().getScrollBarThumbBorderColor()); + g.setColor(thumbBorderColor); DarkUIUtil.drawRect(g, rect.x, rect.y, rect.width, rect.height, 1); g.setColor(getThumbColor()); g.fillRect(rect.x + 1, rect.y + 1, rect.width - 2, rect.height - 2); @@ -480,8 +488,7 @@ public class DarkScrollBarUI extends BasicScrollBarUI { @NotNull private Color getThumbColor() { - return DarkUIUtil.blendColors(DarkColors.get().getScrollBarThumbEndColor(), - DarkColors.get().getScrollBarThumbStartColor(), thumbAlpha); + return DarkUIUtil.blendColors(thumbFadeEndColor, thumbFadeStartColor, thumbAlpha); } @Override @@ -508,7 +515,7 @@ public class DarkScrollBarUI extends BasicScrollBarUI { @NotNull @Contract(value = " -> new", pure = true) protected Color getTrackColor() { - return DarkColors.get().getScrollBarTrackBackground(); + return trackBackground; } @NotNull diff --git a/src/main/java/com/weis/darklaf/ui/slider/DarkSliderUI.java b/src/main/java/com/weis/darklaf/ui/slider/DarkSliderUI.java index 3309613e..cc08bfed 100644 --- a/src/main/java/com/weis/darklaf/ui/slider/DarkSliderUI.java +++ b/src/main/java/com/weis/darklaf/ui/slider/DarkSliderUI.java @@ -1,8 +1,6 @@ package com.weis.darklaf.ui.slider; import com.weis.darklaf.decorators.MouseClickListener; -import com.weis.darklaf.defaults.DarkColors; -import com.weis.darklaf.defaults.DarkIcons; import com.weis.darklaf.util.DarkUIUtil; import com.weis.darklaf.util.GraphicsContext; import com.weis.darklaf.util.GraphicsUtil; @@ -51,6 +49,29 @@ public class DarkSliderUI extends BasicSliderUI { protected int arcSize; protected int trackSize; protected Dimension thumbSize; + protected Color inactiveTickForeground; + protected Color trackBackground; + protected Color selectedTrackBackground; + protected Color selectedTrackInactiveBackground; + protected Color selectedVolumeTrackBackground; + protected Color selectedVolumeTrackInactiveBackground; + protected Color thumbBackground; + protected Color thumbInactiveBackground; + protected Color volumeThumbBackground; + protected Color volumeThumbInactiveBackground; + protected Color thumbBorderColor; + protected Color thumbInactiveBorderColor; + + protected Icon volume0; + protected Icon volume1; + protected Icon volume2; + protected Icon volume3; + protected Icon volume4; + protected Icon volume0Inactive; + protected Icon volume1Inactive; + protected Icon volume2Inactive; + protected Icon volume3Inactive; + protected Icon volume4Inactive; public DarkSliderUI(final JSlider b) { super(b); @@ -75,6 +96,29 @@ public class DarkSliderUI extends BasicSliderUI { trackSize = UIManager.getInt("Slider.trackThickness"); plainThumbRadius = UIManager.getInt("Slider.plainThumbRadius"); thumbSize = UIManager.getDimension("Slider.thumbSize"); + inactiveTickForeground = UIManager.getColor("Slider.disabledTickColor"); + trackBackground = UIManager.getColor("Slider.trackBackground"); + selectedTrackBackground = UIManager.getColor("Slider.selectedTrackColor"); + selectedTrackInactiveBackground = UIManager.getColor("Slider.disabledTrackColor"); + selectedVolumeTrackBackground = UIManager.getColor("Slider.volume.selectedTrackColor"); + selectedVolumeTrackInactiveBackground = UIManager.getColor("Slider.volume.disabledTrackColor"); + thumbBackground = UIManager.getColor("Slider.activeThumbFill"); + thumbInactiveBackground = UIManager.getColor("Slider.inactiveThumbFill"); + volumeThumbBackground = UIManager.getColor("Slider.volume.activeThumbFill"); + volumeThumbInactiveBackground = UIManager.getColor("Slider.volume.inactiveThumbFill"); + thumbBorderColor = UIManager.getColor("Slider.thumbBorderColor"); + thumbInactiveBorderColor = UIManager.getColor("Slider.thumbBorderColorDisabled"); + + volume0 = UIManager.getIcon("Slider.volume.enabled_level_0.icon"); + volume1 = UIManager.getIcon("Slider.volume.enabled_level_1.icon"); + volume2 = UIManager.getIcon("Slider.volume.enabled_level_2.icon"); + volume3 = UIManager.getIcon("Slider.volume.enabled_level_3.icon"); + volume4 = UIManager.getIcon("Slider.volume.enabled_level_4.icon"); + volume0Inactive = UIManager.getIcon("Slider.volume.disabled_level_0.icon"); + volume1Inactive = UIManager.getIcon("Slider.volume.disabled_level_1.icon"); + volume2Inactive = UIManager.getIcon("Slider.volume.disabled_level_2.icon"); + volume3Inactive = UIManager.getIcon("Slider.volume.disabled_level_3.icon"); + volume4Inactive = UIManager.getIcon("Slider.volume.disabled_level_4.icon"); } @Override @@ -255,7 +299,7 @@ public class DarkSliderUI extends BasicSliderUI { @NotNull protected Color getDisabledTickColor() { - return DarkColors.get().getSliderInactiveTickColor(); + return inactiveTickForeground; } private static boolean showVolumeIcon(final JComponent c) { @@ -269,20 +313,15 @@ public class DarkSliderUI extends BasicSliderUI { double percentage = value / (double) range; boolean enabled = slider.isEnabled(); if (Math.abs(percentage) < 1E-6) { - return enabled ? DarkIcons.get().getSliderVolumeLevel0() - : DarkIcons.get().getSliderVolumeLevel0Inactive(); + return enabled ? volume0 : volume0Inactive; } else if (percentage < 0.25) { - return enabled ? DarkIcons.get().getSliderVolumeLevel1() - : DarkIcons.get().getSliderVolumeLevel1Inactive(); + return enabled ? volume1 : volume1Inactive; } else if (percentage < 0.5) { - return enabled ? DarkIcons.get().getSliderVolumeLevel2() - : DarkIcons.get().getSliderVolumeLevel2Inactive(); + return enabled ? volume2 : volume2Inactive; } else if (percentage < 0.75) { - return enabled ? DarkIcons.get().getSliderVolumeLevel3() - : DarkIcons.get().getSliderVolumeLevel3Inactive(); + return enabled ? volume3 : volume3Inactive; } else { - return enabled ? DarkIcons.get().getSliderVolumeLevel4() - : DarkIcons.get().getSliderVolumeLevel4Inactive(); + return enabled ? volume4 : volume4Inactive; } } @@ -491,38 +530,28 @@ public class DarkSliderUI extends BasicSliderUI { @NotNull protected Color getThumbColor() { if (isVolumeSlider(slider)) { - return slider.isEnabled() - ? DarkColors.get().getSliderVolumeThumbBackground() - : DarkColors.get().getSliderVolumeThumbInactiveBackground(); + return slider.isEnabled() ? volumeThumbBackground : volumeThumbInactiveBackground; } else { - return slider.isEnabled() - ? DarkColors.get().getSliderThumbBackground() - : DarkColors.get().getSliderThumbInactiveBackground(); + return slider.isEnabled() ? thumbBackground : thumbInactiveBackground; } } @NotNull protected Color getThumbBorderColor() { - return slider.isEnabled() - ? DarkColors.get().getSliderThumbBorderColor() - : DarkColors.get().getSliderThumbInactiveBorderColor(); + return slider.isEnabled() ? thumbBorderColor : thumbInactiveBorderColor; } @NotNull protected Color getTrackBackground() { - return DarkColors.get().getSliderTrackBackground(); + return trackBackground; } @NotNull protected Color getSelectedTrackColor() { if (isVolumeSlider(slider)) { - return slider.isEnabled() - ? DarkColors.get().getSliderVolumeSelectedTrackBackground() - : DarkColors.get().getSliderVolumeSelectedTrackInactiveBackground(); + return slider.isEnabled() ? selectedVolumeTrackBackground : selectedVolumeTrackInactiveBackground; } else { - return slider.isEnabled() - ? DarkColors.get().getSliderSelectedTrackBackground() - : DarkColors.get().getSliderSelectedTrackInactiveBackground(); + return slider.isEnabled() ? selectedTrackBackground : selectedTrackInactiveBackground; } } diff --git a/src/main/java/com/weis/darklaf/ui/spinner/DarkSpinnerBorder.java b/src/main/java/com/weis/darklaf/ui/spinner/DarkSpinnerBorder.java index 41e7fe19..d755d545 100644 --- a/src/main/java/com/weis/darklaf/ui/spinner/DarkSpinnerBorder.java +++ b/src/main/java/com/weis/darklaf/ui/spinner/DarkSpinnerBorder.java @@ -1,7 +1,5 @@ package com.weis.darklaf.ui.spinner; -import com.weis.darklaf.defaults.DarkColors; -import com.weis.darklaf.defaults.DarkDefaults; import com.weis.darklaf.util.DarkUIUtil; import com.weis.darklaf.util.GraphicsContext; import org.jetbrains.annotations.NotNull; @@ -18,6 +16,19 @@ import java.awt.*; */ public class DarkSpinnerBorder implements Border, UIResource { + protected Color focusBorderColor; + protected Color borderColor; + protected Color inactiveBorderColor; + protected int arc; + protected int borderSize; + + public DarkSpinnerBorder() { + focusBorderColor = UIManager.getColor("Spinner.focusBorderColor"); + borderColor = UIManager.getColor("Spinner.activeBorderColor"); + inactiveBorderColor = UIManager.getColor("Spinner.inactiveBorderColor"); + arc = UIManager.getInt("Spinner.arc"); + borderSize = UIManager.getInt("Spinner.borderThickness"); + } @Override public void paintBorder(@NotNull final Component c, final Graphics g2, @@ -29,10 +40,7 @@ public class DarkSpinnerBorder implements Border, UIResource { GraphicsContext config = new GraphicsContext(g); g.translate(x, y); - int borderSize = getBorderSize(); - int size = tableCellEditor ? 0 : borderSize; - int arc = getArc(); if (c instanceof JSpinner) { JSpinner spinner = (JSpinner) c; @@ -57,7 +65,7 @@ public class DarkSpinnerBorder implements Border, UIResource { g.setColor(getBorderColor(c)); if (!tableCellEditor && !treeCellEditor) { if (DarkUIUtil.hasFocus(c)) { - g.setColor(DarkColors.get().getSpinnerFocusBorderColor()); + g.setColor(focusBorderColor); } DarkUIUtil.paintLineBorder(g, size, size, width - 2 * size, height - 2 * size, arc, true); } else if (tableCellEditor && (c.getParent() instanceof JTable)) { @@ -78,17 +86,8 @@ public class DarkSpinnerBorder implements Border, UIResource { config.restore(); } - public static int getBorderSize() { - return DarkDefaults.get().getSpinnerBorderSize(); - } - - public static int getArc() { - return DarkDefaults.get().getSpinnerArc(); - } - - private static Color getBorderColor(@NotNull final Component c) { - return c.isEnabled() ? DarkColors.get().getSpinnerBorderColor() - : DarkColors.get().getSpinnerInactiveBorderColor(); + protected Color getBorderColor(@NotNull final Component c) { + return c.isEnabled() ? borderColor : inactiveBorderColor; } @Override diff --git a/src/main/java/com/weis/darklaf/ui/spinner/DarkSpinnerUI.java b/src/main/java/com/weis/darklaf/ui/spinner/DarkSpinnerUI.java index 2d8d2892..71926158 100644 --- a/src/main/java/com/weis/darklaf/ui/spinner/DarkSpinnerUI.java +++ b/src/main/java/com/weis/darklaf/ui/spinner/DarkSpinnerUI.java @@ -25,8 +25,6 @@ package com.weis.darklaf.ui.spinner; import com.weis.darklaf.components.ArrowButton; import com.weis.darklaf.decorators.LayoutManagerDelegate; -import com.weis.darklaf.defaults.DarkColors; -import com.weis.darklaf.defaults.DarkIcons; import com.weis.darklaf.icons.UIAwareIcon; import com.weis.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; @@ -80,6 +78,14 @@ public class DarkSpinnerUI extends BasicSpinnerUI implements PropertyChangeListe private JComponent editor; private Color compColor; private JButton prevButton; + protected Color background; + protected Color inactiveBackground; + protected int arc; + protected int borderSize; + protected UIAwareIcon arrowDownIcon; + protected UIAwareIcon arrowUpIcon; + protected UIAwareIcon plusIcon; + protected UIAwareIcon minusIcon; @NotNull @Contract("_ -> new") @@ -87,6 +93,20 @@ public class DarkSpinnerUI extends BasicSpinnerUI implements PropertyChangeListe return new DarkSpinnerUI(); } + @Override + protected void installDefaults() { + super.installDefaults(); + arc = UIManager.getInt("Spinner.arc"); + borderSize = UIManager.getInt("Spinner.borderThickness"); + background = UIManager.getColor("Spinner.activeBackground"); + inactiveBackground = UIManager.getColor("Spinner.inactiveBackground"); + + arrowDownIcon = (UIAwareIcon) UIManager.getIcon("ArrowButton.down.icon"); + arrowUpIcon = (UIAwareIcon) UIManager.getIcon("ArrowButton.up.icon"); + minusIcon = (UIAwareIcon) UIManager.getIcon("Spinner.minus.icon"); + plusIcon = (UIAwareIcon) UIManager.getIcon("Spinner.plus.icon"); + } + @Override protected void installListeners() { super.installListeners(); @@ -118,7 +138,6 @@ public class DarkSpinnerUI extends BasicSpinnerUI implements PropertyChangeListe super.layoutContainer(parent); if (editor != null && !spinner.getComponentOrientation().isLeftToRight()) { var bounds = editor.getBounds(); - int borderSize = DarkSpinnerBorder.getBorderSize(); bounds.x += borderSize; bounds.width -= borderSize; editor.setBounds(bounds); @@ -188,18 +207,15 @@ public class DarkSpinnerUI extends BasicSpinnerUI implements PropertyChangeListe protected SpinnerIcon getArrowIcon(final int direction) { if (direction == SwingConstants.SOUTH) { - return new SpinnerIcon(spinner, DarkIcons.get().getSpinnerArrowDown(), - DarkIcons.get().getSpinnerMathDown()); + return new SpinnerIcon(spinner, arrowDownIcon, minusIcon); } else { - return new SpinnerIcon(spinner, DarkIcons.get().getSpinnerArrowUp(), - DarkIcons.get().getSpinnerMathUp()); + return new SpinnerIcon(spinner, arrowUpIcon, plusIcon); } } @Override public void paint(final Graphics g, @NotNull final JComponent c) { - int size = DarkSpinnerBorder.getBorderSize(); - int arc = DarkSpinnerBorder.getArc(); + int size = borderSize; int width = c.getWidth(); int height = c.getHeight(); JComponent editor = spinner.getEditor(); @@ -235,9 +251,8 @@ public class DarkSpinnerUI extends BasicSpinnerUI implements PropertyChangeListe } } - public static Color getBackground(final JComponent c) { - return c == null || !c.isEnabled() ? DarkColors.get().getSpinnerInactiveBackground() - : DarkColors.get().getSpinnerBackground(); + protected Color getBackground(final JComponent c) { + return c == null || !c.isEnabled() ? inactiveBackground : background; } protected static boolean isTableCellEditor(@NotNull final Component c) { @@ -263,14 +278,10 @@ public class DarkSpinnerUI extends BasicSpinnerUI implements PropertyChangeListe } else { rect.subtract(iconRect); } - g.setColor(getSpinBackground()); + g.setColor(getBackground(spinner)); g.fill(rect); } - public static Color getSpinBackground() { - return getBackground(null); - } - @Override public void propertyChange(@NotNull final PropertyChangeEvent evt) { var key = evt.getPropertyName(); diff --git a/src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneDivider.java b/src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneDivider.java index 784b3564..954b871b 100644 --- a/src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneDivider.java +++ b/src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneDivider.java @@ -23,7 +23,6 @@ */ package com.weis.darklaf.ui.splitpane; -import com.weis.darklaf.defaults.DarkIcons; import com.weis.darklaf.icons.EmptyIcon; import org.jetbrains.annotations.Contract; @@ -38,8 +37,21 @@ import java.awt.*; */ public class DarkSplitPaneDivider extends BasicSplitPaneDivider { + protected Icon leftOneTouch; + protected Icon rightOneTouch; + protected Icon topOneTouch; + protected Icon bottomOneTouch; + protected Icon verticalSplit; + protected Icon horizontalSplit; + public DarkSplitPaneDivider(final BasicSplitPaneUI ui) { super(ui); + leftOneTouch = UIManager.getIcon("SplitPaneDivider.leftOneTouch.icon"); + rightOneTouch = UIManager.getIcon("SplitPaneDivider.rightOneTouch.icon"); + topOneTouch = UIManager.getIcon("SplitPaneDivider.topOneTouch.icon"); + bottomOneTouch = UIManager.getIcon("SplitPaneDivider.bottomOneTouch.icon"); + verticalSplit = UIManager.getIcon("SplitPane.verticalGlue.icon"); + horizontalSplit = UIManager.getIcon("SplitPane.horizontalGlue.icon"); } @@ -58,11 +70,11 @@ public class DarkSplitPaneDivider extends BasicSplitPaneDivider { } protected Icon getVerticalSplitIcon() { - return DarkIcons.get().getSplitPaneDividerVerticalSplit(); + return verticalSplit; } protected Icon getHorizontalSplitIcon() { - return DarkIcons.get().getSplitPaneDividerHorizontalSplit(); + return horizontalSplit; } @Override @@ -76,19 +88,19 @@ public class DarkSplitPaneDivider extends BasicSplitPaneDivider { } protected Icon getLeftOneTouchIcon() { - return DarkIcons.get().getSplitPaneDividerLeftOneTouch(); + return leftOneTouch; } protected Icon getRightOneTouchIcon() { - return DarkIcons.get().getSplitPaneDividerRightOneTouch(); + return rightOneTouch; } protected Icon getTopOneTouchIcon() { - return DarkIcons.get().getSplitPaneDividerTopOneTouch(); + return topOneTouch; } protected Icon getBottomOneTouchIcon() { - return DarkIcons.get().getSplitPaneDividerBottomOneTouch(); + return bottomOneTouch; } protected static class OneTouchButton extends JButton implements UIResource { diff --git a/src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneUI.java b/src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneUI.java index 80c4c25c..552e7d81 100644 --- a/src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneUI.java +++ b/src/main/java/com/weis/darklaf/ui/splitpane/DarkSplitPaneUI.java @@ -24,7 +24,6 @@ package com.weis.darklaf.ui.splitpane; import com.weis.darklaf.decorators.LayoutManagerDelegate; -import com.weis.darklaf.defaults.DarkColors; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -44,6 +43,7 @@ public class DarkSplitPaneUI extends BasicSplitPaneUI implements PropertyChangeL private static final int DIVIDER_DRAG_SIZE = 10; private static final int DIVIDER_DRAG_OFFSET = 5; private Style style; + private Color dividerLine; protected DarkSplitPaneUI(final Style style) { this.style = style; @@ -62,6 +62,12 @@ public class DarkSplitPaneUI extends BasicSplitPaneUI implements PropertyChangeL splitPane.setComponentZOrder(getDivider(), 0); } + @Override + protected void installDefaults() { + super.installDefaults(); + dividerLine = UIManager.getColor("SplitPane.dividerLineColor"); + } + @Override protected void installListeners() { super.installListeners(); @@ -136,7 +142,7 @@ public class DarkSplitPaneUI extends BasicSplitPaneUI implements PropertyChangeL } protected Color getDividerLineColor() { - return DarkColors.get().getSplitPaneDividerLineColor(); + return dividerLine; } private enum Style { diff --git a/src/main/java/com/weis/darklaf/ui/statusbar/DarkStatusBarUI.java b/src/main/java/com/weis/darklaf/ui/statusbar/DarkStatusBarUI.java index 3c5e59bb..f6e2c7fa 100644 --- a/src/main/java/com/weis/darklaf/ui/statusbar/DarkStatusBarUI.java +++ b/src/main/java/com/weis/darklaf/ui/statusbar/DarkStatusBarUI.java @@ -23,7 +23,6 @@ */ package com.weis.darklaf.ui.statusbar; -import com.weis.darklaf.defaults.DarkColors; import org.jdesktop.swingx.JXStatusBar; import org.jdesktop.swingx.plaf.basic.BasicStatusBarUI; import org.jetbrains.annotations.Contract; @@ -38,19 +37,30 @@ import java.awt.*; */ public class DarkStatusBarUI extends BasicStatusBarUI { + @NotNull @Contract("_ -> new") public static ComponentUI createUI(final JComponent c) { return new DarkStatusBarUI(); } + protected Color background; + protected Color borderColor; + + @Override + protected void installDefaults(final JXStatusBar sb) { + super.installDefaults(sb); + background = UIManager.getColor("StatusBar.background"); + borderColor = UIManager.getColor("StatusBar.topColor"); + } + @Override protected void paintBackground(final Graphics2D g, @NotNull final JXStatusBar bar) { if (bar.isOpaque()) { - g.setColor(DarkColors.get().getStatusBarBackground()); + g.setColor(background); g.fillRect(0, 0, bar.getWidth(), bar.getHeight()); } - g.setColor(DarkColors.get().getStatusBarBorderColor()); + g.setColor(borderColor); g.fillRect(0, 0, bar.getWidth(), 1); } } diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneUI.java b/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneUI.java index 629e6ee8..2e9b4af7 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneUI.java +++ b/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneUI.java @@ -1,8 +1,6 @@ package com.weis.darklaf.ui.tabbedpane; import com.weis.darklaf.components.UIResourceWrapper; -import com.weis.darklaf.defaults.DarkColors; -import com.weis.darklaf.defaults.DarkIcons; import com.weis.darklaf.util.DarkUIUtil; import com.weis.darklaf.util.GraphicsContext; import org.jetbrains.annotations.Contract; @@ -57,6 +55,19 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { protected boolean dragging; protected Rectangle dragRect = new Rectangle(); + protected Color dragBorderColor; + protected Color dropBackground; + protected Color tabBorderColor; + protected Color accent; + protected Color focusAccent; + protected Color selectedHoverBackground; + protected Color selectedBackground; + protected Color hoverBackground; + protected Color tabAreaBackground; + + protected Icon moreTabsIcon; + protected Icon newTabIcon; + protected DarkScrollHandler scrollHandler; protected Component leadingComp; @@ -73,7 +84,7 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { } protected Color getDragBorderColor() { - return DarkColors.get().getTabbedPaneDragBorderColor(); + return dragBorderColor; } protected Action getNewTabAction() { @@ -128,6 +139,19 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { @Override protected void installDefaults() { super.installDefaults(); + dragBorderColor = UIManager.getColor("TabbedPane.dragBorderColor"); + dropBackground = UIManager.getColor("TabbedPane.dropFill"); + tabBorderColor = UIManager.getColor("TabbedPane.tabBorderColor"); + accent = UIManager.getColor("TabbedPane.accent"); + focusAccent = UIManager.getColor("TabbedPane.accentFocus"); + selectedHoverBackground = UIManager.getColor("TabbedPane.selectedHoverBackground"); + selectedBackground = UIManager.getColor("TabbedPane.selectedBackground"); + hoverBackground = UIManager.getColor("TabbedPane.hoverBackground"); + tabAreaBackground = UIManager.getColor("TabbedPane.tabAreaBackground"); + + moreTabsIcon = UIManager.getIcon("TabbedPane.moreTabs.icon"); + newTabIcon = UIManager.getIcon("TabbedPane.newTab.icon"); + var ins = tabPane.getClientProperty("JTabbedPane.tabAreaInsets"); if (ins instanceof Insets) { tabAreaInsets = (Insets) ins; @@ -259,11 +283,15 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { @Override protected void paintTabArea(@NotNull final Graphics g, final int tabPlacement, final int selectedIndex) { - g.setColor(DarkColors.get().getTabbedPaneTabAreaBackground()); + g.setColor(getTabAreaBackground()); g.fillRect(0, 0, tabPane.getWidth(), maxTabHeight - 1); super.paintTabArea(g, tabPlacement, selectedIndex); } + protected Color getTabAreaBackground() { + return tabAreaBackground; + } + protected void paintTabAreaBorder(@NotNull final Graphics g, final int tabPlacement, final int x, final int y, final int w, final int h) { g.setColor(getTabBorderColor()); @@ -373,7 +401,7 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { protected Color getDropColor() { if (scrollableTabLayoutEnabled()) { - return DarkColors.get().getTabbedPaneDropBackground(); + return dropBackground; } else { return getTabBackgroundColor(0, false, true); } @@ -457,13 +485,11 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { return insets; } - protected Color getTabBackgroundColor(final int tabIndex, final boolean isSelected, final boolean hover) { + public Color getTabBackgroundColor(final int tabIndex, final boolean isSelected, final boolean hover) { if (isSelected) { - return hover ? DarkColors.get().getTabbedPaneTabSelectedHoverBackground() - : DarkColors.get().getTabbedPaneTabSelectedBackground(); + return hover ? selectedHoverBackground : selectedBackground; } else { - return hover ? DarkColors.get().getTabbedPaneTabHoverBackground() - : tabPane.getBackgroundAt(tabIndex); + return hover ? hoverBackground : tabPane.getBackgroundAt(tabIndex); } } @@ -477,7 +503,7 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { } protected Color getTabBorderColor() { - return DarkColors.get().getTabbedPaneTabBorderColor(); + return tabBorderColor; } protected DarkScrollHandler getScrollHandler() { @@ -530,12 +556,11 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { } protected Color getAccentColor(final boolean focus) { - return focus ? DarkColors.get().getTabbedPaneFocusAccentColor() - : DarkColors.get().getTabbedPaneAccentColor(); + return focus ? focusAccent : accent; } protected Icon getMoreTabsIcon() { - return DarkIcons.get().getTabbedPaneMoreTabs(); + return moreTabsIcon; } protected void layoutLeadingComponent(final Component comp, final int tabWidth, final int tabHeight, @@ -646,7 +671,7 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { } public Icon getNewTabIcon() { - return DarkIcons.get().getTabbedPaneNewTabs(); + return newTabIcon; } public JComponent createNewTabButton() { diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneUIBridge.java b/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneUIBridge.java index 8b1f5fa9..ab09694c 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneUIBridge.java +++ b/src/main/java/com/weis/darklaf/ui/tabbedpane/DarkTabbedPaneUIBridge.java @@ -23,7 +23,6 @@ */ package com.weis.darklaf.ui.tabbedpane; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.util.DarkUIUtil; import com.weis.darklaf.util.LazyActionMap; import org.jetbrains.annotations.NotNull; @@ -220,6 +219,8 @@ public abstract class DarkTabbedPaneUIBridge extends TabbedPaneUI implements Swi protected boolean isRunsDirty; protected boolean calculatedBaseline; + protected Color selectedForeground; + // UI Installation/De-installation protected int baseline; @@ -475,6 +476,7 @@ public abstract class DarkTabbedPaneUIBridge extends TabbedPaneUI implements Swi tabRunOverlay = UIManager.getInt("TabbedPane.tabRunOverlay"); tabsOpaque = UIManager.getBoolean("TabbedPane.tabsOpaque"); contentOpaque = UIManager.getBoolean("TabbedPane.contentOpaque"); + selectedForeground = UIManager.getColor("TabbedPane.selectedForeground"); Object opaque = UIManager.get("TabbedPane.opaque"); if (opaque == null) { opaque = Boolean.FALSE; @@ -1174,7 +1176,7 @@ public abstract class DarkTabbedPaneUIBridge extends TabbedPaneUI implements Swi if (tabPane.isEnabled() && tabPane.isEnabledAt(tabIndex)) { Color fg = tabPane.getForegroundAt(tabIndex); if (isSelected && (fg instanceof UIResource)) { - Color selectedFG = DarkColors.get().getTabbedPaneSelectedForeground(); + Color selectedFG = selectedForeground; if (selectedFG != null) { fg = selectedFG; } diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/MoreTabsButton.java b/src/main/java/com/weis/darklaf/ui/tabbedpane/MoreTabsButton.java index 51d34aed..8d422fee 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/MoreTabsButton.java +++ b/src/main/java/com/weis/darklaf/ui/tabbedpane/MoreTabsButton.java @@ -34,7 +34,7 @@ public class MoreTabsButton extends DarkTabAreaButton { protected final static String INFINITY = "\u221e"; protected final static int PAD = 2; - private DarkTabbedPaneUI ui; + protected DarkTabbedPaneUI ui; protected final Icon icon; public MoreTabsButton(final DarkTabbedPaneUI ui) { @@ -47,6 +47,12 @@ public class MoreTabsButton extends DarkTabAreaButton { setFont(getFont().deriveFont(8f)); } + @Override + public Color getBackground() { + if (ui == null) return super.getBackground(); + return ui.getTabAreaBackground(); + } + protected void paintButton(@NotNull final Graphics g) { FontMetrics metrics = g.getFontMetrics(); String label = getLabelString(); diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabPanel.java b/src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabPanel.java index fb68e7c0..f75b96f3 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabPanel.java +++ b/src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabPanel.java @@ -23,7 +23,6 @@ */ package com.weis.darklaf.ui.tabbedpane; -import com.weis.darklaf.defaults.DarkColors; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -37,7 +36,7 @@ public class ScrollableTabPanel extends JPanel implements UIResource { super(null); this.ui = ui; setOpaque(ui.tabPane.isOpaque()); - Color bgColor = DarkColors.get().getTabbedPaneTabAreaBackground(); + Color bgColor = UIManager.getColor("TabbedPane.tabAreaBackground"); if (bgColor == null) { bgColor = ui.tabPane.getBackground(); } diff --git a/src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabViewport.java b/src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabViewport.java index 5b0a27d7..fb5c2371 100644 --- a/src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabViewport.java +++ b/src/main/java/com/weis/darklaf/ui/tabbedpane/ScrollableTabViewport.java @@ -23,7 +23,6 @@ */ package com.weis.darklaf.ui.tabbedpane; -import com.weis.darklaf.defaults.DarkColors; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -33,15 +32,13 @@ import java.awt.*; @SuppressWarnings("serial") // Superclass is not serializable across versions class ScrollableTabViewport extends JViewport implements UIResource { - private DarkTabbedPaneUIBridge ui; public ScrollableTabViewport(@NotNull final DarkTabbedPaneUIBridge ui) { super(); - this.ui = ui; setName("TabbedPane.scrollableViewport"); setScrollMode(SIMPLE_SCROLL_MODE); setOpaque(ui.tabPane.isOpaque()); - Color bgColor = DarkColors.get().getTabbedPaneTabAreaBackground(); + Color bgColor = UIManager.getColor("TabbedPane.tabAreaBackground"); if (bgColor == null) { bgColor = ui.tabPane.getBackground(); } diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/DarkPanelPopupUI.java b/src/main/java/com/weis/darklaf/ui/tabframe/DarkPanelPopupUI.java index 4feb91d9..ab375573 100644 --- a/src/main/java/com/weis/darklaf/ui/tabframe/DarkPanelPopupUI.java +++ b/src/main/java/com/weis/darklaf/ui/tabframe/DarkPanelPopupUI.java @@ -29,12 +29,12 @@ import com.weis.darklaf.components.border.MutableLineBorder; import com.weis.darklaf.components.tabframe.PanelPopup; import com.weis.darklaf.components.tabframe.TabFrame; import com.weis.darklaf.components.tooltip.ToolTipContext; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.ui.panel.DarkPanelUI; import com.weis.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; +import javax.swing.FocusManager; import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.plaf.ComponentUI; @@ -88,12 +88,12 @@ public class DarkPanelPopupUI extends DarkPanelUI implements PropertyChangeListe } protected void installDefaults() { - headerBackground = DarkColors.get().getTabFramePopupHeaderBackground(); - headerButtonHoverBackground = DarkColors.get().getTabFramePopupButtonHoverBackground(); - headerButtonClickBackground = DarkColors.get().getTabFramePopupButtonClickBackground(); - headerFocusBackground = DarkColors.get().getTabFramePopupFocusHeaderBackground(); - headerButtonFocusHoverBackground = DarkColors.get().getTabFramePopupButtonFocusHoverBackground(); - headerButtonFocusClickBackground = DarkColors.get().getTabFramePopupButtonFocusClickBackground(); + headerBackground = UIManager.getColor("TabFramePopup.headerBackground"); + headerButtonHoverBackground = UIManager.getColor("TabFramePopup.headerButtonHoverBackground"); + headerButtonClickBackground = UIManager.getColor("TabFramePopup.headerButtonClickBackground"); + headerFocusBackground = UIManager.getColor("TabFramePopup.headerFocusBackground"); + headerButtonFocusHoverBackground = UIManager.getColor("TabFramePopup.headerButtonFocusHoverBackground"); + headerButtonFocusClickBackground = UIManager.getColor("TabFramePopup.headerButtonFocusClickBackground"); accelerator = UIManager.getString("TabFramePopup.closeAccelerator"); popupComponent.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT) .put(KeyStroke.getKeyStroke(accelerator), accelerator); @@ -175,7 +175,7 @@ public class DarkPanelPopupUI extends DarkPanelUI implements PropertyChangeListe } protected MutableLineBorder createBorder() { - var color = DarkColors.get().getTabFramePopupBorderColor(); + var color = UIManager.getColor("TabFramePopup.borderColor"); return new MutableLineBorder.UIResource(0, 0, 0, 0, color); } @@ -342,6 +342,9 @@ public class DarkPanelPopupUI extends DarkPanelUI implements PropertyChangeListe @Override public void eventDispatched(@NotNull final AWTEvent event) { if (event.getID() == FocusEvent.FOCUS_GAINED) { + var focusOwner = FocusManager.getCurrentManager().getFocusOwner(); + if (focusOwner instanceof TabFrame) return; + if (focusOwner instanceof JRootPane) return; boolean focus = DarkUIUtil.hasFocus(popupComponent); setHeaderBackground(focus); } diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameComponentPopupMenu.java b/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameComponentPopupMenu.java new file mode 100644 index 00000000..98ac79a0 --- /dev/null +++ b/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameComponentPopupMenu.java @@ -0,0 +1,153 @@ +/* + * MIT License + * + * Copyright (c) 2019 Jannis Weis + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.weis.darklaf.ui.tabframe; + +import com.weis.darklaf.components.JXPopupMenu; +import com.weis.darklaf.components.alignment.Alignment; +import com.weis.darklaf.components.tabframe.TabFrameTab; +import com.weis.darklaf.icons.EmptyIcon; +import org.jetbrains.annotations.NotNull; + +import javax.swing.*; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; + +public class DarkTabFrameComponentPopupMenu extends JXPopupMenu implements PropertyChangeListener { + + private final TabFrameTab tab; + private JMenuItem[] actions; + private int disabled = -1; + + public DarkTabFrameComponentPopupMenu(final TabFrameTab tab) { + this.tab = tab; + JMenu moveToMenu = new JMenu("Move to"); + var aligns = Alignment.values(); + actions = new JMenuItem[aligns.length]; + + Alignment a = Alignment.NORTH_WEST; + while (a != Alignment.NORTH) { + createAndAdd(a, moveToMenu); + a = a.anticlockwise(); + } + createAndAdd(a, moveToMenu); + + add(moveToMenu); + if (tab.getOrientation() != null) { + disabled = tab.getOrientation().ordinal(); + actions[tab.getOrientation().ordinal()].setEnabled(false); + } + tab.getComponent().addPropertyChangeListener(this); + } + + protected void createAndAdd(final Alignment a, @NotNull final JMenu menu) { + var menuItem = createMenuItem(a); + actions[a.ordinal()] = menuItem; + menu.add(menuItem); + } + + protected JMenuItem createMenuItem(final Alignment a) { + var menuItem = new JMenuItem(); + menuItem.addActionListener(e -> moveTo(a)); + menuItem.setText(getDescription(a)); + menuItem.setIcon(createIcon(a, true)); + menuItem.setDisabledIcon(createIcon(a, false)); + return menuItem; + } + + protected void moveTo(@NotNull final Alignment a) { + if (disabled >= 0) { + actions[disabled].setEnabled(true); + } + disabled = a.ordinal(); + actions[a.ordinal()].setEnabled(false); + tab.getTabFrame().moveTab(tab, a); + } + + protected String getDescription(@NotNull final Alignment a) { + switch (a) { + case NORTH: + return "Top Left"; + case SOUTH: + return "Bottom Right"; + case EAST: + return "Right Top"; + case WEST: + return "Left Bottom"; + case NORTH_EAST: + return "Top Right"; + case NORTH_WEST: + return "Left Top"; + case SOUTH_EAST: + return "Right Bottom"; + case SOUTH_WEST: + return "Bottom Left"; + case CENTER: + default: + return ""; + } + } + + protected Icon createIcon(@NotNull final Alignment a, final boolean enabled) { + var suffix = enabled ? "" : "Disabled"; + switch (a) { + case NORTH: + return UIManager.getIcon("TabFrame.moveToTopLeft" + suffix + ".icon"); + case SOUTH: + return UIManager.getIcon("TabFrame.moveToBottomRight" + suffix + ".icon"); + case EAST: + return UIManager.getIcon("TabFrame.moveToRightTop" + suffix + ".icon"); + case WEST: + return UIManager.getIcon("TabFrame.moveToLeftBottom" + suffix + ".icon"); + case NORTH_EAST: + return UIManager.getIcon("TabFrame.moveToTopRight" + suffix + ".icon"); + case NORTH_WEST: + return UIManager.getIcon("TabFrame.moveToLeftTop" + suffix + ".icon"); + case SOUTH_EAST: + return UIManager.getIcon("TabFrame.moveToRightBottom" + suffix + ".icon"); + case SOUTH_WEST: + return UIManager.getIcon("TabFrame.moveToBottomLeft" + suffix + ".icon"); + case CENTER: + default: + return EmptyIcon.create(0); + } + } + + @Override + public void propertyChange(@NotNull final PropertyChangeEvent evt) { + if ("orientation".equals(evt.getPropertyName())) { + var a = evt.getNewValue(); + if (a instanceof Alignment) { + if (disabled >= 0) { + actions[disabled].setEnabled(true); + } + disabled = ((Alignment) a).ordinal(); + actions[disabled].setEnabled(false); + } + } else if ("componentPopupMenu".equals(evt.getPropertyName())) { + if (evt.getNewValue() != this) { + tab.getComponent().removePropertyChangeListener(this); + } + } + } +} diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabContainerUI.java b/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabContainerUI.java index f04deb0c..c2185fca 100644 --- a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabContainerUI.java +++ b/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabContainerUI.java @@ -26,7 +26,6 @@ package com.weis.darklaf.ui.tabframe; import com.weis.darklaf.components.tabframe.TabFrame; import com.weis.darklaf.components.tabframe.TabFrameTabContainer; import com.weis.darklaf.decorators.HoverListener; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.ui.panel.DarkPanelUI; import com.weis.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; @@ -134,8 +133,8 @@ public class DarkTabFrameTabContainerUI extends DarkPanelUI implements PropertyC protected void installDefaults(final JPanel p) { super.installDefaults(p); tabContainer.setOpaque(true); - selectedColor = DarkColors.get().getTabFrameTabSelectedBackground(); - hoverColor = DarkColors.get().getTabFrameTabHoverBackground(); + selectedColor = UIManager.getColor("TabFrameTab.selectedBackground"); + hoverColor = UIManager.getColor("TabFrameTab.hoverBackground"); } protected void uninstallAccelerator(final TabFrame tabFrame) { diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabLabelUI.java b/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabLabelUI.java index 01b015a7..44e74a1e 100644 --- a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabLabelUI.java +++ b/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameTabLabelUI.java @@ -27,7 +27,6 @@ import com.weis.darklaf.components.alignment.Alignment; import com.weis.darklaf.components.tabframe.TabFrame; import com.weis.darklaf.components.tabframe.TabFrameTabLabel; import com.weis.darklaf.decorators.HoverListener; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.icons.RotatableIcon; import com.weis.darklaf.ui.label.DarkLabelUI; import com.weis.darklaf.util.DarkUIUtil; @@ -132,11 +131,12 @@ public class DarkTabFrameTabLabelUI extends DarkLabelUI implements PropertyChang super.installDefaults(c); tabComponent.setFont(UIManager.getFont("TabFrameTab.font")); tabComponent.setOpaque(true); - defaultFontColor = DarkColors.get().getTabFrameTabForeground(); - selectedColor = DarkColors.get().getTabFrameTabSelectedBackground(); - hoverColor = DarkColors.get().getTabFrameTabHoverBackground(); - selectedFontColor = DarkColors.get().getTabFrameTabSelectedForeground(); + defaultFontColor = UIManager.getColor("TabFrameTab.foreground"); + selectedColor = UIManager.getColor("TabFrameTab.selectedBackground"); + hoverColor = UIManager.getColor("TabFrameTab.hoverBackground"); + selectedFontColor = UIManager.getColor("TabFrameTab.selectedForeground"); LookAndFeel.installBorder(c, "TabFrameTab.border"); + tabComponent.setComponentPopupMenu(new DarkTabFrameComponentPopupMenu(tabComponent)); } @Override diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameUI.java b/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameUI.java index 02441ed3..db720c50 100644 --- a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameUI.java +++ b/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabFrameUI.java @@ -28,8 +28,6 @@ import com.weis.darklaf.components.tabframe.PopupContainer; import com.weis.darklaf.components.tabframe.TabFrame; import com.weis.darklaf.components.tabframe.TabFramePopup; import com.weis.darklaf.components.tabframe.TabFrameUI; -import com.weis.darklaf.defaults.DarkColors; -import com.weis.darklaf.defaults.DarkDefaults; import com.weis.darklaf.util.DarkUIUtil; import org.jdesktop.jxlayer.JXLayer; import org.jetbrains.annotations.Contract; @@ -62,6 +60,7 @@ public class DarkTabFrameUI extends TabFrameUI implements AWTEventListener { private MutableLineBorder leftBorder; private MutableLineBorder rightBorder; private Color lineColor; + private int tabHeight; @NotNull @Contract("_ -> new") @@ -80,7 +79,8 @@ public class DarkTabFrameUI extends TabFrameUI implements AWTEventListener { protected void installDefaults() { layout = createLayout(); tabFrame.setLayout(layout); - lineColor = DarkColors.get().getTabFrameBorderColor(); + lineColor = UIManager.getColor("TabFrame.line"); + tabHeight = UIManager.getInt("TabFrame.tabHeight"); topBorder = new MutableLineBorder.UIResource(0, 0, 1, 0, lineColor); bottomBorder = new MutableLineBorder.UIResource(1, 0, 0, 0, lineColor); rightBorder = new MutableLineBorder.UIResource(0, 0, 1, 0, lineColor); @@ -147,7 +147,7 @@ public class DarkTabFrameUI extends TabFrameUI implements AWTEventListener { } public int getTabSize(final TabFrame tabFrame) { - return DarkDefaults.get().getTabFrameTabHeight(); + return tabHeight; } public JComponent getLeftContainer() { diff --git a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabbedPopupUI.java b/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabbedPopupUI.java index edea3c29..a8a32c71 100644 --- a/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabbedPopupUI.java +++ b/src/main/java/com/weis/darklaf/ui/tabframe/DarkTabbedPopupUI.java @@ -26,8 +26,8 @@ package com.weis.darklaf.ui.tabframe; import com.weis.darklaf.components.JPanelUIResource; import com.weis.darklaf.components.border.MutableLineBorder; import com.weis.darklaf.components.tabframe.TabbedPopup; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.ui.tabbedpane.DarkTabbedPaneUI; +import com.weis.darklaf.ui.tabbedpane.MoreTabsButton; import com.weis.darklaf.ui.tabbedpane.NewTabButton; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -46,6 +46,7 @@ public class DarkTabbedPopupUI extends DarkPanelPopupUI { protected Color headerFocusHoverBackground; protected Color headerFocusSelectedBackground; protected Color headerFocusSelectedHoverBackground; + protected Color tabBorderColor; private TabbedPopup popupComponent; private JTabbedPane tabbedPane; private MutableLineBorder border; @@ -66,12 +67,13 @@ public class DarkTabbedPopupUI extends DarkPanelPopupUI { @Override protected void installDefaults() { super.installDefaults(); - headerHoverBackground = DarkColors.get().getTabFramePopupHeaderHoverBackground(); - headerSelectedBackground = DarkColors.get().getTabFramePopupHeaderSelectedBackground(); - headerSelectedHoverBackground = DarkColors.get().getTabFramePopupHeaderSelectedHoverBackground(); - headerFocusHoverBackground = DarkColors.get().getTabFramePopupHeaderFocusHoverBackground(); - headerFocusSelectedBackground = DarkColors.get().getTabFramePopupHeaderFocusSelectedBackground(); - headerFocusSelectedHoverBackground = DarkColors.get().getTabFramePopupHeaderFocusSelectedHoverBackground(); + headerHoverBackground = UIManager.getColor("TabFramePopup.headerHoverBackground"); + headerSelectedBackground = UIManager.getColor("TabFramePopup.headerSelectedBackground"); + headerSelectedHoverBackground = UIManager.getColor("TabFramePopup.headerSelectedHoverBackground"); + headerFocusHoverBackground = UIManager.getColor("TabFramePopup.headerFocusHoverBackground"); + headerFocusSelectedBackground = UIManager.getColor("TabFramePopup.headerFocusSelectedBackground"); + headerFocusSelectedHoverBackground = UIManager.getColor("TabFramePopup.headerFocusSelectedHoverBackground"); + tabBorderColor = UIManager.getColor("TabFramePopup.borderColor"); } @Override @@ -128,31 +130,56 @@ public class DarkTabbedPopupUI extends DarkPanelPopupUI { } } + protected static class TabFrameMoreTabsButton extends MoreTabsButton { + public TabFrameMoreTabsButton(final DarkTabbedPaneUI ui) { + super(ui); + } + } + + protected class TabFrameNewTabButton extends NewTabButton { + + protected TabFrameNewTabButton(@NotNull final DarkTabbedPaneUI ui) { + super(ui); + } + + @Override + protected JButton createButton() { + var button = new HeaderButton(ui.getNewTabIcon(), DarkTabbedPopupUI.this); + button.putClientProperty("JButton.variant", "shadow"); + button.putClientProperty("JButton.buttonType", "square"); + button.putClientProperty("JButton.thin", Boolean.TRUE); + button.setRolloverEnabled(true); + button.setOpaque(false); + return button; + } + } + protected class DarkTabFrameTabbedPaneUI extends DarkTabbedPaneUI { - protected Color getTabBackgroundColor(final int tabIndex, final boolean isSelected, final boolean hover) { + @Override + protected Color getTabAreaBackground() { + return hasFocus() ? headerFocusBackground : headerBackground; + } + + public Color getTabBackgroundColor(final int tabIndex, final boolean isSelected, final boolean hover) { if (hasFocus()) { if (isSelected) { - return hover ? headerFocusSelectedHoverBackground - : headerFocusSelectedBackground; + return hover ? headerFocusSelectedHoverBackground : headerFocusSelectedBackground; } else { - return hover ? headerFocusHoverBackground - : headerFocusBackground; + return hover ? headerFocusHoverBackground : headerFocusBackground; } } else { if (isSelected) { - return hover ? headerSelectedHoverBackground - : headerSelectedBackground; + return hover ? headerSelectedHoverBackground : headerSelectedBackground; } else { - return hover ? headerHoverBackground - : headerBackground; + return hover ? headerHoverBackground : headerBackground; } } } @Override protected Color getTabBorderColor() { - return DarkColors.get().getTabFramePopupBorderColor(); + return tabBorderColor; } @Override @@ -167,25 +194,7 @@ public class DarkTabbedPopupUI extends DarkPanelPopupUI { @Override public JButton createMoreTabsButton() { - return super.createMoreTabsButton(); - } - } - - protected class TabFrameNewTabButton extends NewTabButton { - - protected TabFrameNewTabButton(@NotNull final DarkTabbedPaneUI ui) { - super(ui); - } - - @Override - protected JButton createButton() { - var button = new HeaderButton(ui.getNewTabIcon(), DarkTabbedPopupUI.this); - button.putClientProperty("JButton.variant", "shadow"); - button.putClientProperty("JButton.buttonType", "square"); - button.putClientProperty("JButton.thin", Boolean.TRUE); - button.setRolloverEnabled(true); - button.setOpaque(false); - return button; + return new TabFrameMoreTabsButton(this); } } } diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableBorder.java b/src/main/java/com/weis/darklaf/ui/table/DarkTableBorder.java index 82242700..e97c681e 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableBorder.java +++ b/src/main/java/com/weis/darklaf/ui/table/DarkTableBorder.java @@ -24,9 +24,8 @@ package com.weis.darklaf.ui.table; import com.weis.darklaf.components.border.MutableLineBorder; -import com.weis.darklaf.defaults.DarkColors; -import org.jetbrains.annotations.NotNull; +import javax.swing.*; import javax.swing.plaf.UIResource; import java.awt.*; @@ -37,21 +36,10 @@ public class DarkTableBorder extends MutableLineBorder implements UIResource { public DarkTableBorder() { super(1, 1, 1, 1, null); + setColor(UIManager.getColor("TableHeader.borderColor")); } - @Override - public void paintBorder(final Component c, @NotNull final Graphics g, final int x, final int y, - final int width, final int height) { - setColor(getBorderColor()); - super.paintBorder(c, g, x, y, width, height); - } - - protected Color getBorderColor() { - return DarkColors.get().getTableHeaderBorderColor(); - } - - @Override - public boolean isBorderOpaque() { - return true; + public Color getBorderColor() { + return getColor(); } } diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellEditor.java b/src/main/java/com/weis/darklaf/ui/table/DarkTableCellEditor.java index 9c6e11f5..b53eaebb 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellEditor.java +++ b/src/main/java/com/weis/darklaf/ui/table/DarkTableCellEditor.java @@ -1,6 +1,5 @@ package com.weis.darklaf.ui.table; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.ui.combobox.DarkComboBoxUI; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -225,8 +224,8 @@ public class DarkTableCellEditor extends DefaultCellEditor { } boolean alternativeRow = UIManager.getBoolean("Table.alternateRowColor"); - Color alternativeRowColor = DarkColors.get().getTableAlternativeBackground(); - Color normalColor = DarkColors.get().getTableBackground(); + Color alternativeRowColor = UIManager.getColor("Table.alternateRowBackground"); + Color normalColor = UIManager.getColor("Table.background"); if (alternativeRow) { if (!isSelected) { if (row % 2 == 1) { diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellEditorToggleButton.java b/src/main/java/com/weis/darklaf/ui/table/DarkTableCellEditorToggleButton.java index 57e7f0a2..ddf950fa 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellEditorToggleButton.java +++ b/src/main/java/com/weis/darklaf/ui/table/DarkTableCellEditorToggleButton.java @@ -1,7 +1,6 @@ package com.weis.darklaf.ui.table; import com.weis.darklaf.decorators.CellRenderer; -import com.weis.darklaf.defaults.DarkColors; import javax.swing.*; import javax.swing.table.TableCellEditor; @@ -32,8 +31,8 @@ public class DarkTableCellEditorToggleButton extends AbstractCellEditor implemen toggleButton.setHorizontalAlignment(table.getComponentOrientation().isLeftToRight() ? LEFT : RIGHT); boolean alternativeRow = UIManager.getBoolean("Table.alternateRowColor"); - Color alternativeRowColor = DarkColors.get().getTableAlternativeBackground(); - Color normalColor = DarkColors.get().getTableBackground(); + Color alternativeRowColor = UIManager.getColor("Table.alternateRowBackground"); + Color normalColor = UIManager.getColor("Table.background"); if (alternativeRow) { if (!isSelected) { if (row % 2 == 1) { diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellFocusBorder.java b/src/main/java/com/weis/darklaf/ui/table/DarkTableCellFocusBorder.java index ec33cbda..1cb502ac 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellFocusBorder.java +++ b/src/main/java/com/weis/darklaf/ui/table/DarkTableCellFocusBorder.java @@ -1,6 +1,5 @@ package com.weis.darklaf.ui.table; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.ui.cell.DarkCellBorder; import com.weis.darklaf.util.DarkUIUtil; @@ -12,12 +11,20 @@ import java.awt.*; */ public class DarkTableCellFocusBorder extends DarkCellBorder { + protected Color rowBorderColor; + protected Color borderColor; + + public DarkTableCellFocusBorder() { + rowBorderColor = UIManager.getColor("Table.focusRowBorderColor"); + borderColor = UIManager.getColor("Table.focusBorderColor"); + } + @Override public void paintBorder(final Component c, final Graphics g, final int x, final int y, final int width, final int height) { super.paintBorder(c, g, x, y, width, height); if (isRowFocusBorder(c)) { - g.setColor(DarkColors.get().getTableRowBorderColor()); + g.setColor(rowBorderColor); g.fillRect(0, 0, width, 1); g.fillRect(0, height - 1, width, 1); if (forcePaintLeft(c)) { @@ -27,7 +34,7 @@ public class DarkTableCellFocusBorder extends DarkCellBorder { g.fillRect(width - 1, 0, 1, height); } } else { - g.setColor(DarkColors.get().getTableFocusBorderColor()); + g.setColor(borderColor); DarkUIUtil.drawRect(g, 0, 0, width, height, 1); } } diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellRenderer.java b/src/main/java/com/weis/darklaf/ui/table/DarkTableCellRenderer.java index bc8a158e..c88e6d8f 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableCellRenderer.java +++ b/src/main/java/com/weis/darklaf/ui/table/DarkTableCellRenderer.java @@ -1,6 +1,5 @@ package com.weis.darklaf.ui.table; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.ui.cell.DarkCellRendererToggleButton; import com.weis.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.NotNull; @@ -60,8 +59,8 @@ public class DarkTableCellRenderer extends DefaultTableCellRenderer { } boolean alternativeRow = UIManager.getBoolean("Table.alternateRowColor"); - Color alternativeRowColor = DarkColors.get().getTableAlternativeBackground(); - Color normalColor = DarkColors.get().getTableBackground(); + Color alternativeRowColor = UIManager.getColor("Table.alternateRowBackground"); + Color normalColor = UIManager.getColor("Table.background"); if (alternativeRow) { if (!isSelected) { if (row % 2 == 1) { diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderBorder.java b/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderBorder.java index 567459c1..18902638 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderBorder.java +++ b/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderBorder.java @@ -24,11 +24,9 @@ package com.weis.darklaf.ui.table; import com.weis.darklaf.components.border.MutableLineBorder; -import com.weis.darklaf.defaults.DarkColors; -import org.jetbrains.annotations.NotNull; +import javax.swing.*; import javax.swing.plaf.UIResource; -import java.awt.*; /** * @author Jannis Weis @@ -37,21 +35,6 @@ public class DarkTableHeaderBorder extends MutableLineBorder implements UIResour public DarkTableHeaderBorder() { super(0, 0, 1, 0, null); - } - - @Override - public void paintBorder(final Component c, @NotNull final Graphics g, final int x, final int y, - final int width, final int height) { - setColor(getBorderColor()); - super.paintBorder(c, g, x, y, width, height); - } - - protected Color getBorderColor() { - return DarkColors.get().getTableHeaderBorderColor(); - } - - @Override - public boolean isBorderOpaque() { - return true; + setColor(UIManager.getColor("TableHeader.borderColor")); } } diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderCorner.java b/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderCorner.java index bd5c45d3..8a4f338d 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderCorner.java +++ b/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderCorner.java @@ -23,8 +23,6 @@ */ package com.weis.darklaf.ui.table; -import com.weis.darklaf.defaults.DarkColors; - import javax.swing.*; import javax.swing.plaf.UIResource; import java.awt.*; @@ -34,6 +32,14 @@ import java.awt.*; */ public class DarkTableHeaderCorner extends JComponent implements UIResource { + protected Color borderColor; + protected Color background; + + public DarkTableHeaderCorner() { + background = UIManager.getColor("TableHeader.background"); + borderColor = UIManager.getColor("TableHeader.borderColor"); + } + @Override protected void paintComponent(final Graphics g) { super.paintComponent(g); @@ -45,10 +51,10 @@ public class DarkTableHeaderCorner extends JComponent implements UIResource { } protected Color getHeaderBackground() { - return DarkColors.get().getTableHeaderBackground(); + return background; } protected Color getBorderColor() { - return DarkColors.get().getTableHeaderBorderColor(); + return borderColor; } } diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderUI.java b/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderUI.java index dff5ee9e..a9017782 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderUI.java +++ b/src/main/java/com/weis/darklaf/ui/table/DarkTableHeaderUI.java @@ -23,7 +23,6 @@ */ package com.weis.darklaf.ui.table; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.util.GraphicsContext; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -42,6 +41,8 @@ import java.awt.*; public class DarkTableHeaderUI extends DarkTableHeaderUIBridge { private static final int HEADER_HEIGHT = 26; + protected Color borderColor; + protected Color background; @NotNull @Contract("_ -> new") @@ -53,7 +54,11 @@ public class DarkTableHeaderUI extends DarkTableHeaderUIBridge { public void installUI(final JComponent c) { super.installUI(c); var dim = header.getPreferredSize(); - header.setPreferredSize(new Dimension(dim.width, Math.max(dim.height, HEADER_HEIGHT))); + int headerHeight = UIManager.getInt("TableHeader.height"); + if (headerHeight < 0) { + headerHeight = HEADER_HEIGHT; + } + header.setPreferredSize(new Dimension(dim.width, Math.max(dim.height, headerHeight))); if (header.getDefaultRenderer() instanceof DefaultTableCellRenderer) { DefaultTableCellRenderer renderer = (DefaultTableCellRenderer) header.getDefaultRenderer(); renderer.setHorizontalAlignment(SwingConstants.LEADING); @@ -63,6 +68,8 @@ public class DarkTableHeaderUI extends DarkTableHeaderUIBridge { @Override protected void installDefaults() { super.installDefaults(); + background = UIManager.getColor("TableHeader.background"); + borderColor = UIManager.getColor("TableHeader.borderColor"); LookAndFeel.installBorder(header, "TableHeader.border"); } @@ -233,11 +240,11 @@ public class DarkTableHeaderUI extends DarkTableHeaderUIBridge { } protected Color getHeaderBackground() { - return DarkColors.get().getTableHeaderBackground(); + return background; } protected Color getBorderColor() { - return DarkColors.get().getTableHeaderBorderColor(); + return borderColor; } protected boolean isScrollPaneRtl() { diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableUI.java b/src/main/java/com/weis/darklaf/ui/table/DarkTableUI.java index bdfedbdf..a3896671 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableUI.java +++ b/src/main/java/com/weis/darklaf/ui/table/DarkTableUI.java @@ -1,6 +1,5 @@ package com.weis.darklaf.ui.table; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -26,12 +25,14 @@ import java.util.function.Supplier; public class DarkTableUI extends DarkTableUIBridge { private static final int ROW_HEIGHT = 22; + protected Color selectionBackground; + protected Color selectionFocusBackground; private final FocusListener focusListener = new FocusListener() { @Override public void focusGained(final FocusEvent e) { var bg = table.getSelectionBackground(); if (bg instanceof UIResource) { - table.setSelectionBackground(DarkColors.get().getTableFocusSelectionBackground()); + table.setSelectionBackground(selectionFocusBackground); } table.repaint(); } @@ -43,7 +44,7 @@ public class DarkTableUI extends DarkTableUIBridge { if (table.isEditing()) { table.setSelectionBackground(table.getBackground()); } else { - table.setSelectionBackground(DarkColors.get().getTableSelectionBackground()); + table.setSelectionBackground(selectionBackground); } } table.repaint(); @@ -75,6 +76,7 @@ public class DarkTableUI extends DarkTableUIBridge { } } }; + protected Color borderColor; @NotNull @Contract("_ -> new") @@ -82,6 +84,7 @@ public class DarkTableUI extends DarkTableUIBridge { return new DarkTableUI(); } + @Override protected void paintGrid(@NotNull final Graphics g, final int rMin, final int rMax, final int cMin, final int cMax) { @@ -311,7 +314,7 @@ public class DarkTableUI extends DarkTableUIBridge { } protected Color getBorderColor() { - return DarkColors.get().getTableHeaderBorderColor(); + return borderColor; } protected boolean isInScrollPane() { @@ -406,6 +409,9 @@ public class DarkTableUI extends DarkTableUIBridge { UIManager.getBoolean("Table.renderBooleanAsCheckBox")); table.putClientProperty("JTable.booleanRenderType", UIManager.getString("Table.booleanRenderType")); setupRendererComponents(table); + borderColor = UIManager.getColor("TableHeader.borderColor"); + selectionFocusBackground = UIManager.getColor("Table.focusSelectionBackground"); + selectionBackground = UIManager.getColor("Table.selectionNoFocusBackground"); } @Override diff --git a/src/main/java/com/weis/darklaf/ui/table/DarkTableUIBridge.java b/src/main/java/com/weis/darklaf/ui/table/DarkTableUIBridge.java index 0a6f81ce..36827db9 100644 --- a/src/main/java/com/weis/darklaf/ui/table/DarkTableUIBridge.java +++ b/src/main/java/com/weis/darklaf/ui/table/DarkTableUIBridge.java @@ -23,7 +23,6 @@ */ package com.weis.darklaf.ui.table; -import com.weis.darklaf.defaults.DarkColors; import org.jetbrains.annotations.NotNull; import sun.swing.SwingUtilities2; @@ -39,6 +38,16 @@ import java.awt.*; */ public class DarkTableUIBridge extends TableUIBridge { + protected Color dropLine; + protected Color dropLineShort; + + @Override + protected void installDefaults() { + super.installDefaults(); + dropLine = UIManager.getColor("Table.dropLineColor"); + dropLineShort = UIManager.getColor("Table.dropLineShortColor"); + } + /** * Paint a representation of the table instance * that was set in installUI(). @@ -144,8 +153,8 @@ public class DarkTableUIBridge extends TableUIBridge { return; } - Color color = DarkColors.get().getTableDropLineColor(); - Color shortColor = DarkColors.get().getTableDropLineShortColor(); + Color color = dropLine; + Color shortColor = dropLineShort; if (color == null && shortColor == null) { return; } diff --git a/src/main/java/com/weis/darklaf/ui/table/TextFieldTableCellEditorBorder.java b/src/main/java/com/weis/darklaf/ui/table/TextFieldTableCellEditorBorder.java index 8a50dc0a..c7551e05 100644 --- a/src/main/java/com/weis/darklaf/ui/table/TextFieldTableCellEditorBorder.java +++ b/src/main/java/com/weis/darklaf/ui/table/TextFieldTableCellEditorBorder.java @@ -1,6 +1,5 @@ package com.weis.darklaf.ui.table; -import com.weis.darklaf.ui.text.DarkTextFieldUI; import com.weis.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -13,10 +12,16 @@ import java.awt.*; */ public class TextFieldTableCellEditorBorder extends DarkTableCellBorder { + protected Color borderColor; + + public TextFieldTableCellEditorBorder() { + borderColor = UIManager.getColor("TextField.border.enabled"); + } + @Override public void paintBorder(@NotNull final Component c, @NotNull final Graphics g, final int x, final int y, final int width, final int height) { - g.setColor(DarkTextFieldUI.getBorderColor(false, false, true, true)); + g.setColor(borderColor); var table = DarkUIUtil.getParentOfType(JTable.class, c); if (table != null) { if (!table.getShowHorizontalLines()) { diff --git a/src/main/java/com/weis/darklaf/ui/taskpane/DarkTaskPaneUI.java b/src/main/java/com/weis/darklaf/ui/taskpane/DarkTaskPaneUI.java index 9559add5..1fd79876 100644 --- a/src/main/java/com/weis/darklaf/ui/taskpane/DarkTaskPaneUI.java +++ b/src/main/java/com/weis/darklaf/ui/taskpane/DarkTaskPaneUI.java @@ -23,8 +23,6 @@ */ package com.weis.darklaf.ui.taskpane; -import com.weis.darklaf.defaults.DarkColors; -import com.weis.darklaf.defaults.DarkDefaults; import com.weis.darklaf.util.DarkUIUtil; import org.jdesktop.swingx.JXCollapsiblePane; import org.jdesktop.swingx.JXHyperlink; @@ -49,6 +47,16 @@ public class DarkTaskPaneUI extends MetalTaskPaneUI { } protected boolean isCollapsed; + protected Color borderColor; + protected int arc; + + @Override + protected void installDefaults() { + super.installDefaults(); + borderColor = UIManager.getColor("TaskPane.borderColor"); + arc = UIManager.getInt("TaskPane.arc"); + } + @Override protected void installListeners() { super.installListeners(); @@ -64,8 +72,7 @@ public class DarkTaskPaneUI extends MetalTaskPaneUI { @Override protected Border createContentPaneBorder() { - Color borderColor = DarkColors.get().getTaskPaneBorderColor(); - return new CompoundBorder(new DarkContentPaneBorder(borderColor), + return new CompoundBorder(new DarkContentPaneBorder(borderColor, arc), BorderFactory.createEmptyBorder(10, 10, 10, 10)); } @@ -77,38 +84,34 @@ public class DarkTaskPaneUI extends MetalTaskPaneUI { @Override protected int getRoundHeight() { - return getArcSize(); - } - - @Contract(pure = true) - protected static int getArcSize() { - return DarkDefaults.get().getTaskPaneArc(); + return arc; } protected static class DarkContentPaneBorder implements Border, UIResource { protected Color color; + protected int arc; @Contract(pure = true) - public DarkContentPaneBorder(final Color color) { + public DarkContentPaneBorder(final Color color, final int arc) { + this.arc = arc; this.color = color; } public void paintBorder(final Component c, @NotNull final Graphics g, final int x, final int y, final int width, final int height) { var clip = g.getClip().getBounds(); - int h = height + getArcSize(); + int h = height + arc; g.setClip(clip.x, clip.y, width, h / 2 + 1); g.setColor(color); DarkUIUtil.drawRect(g, x, y - 1, width, h, 1); if (c.isOpaque()) { g.setColor(c.getBackground()); - g.setClip(clip.x, clip.x + h - getArcSize(), width, getArcSize()); - DarkUIUtil.paintRoundRect((Graphics2D) g, x + 0.5f, y + 0.5f, - width - 1, h - 1, getArcSize()); + g.setClip(clip.x, clip.x + h - arc, width, arc); + DarkUIUtil.paintRoundRect((Graphics2D) g, x + 0.5f, y + 0.5f, width - 1, h - 1, arc); } g.setClip(clip.x, clip.y + h / 2 - 1, width, h / 2 + 2); g.setColor(color); - DarkUIUtil.paintLineBorder((Graphics2D) g, x, y, width, h, getArcSize(), false); + DarkUIUtil.paintLineBorder((Graphics2D) g, x, y, width, h, arc, false); g.setClip(clip); } @@ -128,10 +131,6 @@ public class DarkTaskPaneUI extends MetalTaskPaneUI { protected class DarkPaneBorder extends PaneBorder { - public DarkPaneBorder() { - borderColor = DarkColors.get().getTaskPaneBorderColor(); - } - @Override protected void paintTitleBackground(@NotNull final JXTaskPane group, final Graphics g2) { var g = (Graphics2D) g2; diff --git a/src/main/java/com/weis/darklaf/ui/text/DarkPasswordFieldUI.java b/src/main/java/com/weis/darklaf/ui/text/DarkPasswordFieldUI.java index 5e6e5473..f2a80981 100644 --- a/src/main/java/com/weis/darklaf/ui/text/DarkPasswordFieldUI.java +++ b/src/main/java/com/weis/darklaf/ui/text/DarkPasswordFieldUI.java @@ -24,7 +24,6 @@ package com.weis.darklaf.ui.text; import com.weis.darklaf.decorators.MouseMovementListener; -import com.weis.darklaf.defaults.DarkIcons; import com.weis.darklaf.util.DarkUIUtil; import com.weis.darklaf.util.GraphicsContext; import org.jetbrains.annotations.Contract; @@ -92,6 +91,10 @@ public class DarkPasswordFieldUI extends DarkPasswordFieldUIBridge { getComponent().repaint(); } }; + protected static Icon show; + protected static Icon showPressed; + protected int borderSize; + protected int arc; @NotNull @Contract("_ -> new") @@ -99,8 +102,17 @@ public class DarkPasswordFieldUI extends DarkPasswordFieldUIBridge { return new DarkPasswordFieldUI(); } + @Override + protected void installDefaults() { + super.installDefaults(); + borderSize = UIManager.getInt("PasswordField.borderThickness"); + arc = UIManager.getInt("PasswordField.arc"); + show = UIManager.getIcon("PasswordField.show.icon"); + showPressed = UIManager.getIcon("PasswordField.showPressed.icon"); + } + protected void updateCursor(final Point p) { - boolean insideTextArea = DarkTextFieldUI.getDrawingRect(getComponent()).contains(p) + boolean insideTextArea = getDrawingRect(getComponent()).contains(p) && p.x >= DarkTextFieldUI.getTextRect(getComponent()).x && p.x < getShowIconCoord().x; if (insideTextArea) { @@ -114,7 +126,7 @@ public class DarkPasswordFieldUI extends DarkPasswordFieldUIBridge { @NotNull private Point getShowIconCoord() { - Rectangle r = DarkTextFieldUI.getDrawingRect(getComponent()); + Rectangle r = getDrawingRect(getComponent()); int w = getShowIcon().getIconWidth(); return new Point(r.x + r.width - w - DarkTextBorder.PADDING, r.y + (r.height - w) / 2); } @@ -123,9 +135,8 @@ public class DarkPasswordFieldUI extends DarkPasswordFieldUIBridge { return showShowIcon() && DarkTextFieldUI.isOver(getShowIconCoord(), getShowIcon(), p); } - @Contract(pure = true) - public static Icon getShowIcon() { - return DarkIcons.get().getPasswordFiledShow(); + protected static Icon getShowIcon() { + return show; } private boolean showShowIcon() { @@ -162,26 +173,6 @@ public class DarkPasswordFieldUI extends DarkPasswordFieldUIBridge { c.removeKeyListener(keyListener); } - @Contract(pure = true) - public static Icon getShowTriggeredIcon() { - return DarkIcons.get().getPasswordFiledShowPressed(); - } - - @Contract("null -> false") - public static boolean hasShowIcon(final Component c) { - return c instanceof JPasswordField - && Boolean.TRUE.equals(((JComponent) c).getClientProperty("PasswordField.view")); - } - - private void paintShowIcon(final Graphics2D g) { - var p = getShowIconCoord(); - if (showTriggered) { - getShowTriggeredIcon().paintIcon(getComponent(), g, p.x, p.y); - } else { - getShowIcon().paintIcon(getComponent(), g, p.x, p.y); - } - } - protected void paintBackground(final Graphics graphics) { Graphics2D g = (Graphics2D) graphics; JTextComponent c = getComponent(); @@ -200,8 +191,7 @@ public class DarkPasswordFieldUI extends DarkPasswordFieldUIBridge { } int width = c.getWidth(); int height = c.getHeight(); - int w = DarkTextBorder.getBorderSize(); - int arc = DarkTextBorder.getArcSize(c); + int w = borderSize; DarkUIUtil.paintRoundRect(g, w, w, width - 2 * w, height - 2 * w, arc); if (hasShowIcon(c) && showShowIcon()) { paintShowIcon(g); @@ -211,4 +201,23 @@ public class DarkPasswordFieldUI extends DarkPasswordFieldUIBridge { } config.restore(); } + + @Contract("null -> false") + public static boolean hasShowIcon(final Component c) { + return c instanceof JPasswordField + && Boolean.TRUE.equals(((JComponent) c).getClientProperty("PasswordField.view")); + } + + private void paintShowIcon(final Graphics2D g) { + var p = getShowIconCoord(); + if (showTriggered) { + getShowTriggeredIcon().paintIcon(getComponent(), g, p.x, p.y); + } else { + getShowIcon().paintIcon(getComponent(), g, p.x, p.y); + } + } + + protected Icon getShowTriggeredIcon() { + return showPressed; + } } diff --git a/src/main/java/com/weis/darklaf/ui/text/DarkTextBorder.java b/src/main/java/com/weis/darklaf/ui/text/DarkTextBorder.java index 95bd80a1..c02b6ead 100644 --- a/src/main/java/com/weis/darklaf/ui/text/DarkTextBorder.java +++ b/src/main/java/com/weis/darklaf/ui/text/DarkTextBorder.java @@ -23,15 +23,17 @@ */ package com.weis.darklaf.ui.text; -import com.weis.darklaf.defaults.DarkDefaults; import com.weis.darklaf.ui.table.TextFieldTableCellEditorBorder; import com.weis.darklaf.util.DarkUIUtil; import com.weis.darklaf.util.GraphicsContext; import com.weis.darklaf.util.GraphicsUtil; +import org.jetbrains.annotations.Contract; +import org.jetbrains.annotations.NotNull; import javax.swing.*; import javax.swing.border.Border; import javax.swing.plaf.UIResource; +import javax.swing.text.JTextComponent; import java.awt.*; /** @@ -44,27 +46,48 @@ public class DarkTextBorder implements Border, UIResource { public final static int PADDING = 4; + protected Color errorBorderColor; + protected Color focusErrorBorderColor; + protected Color focusBorderColor; + protected Color borderColor; + protected Color inactiveBorderColor; + + protected int borderSize; + protected int arc; + protected int minimumArc; + protected int searchArc; + + public DarkTextBorder() { + focusErrorBorderColor = UIManager.getColor("TextField.border.focusError"); + focusBorderColor = UIManager.getColor("TextField.border.focus"); + errorBorderColor = UIManager.getColor("TextField.border.error"); + borderColor = UIManager.getColor("TextField.border.enabled"); + inactiveBorderColor = UIManager.getColor("TextField.border.disabled"); + borderSize = UIManager.getInt("TextField.borderThickness"); + arc = UIManager.getInt("TextField.arc"); + searchArc = UIManager.getInt("TextField.searchArc"); + minimumArc = UIManager.getInt("TextField.minimumArc"); + } + public void paintBorder(final Component c, final Graphics g2, final int x, final int y, final int width, final int height) { if (isCellEditor(c)) { editorBorder.paintBorder(c, g2, x, y, width, height); return; } - int borderSize = getBorderSize(); - Graphics2D g = (Graphics2D) g2; g.translate(x, y); GraphicsContext config = GraphicsUtil.setupStrokePainting(g); int arcSize = getArcSize(c); int focusArcSize = getFocusArcSize(c); if (!DarkTextFieldUI.isSearchField(c)) { - if (DarkTextFieldUI.hasError(c)) { + if (hasError(c)) { DarkUIUtil.paintOutlineBorder(g, width, height, focusArcSize, borderSize, c.hasFocus(), DarkUIUtil.Outline.error); } else if (c.hasFocus()) { DarkUIUtil.paintFocusBorder(g, width, height, focusArcSize, borderSize); } - g.setColor(DarkTextFieldUI.getBorderColor(c)); + g.setColor(getBorderColor(c)); if (DarkTextFieldUI.chooseAlternativeArc(c)) { DarkUIUtil.paintLineBorder(g, borderSize, borderSize, width - 2 * borderSize, @@ -74,12 +97,12 @@ public class DarkTextBorder implements Border, UIResource { height - 2 * borderSize, 0, true); } } else if (DarkTextFieldUI.isSearchField(c)) { - g.setColor(DarkTextFieldUI.getBorderColor(c)); + g.setColor(getBorderColor(c)); if (((JComponent) c).getClientProperty("JTextField.Search.noBorderRing") != Boolean.TRUE) { if (c.hasFocus()) { DarkUIUtil.paintFocusBorder(g, width, height, arcSize, borderSize); } - g.setColor(DarkTextFieldUI.getBorderColor(c)); + g.setColor(getBorderColor(c)); DarkUIUtil.paintLineBorder(g, borderSize, borderSize, width - 2 * borderSize, height - 2 * borderSize, arcSize, true); } @@ -88,32 +111,50 @@ public class DarkTextBorder implements Border, UIResource { config.restore(); } - public static int getBorderSize() { - return DarkDefaults.get().getTextFieldBorderSize(); + @Contract("null -> false") + protected static boolean isCellEditor(final Component c) { + return c instanceof JComponent + && Boolean.TRUE.equals(((JComponent) c).getClientProperty("JTextField.cellEditor")); } - public static int getArcSize(final Component c) { + protected int getArcSize(final Component c) { boolean alt = DarkTextFieldUI.chooseAlternativeArc(c); if (!alt && !DarkTextFieldUI.isSearchField(c)) { return 0; } - int arcSize = UIManager.getInt("TextField.arc"); - int searchArcSize = UIManager.getInt("TextField.searchArc"); - return DarkTextFieldUI.isSearchField(c) ? (alt ? arcSize : searchArcSize) - : (alt ? searchArcSize : arcSize); + return DarkTextFieldUI.isSearchField(c) ? (alt ? arc : searchArc) : (alt ? searchArc : arc); } - public static int getFocusArcSize(final Component c) { - int arcSize = UIManager.getInt("TextField.focusArc"); - int searchArcSize = UIManager.getInt("TextField.searchFocusArc"); + protected int getFocusArcSize(final Component c) { boolean alt = DarkTextFieldUI.chooseAlternativeArc(c); - return DarkTextFieldUI.isSearchField(c) ? (alt ? arcSize : searchArcSize) - : (alt ? searchArcSize : arcSize); + if (!alt && !DarkTextFieldUI.isSearchField(c)) { + return minimumArc; + } + return DarkTextFieldUI.isSearchField(c) ? (alt ? arc : searchArc) : (alt ? searchArc : arc); } - protected static boolean isCellEditor(final Component c) { + @Contract("null -> false") + protected static boolean hasError(final Component c) { return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty("JTextField.cellEditor")); + && Boolean.TRUE.equals(((JComponent) c).getClientProperty("JTextField.hasError")); + } + + protected Color getBorderColor(@NotNull final Component c) { + boolean editable = !(c instanceof JTextComponent) || ((JTextComponent) c).isEditable(); + boolean focus = DarkUIUtil.hasFocus(c); + boolean error = hasError(c); + return getBorderColor(focus, error, editable, c.isEnabled()); + } + + protected Color getBorderColor(final boolean focus, final boolean error, + final boolean editable, final boolean enabled) { + if (focus) { + return error ? focusErrorBorderColor : focusBorderColor; + } else if (error) { + return errorBorderColor; + } else { + return enabled && editable ? borderColor : inactiveBorderColor; + } } @Override @@ -121,7 +162,6 @@ public class DarkTextBorder implements Border, UIResource { if (isCellEditor(c)) { return editorBorder.getBorderInsets(c); } - int borderSize = getBorderSize(); Insets insets = new Insets(borderSize + PADDING, borderSize + PADDING, borderSize + PADDING, borderSize + PADDING); if (DarkTextFieldUI.isSearchField(c)) { diff --git a/src/main/java/com/weis/darklaf/ui/text/DarkTextFieldUI.java b/src/main/java/com/weis/darklaf/ui/text/DarkTextFieldUI.java index ee397076..21c4f9ec 100644 --- a/src/main/java/com/weis/darklaf/ui/text/DarkTextFieldUI.java +++ b/src/main/java/com/weis/darklaf/ui/text/DarkTextFieldUI.java @@ -3,8 +3,6 @@ package com.weis.darklaf.ui.text; import com.weis.darklaf.decorators.MouseClickListener; import com.weis.darklaf.decorators.MouseMovementListener; import com.weis.darklaf.decorators.PopupMenuAdapter; -import com.weis.darklaf.defaults.DarkColors; -import com.weis.darklaf.defaults.DarkIcons; import com.weis.darklaf.util.DarkUIUtil; import com.weis.darklaf.util.GraphicsContext; import org.jetbrains.annotations.Contract; @@ -73,6 +71,13 @@ public class DarkTextFieldUI extends DarkTextFieldUIBridge implements PropertyCh }; protected int arcSize; protected int searchArcSize; + protected static Icon clear; + protected static Icon clearHover; + protected static Icon search; + protected static Icon searchWithHistory; + protected int borderSize; + protected Color background; + protected Color inactiveBackground; @NotNull @Contract("_ -> new") @@ -81,9 +86,8 @@ public class DarkTextFieldUI extends DarkTextFieldUIBridge implements PropertyCh } @Contract(pure = true) - public static Icon getClearIcon(final boolean clearHovered) { - return clearHovered ? DarkIcons.get().getTextFieldClearHover() - : DarkIcons.get().getTextFieldClear(); + protected static Icon getClearIcon(final boolean clearHovered) { + return clearHovered ? clearHover : clear; } @NotNull @@ -93,46 +97,23 @@ public class DarkTextFieldUI extends DarkTextFieldUIBridge implements PropertyCh return new Rectangle(i.left, i.top, dim.width - i.left - i.right, dim.height - i.top - i.bottom); } - public static Color getBorderColor(@NotNull final boolean focus, final boolean error, - final boolean editable, final boolean enabled) { - if (focus) { - if (error) { - return DarkColors.get().getTextFieldFocusErrorBorderColor(); - } else { - return DarkColors.get().getTextFieldFocusBorderColor(); - } - } else if (error) { - return DarkColors.get().getTextFieldErrorBorderColor(); - } - return enabled && editable - ? DarkColors.get().getTextFieldBorderColor() - : DarkColors.get().getTextFieldInactiveBorderColor(); - } - - public static Color getBorderColor(@NotNull final Component c) { - boolean editable = !(c instanceof JTextComponent) || ((JTextComponent) c).isEditable(); - boolean focus = DarkUIUtil.hasFocus(c); - boolean error = hasError(c); - return getBorderColor(focus, error, editable, c.isEnabled()); - } - - @Contract("null -> false") - protected static boolean hasError(final Component c) { - return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty("JTextField.hasError")); - } - - public static Icon getSearchIcon(final Component c) { - return isSearchFieldWithHistoryPopup(c) - ? DarkIcons.get().getTextFieldSearchHistory() - : DarkIcons.get().getTextFieldSearch(); + protected static Icon getSearchIcon(final Component c) { + return isSearchFieldWithHistoryPopup(c) ? searchWithHistory : search; } @Override protected void installDefaults() { super.installDefaults(); arcSize = UIManager.getInt("TextField.arc"); + borderSize = UIManager.getInt("TextField.borderThickness"); searchArcSize = UIManager.getInt("TextField.searchArc"); + background = UIManager.getColor("TextField.background"); + inactiveBackground = UIManager.getColor("TextField.disabledBackground"); + clearHover = UIManager.getIcon("TextField.search.clearHover.icon"); + clear = UIManager.getIcon("TextField.search.clear.icon"); + searchWithHistory = UIManager.getIcon("TextField.search.searchWithHistory.icon"); + search = UIManager.getIcon("TextField.search.search.icon"); + } public static boolean chooseAlternativeArc(@NotNull final Component c) { @@ -189,16 +170,15 @@ public class DarkTextFieldUI extends DarkTextFieldUIBridge implements PropertyCh return new Point(r.x + DarkTextBorder.PADDING, r.y + (r.height - w) / 2); } - private void paintBorderBackground(@NotNull final Graphics2D g, @NotNull final JTextComponent c) { + protected void paintBorderBackground(@NotNull final Graphics2D g, @NotNull final JTextComponent c) { g.setColor(getBackgroundColor(c)); Rectangle r = getDrawingRect(getComponent()); - int arc = DarkTextBorder.getArcSize(c); + int arc = getArcSize(c); DarkUIUtil.paintRoundRect(g, r.x, r.y, r.width, r.height, arc); } - public static Color getBackgroundColor(@NotNull final JTextComponent c) { - return c.isEnabled() && c.isEditable() ? DarkColors.get().getTextFieldBackground() - : DarkColors.get().getTextFieldInactiveBackground(); + protected Color getBackgroundColor(@NotNull final JTextComponent c) { + return c.isEnabled() && c.isEditable() ? background : inactiveBackground; } public static boolean isSearchFieldWithHistoryPopup(final Component c) { @@ -212,15 +192,24 @@ public class DarkTextFieldUI extends DarkTextFieldUIBridge implements PropertyCh @NotNull @Contract("_ -> new") - public static Rectangle getDrawingRect(@NotNull final JTextComponent c) { - int w = DarkTextBorder.getBorderSize(); + public Rectangle getDrawingRect(@NotNull final JTextComponent c) { + int w = borderSize; return new Rectangle(w, w, c.getWidth() - 2 * w, c.getHeight() - 2 * w); } - private void paintSearchField(@NotNull final Graphics2D g, @NotNull final JTextComponent c) { + protected int getArcSize(final Component c) { + boolean alt = chooseAlternativeArc(c); + if (!alt && !isSearchField(c)) { + return 0; + } + return DarkTextFieldUI.isSearchField(c) ? (alt ? arcSize : searchArcSize) + : (alt ? searchArcSize : arcSize); + } + + protected void paintSearchField(@NotNull final Graphics2D g, @NotNull final JTextComponent c) { g.setColor(getBackgroundColor(c)); Rectangle r = getDrawingRect(getComponent()); - int arc = DarkTextBorder.getArcSize(c); + int arc = getArcSize(c); DarkUIUtil.paintRoundRect(g, r.x, r.y, r.width, r.height, arc); paintSearchIcon(g); if (c.getText().length() > 0) { diff --git a/src/main/java/com/weis/darklaf/ui/titledborder/DarkTitledBorder.java b/src/main/java/com/weis/darklaf/ui/titledborder/DarkTitledBorder.java index 33ef577c..b20eb61c 100644 --- a/src/main/java/com/weis/darklaf/ui/titledborder/DarkTitledBorder.java +++ b/src/main/java/com/weis/darklaf/ui/titledborder/DarkTitledBorder.java @@ -24,19 +24,14 @@ package com.weis.darklaf.ui.titledborder; import com.weis.darklaf.components.border.MutableLineBorder; -import com.weis.darklaf.defaults.DarkColors; +import javax.swing.*; import javax.swing.plaf.UIResource; -import java.awt.*; public class DarkTitledBorder extends MutableLineBorder implements UIResource { public DarkTitledBorder() { - super(1, 0, 0, 0, DarkColors.get().getTitledBorderBorderColor()); - } - - @Override - protected Color getColor() { - return DarkColors.get().getTitledBorderBorderColor(); + super(1, 0, 0, 0, null); + setColor(UIManager.getColor("TitledBorder.borderColor")); } } diff --git a/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarBorder.java b/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarBorder.java index 48713092..8d0af32f 100644 --- a/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarBorder.java +++ b/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarBorder.java @@ -1,6 +1,5 @@ package com.weis.darklaf.ui.toolbar; -import com.weis.darklaf.defaults.DarkIcons; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -15,6 +14,15 @@ import java.awt.*; */ public class DarkToolBarBorder extends AbstractBorder implements UIResource, SwingConstants { + protected Icon horizontalGrip; + protected Icon verticalGrip; + + public DarkToolBarBorder() { + horizontalGrip = UIManager.getIcon("ToolBar.horizontalGrip.icon"); + verticalGrip = UIManager.getIcon("ToolBar.verticalGrip.icon"); + } + + public void paintBorder(final Component c, @NotNull final Graphics g, final int x, final int y, final int w, final int h) { g.translate(x, y); @@ -43,11 +51,11 @@ public class DarkToolBarBorder extends AbstractBorder implements UIResource, Swi } protected Icon getHorizontalGrip() { - return DarkIcons.get().getToolBarHorizontalGrip(); + return horizontalGrip; } protected Icon getVerticalGrip() { - return DarkIcons.get().getToolBarVerticalGrip(); + return verticalGrip; } public Insets getBorderInsets(final Component c, final Insets newInsets) { diff --git a/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarUI.java b/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarUI.java index c8b9d61b..70ffc889 100644 --- a/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarUI.java +++ b/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarUI.java @@ -1,7 +1,6 @@ package com.weis.darklaf.ui.toolbar; import com.weis.darklaf.decorators.MouseResponder; -import com.weis.darklaf.defaults.DarkColors; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -24,6 +23,7 @@ public class DarkToolBarUI extends DarkToolBarUIBridge { private Dimension verticalDim = new Dimension(0, 0); private Dimension horizontalDim = new Dimension(0, 0); private Timer timer = new Timer(5, e -> dragTo()); + protected Color background; @NotNull @Contract(value = "_ -> new", pure = true) @@ -48,6 +48,12 @@ public class DarkToolBarUI extends DarkToolBarUIBridge { floatingToolBar = createFloatingWindow(toolBar); } + @Override + protected void installDefaults() { + super.installDefaults(); + background = UIManager.getColor("ToolBar.background"); + } + @Override protected void installListeners() { super.installListeners(); @@ -271,7 +277,7 @@ public class DarkToolBarUI extends DarkToolBarUIBridge { } public void paint(@NotNull final Graphics g, @NotNull final JComponent c) { - g.setColor(DarkColors.get().getToolBarBackground()); + g.setColor(background); g.fillRect(0, 0, c.getWidth(), c.getHeight()); } diff --git a/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarUIBridge.java b/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarUIBridge.java index 1678d9c4..6494a01c 100644 --- a/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarUIBridge.java +++ b/src/main/java/com/weis/darklaf/ui/toolbar/DarkToolBarUIBridge.java @@ -1,6 +1,5 @@ package com.weis.darklaf.ui.toolbar; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.util.DarkUIUtil; import com.weis.darklaf.util.LazyActionMap; import sun.swing.DefaultLookup; @@ -323,18 +322,18 @@ public abstract class DarkToolBarUIBridge extends ToolBarUI implements SwingCons "ToolBar.font"); // Toolbar specific defaults if (dockingColor == null || dockingColor instanceof UIResource) { - dockingColor = DarkColors.get().getToolBarDockingBackground(); + dockingColor = UIManager.getColor("ToolBar.dockingBackground"); } if (floatingColor == null || floatingColor instanceof UIResource) { - floatingColor = DarkColors.get().getToolBarFloatingBackground(); + floatingColor = UIManager.getColor("ToolBar.floatingBackground"); } if (dockingBorderColor == null || dockingBorderColor instanceof UIResource) { - dockingBorderColor = DarkColors.get().getToolBarDockingBorderColor(); + dockingBorderColor = UIManager.getColor("ToolBar.dockingForeground"); } if (floatingBorderColor == null || floatingBorderColor instanceof UIResource) { - floatingBorderColor = DarkColors.get().getToolBarFloatingBorderColor(); + floatingBorderColor = UIManager.getColor("ToolBar.floatingForeground"); } // ToolBar rollover button borders diff --git a/src/main/java/com/weis/darklaf/ui/toolbar/DropPreviewPanel.java b/src/main/java/com/weis/darklaf/ui/toolbar/DropPreviewPanel.java index 98f927a5..8ebd706b 100644 --- a/src/main/java/com/weis/darklaf/ui/toolbar/DropPreviewPanel.java +++ b/src/main/java/com/weis/darklaf/ui/toolbar/DropPreviewPanel.java @@ -23,7 +23,6 @@ */ package com.weis.darklaf.ui.toolbar; -import com.weis.darklaf.defaults.DarkColors; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -35,6 +34,11 @@ import java.awt.*; public class DropPreviewPanel extends JComponent { private JToolBar toolBar; + private Color dropBackground; + + public DropPreviewPanel() { + dropBackground = UIManager.getColor("ToolBar.dropColor"); + } public void setToolBar(final JToolBar toolBar) { this.toolBar = toolBar; @@ -49,7 +53,7 @@ public class DropPreviewPanel extends JComponent { protected Color getBackgroundColor() { var useToolbar = Boolean.TRUE.equals(toolBar.getClientProperty("JToolBar.drag.useToolbarBackground")); if (!useToolbar) { - var c = DarkColors.get().getToolBarDropBackground(); + var c = dropBackground; if (c == null) { return toolBar.getBackground(); } diff --git a/src/main/java/com/weis/darklaf/ui/tooltip/DarkTooltipBorder.java b/src/main/java/com/weis/darklaf/ui/tooltip/DarkTooltipBorder.java index e31eda59..ebf36a46 100644 --- a/src/main/java/com/weis/darklaf/ui/tooltip/DarkTooltipBorder.java +++ b/src/main/java/com/weis/darklaf/ui/tooltip/DarkTooltipBorder.java @@ -4,7 +4,6 @@ import com.weis.darklaf.components.alignment.Alignment; import com.weis.darklaf.components.border.BubbleBorder; import com.weis.darklaf.components.border.DropShadowBorder; import com.weis.darklaf.components.tooltip.ToolTipStyle; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.NotNull; @@ -27,11 +26,12 @@ public class DarkTooltipBorder implements Border, UIResource { private final BubbleBorder bubbleBorder; public DarkTooltipBorder() { - bubbleBorder = new BubbleBorder(DarkColors.get().getToolTipBorderColor()); + bubbleBorder = new BubbleBorder(UIManager.getColor("ToolTip.borderColor")); bubbleBorder.setThickness(1); bubbleBorder.setPointerSize(8); bubbleBorder.setPointerWidth(12); bubbleBorder.setPointerSide(Alignment.CENTER); + shadowBorder.setShadowColor(UIManager.getColor("ToolTip.borderShadowColor")); } @@ -49,9 +49,6 @@ public class DarkTooltipBorder implements Border, UIResource { @Override public void paintBorder(final Component c, final Graphics g, final int x, final int y, final int width, final int height) { - if (bubbleBorder.getColor() == null) { - bubbleBorder.setColor(DarkColors.get().getToolTipBorderColor()); - } if (isPlain(c)) { g.setColor(bubbleBorder.getColor()); DarkUIUtil.drawRect(g, x, y, width, height, 1); @@ -68,7 +65,6 @@ public class DarkTooltipBorder implements Border, UIResource { clip.subtract(bubbleArea); g.setClip(clip); - shadowBorder.setShadowColor(DarkColors.get().getToolTipShadowColor()); shadowBorder.paintBorder(c, g, x, y, width, height); g.setClip(oldClip); diff --git a/src/main/java/com/weis/darklaf/ui/tree/DarkTreeCellBorder.java b/src/main/java/com/weis/darklaf/ui/tree/DarkTreeCellBorder.java index 9f038b76..19a364bb 100644 --- a/src/main/java/com/weis/darklaf/ui/tree/DarkTreeCellBorder.java +++ b/src/main/java/com/weis/darklaf/ui/tree/DarkTreeCellBorder.java @@ -23,10 +23,10 @@ */ package com.weis.darklaf.ui.tree; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.util.DarkUIUtil; import org.jetbrains.annotations.NotNull; +import javax.swing.*; import javax.swing.border.Border; import javax.swing.plaf.InsetsUIResource; import javax.swing.plaf.UIResource; @@ -37,10 +37,16 @@ import java.awt.*; */ public class DarkTreeCellBorder implements Border, UIResource { + protected Color borderColor; + + public DarkTreeCellBorder() { + borderColor = UIManager.getColor("Tree.editorBorderColor"); + } + @Override public void paintBorder(final Component c, @NotNull final Graphics g, final int x, final int y, final int width, final int height) { - g.setColor(DarkColors.get().getTreeEditorBorderColor()); + g.setColor(borderColor); DarkUIUtil.drawRect(g, 0, 0, width, height, 1); } diff --git a/src/main/java/com/weis/darklaf/ui/tree/DarkTreeUI.java b/src/main/java/com/weis/darklaf/ui/tree/DarkTreeUI.java index 88d03873..a38a5323 100644 --- a/src/main/java/com/weis/darklaf/ui/tree/DarkTreeUI.java +++ b/src/main/java/com/weis/darklaf/ui/tree/DarkTreeUI.java @@ -23,8 +23,6 @@ */ package com.weis.darklaf.ui.tree; -import com.weis.darklaf.defaults.DarkColors; -import com.weis.darklaf.defaults.DarkIcons; import com.weis.darklaf.util.SystemInfo; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; @@ -100,6 +98,20 @@ public class DarkTreeUI extends BasicTreeUI { }; private boolean myOldRepaintAllRowValue; + protected Color alternativeBackground; + protected Color lineColor; + protected Color focusSelectedLineColor; + protected Color selectedLineColor; + protected Color selectionBackground; + protected Color focusSelectionBackground; + protected Icon expandedFocusSelected; + protected Icon expandedSelected; + protected Icon expandedFocus; + protected Icon expanded; + protected Icon collapsedFocusSelected; + protected Icon collapsedSelected; + protected Icon collapsedFocus; + protected Icon collapsed; @NotNull @@ -137,6 +149,20 @@ public class DarkTreeUI extends BasicTreeUI { @Override protected void installDefaults() { super.installDefaults(); + selectionBackground = UIManager.getColor("Tree.unfocusedSelectionBackground"); + focusSelectionBackground = UIManager.getColor("Tree.selectionBackground"); + focusSelectedLineColor = UIManager.getColor("Tree.lineFocusSelected"); + selectedLineColor = UIManager.getColor("Tree.lineSelected"); + lineColor = UIManager.getColor("Tree.lineUnselected"); + alternativeBackground = UIManager.getColor("Tree.alternateRowBackground"); + expandedFocusSelected = UIManager.getIcon("Tree.expanded.selected.focused.icon"); + expandedSelected = UIManager.getIcon("Tree.expanded.selected.unfocused.icon"); + expandedFocus = UIManager.getIcon("Tree.expanded.unselected.focused.icon"); + expanded = UIManager.getIcon("Tree.expanded.unselected.unfocused.icon"); + collapsedFocusSelected = UIManager.getIcon("Tree.collapsed.selected.focused.icon"); + collapsedSelected = UIManager.getIcon("Tree.collapsed.selected.unfocused.icon"); + collapsedFocus = UIManager.getIcon("Tree.collapsed.unselected.focused.icon"); + collapsed = UIManager.getIcon("Tree.collapsed.unselected.unfocused.icon"); tree.putClientProperty("JTree.renderBooleanAsCheckBox", UIManager.getBoolean("Tree.renderBooleanAsCheckBox")); tree.putClientProperty("JTree.booleanRenderType", UIManager.getString("Tree.booleanRenderType")); @@ -452,7 +478,7 @@ public class DarkTreeUI extends BasicTreeUI { return getTreeSelectionBackground(tree.hasFocus() || isTableTree || tree.isEditing()); } if (Boolean.TRUE.equals(tree.getClientProperty(STRIPED_CLIENT_PROPERTY)) && row % 2 == 1) { - return DarkColors.get().getTreeAlternativeBackground(); + return alternativeBackground; } else { return tree.getBackground(); } @@ -463,50 +489,33 @@ public class DarkTreeUI extends BasicTreeUI { } protected Color getTreeSelectionBackground(final boolean focused) { - return focused ? DarkColors.get().getTreeFocusSelectionBackground() - : DarkColors.get().getTreeSelectionBackground(); + return focused ? focusSelectionBackground : selectionBackground; } protected Color getLineColor(final TreePath path) { if (selectedChildOf(path)) { if (tree.hasFocus() || tree.isEditing()) { - return DarkColors.get().getTreeLineFocusColor(); + return focusSelectedLineColor; } else { - return DarkColors.get().getTreeLineSelectedColor(); + return selectedLineColor; } } - return DarkColors.get().getTreeLineColor(); + return lineColor; } protected Icon getExpandedIcon(final boolean selected, final boolean focused) { if (selected) { - if (focused) { - return DarkIcons.get().getTreeExpandedFocusedSelected(); - } else { - return DarkIcons.get().getTreeExpandedSelected(); - } + return focused ? expandedFocusSelected : expandedSelected; } else { - if (focused) { - return DarkIcons.get().getTreeExpandedFocused(); - } else { - return DarkIcons.get().getTreeExpanded(); - } + return focused ? expandedFocus : expanded; } } protected Icon getCollapsedIcon(final boolean selected, final boolean focused) { if (selected) { - if (focused) { - return DarkIcons.get().getTreeCollapsedFocusedSelected(); - } else { - return DarkIcons.get().getTreeCollapsedSelected(); - } + return focused ? collapsedFocusSelected : collapsedSelected; } else { - if (focused) { - return DarkIcons.get().getTreeCollapsedFocused(); - } else { - return DarkIcons.get().getTreeCollapsed(); - } + return focused ? collapsedFocus : collapsed; } } diff --git a/src/main/java/com/weis/darklaf/util/DarkUIUtil.java b/src/main/java/com/weis/darklaf/util/DarkUIUtil.java index 9f2bf34b..aef81cf2 100644 --- a/src/main/java/com/weis/darklaf/util/DarkUIUtil.java +++ b/src/main/java/com/weis/darklaf/util/DarkUIUtil.java @@ -24,14 +24,12 @@ package com.weis.darklaf.util; import com.weis.darklaf.decorators.CellRenderer; -import com.weis.darklaf.defaults.DarkColors; import com.weis.darklaf.ui.menu.DarkPopupMenuUI; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import sun.awt.SunToolkit; -import javax.swing.FocusManager; import javax.swing.*; import javax.swing.plaf.ComponentUI; import javax.swing.table.TableCellRenderer; @@ -57,19 +55,19 @@ public final class DarkUIUtil { public static final boolean USE_QUARTZ = "true".equals(System.getProperty("apple.awt.graphics.UseQuartz")); private static Color getErrorGlow() { - return DarkColors.get().getErrorGlow(); + return UIManager.getColor("glowError"); } private static Color getErrorFocusGlow() { - return DarkColors.get().getErrorFocusGlow(); + return UIManager.getColor("glowFocusError"); } private static Color getFocusGlow() { - return DarkColors.get().getFocusGlow(); + return UIManager.getColor("glowFocus"); } private static Color getWarningGlow() { - return DarkColors.get().getWarningGlow(); + return UIManager.getColor("glowWarning"); } public static void paintOutlineBorder(final Graphics2D g, final int width, final int height, final float arc, @@ -78,7 +76,6 @@ public final class DarkUIUtil { doPaint(g, width, height, arc, bw); } - @SuppressWarnings("SuspiciousNameCombination") private static void doPaint(@NotNull final Graphics2D g, final int width, final int height, final float arc, final float bw) { var context = GraphicsUtil.setupStrokePainting(g); @@ -148,6 +145,8 @@ public final class DarkUIUtil { @NotNull public static Color blendColors(@NotNull final Color color1, @NotNull final Color color2, final double percent) { + if (percent == 1) return color1; + if (percent == 0) return color2; double inverse_percent = 1.0 - percent; int redPart = (int) (color1.getRed() * percent + color2.getRed() * inverse_percent); int greenPart = (int) (color1.getGreen() * percent + color2.getGreen() * inverse_percent); @@ -181,9 +180,7 @@ public final class DarkUIUtil { return hasFocus(c); } final Component owner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); - final Component owner2 = FocusManager.getCurrentManager().getFocusOwner(); - return (owner != null && SwingUtilities.isDescendingFrom(owner, c)) - || (owner2 != null && SwingUtilities.isDescendingFrom(owner2, c)); + return (owner != null && SwingUtilities.isDescendingFrom(owner, c)); } public static boolean hasFocus(final Window w) { diff --git a/src/main/java/com/weis/darklaf/util/LafUtil.java b/src/main/java/com/weis/darklaf/util/PropertyLoader.java similarity index 66% rename from src/main/java/com/weis/darklaf/util/LafUtil.java rename to src/main/java/com/weis/darklaf/util/PropertyLoader.java index 339a75ee..b90febbb 100644 --- a/src/main/java/com/weis/darklaf/util/LafUtil.java +++ b/src/main/java/com/weis/darklaf/util/PropertyLoader.java @@ -23,9 +23,9 @@ */ package com.weis.darklaf.util; +import com.weis.darklaf.icons.DarkUIAwareIcon; import com.weis.darklaf.icons.EmptyIcon; import com.weis.darklaf.icons.IconLoader; -import com.weis.darklaf.icons.DarkUIAwareIcon; import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -39,6 +39,8 @@ import java.awt.*; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Properties; @@ -49,12 +51,30 @@ import java.util.logging.Logger; * @author Konstantin Bulenkov * @author Jannis Weis */ -public final class LafUtil { - private static final Logger LOGGER = Logger.getLogger(LafUtil.class.getName()); +public final class PropertyLoader { + private static final Logger LOGGER = Logger.getLogger(PropertyLoader.class.getName()); private static final IconLoader ICON_LOADER = IconLoader.get(); private static final String DUAL_KEY = "[dual]"; private static final String AWARE_KEY = "[aware]"; private static final String PATCH_KEY = "[patch]"; + private static final String REFERENCE_PREFIX = "%"; + + private static final Collection objectsToLoad = new HashSet<>(); + + public static void finish() { + for (var request : objectsToLoad) { + try { + request.resolve(); + } catch (RuntimeException e) { + LOGGER.log(Level.SEVERE, "Could not load" + request, e.getMessage()); + } + } + reset(); + } + + public static void reset() { + objectsToLoad.clear(); + } @NotNull public static Properties loadProperties(@NotNull final Class clazz, final String name, final String path) { @@ -67,21 +87,53 @@ public final class LafUtil { return properties; } + public static void putProperties(@NotNull final Properties properties, final Properties accumulator, + final UIDefaults currentDefaults) { + for (final String key : properties.stringPropertyNames()) { + final String value = properties.getProperty(key); + var parsed = parseValue(key, value, accumulator); + if (parsed instanceof ObjectRequest) { + objectsToLoad.add((ObjectRequest) parsed); + } else if (parsed != null) { + accumulator.put(parseKey(key), parsed); + } else { + currentDefaults.remove(parseKey(key)); + } + } + } + + private static Object parseValue(@NotNull final String key, @NotNull final String value, + final Map defaults) { + return parseValue(key, value, false, defaults); + } + + private static String parseKey(@NotNull final String key) { + return key.startsWith(REFERENCE_PREFIX) ? key.substring(REFERENCE_PREFIX.length()) : key; + } + @Nullable - public static Object parseValue(@NotNull final String key, @NotNull final String value, - final Map defaults) { + private static Object parseValue(@NotNull final String propertyKey, @NotNull final String value, + final boolean ignoreRequest, final Map defaults) { if ("null".equals(value)) { return null; } - Object returnVal = new LoadError("Could not parse value '" + value + "' for key '" + key + "'"); + var key = propertyKey; + boolean skipObjects = ignoreRequest; + if (key.startsWith(REFERENCE_PREFIX)) { + key = parseKey(key); + skipObjects = true; + } + + Object returnVal = new LoadError(); if (key.endsWith("Insets")) { returnVal = parseInsets(value); - } else if (key.endsWith(".border") || key.endsWith("Border")) { - returnVal = parseObject(value); - } else if (key.endsWith(".component") || key.endsWith("Component")) { - returnVal = parseObject(value); - } else if (key.endsWith("Renderer")) { - returnVal = parseObject(value); + } else if (!skipObjects + && (key.endsWith("Border") + || key.endsWith(".border") + || key.endsWith(".component") + || key.endsWith("Component") + || key.endsWith("Renderer"))) { + return new ObjectRequest(key, value); } else if (key.endsWith(".font")) { returnVal = parseFont(value); } else if (key.endsWith(".icon") || key.endsWith("Icon")) { @@ -93,8 +145,8 @@ public final class LafUtil { } else if (value.startsWith("%")) { var val = value.substring(1); if (!defaults.containsKey(val)) { - LOGGER.warning("Could not reference value '" + val + "'while loading '" + key + "' " + - ". May be a forward reference"); + LOGGER.warning("Could not reference value '" + val + "'while loading '" + key + "'. " + + "May be a forward reference"); } returnVal = defaults.get(val); } @@ -127,13 +179,12 @@ public final class LafUtil { Integer.parseInt(numbers.get(3))); } - @NotNull + @Nullable private static Object parseObject(final String value) { try { return Class.forName(value).getDeclaredConstructor().newInstance(); - } catch (@NotNull final Exception e) { - return new LoadError(e.getMessage()); - } + } catch (@NotNull final Exception ignored) { } + return null; } @NotNull @@ -204,10 +255,41 @@ public final class LafUtil { } private static final class LoadError { + } + + private static final class ObjectRequest { + + final String value; + final String key; @Contract(pure = true) - private LoadError(final String message) { + private ObjectRequest(final String key, final String value) { + this.key = key; + this.value = value; } + private void resolve() { + Object obj = parseObject(value); + var defaults = UIManager.getLookAndFeelDefaults(); + if (obj == null) { + obj = parseValue(key, value, true, defaults); + if (obj instanceof ObjectRequest) { + LOGGER.severe("Failed to resolve object. " + this); + return; + } + } + if (obj == null) { + defaults.remove(key); + } else { + defaults.put(key, obj); + } + } + + @NotNull + @Contract(pure = true) + @Override + public String toString() { + return "[" + key + "," + value + "]"; + } } } diff --git a/src/main/java/org/pbjar/jxlayer/plaf/ext/TransformUI.java b/src/main/java/org/pbjar/jxlayer/plaf/ext/TransformUI.java index 7fa8b8e7..8d1906a5 100644 --- a/src/main/java/org/pbjar/jxlayer/plaf/ext/TransformUI.java +++ b/src/main/java/org/pbjar/jxlayer/plaf/ext/TransformUI.java @@ -298,10 +298,9 @@ public class TransformUI extends MouseEventUI { * @return a {@link AffineTransform} instance or {@code null} */ @NotNull - public AffineTransform getPreferredTransform( - final Dimension size, final JXLayer layer) { - - return this.transformModel.getPreferredTransform(size, layer); + public AffineTransform getPreferredTransform(final Dimension size, final JXLayer layer) { + return this.transformModel != null ? this.transformModel.getPreferredTransform(size, layer) + : new AffineTransform(); } /* @@ -533,8 +532,7 @@ public class TransformUI extends MouseEventUI { * @see #paint(Graphics, JComponent) */ @Override - protected final void paintLayer( - @NotNull final Graphics2D g2, @NotNull final JXLayer layer) { + protected final void paintLayer(@NotNull final Graphics2D g2, @NotNull final JXLayer layer) { JComponent view = layer.getView(); if (view != null) { if (view.getX() < 0 || view.getY() < 0) { @@ -560,7 +558,8 @@ public class TransformUI extends MouseEventUI { @NotNull @Override protected final AffineTransform getTransform(final JXLayer layer) { - return transformModel.getTransform(layer); + return transformModel != null ? transformModel.getTransform(layer) + : new AffineTransform(); } /** diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToBottomLeft.svg b/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToBottomLeft.svg new file mode 100644 index 00000000..9623acfd --- /dev/null +++ b/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToBottomLeft.svg @@ -0,0 +1,4 @@ + + + diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToBottomRight.svg b/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToBottomRight.svg new file mode 100644 index 00000000..b897fc60 --- /dev/null +++ b/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToBottomRight.svg @@ -0,0 +1,5 @@ + + + diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToLeftBottom.svg b/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToLeftBottom.svg new file mode 100644 index 00000000..9a5468c1 --- /dev/null +++ b/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToLeftBottom.svg @@ -0,0 +1,4 @@ + + + diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToLeftTop.svg b/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToLeftTop.svg new file mode 100644 index 00000000..cc7b006f --- /dev/null +++ b/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToLeftTop.svg @@ -0,0 +1,4 @@ + + + diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToRightBottom.svg b/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToRightBottom.svg new file mode 100644 index 00000000..cc90106c --- /dev/null +++ b/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToRightBottom.svg @@ -0,0 +1,5 @@ + + + diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToRightTop.svg b/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToRightTop.svg new file mode 100644 index 00000000..e478d110 --- /dev/null +++ b/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToRightTop.svg @@ -0,0 +1,5 @@ + + + diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToTopLeft.svg b/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToTopLeft.svg new file mode 100644 index 00000000..a72d8d1b --- /dev/null +++ b/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToTopLeft.svg @@ -0,0 +1,5 @@ + + + diff --git a/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToTopRight.svg b/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToTopRight.svg new file mode 100644 index 00000000..ee20dc6e --- /dev/null +++ b/src/main/resources/com/weis/darklaf/icons/dark/navigation/moveToTopRight.svg @@ -0,0 +1,5 @@ + + + diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToBottomLeft.svg b/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToBottomLeft.svg new file mode 100644 index 00000000..c02e0ecf --- /dev/null +++ b/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToBottomLeft.svg @@ -0,0 +1,4 @@ + + + diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToBottomRight.svg b/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToBottomRight.svg new file mode 100644 index 00000000..247a8a04 --- /dev/null +++ b/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToBottomRight.svg @@ -0,0 +1,5 @@ + + + diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToLeftBottom.svg b/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToLeftBottom.svg new file mode 100644 index 00000000..f3f5c395 --- /dev/null +++ b/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToLeftBottom.svg @@ -0,0 +1,4 @@ + + + diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToLeftTop.svg b/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToLeftTop.svg new file mode 100644 index 00000000..30b73d77 --- /dev/null +++ b/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToLeftTop.svg @@ -0,0 +1,4 @@ + + + diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToRightBottom.svg b/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToRightBottom.svg new file mode 100644 index 00000000..7a597df7 --- /dev/null +++ b/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToRightBottom.svg @@ -0,0 +1,5 @@ + + + diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToRightTop.svg b/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToRightTop.svg new file mode 100644 index 00000000..cf9b2134 --- /dev/null +++ b/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToRightTop.svg @@ -0,0 +1,5 @@ + + + diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToTopLeft.svg b/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToTopLeft.svg new file mode 100644 index 00000000..772cd789 --- /dev/null +++ b/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToTopLeft.svg @@ -0,0 +1,5 @@ + + + diff --git a/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToTopRight.svg b/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToTopRight.svg new file mode 100644 index 00000000..21d5f45c --- /dev/null +++ b/src/main/resources/com/weis/darklaf/icons/light/navigation/moveToTopRight.svg @@ -0,0 +1,5 @@ + + + diff --git a/src/main/resources/com/weis/darklaf/properties/ui/checkBox.properties b/src/main/resources/com/weis/darklaf/properties/ui/checkBox.properties index c5f7292c..1425a135 100644 --- a/src/main/resources/com/weis/darklaf/properties/ui/checkBox.properties +++ b/src/main/resources/com/weis/darklaf/properties/ui/checkBox.properties @@ -31,7 +31,7 @@ CheckBox.focusBorderColor = %glowFocusLine CheckBox.selectionEnabledColor = %controlFill CheckBox.selectionDisabledColor = %controlFillDisabled CheckBox.arc = %arcSecondary -CheckBox.borderThickness = %borderSize +CheckBox.borderThickness = %borderThickness #Icons CheckBox.unchecked.icon = control/checkBox.svg[patch](19,19) diff --git a/src/main/resources/com/weis/darklaf/properties/ui/colorChooser.properties b/src/main/resources/com/weis/darklaf/properties/ui/colorChooser.properties index 25057251..7b9db99c 100644 --- a/src/main/resources/com/weis/darklaf/properties/ui/colorChooser.properties +++ b/src/main/resources/com/weis/darklaf/properties/ui/colorChooser.properties @@ -37,6 +37,7 @@ ColorChooser.swatchGridColor = %gridLine ColorChooser.sliderShadow = %shadow ColorChooser.errorDelay = 600 ColorChooser.swatchesDefaultRecentColor = %background +ColorChooser.colorWheelBackground = %background #Icons ColorChooser.pipette.icon = misc/pipette.svg[aware] ColorChooser.pipetteRollover.icon = misc/pipette_rollover.svg[aware] diff --git a/src/main/resources/com/weis/darklaf/properties/ui/menuBar.properties b/src/main/resources/com/weis/darklaf/properties/ui/menuBar.properties index e7115261..48da7831 100644 --- a/src/main/resources/com/weis/darklaf/properties/ui/menuBar.properties +++ b/src/main/resources/com/weis/darklaf/properties/ui/menuBar.properties @@ -23,4 +23,5 @@ # suppress inspection "UnusedProperty" for whole file MenuBar.disabledBackground = %background MenuBar.borderColor = %border -MenuBar.highlight = %background \ No newline at end of file +MenuBar.highlight = %background +MenuBar.background = %background \ No newline at end of file diff --git a/src/main/resources/com/weis/darklaf/properties/ui/tabFrame.properties b/src/main/resources/com/weis/darklaf/properties/ui/tabFrame.properties index 0295be18..4db9f266 100644 --- a/src/main/resources/com/weis/darklaf/properties/ui/tabFrame.properties +++ b/src/main/resources/com/weis/darklaf/properties/ui/tabFrame.properties @@ -59,5 +59,23 @@ TabFrameUI = com.weis.darklaf.ui.tabframe. TabFrame.line = %borderSecondary TabFrame.tabHeight = 24 TabFrame.acceleratorKeyCode = alt pressed + #Icons TabFramePopup.close.icon = navigation/collapse.svg[aware] +TabFrame.moveToBottomLeft.icon = navigation/moveToBottomLeft.svg[aware] +TabFrame.moveToBottomRight.icon = navigation/moveToBottomRight.svg[aware] +TabFrame.moveToLeftBottom.icon = navigation/moveToLeftBottom.svg[aware] +TabFrame.moveToLeftTop.icon = navigation/moveToLeftTop.svg[aware] +TabFrame.moveToRightBottom.icon = navigation/moveToRightBottom.svg[aware] +TabFrame.moveToRightTop.icon = navigation/moveToRightTop.svg[aware] +TabFrame.moveToTopLeft.icon = navigation/moveToTopLeft.svg[aware] +TabFrame.moveToTopRight.icon = navigation/moveToTopRight.svg[aware] + +TabFrame.moveToBottomLeftDisabled.icon = navigation/moveToBottomLeft.svg[dual] +TabFrame.moveToBottomRightDisabled.icon = navigation/moveToBottomRight.svg[dual] +TabFrame.moveToLeftBottomDisabled.icon = navigation/moveToLeftBottom.svg[dual] +TabFrame.moveToLeftTopDisabled.icon = navigation/moveToLeftTop.svg[dual] +TabFrame.moveToRightBottomDisabled.icon = navigation/moveToRightBottom.svg[dual] +TabFrame.moveToRightTopDisabled.icon = navigation/moveToRightTop.svg[dual] +TabFrame.moveToTopLeftDisabled.icon = navigation/moveToTopLeft.svg[dual] +TabFrame.moveToTopRightDisabled.icon = navigation/moveToTopRight.svg[dual] diff --git a/src/main/resources/com/weis/darklaf/properties/ui/table.properties b/src/main/resources/com/weis/darklaf/properties/ui/table.properties index b615d8ed..cd2ca66f 100644 --- a/src/main/resources/com/weis/darklaf/properties/ui/table.properties +++ b/src/main/resources/com/weis/darklaf/properties/ui/table.properties @@ -28,6 +28,7 @@ TableHeader.border = com.weis.darklaf.ui.table.DarkTableHead TableHeader.background = %backgroundHeader TableHeader.focusCellBackground = %backgroundHeader TableHeader.borderColor = %borderSecondary +TableHeader.height = 26 TableUI = com.weis.darklaf.ui.table.DarkTableUI Table.scrollPaneCornerComponent = com.weis.darklaf.ui.table.DarkTableHeaderCorner diff --git a/src/main/resources/com/weis/darklaf/properties/ui/text.properties b/src/main/resources/com/weis/darklaf/properties/ui/text.properties index 70b1ee75..8019e408 100644 --- a/src/main/resources/com/weis/darklaf/properties/ui/text.properties +++ b/src/main/resources/com/weis/darklaf/properties/ui/text.properties @@ -42,6 +42,7 @@ TextField.selectionBackground = %textSelectionBackground TextField.selectionForeground = %textSelectionForeground TextField.arc = %arcSecondary +TextField.minimumArc = %arcSecondary TextField.searchArc = %arc TextField.searchFocusArc = %arcFocus TextField.focusArc = %arcSecondaryFocus @@ -80,6 +81,9 @@ PasswordField.selectionBackground = %textSelectionBackground PasswordField.selectionForeground = %textSelectionForeground PasswordField.border = com.weis.darklaf.ui.text.DarkTextBorder +PasswordField.arc = %arcSecondary +PasswordField.borderThickness = %borderThickness + #Icons PasswordField.show.icon = navigation/eye.svg[dual] PasswordField.showPressed.icon = navigation/eye.svg[aware] diff --git a/src/main/resources/com/weis/darklaf/theme/darcula/darcula_defaults.properties b/src/main/resources/com/weis/darklaf/theme/darcula/darcula_defaults.properties index 2dd64e56..5ff31806 100644 --- a/src/main/resources/com/weis/darklaf/theme/darcula/darcula_defaults.properties +++ b/src/main/resources/com/weis/darklaf/theme/darcula/darcula_defaults.properties @@ -21,112 +21,112 @@ #SOFTWARE. # suppress inspection "UnusedProperty" for whole file ####Background#### -background = 3c3f41 -backgroundAlternative = 414547 -backgroundColorful = 3B4754 +%background = 3c3f41 +%backgroundAlternative = 414547 +%backgroundColorful = 3B4754 -backgroundHeader = 45484a -backgroundToolTip = 4b4d4d +%backgroundHeader = 45484a +%backgroundToolTip = 4b4d4d -backgroundHover = 27292a -backgroundSelected = 4e5254 -backgroundHoverSecondary = 353739 -backgroundSelectedSecondary = 2d2f30 -backgroundHoverColorful = 262D36 -backgroundSelectedColorful = 313A45 +%backgroundHover = 27292a +%backgroundSelected = 4e5254 +%backgroundHoverSecondary = 353739 +%backgroundSelectedSecondary = 2d2f30 +%backgroundHoverColorful = 262D36 +%backgroundSelectedColorful = 313A45 -dropBackground = 4b4b4b -dropForeground = 999999 +%dropBackground = 4b4b4b +%dropForeground = 999999 ####Border#### -border = 555555 -borderSecondary = 333638 -borderTertiary = 5b5d5f -borderFocus = 79c0ff -gridLine = 4f5152 +%border = 555555 +%borderSecondary = 333638 +%borderTertiary = 5b5d5f +%borderFocus = 79c0ff +%gridLine = 4f5152 ####Highlight#### -hoverHighlight = 4c5052 -clickHighlight = 5c6164 +%hoverHighlight = 4c5052 +%clickHighlight = 5c6164 -hoverHighlightColorful = 2F3A45 -clickHighlightColorful = 2B353F +%hoverHighlightColorful = 2F3A45 +%clickHighlightColorful = 2B353F -hoverHighlightDefault = 406086 -clickHighlightDefault = 4a688c +%hoverHighlightDefault = 406086 +%clickHighlightDefault = 4a688c -hoverHighlightSecondary = 333537 -clickHighlightSecondary = 2a2b2d +%hoverHighlightSecondary = 333537 +%clickHighlightSecondary = 2a2b2d -highlightFill = 0d293e -highlightFillFocus = 4b6eaf -highlightFillFocusSecondary = 4A88C7 -highlightFillMono = 747a80 +%highlightFill = 0d293e +%highlightFillFocus = 4b6eaf +%highlightFillFocusSecondary = 4A88C7 +%highlightFillMono = 747a80 ####Widgets#### -widgetBorder = 6b6b6b -widgetBorderInactive = 535353 -widgetBorderDefault = 4c708c -widgetFill = 43494a -widgetFillInactive = 3c3f41 -widgetFillDefault = 365880 +%widgetBorder = 6b6b6b +%widgetBorderInactive = 535353 +%widgetBorderDefault = 4c708c +%widgetFill = 43494a +%widgetFillInactive = 3c3f41 +%widgetFillDefault = 365880 ####Controls#### -controlBorder = 6b6b6b -controlBorderDisabled = 545556 -controlFill = A0A0A0 -controlFillSecondary = 636869 -controlFillDisabled = 606060 -controlFillHighlight = 5394ec -controlFillHighlightDisabled = 475b81 -controlBackground = 555555 -controlFadeStart = 696969 -controlFadeEnd = 838383 -controlErrorFadeStart = e74848 -controlErrorFadeEnd = f4a2a0 -controlPassedFadeStart = 008f50 -controlPassedFadeEnd = 5dc48f +%controlBorder = 6b6b6b +%controlBorderDisabled = 545556 +%controlFill = A0A0A0 +%controlFillSecondary = 636869 +%controlFillDisabled = 606060 +%controlFillHighlight = 5394ec +%controlFillHighlightDisabled = 475b81 +%controlBackground = 555555 +%controlFadeStart = 696969 +%controlFadeEnd = 838383 +%controlErrorFadeStart = e74848 +%controlErrorFadeEnd = f4a2a0 +%controlPassedFadeStart = 008f50 +%controlPassedFadeEnd = 5dc48f ####Text#### -caret = bbbbbb -textForeground = bbbbbb -textForegroundHighlight = DDDDDD -textForegroundInactive = 777777 -textForegroundSecondary = 919191 -acceleratorForeground = eeeeee - -textSelectionForeground = bbbbbb -textSelectionForegroundInactive = bbbbbb -textSelectionBackground = 214283 +%caret = bbbbbb +%textForeground = bbbbbb +%textForegroundHighlight = DDDDDD +%textForegroundInactive = 777777 +%textForegroundSecondary = 919191 +%acceleratorForeground = eeeeee + +%textSelectionForeground = bbbbbb +%textSelectionForegroundInactive = bbbbbb +%textSelectionBackground = 214283 #currentLineBackground -textSelectionBackgroundSecondary = 323232 -textBackground = 45494a -textBackgroundInactive = 3c3f41 -textBackgroundSecondary = 2B2B2B +%textSelectionBackgroundSecondary = 323232 +%textBackground = 45494a +%textBackgroundInactive = 3c3f41 +%textBackgroundSecondary = 2B2B2B #Editor number pane -textBackgroundSecondaryInactive = 313335 +%textBackgroundSecondaryInactive = 313335 -hyperlink = 589df6 +%hyperlink = 589df6 ####Misc#### #Todo Line Colors -shadow = 000000 -glowFocus = 3e84c9 -glowFocusLine = 466D94 +%shadow = 000000 +%glowFocus = 3e84c9 +%glowFocusLine = 466D94 -glowError = cf6767 -glowErrorLine = cf6767 +%glowError = cf6767 +%glowErrorLine = cf6767 -glowFocusError = c2413c -glowFocusErrorLine = cf6767 +%glowFocusError = c2413c +%glowFocusErrorLine = cf6767 -glowWarning = cf6b30 -glowWarningLine = cf6b30 +%glowWarning = cf6b30 +%glowWarningLine = cf6b30 #Arc -arc = 5 -arcFocus = 5 -arcSecondary = 3 -arcSecondaryFocus = 3 +%arc = 5 +%arcFocus = 5 +%arcSecondary = 3 +%arcSecondaryFocus = 3 -borderThickness = 3 \ No newline at end of file +%borderThickness = 3 \ No newline at end of file diff --git a/src/main/resources/library/x64/jniplatform.dll b/src/main/resources/library/x64/jniplatform.dll index 0dac99b6fe7c0c311a22a080c13f75d8728b0e0e..d443cdecbcb7c49aa201c2ef4587b605c136277b 100644 GIT binary patch delta 254491 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

BAho@V#qCfgiGc;ZGb+C=wGUc0SFS# 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

j?nw;k0ST1LHZ>*NHd;nI;IsO)= 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 diff --git a/src/main/resources/library/x86/jniplatform.dll b/src/main/resources/library/x86/jniplatform.dll index a32c7c0840aee51628d18d3a00b24f880eae7773..e1a2eca796bb24458f347b3568f17bff2b5a8a6c 100644 GIT binary patch delta 181895 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