From 941e1fbdda55643c41584fe966cd1f432f3109a7 Mon Sep 17 00:00:00 2001 From: weisj Date: Mon, 27 Apr 2020 21:20:31 +0200 Subject: [PATCH] Simplified boolean client property checks. --- .../weisj/darklaf/ui/DarkPopupFactory.java | 32 ++++------ .../darklaf/ui/button/ButtonConstants.java | 29 ++++----- .../weisj/darklaf/ui/cell/CellUtil.java | 7 +- .../ui/combobox/ComboBoxConstants.java | 7 +- .../weisj/darklaf/ui/label/DarkLabelUI.java | 3 +- .../darklaf/ui/list/DarkListCellRenderer.java | 5 +- .../weisj/darklaf/ui/list/DarkListUI.java | 7 +- .../darklaf/ui/list/DarkListUIBridge.java | 3 +- .../darklaf/ui/popupmenu/DarkPopupMenuUI.java | 26 +------- .../darklaf/ui/popupmenu/MouseGrabber.java | 10 ++- .../ui/progressbar/DarkProgressBarUI.java | 5 +- .../darklaf/ui/rootpane/DarkRootPaneUI.java | 3 +- .../darklaf/ui/scrollpane/ScrollBarUtil.java | 5 +- .../weisj/darklaf/ui/slider/DarkSliderUI.java | 21 +++--- .../darklaf/ui/spinner/SpinnerConstants.java | 9 ++- .../darklaf/ui/tabbedpane/DarkHandler.java | 3 +- .../tabbedpane/DarkScrollableTabSupport.java | 3 +- .../ui/tabbedpane/DarkTabbedPaneLayout.java | 4 +- .../DarkTabbedPaneScrollLayout.java | 6 +- .../ui/tabbedpane/DarkTabbedPaneUI.java | 7 +- .../darklaf/ui/table/DarkTableCellEditor.java | 4 +- .../ui/table/DarkTableCellFocusBorder.java | 10 ++- .../ui/table/DarkTableCellRenderer.java | 6 +- .../weisj/darklaf/ui/table/TableUIBridge.java | 9 +-- .../darklaf/ui/text/DarkPasswordFieldUI.java | 4 +- .../weisj/darklaf/ui/text/DarkTextBorder.java | 4 +- .../darklaf/ui/text/DarkTextFieldUI.java | 3 +- .../togglebutton/ToggleButtonConstants.java | 10 ++- .../darklaf/ui/toolbar/DropPreviewPanel.java | 4 +- .../darklaf/ui/tooltip/DarkTooltipUI.java | 2 +- .../ui/tree/DarkDefaultTreeEditor.java | 4 +- .../darklaf/ui/tree/DarkTreeCellRenderer.java | 6 +- .../weisj/darklaf/ui/tree/DarkTreeUI.java | 14 ++-- .../github/weisj/darklaf/util/DarkUIUtil.java | 3 +- .../DarkHighlightPainter.java | 3 +- core/src/test/java/ui/list/ListDemo.java | 3 +- core/src/test/java/ui/table/TableDemo.java | 5 +- core/src/test/java/ui/tree/TreeDemo.java | 5 +- .../macos/ui/MacOSDecorationsUtil.java | 5 +- .../weisj/darklaf/util/PropertyUtil.java | 64 +++++++++++++++++++ 40 files changed, 206 insertions(+), 157 deletions(-) create mode 100644 utils/src/main/java/com/github/weisj/darklaf/util/PropertyUtil.java diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/DarkPopupFactory.java b/core/src/main/java/com/github/weisj/darklaf/ui/DarkPopupFactory.java index 8da1be60..0e733643 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/DarkPopupFactory.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/DarkPopupFactory.java @@ -32,6 +32,7 @@ import com.github.weisj.darklaf.platform.DecorationsHandler; import com.github.weisj.darklaf.ui.rootpane.DarkRootPaneUI; import com.github.weisj.darklaf.util.DarkUIUtil; import com.github.weisj.darklaf.util.Pair; +import com.github.weisj.darklaf.util.PropertyUtil; public class DarkPopupFactory extends PopupFactory { @@ -47,21 +48,19 @@ public class DarkPopupFactory extends PopupFactory { @Override public Popup getPopup(final Component owner, final Component contents, final int x, final int y) throws IllegalArgumentException { - boolean isJComponent = contents instanceof JComponent; - Pair result = getEffectivePopup(owner, contents, x, y, isJComponent); + Pair result = getEffectivePopup(owner, contents, x, y); Popup popup = result.getFirst(); PopupType type = result.getSecond(); - setupPopup(popup, type, contents, isJComponent); + setupPopup(popup, type, contents); return popup; } protected Pair getEffectivePopup(final Component owner, final Component contents, - final int x, final int y, - final boolean isJComponent) { + final int x, final int y) { Popup popup = super.getPopup(owner, contents, x, y); PopupType type = getPopupType(popup); - boolean forceHeavy = type != PopupType.HEAVY_WEIGHT && isJComponent - && Boolean.TRUE.equals(((JComponent) contents).getClientProperty(KEY_FORCE_HEAVYWEIGHT)); + boolean forceHeavy = type != PopupType.HEAVY_WEIGHT + && PropertyUtil.getBooleanProperty(contents, KEY_FORCE_HEAVYWEIGHT); if (forceHeavy) { // null owner forces a heavyweight popup. Popup p = super.getPopup(getHeavyWeightParent(), contents, x, y); @@ -77,8 +76,7 @@ public class DarkPopupFactory extends PopupFactory { return PopupType.HEAVY_WEIGHT; } - protected void setupPopup(final Popup popup, final PopupType type, final Component contents, - final boolean isJComponent) { + protected void setupPopup(final Popup popup, final PopupType type, final Component contents) { if (type == PopupType.MEDIUM_WEIGHT) { JRootPane rootPane = SwingUtilities.getRootPane(contents); // Prevents decorations from being reinstalled. @@ -86,21 +84,17 @@ public class DarkPopupFactory extends PopupFactory { } else if (type == PopupType.HEAVY_WEIGHT) { Window window = SwingUtilities.getWindowAncestor(contents); if (window != null) { - boolean isFocusable = isJComponent - && Boolean.TRUE.equals(((JComponent) contents).getClientProperty(KEY_FOCUSABLE_POPUP)); - boolean startHidden = isJComponent - && Boolean.TRUE.equals(((JComponent) contents).getClientProperty(KEY_START_HIDDEN)); - setupWindow(window, contents, isJComponent, isFocusable, startHidden); + boolean isFocusable = PropertyUtil.getBooleanProperty(contents, KEY_FOCUSABLE_POPUP); + boolean startHidden = PropertyUtil.getBooleanProperty(contents, KEY_START_HIDDEN); + setupWindow(window, contents, isFocusable, startHidden); } } } - protected void setupWindow(final Window window, final Component contents, final boolean isJComponent, + protected void setupWindow(final Window window, final Component contents, final boolean isFocusable, final boolean startHidden) { - boolean noDecorations = isJComponent - && Boolean.TRUE.equals(((JComponent) contents).getClientProperty(KEY_NO_DECORATION)); - boolean opaque = isJComponent - && Boolean.TRUE.equals(((JComponent) contents).getClientProperty(KEY_OPAQUE)); + boolean noDecorations = PropertyUtil.getBooleanProperty(contents, KEY_NO_DECORATION); + boolean opaque = PropertyUtil.getBooleanProperty(contents, KEY_OPAQUE); setupWindowBackground(window, opaque); setupWindowFocusableState(isFocusable, window); setupWindowDecorations(window, noDecorations); diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/button/ButtonConstants.java b/core/src/main/java/com/github/weisj/darklaf/ui/button/ButtonConstants.java index 5c7b64df..f762638b 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/button/ButtonConstants.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/button/ButtonConstants.java @@ -29,6 +29,8 @@ import java.awt.*; import javax.swing.*; import javax.swing.plaf.UIResource; +import com.github.weisj.darklaf.util.PropertyUtil; + public interface ButtonConstants { String KEY_VARIANT = "JButton.variant"; String KEY_HOVER_COLOR = "JButton.borderless.hover"; @@ -49,45 +51,38 @@ public interface ButtonConstants { String VARIANT_NONE = "none"; static boolean chooseAlternativeArc(final Component c) { - return c instanceof AbstractButton - && Boolean.TRUE.equals(((AbstractButton) c).getClientProperty(KEY_ALT_ARC)); + return PropertyUtil.getBooleanProperty(c, KEY_ALT_ARC); } static boolean isLabelButton(final Component c) { - return c instanceof AbstractButton - && VARIANT_ONLY_LABEL.equals(((AbstractButton) c).getClientProperty(KEY_VARIANT)); + return PropertyUtil.getBooleanProperty(c, KEY_VARIANT); } static boolean isNoArc(final Component c) { - return c instanceof AbstractButton - && Boolean.TRUE.equals(((AbstractButton) c).getClientProperty(KEY_NO_ARC)); + return PropertyUtil.getBooleanProperty(c, KEY_NO_ARC); } static boolean isSquare(final Component c) { - return c instanceof AbstractButton && Boolean.TRUE.equals(((AbstractButton) c).getClientProperty(KEY_SQUARE)); + return PropertyUtil.getBooleanProperty(c, KEY_SQUARE); } static boolean isThin(final Component c) { - if (c instanceof AbstractButton) { - boolean isThin = Boolean.TRUE.equals(((AbstractButton) c).getClientProperty(KEY_THIN)); - return isThin || ButtonConstants.doConvertToBorderless((AbstractButton) c); - } - return false; + return PropertyUtil.getBooleanProperty(c, KEY_THIN) + || (c instanceof AbstractButton && ButtonConstants.doConvertToBorderless((AbstractButton) c)); } static boolean isBorderlessVariant(final Component c) { if (isBorderlessRectangular(c)) return true; if (c instanceof JButton) { JButton b = (JButton) c; - return doConvertToBorderless((AbstractButton) c) - || VARIANT_BORDERLESS.equals(b.getClientProperty(KEY_VARIANT)); + return PropertyUtil.isPropertyEqual(b, KEY_VARIANT, VARIANT_BORDERLESS) + || doConvertToBorderless((AbstractButton) c); } return false; } static boolean isBorderlessRectangular(final Component c) { - return c instanceof AbstractButton - && VARIANT_BORDERLESS_RECTANGULAR.equals(((AbstractButton) c).getClientProperty(KEY_VARIANT)); + return PropertyUtil.isPropertyEqual(c, KEY_VARIANT, VARIANT_BORDERLESS_RECTANGULAR); } static boolean doConvertToBorderless(final AbstractButton b) { @@ -97,7 +92,7 @@ public interface ButtonConstants { static boolean convertIconButtonToBorderless(final AbstractButton b) { return !(b instanceof UIResource) && UIManager.getBoolean("Button.convertIconOnlyToBorderless") - && !Boolean.TRUE.equals(b.getClientProperty(KEY_NO_BORDERLESS_OVERWRITE)); + && !PropertyUtil.getBooleanProperty(b, KEY_NO_BORDERLESS_OVERWRITE); } static boolean isIconOnly(final AbstractButton b) { diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/cell/CellUtil.java b/core/src/main/java/com/github/weisj/darklaf/ui/cell/CellUtil.java index c930327b..174a9f62 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/cell/CellUtil.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/cell/CellUtil.java @@ -32,6 +32,7 @@ import javax.swing.plaf.ListUI; import com.github.weisj.darklaf.ui.list.DarkListUI; import com.github.weisj.darklaf.ui.table.DarkTableCellEditor; import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.PropertyUtil; public class CellUtil { @@ -107,7 +108,7 @@ public class CellUtil { final boolean selected, final int row, final String altBgKey, final Color bgColor, final String altColorKey, final Color selectionBackground, final String noFocusSelectionBgKey) { - boolean alternativeRow = Boolean.TRUE.equals(parent.getClientProperty(altBgKey)); + boolean alternativeRow = PropertyUtil.getBooleanProperty(parent, altBgKey); Color alternativeRowColor = UIManager.getColor(altColorKey); Color background = alternativeRow && row % 2 == 1 ? alternativeRowColor : bgColor; if (selected) { @@ -146,9 +147,7 @@ public class CellUtil { } protected static boolean isListEditor(final Component c) { - return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty(DarkListUI.KEY_IS_LIST_RENDERER)) - && c.getParent() instanceof JList; + return PropertyUtil.getBooleanProperty(c, DarkListUI.KEY_IS_LIST_RENDERER) && c.getParent() instanceof JList; } public static Insets adjustEditorInsets(final Insets ins, final Component c) { diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/combobox/ComboBoxConstants.java b/core/src/main/java/com/github/weisj/darklaf/ui/combobox/ComboBoxConstants.java index 7650de97..89c7865f 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/combobox/ComboBoxConstants.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/combobox/ComboBoxConstants.java @@ -30,6 +30,7 @@ import javax.swing.*; import com.github.weisj.darklaf.ui.table.DarkTableUI; import com.github.weisj.darklaf.ui.tree.DarkTreeUI; +import com.github.weisj.darklaf.util.PropertyUtil; public interface ComboBoxConstants { String KEY_IS_TREE_EDITOR = DarkTreeUI.KEY_IS_TREE_EDITOR; @@ -41,12 +42,10 @@ public interface ComboBoxConstants { } static boolean isTreeCellEditor(final Component c) { - return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty(KEY_IS_TREE_EDITOR)); + return PropertyUtil.getBooleanProperty(c, KEY_IS_TREE_EDITOR); } static boolean isTableCellEditor(final Component c) { - return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty(KEY_IS_TABLE_EDITOR)); + return PropertyUtil.getBooleanProperty(c, KEY_IS_TABLE_EDITOR); } } diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/label/DarkLabelUI.java b/core/src/main/java/com/github/weisj/darklaf/ui/label/DarkLabelUI.java index 742986ed..aa267772 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/label/DarkLabelUI.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/label/DarkLabelUI.java @@ -41,6 +41,7 @@ import com.github.weisj.darklaf.graphics.GraphicsUtil; import com.github.weisj.darklaf.ui.cell.CellUtil; import com.github.weisj.darklaf.util.DarkUIUtil; import com.github.weisj.darklaf.util.PropertyKey; +import com.github.weisj.darklaf.util.PropertyUtil; /** * @author Jannis Weis @@ -144,7 +145,7 @@ public class DarkLabelUI extends BasicLabelUI implements PropertyChangeListener final int textX, final int textY) { int accChar = l.getDisplayedMnemonicIndex(); if (DarkUIUtil.isInCell(l)) { - boolean selected = Boolean.TRUE.equals(l.getClientProperty(CellUtil.KEY_SELECTED_CELL_RENDERER)); + boolean selected = PropertyUtil.getBooleanProperty(l, CellUtil.KEY_SELECTED_CELL_RENDERER); boolean focused = hasFocusInCell(l); if (focused) { if (selected) { diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/list/DarkListCellRenderer.java b/core/src/main/java/com/github/weisj/darklaf/ui/list/DarkListCellRenderer.java index 4a77704c..4b12fd0f 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/list/DarkListCellRenderer.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/list/DarkListCellRenderer.java @@ -30,6 +30,7 @@ import javax.swing.*; import com.github.weisj.darklaf.ui.cell.CellUtil; import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.PropertyUtil; public class DarkListCellRenderer extends DefaultListCellRenderer { @@ -45,7 +46,7 @@ public class DarkListCellRenderer extends DefaultListCellRenderer { } } Component comp = null; - boolean isEditing = Boolean.TRUE.equals(list.getClientProperty(DarkListUI.KEY_IS_EDITING)); + boolean isEditing = PropertyUtil.getBooleanProperty(list, DarkListUI.KEY_IS_EDITING); if (isEditing) { if (list.getSelectionModel().getLeadSelectionIndex() == index) { comp = super.getListCellRendererComponent(list, value, index, false, false); @@ -62,9 +63,7 @@ public class DarkListCellRenderer extends DefaultListCellRenderer { } else { if (DarkUIUtil.hasFocus(list) || DarkUIUtil.getParentOfType(JPopupMenu.class, list) != null) { comp.setForeground(list.getSelectionForeground()); - comp.setBackground(list.getSelectionBackground()); } else { - comp.setBackground(UIManager.getColor("List.selectionNoFocusBackground")); comp.setForeground(UIManager.getColor("List.selectionForegroundInactive")); } } diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/list/DarkListUI.java b/core/src/main/java/com/github/weisj/darklaf/ui/list/DarkListUI.java index 87e09180..55d5755e 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/list/DarkListUI.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/list/DarkListUI.java @@ -32,6 +32,7 @@ import javax.swing.*; import javax.swing.plaf.ComponentUI; import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.PropertyUtil; /** * @author Jannis Weis @@ -156,7 +157,7 @@ public class DarkListUI extends DarkListUIBridge { int ch = rowBounds.height; if (empty || bgWidth > 0) { - boolean alternativeRow = Boolean.TRUE.equals(list.getClientProperty(KEY_ALTERNATE_ROW_COLOR)); + boolean alternativeRow = PropertyUtil.getBooleanProperty(list, KEY_ALTERNATE_ROW_COLOR); Color alternativeRowColor = UIManager.getColor("List.alternateRowBackground"); Color normalColor = list.getBackground(); Color background = alternativeRow && row % 2 == 1 ? alternativeRowColor : normalColor; @@ -168,7 +169,7 @@ public class DarkListUI extends DarkListUIBridge { if (!empty) { Component rendererComponent = cellRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); - if (Boolean.TRUE.equals(list.getClientProperty(KEY_SHRINK_WRAP))) { + if (PropertyUtil.getBooleanProperty(list, KEY_SHRINK_WRAP)) { // Shrink renderer to preferred size. This is mostly used on Windows // where selection is only shown around the file name, instead of // across the whole list cell. @@ -199,7 +200,7 @@ public class DarkListUI extends DarkListUIBridge { if (row < 0) { // If shift is down in multi-select, we should do nothing. // For single select or non-shift-click, clear the selection - if (isFileList && !Boolean.TRUE.equals(list.getClientProperty(KEY_FULL_ROW_SELECTION)) + if (isFileList && !PropertyUtil.getBooleanProperty(list, KEY_FULL_ROW_SELECTION) && e.getID() == MouseEvent.MOUSE_PRESSED && (!e.isShiftDown() || list.getSelectionMode() == ListSelectionModel.SINGLE_SELECTION)) { list.clearSelection(); diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/list/DarkListUIBridge.java b/core/src/main/java/com/github/weisj/darklaf/ui/list/DarkListUIBridge.java index 3397820e..d78f1117 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/list/DarkListUIBridge.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/list/DarkListUIBridge.java @@ -48,6 +48,7 @@ import com.github.weisj.darklaf.ui.DragRecognitionSupport; import com.github.weisj.darklaf.util.DarkUIUtil; import com.github.weisj.darklaf.util.LazyActionMap; import com.github.weisj.darklaf.util.PropertyKey; +import com.github.weisj.darklaf.util.PropertyUtil; /** * An extensible implementation of {@code ListUI}. @@ -514,7 +515,7 @@ public class DarkListUIBridge extends BasicListUI { * Update is file list. */ protected void updateIsFileList() { - boolean b = Boolean.TRUE.equals(list.getClientProperty("List.isFileList")); + boolean b = PropertyUtil.getBooleanProperty(list, "List.isFileList"); if (b != isFileList) { isFileList = b; Font oldFont = list.getFont(); diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/popupmenu/DarkPopupMenuUI.java b/core/src/main/java/com/github/weisj/darklaf/ui/popupmenu/DarkPopupMenuUI.java index 7bb24283..9f9f5aa2 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/popupmenu/DarkPopupMenuUI.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/popupmenu/DarkPopupMenuUI.java @@ -36,6 +36,7 @@ import javax.swing.plaf.basic.BasicPopupMenuUI; import com.github.weisj.darklaf.components.ScrollPopupMenu; import com.github.weisj.darklaf.ui.DarkPopupFactory; import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.PropertyUtil; /** * This implementation for PopupMenuUI is almost identical to the one of BasicPopupMenuUI. The key difference is that it @@ -48,7 +49,7 @@ public class DarkPopupMenuUI extends BasicPopupMenuUI { public static final String KEY_DO_NOT_CANCEL_POPUP = "doNotCancelPopup"; public static final String KEY_DO_NOT_CANCEL_ON_SCROLL = "doNotCancelOnScroll"; - public static final StringBufferWrapper HIDE_POPUP_VALUE = new StringBufferWrapper(new StringBuffer("doNotCancelPopup")); + public static final String HIDE_POPUP_VALUE = "doNotCancelPopup"; public static final String KEY_DEFAULT_LIGHTWEIGHT_POPUPS = "PopupMenu.defaultLightWeightPopups"; private PopupMenuContainer popupMenuContainer; @@ -59,8 +60,7 @@ public class DarkPopupMenuUI extends BasicPopupMenuUI { @Override public void paint(final Graphics g, final JComponent c) { Window window = SwingUtilities.getWindowAncestor(c); - if (window != null - && Boolean.TRUE.equals(popupMenu.getClientProperty(DarkPopupFactory.KEY_MAKE_VISIBLE))) { + if (window != null && PropertyUtil.getBooleanProperty(popupMenu, DarkPopupFactory.KEY_MAKE_VISIBLE)) { popupMenu.putClientProperty(DarkPopupFactory.KEY_MAKE_VISIBLE, false); window.setOpacity(1); } @@ -101,24 +101,4 @@ public class DarkPopupMenuUI extends BasicPopupMenuUI { int maxHeight = DarkUIUtil.getScreenBounds(popup, x, y, false).height; return popupMenuContainer.createPopup(popup, x, y, maxHeight); } - - protected static class StringBufferWrapper { - private final StringBuffer buffer; - - protected StringBufferWrapper(final StringBuffer buffer) { - this.buffer = buffer; - } - - @Override - public String toString() { - return buffer.toString(); - } - - @SuppressWarnings("EqualsWhichDoesntCheckParameterClass") - @Override - public boolean equals(final Object obj) { - if (obj == null || buffer == null) return false; - return toString().equals(obj.toString()); - } - } } diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/popupmenu/MouseGrabber.java b/core/src/main/java/com/github/weisj/darklaf/ui/popupmenu/MouseGrabber.java index 3bc0951a..3e848b02 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/popupmenu/MouseGrabber.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/popupmenu/MouseGrabber.java @@ -38,6 +38,7 @@ import sun.awt.SunToolkit; import com.github.weisj.darklaf.components.OverlayScrollPane; import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.PropertyUtil; public class MouseGrabber implements ChangeListener, AWTEventListener, ComponentListener, WindowListener { @@ -168,9 +169,8 @@ public class MouseGrabber implements ChangeListener, AWTEventListener, Component (src instanceof JMenu && ((JMenu) src).isSelected())) { return; } - if (!(src instanceof JComponent) || - !DarkPopupMenuUI.HIDE_POPUP_VALUE.equals(((JComponent) src).getClientProperty( - DarkPopupMenuUI.KEY_DO_NOT_CANCEL_POPUP))) { + if (!PropertyUtil.isPropertyEqual(src, DarkPopupMenuUI.KEY_DO_NOT_CANCEL_POPUP, + DarkPopupMenuUI.HIDE_POPUP_VALUE)) { // Cancel popup only if this property was not set. // If this property is set to TRUE component wants // to deal with this event by himself. @@ -246,9 +246,7 @@ public class MouseGrabber implements ChangeListener, AWTEventListener, Component break; } else if (c instanceof JPopupMenu) { return true; - } else if (c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty( - DarkPopupMenuUI.KEY_DO_NOT_CANCEL_ON_SCROLL))) { + } else if (PropertyUtil.getBooleanProperty(c, DarkPopupMenuUI.KEY_DO_NOT_CANCEL_ON_SCROLL)) { /* * Change here: allows scrollable components that contain the popupMenu. */ diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/progressbar/DarkProgressBarUI.java b/core/src/main/java/com/github/weisj/darklaf/ui/progressbar/DarkProgressBarUI.java index 85b8c9d3..1622e4c3 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/progressbar/DarkProgressBarUI.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/progressbar/DarkProgressBarUI.java @@ -39,6 +39,7 @@ import com.github.weisj.darklaf.graphics.GraphicsContext; import com.github.weisj.darklaf.graphics.GraphicsUtil; import com.github.weisj.darklaf.util.DarkUIUtil; import com.github.weisj.darklaf.util.PropertyKey; +import com.github.weisj.darklaf.util.PropertyUtil; /** * @author Konstantin Bulenkov @@ -69,7 +70,7 @@ public class DarkProgressBarUI extends BasicProgressBarUI implements PropertyCha } protected static boolean hasFailed(final JComponent c) { - return Boolean.TRUE.equals(c.getClientProperty(KEY_FAILED)); + return PropertyUtil.getBooleanProperty(c, KEY_FAILED); } @Override @@ -177,7 +178,7 @@ public class DarkProgressBarUI extends BasicProgressBarUI implements PropertyCha } protected static boolean hasPassed(final JComponent c) { - return Boolean.TRUE.equals(c.getClientProperty(KEY_PASSED)); + return PropertyUtil.getBooleanProperty(c, KEY_PASSED); } @Override diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/rootpane/DarkRootPaneUI.java b/core/src/main/java/com/github/weisj/darklaf/ui/rootpane/DarkRootPaneUI.java index 19a6c489..f9f55b7c 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/rootpane/DarkRootPaneUI.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/rootpane/DarkRootPaneUI.java @@ -37,6 +37,7 @@ import com.github.weisj.darklaf.platform.DecorationsHandler; import com.github.weisj.darklaf.platform.decorations.CustomTitlePane; import com.github.weisj.darklaf.util.DarkUIUtil; import com.github.weisj.darklaf.util.PropertyKey; +import com.github.weisj.darklaf.util.PropertyUtil; /** * @author Konstantin Bulenkov @@ -211,7 +212,7 @@ public class DarkRootPaneUI extends BasicRootPaneUI implements HierarchyListener } protected void updateClientDecoration() { - if (!Boolean.TRUE.equals(rootPane.getClientProperty(KEY_NO_DECORATIONS_UPDATE))) { + if (!PropertyUtil.getBooleanProperty(rootPane, KEY_NO_DECORATIONS_UPDATE)) { uninstallClientDecorations(rootPane); if (DecorationsHandler.getSharedInstance().isCustomDecorationSupported()) { installClientDecorations(rootPane); diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/scrollpane/ScrollBarUtil.java b/core/src/main/java/com/github/weisj/darklaf/ui/scrollpane/ScrollBarUtil.java index 9bb3d00c..600a5198 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/scrollpane/ScrollBarUtil.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/scrollpane/ScrollBarUtil.java @@ -29,6 +29,8 @@ import java.awt.event.MouseWheelEvent; import javax.swing.*; +import com.github.weisj.darklaf.util.PropertyUtil; + public class ScrollBarUtil implements ScrollBarConstants { @SuppressWarnings("MagicConstant") @@ -45,9 +47,8 @@ public class ScrollBarUtil implements ScrollBarConstants { boolean limitScroll = Math.abs(e.getWheelRotation()) == 1; - Object fastWheelScroll = toScroll.getClientProperty(KEY_FAST_WHEEL_SCROLLING); Component comp = vp == null ? null : vp.getView(); - if (Boolean.TRUE.equals(fastWheelScroll) && comp instanceof Scrollable) { + if (comp instanceof Scrollable && PropertyUtil.getBooleanProperty(toScroll, KEY_FAST_WHEEL_SCROLLING)) { Scrollable scrollComp = (Scrollable) comp; Rectangle viewRect = vp.getViewRect(); int startingX = viewRect.x; diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/slider/DarkSliderUI.java b/core/src/main/java/com/github/weisj/darklaf/ui/slider/DarkSliderUI.java index 2f622b1e..5ed11236 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/slider/DarkSliderUI.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/slider/DarkSliderUI.java @@ -40,7 +40,8 @@ import com.github.weisj.darklaf.graphics.GraphicsContext; import com.github.weisj.darklaf.graphics.GraphicsUtil; import com.github.weisj.darklaf.graphics.PaintUtil; import com.github.weisj.darklaf.listener.MouseClickListener; -import com.github.weisj.darklaf.util.*; +import com.github.weisj.darklaf.util.PropertyKey; +import com.github.weisj.darklaf.util.PropertyUtil; /** * @author Jannis Weis @@ -114,12 +115,11 @@ public class DarkSliderUI extends BasicSliderUI implements PropertyChangeListene } private static boolean showVolumeIcon(final JComponent c) { - return isVolumeSlider(c) - && Boolean.TRUE.equals(c.getClientProperty(KEY_SHOW_VOLUME_ICON)); + return isVolumeSlider(c) && PropertyUtil.getBooleanProperty(c, KEY_SHOW_VOLUME_ICON); } private static boolean isVolumeSlider(final JComponent c) { - return VARIANT_VOLUME.equals(c.getClientProperty(KEY_VARIANT)); + return PropertyUtil.isPropertyEqual(c, KEY_VARIANT, VARIANT_VOLUME); } @Override @@ -307,8 +307,7 @@ public class DarkSliderUI extends BasicSliderUI implements PropertyChangeListene boolean ltr = (slider.getComponentOrientation().isLeftToRight() && !slider.getInverted()) || (!slider.getComponentOrientation().isLeftToRight() && slider.getInverted()); Component minLabel = ltr ? getLowestValueLabel() : getHighestValueLabel(); - boolean adjustMin = minLabel instanceof JComponent - && Boolean.TRUE.equals(((JComponent) minLabel).getClientProperty(KEY_MANUAL_LABEL_ALIGN)); + boolean adjustMin = PropertyUtil.getBooleanProperty(minLabel, KEY_MANUAL_LABEL_ALIGN); int minPrefWidth = minLabel.getPreferredSize().width; float adj = (adjustMin ? minLabel.getAlignmentX() : Component.CENTER_ALIGNMENT); return (int) (minPrefWidth * adj) + 2 * (ltr ? focusInsets.left : focusInsets.right); @@ -318,8 +317,7 @@ public class DarkSliderUI extends BasicSliderUI implements PropertyChangeListene boolean ltr = (slider.getComponentOrientation().isLeftToRight() && !slider.getInverted()) || (!slider.getComponentOrientation().isLeftToRight() && slider.getInverted()); Component maxLabel = ltr ? getHighestValueLabel() : getLowestValueLabel(); - boolean adjustMax = maxLabel instanceof JComponent - && Boolean.TRUE.equals(((JComponent) maxLabel).getClientProperty(KEY_MANUAL_LABEL_ALIGN)); + boolean adjustMax = PropertyUtil.getBooleanProperty(maxLabel, KEY_MANUAL_LABEL_ALIGN); int maxPrefWidth = maxLabel.getPreferredSize().width; float adj = (adjustMax ? maxLabel.getAlignmentX() : Component.CENTER_ALIGNMENT); return (int) (maxPrefWidth * (1f - adj)) + 2 * (ltr ? focusInsets.right : focusInsets.left); @@ -420,8 +418,7 @@ public class DarkSliderUI extends BasicSliderUI implements PropertyChangeListene checkDisabled(g); int labelCenter = xPositionForValue(value); float align = Component.CENTER_ALIGNMENT; - if (label instanceof JComponent - && Boolean.TRUE.equals(((JComponent) label).getClientProperty(KEY_MANUAL_LABEL_ALIGN))) { + if (PropertyUtil.getBooleanProperty(label, KEY_MANUAL_LABEL_ALIGN)) { align = label.getAlignmentX(); } int labelLeft = labelCenter - (int) (label.getPreferredSize().width * align); @@ -665,7 +662,7 @@ public class DarkSliderUI extends BasicSliderUI implements PropertyChangeListene } private boolean paintFocus() { - return slider.hasFocus() && Boolean.TRUE.equals(slider.getClientProperty(KEY_SHOW_FOCUS_GLOW)); + return slider.hasFocus() && PropertyUtil.getBooleanProperty(slider, KEY_SHOW_FOCUS_GLOW); } protected int getThumbWidth() { @@ -753,7 +750,7 @@ public class DarkSliderUI extends BasicSliderUI implements PropertyChangeListene } private boolean instantScrollEnabled(final JComponent c) { - return Boolean.TRUE.equals(c.getClientProperty(KEY_INSTANT_SCROLL)); + return PropertyUtil.getBooleanProperty(c, KEY_INSTANT_SCROLL); } public Rectangle getThumbRect() { diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/spinner/SpinnerConstants.java b/core/src/main/java/com/github/weisj/darklaf/ui/spinner/SpinnerConstants.java index 9ff1f740..3787b7b5 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/spinner/SpinnerConstants.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/spinner/SpinnerConstants.java @@ -30,6 +30,7 @@ import javax.swing.*; import com.github.weisj.darklaf.ui.table.DarkTableUI; import com.github.weisj.darklaf.ui.tree.DarkTreeUI; +import com.github.weisj.darklaf.util.PropertyUtil; public interface SpinnerConstants { String KEY_VARIANT = "JSpinner.variant"; @@ -41,7 +42,7 @@ public interface SpinnerConstants { String VARIANT_PLUS_MINUS = "plusMinus"; static boolean usePlusMinusIcons(final JSpinner spinner) { - return VARIANT_PLUS_MINUS.equals(spinner.getClientProperty(KEY_VARIANT)); + return PropertyUtil.isPropertyEqual(spinner, KEY_VARIANT, VARIANT_PLUS_MINUS); } static boolean isTreeOrTableCellEditor(final Component c) { @@ -49,12 +50,10 @@ public interface SpinnerConstants { } static boolean isTreeCellEditor(final Component c) { - return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty(KEY_IS_TREE_EDITOR)); + return PropertyUtil.getBooleanProperty(c, KEY_IS_TREE_EDITOR); } static boolean isTableCellEditor(final Component c) { - return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty(KEY_IS_TABLE_EDITOR)); + return PropertyUtil.getBooleanProperty(c, KEY_IS_TABLE_EDITOR); } } diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkHandler.java b/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkHandler.java index b3fcf040..04986f69 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkHandler.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkHandler.java @@ -33,6 +33,7 @@ import javax.swing.*; import javax.swing.event.ChangeEvent; import com.github.weisj.darklaf.util.PropertyKey; +import com.github.weisj.darklaf.util.PropertyUtil; public class DarkHandler extends TabbedPaneHandler { @@ -108,7 +109,7 @@ public class DarkHandler extends TabbedPaneHandler { } ui.tabPane.doLayout(); } else if (DarkTabbedPaneUI.KEY_DND.equals(key)) { - ui.dndEnabled = Boolean.TRUE.equals(ui.tabPane.getClientProperty(DarkTabbedPaneUI.KEY_DND)); + ui.dndEnabled = PropertyUtil.getBooleanProperty(ui.tabPane, DarkTabbedPaneUI.KEY_DND); DropTarget dropTarget = ui.tabPane.getDropTarget(); if (dropTarget != null) dropTarget.setActive(ui.dndEnabled); } else if (PropertyKey.COMPONENT_ORIENTATION.equals(key)) { diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkScrollableTabSupport.java b/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkScrollableTabSupport.java index 59604d72..38a2dd26 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkScrollableTabSupport.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkScrollableTabSupport.java @@ -36,6 +36,7 @@ import javax.swing.event.PopupMenuListener; import com.github.weisj.darklaf.components.ScrollPopupMenu; import com.github.weisj.darklaf.listener.PopupMenuAdapter; +import com.github.weisj.darklaf.util.PropertyUtil; public class DarkScrollableTabSupport extends ScrollableTabSupport implements MouseWheelListener, ActionListener { @@ -61,7 +62,7 @@ public class DarkScrollableTabSupport extends ScrollableTabSupport implements Mo moreTabsButton.addActionListener(this); newTabButton = ui.createNewTabButton(); - newTabButton.setVisible(Boolean.TRUE.equals(ui.tabPane.getClientProperty(DarkTabbedPaneUI.KEY_SHOW_NEW_TAB_BUTTON))); + newTabButton.setVisible(PropertyUtil.getBooleanProperty(ui.tabPane, DarkTabbedPaneUI.KEY_SHOW_NEW_TAB_BUTTON)); scrollPopupMenu = new ScrollPopupMenu(UIManager.getInt(DarkTabbedPaneUI.KEY_MAX_POPUP_HEIGHT)); PopupMenuListener popupMenuListener = new PopupMenuAdapter() { diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneLayout.java b/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneLayout.java index cd585ec2..f551edc3 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneLayout.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneLayout.java @@ -28,6 +28,8 @@ import java.awt.*; import javax.swing.*; +import com.github.weisj.darklaf.util.PropertyUtil; + public class DarkTabbedPaneLayout extends TabbedPaneLayout { private final DarkTabbedPaneUI ui; @@ -39,7 +41,7 @@ public class DarkTabbedPaneLayout extends TabbedPaneLayout { @Override protected void centerTabs(final int tabPlacement, final int tabCount, final int returnAt) { - if (ui.runCount == 1 && Boolean.TRUE.equals(ui.tabPane.getClientProperty(DarkTabbedPaneUI.KEY_CENTER_TABS))) { + if (ui.runCount == 1 && PropertyUtil.getBooleanProperty(ui.tabPane, DarkTabbedPaneUI.KEY_CENTER_TABS)) { if (ui.isHorizontalTabPlacement()) { int shift = (returnAt - (ui.rects[tabCount - 1].x + ui.rects[tabCount - 1].width)) / 2; for (int i = 0; i < tabCount; i++) { diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneScrollLayout.java b/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneScrollLayout.java index dfdf1c08..4e9d9afd 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneScrollLayout.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneScrollLayout.java @@ -29,6 +29,8 @@ import java.util.function.Function; import javax.swing.*; +import com.github.weisj.darklaf.util.PropertyUtil; + public class DarkTabbedPaneScrollLayout extends TabbedPaneScrollLayout { private final DarkTabbedPaneUI ui; @@ -329,7 +331,7 @@ public class DarkTabbedPaneScrollLayout extends TabbedPaneScrollLayout { restoreHiddenTabsX(leftMargin, returnAt, tabCount); if (ui.minVisible == 0 && ui.maxVisible == tabCount - 1 - && Boolean.TRUE.equals(ui.tabPane.getClientProperty(DarkTabbedPaneUI.KEY_CENTER_TABS))) { + && PropertyUtil.getBooleanProperty(ui.tabPane, DarkTabbedPaneUI.KEY_CENTER_TABS)) { adjustForCenterX(leftMargin, returnAt, tabCount); } @@ -382,7 +384,7 @@ public class DarkTabbedPaneScrollLayout extends TabbedPaneScrollLayout { restoreHiddenTabsY(topMargin, returnAt, tabCount); if (ui.minVisible == 0 && ui.maxVisible == tabCount - 1 - && Boolean.TRUE.equals(ui.tabPane.getClientProperty(DarkTabbedPaneUI.KEY_CENTER_TABS))) { + && PropertyUtil.getBooleanProperty(ui.tabPane, DarkTabbedPaneUI.KEY_CENTER_TABS)) { adjustForCenterY(topMargin, returnAt, tabCount); } diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneUI.java b/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneUI.java index 70e5ba78..a924802b 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneUI.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/tabbedpane/DarkTabbedPaneUI.java @@ -41,6 +41,7 @@ import com.github.weisj.darklaf.graphics.GraphicsContext; import com.github.weisj.darklaf.graphics.GraphicsUtil; import com.github.weisj.darklaf.graphics.PaintUtil; import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.PropertyUtil; /** * @author Jannis Weis @@ -402,7 +403,7 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { } protected boolean shouldRotateTabRuns(final int tabPlacement) { - return Boolean.TRUE.equals(tabPane.getClientProperty(KEY_ROTATE_TAB_RUNS)); + return PropertyUtil.getBooleanProperty(tabPane, KEY_ROTATE_TAB_RUNS); } @Override @@ -478,7 +479,7 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { } protected boolean drawFocusBar() { - return !Boolean.FALSE.equals(tabPane.getClientProperty(KEY_DRAW_FOCUS_BAR)); + return PropertyUtil.getBooleanProperty(tabPane, KEY_DRAW_FOCUS_BAR, true); } protected Color getAccentColor() { @@ -737,7 +738,7 @@ public class DarkTabbedPaneUI extends DarkTabbedPaneUIBridge { installComponent(KEY_SOUTH_COMP, c -> southComp = c); installComponent(KEY_WEST_COMP, c -> westComp = c); installComponent(KEY_EAST_COMP, c -> eastComp = c); - dndEnabled = Boolean.TRUE.equals(tabPane.getClientProperty(KEY_DND)); + dndEnabled = PropertyUtil.getBooleanProperty(tabPane, KEY_DND); } protected void installComponent(final String key, final Consumer setter) { diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellEditor.java b/core/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellEditor.java index d484a212..157587ae 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellEditor.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellEditor.java @@ -46,6 +46,7 @@ import com.github.weisj.darklaf.ui.spinner.DarkSpinnerUI; import com.github.weisj.darklaf.ui.spinner.SpinnerConstants; import com.github.weisj.darklaf.ui.text.DarkTextUI; import com.github.weisj.darklaf.ui.togglebutton.ToggleButtonConstants; +import com.github.weisj.darklaf.util.PropertyUtil; import com.github.weisj.darklaf.util.PropertyValue; /** @@ -287,7 +288,8 @@ public class DarkTableCellEditor extends DefaultCellEditor { } protected TableCellEditor getBooleanEditor(final JTable table) { - if (DarkTableUI.RENDER_TYPE_RADIOBUTTON.equals(table.getClientProperty(DarkTableUI.KEY_BOOLEAN_RENDER_TYPE))) { + if (PropertyUtil.isPropertyEqual(table, DarkTableUI.KEY_BOOLEAN_RENDER_TYPE, + DarkTableUI.RENDER_TYPE_RADIOBUTTON)) { return radioButtonEditor; } return checkBoxEditor; diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellFocusBorder.java b/core/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellFocusBorder.java index 4f2b6ce7..936d373f 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellFocusBorder.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellFocusBorder.java @@ -30,6 +30,7 @@ import javax.swing.*; import com.github.weisj.darklaf.graphics.PaintUtil; import com.github.weisj.darklaf.ui.cell.DarkCellBorder; +import com.github.weisj.darklaf.util.PropertyUtil; /** * @author Jannis Weis @@ -65,17 +66,14 @@ public class DarkTableCellFocusBorder extends DarkCellBorder { } public static boolean isRowFocusBorder(final Component c) { - return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty(DarkTableUI.KEY_FULL_ROW_FOCUS_BORDER)); + return PropertyUtil.getBooleanProperty(c, DarkTableUI.KEY_FULL_ROW_FOCUS_BORDER); } protected static boolean forcePaintLeft(final Component c) { - return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty(DarkTableUI.KEY_FORCE_LEFT_BORDER)); + return PropertyUtil.getBooleanProperty(c, DarkTableUI.KEY_FORCE_LEFT_BORDER); } protected static boolean forcePaintRight(final Component c) { - return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty(DarkTableUI.KEY_FORCE_RIGHT_BORDER)); + return PropertyUtil.getBooleanProperty(c, DarkTableUI.KEY_FORCE_RIGHT_BORDER); } } diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellRenderer.java b/core/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellRenderer.java index 6e894631..ad7f44c9 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellRenderer.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/table/DarkTableCellRenderer.java @@ -35,6 +35,7 @@ import javax.swing.table.TableColumn; import com.github.weisj.darklaf.ui.cell.CellUtil; import com.github.weisj.darklaf.ui.cell.DarkCellRendererToggleButton; import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.PropertyUtil; /** * @author vincencopalazzo @@ -47,7 +48,7 @@ public class DarkTableCellRenderer extends DefaultTableCellRenderer { private final DarkCellRendererToggleButton radioRenderer = new DarkCellRendererToggleButton<>(new DarkCellRendererToggleButton.CellEditorRadioButton(true)); protected static boolean isBooleanRenderingEnabled(final JTable table) { - return Boolean.TRUE.equals(table.getClientProperty(DarkTableUI.KEY_RENDER_BOOLEAN_AS_CHECKBOX)); + return PropertyUtil.getBooleanProperty(table, DarkTableUI.KEY_RENDER_BOOLEAN_AS_CHECKBOX); } @Override @@ -101,7 +102,8 @@ public class DarkTableCellRenderer extends DefaultTableCellRenderer { } protected TableCellRenderer getBooleanRenderer(final JTable table) { - if (DarkTableUI.RENDER_TYPE_RADIOBUTTON.equals(table.getClientProperty(DarkTableUI.KEY_BOOLEAN_RENDER_TYPE))) { + if (PropertyUtil.isPropertyEqual(table, DarkTableUI.KEY_BOOLEAN_RENDER_TYPE, + DarkTableUI.RENDER_TYPE_RADIOBUTTON)) { return radioRenderer; } return checkBoxRenderer; diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/table/TableUIBridge.java b/core/src/main/java/com/github/weisj/darklaf/ui/table/TableUIBridge.java index 0f186642..4ccde23a 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/table/TableUIBridge.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/table/TableUIBridge.java @@ -52,6 +52,7 @@ import com.github.weisj.darklaf.ui.DragRecognitionSupport; import com.github.weisj.darklaf.util.DarkUIUtil; import com.github.weisj.darklaf.util.LazyActionMap; import com.github.weisj.darklaf.util.PropertyKey; +import com.github.weisj.darklaf.util.PropertyUtil; /** * The type Table ui bridge. @@ -343,7 +344,7 @@ public abstract class TableUIBridge extends TableUI { } } - isFileList = Boolean.TRUE.equals(table.getClientProperty(DarkTableUI.KEY_IS_FILE_LIST)); + isFileList = PropertyUtil.getBooleanProperty(table, DarkTableUI.KEY_IS_FILE_LIST); } /** @@ -1841,8 +1842,8 @@ public abstract class TableUIBridge extends TableUI { public boolean accept(final Object sender) { String key = getName(); - if (sender instanceof JTable && - Boolean.TRUE.equals(((JTable) sender).getClientProperty(DarkTableUI.KEY_IS_FILE_LIST))) { + if (sender instanceof JTable + && PropertyUtil.getBooleanProperty((JTable) sender, DarkTableUI.KEY_IS_FILE_LIST)) { if (Objects.equals(key, NEXT_COLUMN) || Objects.equals(key, NEXT_COLUMN_CELL) || Objects.equals(key, NEXT_COLUMN_EXTEND_SELECTION) || @@ -2582,7 +2583,7 @@ public abstract class TableUIBridge extends TableUI { repaintDropLocation(oldValue); repaintDropLocation(table.getDropLocation()); } else if (DarkTableUI.KEY_IS_FILE_LIST.equals(changeName)) { - isFileList = Boolean.TRUE.equals(table.getClientProperty(DarkTableUI.KEY_IS_FILE_LIST)); + isFileList = PropertyUtil.getBooleanProperty(table, DarkTableUI.KEY_IS_FILE_LIST); table.revalidate(); table.repaint(); if (isFileList) { diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/text/DarkPasswordFieldUI.java b/core/src/main/java/com/github/weisj/darklaf/ui/text/DarkPasswordFieldUI.java index 81c4d16a..1f26405e 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/text/DarkPasswordFieldUI.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/text/DarkPasswordFieldUI.java @@ -38,6 +38,7 @@ import com.github.weisj.darklaf.graphics.GraphicsContext; import com.github.weisj.darklaf.graphics.PaintUtil; import com.github.weisj.darklaf.listener.MouseMovementListener; import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.PropertyUtil; /** * @author Konstantin Bulenkov @@ -182,8 +183,7 @@ public class DarkPasswordFieldUI extends DarkPasswordFieldUIBridge { } public static boolean hasShowIcon(final Component c) { - return c instanceof JPasswordField - && Boolean.TRUE.equals(((JComponent) c).getClientProperty(KEY_SHOW_VIEW_BUTTON)); + return PropertyUtil.getBooleanProperty(c, KEY_SHOW_VIEW_BUTTON); } private Point getShowIconCoord() { diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextBorder.java b/core/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextBorder.java index ffb0ca69..ff566ab2 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextBorder.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextBorder.java @@ -35,6 +35,7 @@ import com.github.weisj.darklaf.graphics.GraphicsContext; import com.github.weisj.darklaf.graphics.GraphicsUtil; import com.github.weisj.darklaf.graphics.PaintUtil; import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.PropertyUtil; /** * @author Jannis Weis @@ -74,8 +75,7 @@ public class DarkTextBorder implements Border, UIResource { } protected static boolean hasError(final Component c) { - return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty(DarkTextUI.KEY_HAS_ERROR)); + return PropertyUtil.getBooleanProperty(c, DarkTextUI.KEY_HAS_ERROR); } protected int getArcSize(final Component c) { diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextFieldUI.java b/core/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextFieldUI.java index 70818595..24163b3e 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextFieldUI.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/text/DarkTextFieldUI.java @@ -41,6 +41,7 @@ import com.github.weisj.darklaf.listener.MouseClickListener; import com.github.weisj.darklaf.listener.MouseMovementListener; import com.github.weisj.darklaf.listener.PopupMenuAdapter; import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.PropertyUtil; /** * @author Konstantin Bulenkov @@ -166,7 +167,7 @@ public class DarkTextFieldUI extends DarkTextFieldUIBridge implements PropertyCh } public static boolean isSearchField(final Component c) { - return c instanceof JTextField && VARIANT_SEARCH.equals(((JTextField) c).getClientProperty(KEY_VARIANT)); + return PropertyUtil.isPropertyEqual(c, KEY_VARIANT, VARIANT_SEARCH); } protected void paintBackground(final Graphics graphics) { diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/togglebutton/ToggleButtonConstants.java b/core/src/main/java/com/github/weisj/darklaf/ui/togglebutton/ToggleButtonConstants.java index ec95cc41..259535c6 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/togglebutton/ToggleButtonConstants.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/togglebutton/ToggleButtonConstants.java @@ -31,6 +31,7 @@ import javax.swing.*; import com.github.weisj.darklaf.ui.table.DarkTableUI; import com.github.weisj.darklaf.ui.tree.DarkTreeUI; import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.PropertyUtil; public interface ToggleButtonConstants { String KEY_VARIANT = "JToggleButton.variant"; @@ -43,8 +44,7 @@ public interface ToggleButtonConstants { String VARIANT_SLIDER = "slider"; static boolean isSlider(final JComponent c) { - return c instanceof JToggleButton - && VARIANT_SLIDER.equals(c.getClientProperty(ToggleButtonConstants.KEY_VARIANT)); + return PropertyUtil.isPropertyEqual(c, ToggleButtonConstants.KEY_VARIANT, VARIANT_SLIDER); } static boolean isInCell(final Component c) { @@ -56,12 +56,10 @@ public interface ToggleButtonConstants { } static boolean isTreeCellEditor(final Component c) { - return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty(DarkToggleButtonUI.KEY_IS_TREE_EDITOR)); + return PropertyUtil.getBooleanProperty(c, KEY_IS_TREE_EDITOR); } static boolean isTableCellEditor(final Component c) { - return c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty(DarkToggleButtonUI.KEY_IS_TABLE_EDITOR)); + return PropertyUtil.getBooleanProperty(c, KEY_IS_TABLE_EDITOR); } } diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/toolbar/DropPreviewPanel.java b/core/src/main/java/com/github/weisj/darklaf/ui/toolbar/DropPreviewPanel.java index 79a34a2d..5d9e41a6 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/toolbar/DropPreviewPanel.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/toolbar/DropPreviewPanel.java @@ -28,6 +28,8 @@ import java.awt.*; import javax.swing.*; +import com.github.weisj.darklaf.util.PropertyUtil; + /** * @author Jannis Weis */ @@ -51,7 +53,7 @@ public class DropPreviewPanel extends JComponent { } protected Color getBackgroundColor() { - boolean useToolbar = Boolean.TRUE.equals(toolBar.getClientProperty(DarkToolBarUI.KEY_USE_TOOL_BAR_BACKGROUND)); + boolean useToolbar = PropertyUtil.getBooleanProperty(toolBar, DarkToolBarUI.KEY_USE_TOOL_BAR_BACKGROUND); if (!useToolbar) { Color c = dropBackground; if (c == null) { diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/tooltip/DarkTooltipUI.java b/core/src/main/java/com/github/weisj/darklaf/ui/tooltip/DarkTooltipUI.java index e5747cfb..4ced86a4 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/tooltip/DarkTooltipUI.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/tooltip/DarkTooltipUI.java @@ -103,7 +103,7 @@ public class DarkTooltipUI extends BasicToolTipUI implements PropertyChangeListe private boolean added; public static ComponentUI createUI(final JComponent c) { - if (Boolean.TRUE.equals(c.getClientProperty(KEY_PLAIN_TOOLTIP))) { + if (PropertyUtil.getBooleanProperty(c, KEY_PLAIN_TOOLTIP)) { return BasicToolTipUI.createUI(c); } else { return new DarkTooltipUI(); diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/tree/DarkDefaultTreeEditor.java b/core/src/main/java/com/github/weisj/darklaf/ui/tree/DarkDefaultTreeEditor.java index f92b6231..7b4c59ef 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/tree/DarkDefaultTreeEditor.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/tree/DarkDefaultTreeEditor.java @@ -37,6 +37,7 @@ import javax.swing.tree.TreePath; import com.github.weisj.darklaf.ui.cell.DarkCellRendererToggleButton; import com.github.weisj.darklaf.ui.text.DarkTextUI; +import com.github.weisj.darklaf.util.PropertyUtil; /** * @author Jannis Weis @@ -99,7 +100,8 @@ public class DarkDefaultTreeEditor extends DefaultTreeCellEditor { } protected DarkTreeCellEditor getBooleanEditor(final JTree table) { - if (DarkTreeUI.RENDER_TYPE_RADIOBUTTON.equals(table.getClientProperty(DarkTreeUI.KEY_BOOLEAN_RENDER_TYPE))) { + if (PropertyUtil.isPropertyEqual(table, DarkTreeUI.KEY_BOOLEAN_RENDER_TYPE, + DarkTreeUI.RENDER_TYPE_RADIOBUTTON)) { return radioButtonEditor; } return checkBoxEditor; diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeCellRenderer.java b/core/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeCellRenderer.java index b1a3e3d6..68b6f151 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeCellRenderer.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeCellRenderer.java @@ -33,6 +33,7 @@ import javax.swing.tree.TreeCellRenderer; import com.github.weisj.darklaf.ui.cell.CellUtil; import com.github.weisj.darklaf.ui.cell.DarkCellRendererToggleButton; +import com.github.weisj.darklaf.util.PropertyUtil; import com.github.weisj.darklaf.util.PropertyValue; /** @@ -93,11 +94,12 @@ public class DarkTreeCellRenderer extends DefaultTreeCellRenderer implements Tre } protected static boolean isBooleanRenderingEnabled(final JTree tree) { - return Boolean.TRUE.equals(tree.getClientProperty(DarkTreeUI.KEY_RENDER_BOOLEAN_AS_CHECKBOX)); + return PropertyUtil.getBooleanProperty(tree, DarkTreeUI.KEY_RENDER_BOOLEAN_AS_CHECKBOX); } protected DarkCellRendererToggleButton getBooleanRenderer(final JTree table) { - if (DarkTreeUI.RENDER_TYPE_RADIOBUTTON.equals(table.getClientProperty(DarkTreeUI.KEY_BOOLEAN_RENDER_TYPE))) { + if (PropertyUtil.isPropertyEqual(table, DarkTreeUI.KEY_BOOLEAN_RENDER_TYPE, + DarkTreeUI.RENDER_TYPE_RADIOBUTTON)) { return radioRenderer; } return checkBoxRenderer; diff --git a/core/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeUI.java b/core/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeUI.java index ab4282fc..0c6fe899 100644 --- a/core/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeUI.java +++ b/core/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeUI.java @@ -40,6 +40,7 @@ import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; import com.github.weisj.darklaf.util.DarkUIUtil; +import com.github.weisj.darklaf.util.PropertyUtil; import com.github.weisj.darklaf.util.SystemInfo; /** @@ -185,7 +186,7 @@ public class DarkTreeUI extends BasicTreeUI implements PropertyChangeListener { protected void installKeyboardActions() { super.installKeyboardActions(); - if (Boolean.TRUE.equals(tree.getClientProperty(KEY_MAC_ACTIONS_INSTALLED))) return; + if (PropertyUtil.getBooleanProperty(tree, KEY_MAC_ACTIONS_INSTALLED)) return; tree.putClientProperty(KEY_MAC_ACTIONS_INSTALLED, Boolean.TRUE); @@ -337,10 +338,9 @@ public class DarkTreeUI extends BasicTreeUI implements PropertyChangeListener { if (owner == null) { owner = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner(); } - boolean treeEditor = owner instanceof JComponent - && Boolean.TRUE.equals(((JComponent) owner).getClientProperty(DarkTreeUI.KEY_IS_TREE_EDITOR)); - boolean treeRenderer = !treeEditor && owner instanceof JComponent - && Boolean.TRUE.equals(((JComponent) owner).getClientProperty(DarkTreeUI.KEY_IS_TREE_RENDERER)); + boolean treeEditor = PropertyUtil.getBooleanProperty(owner, DarkTreeUI.KEY_IS_TREE_EDITOR); + boolean treeRenderer = !treeEditor + && PropertyUtil.getBooleanProperty(owner, DarkTreeUI.KEY_IS_TREE_RENDERER); return treeEditor || treeRenderer; } return true; @@ -540,10 +540,10 @@ public class DarkTreeUI extends BasicTreeUI implements PropertyChangeListener { protected Color getRowBackground(final int row, final boolean selected) { if (selected) { - boolean isTableTree = Boolean.TRUE.equals(tree.getClientProperty(KEY_TREE_TABLE_TREE)); + boolean isTableTree = PropertyUtil.getBooleanProperty(tree, KEY_TREE_TABLE_TREE); return getTreeSelectionBackground(hasFocus() || isTableTree || tree.isEditing()); } - if (Boolean.TRUE.equals(tree.getClientProperty(KEY_ALTERNATE_ROW_COLOR)) && row % 2 == 1) { + if (row % 2 == 1 && PropertyUtil.getBooleanProperty(tree, KEY_ALTERNATE_ROW_COLOR)) { return alternativeBackground; } else { return tree.getBackground(); diff --git a/core/src/main/java/com/github/weisj/darklaf/util/DarkUIUtil.java b/core/src/main/java/com/github/weisj/darklaf/util/DarkUIUtil.java index 84a6cc2e..48d3c0aa 100644 --- a/core/src/main/java/com/github/weisj/darklaf/util/DarkUIUtil.java +++ b/core/src/main/java/com/github/weisj/darklaf/util/DarkUIUtil.java @@ -155,8 +155,7 @@ public final class DarkUIUtil { } public static boolean isInCell(final Component c) { - boolean tableHeaderCell = c instanceof JComponent - && Boolean.TRUE.equals(((JComponent) c).getClientProperty(DarkTableHeaderUI.KEY_IS_HEADER_RENDERER)); + boolean tableHeaderCell = PropertyUtil.getBooleanProperty(c, DarkTableHeaderUI.KEY_IS_HEADER_RENDERER); boolean inCellRenderer = !tableHeaderCell && (getParentOfType(CellRendererPane.class, c) != null || getParentOfType(TableCellRenderer.class, c) != null diff --git a/core/src/main/java/javax/swing/text/DefaultHighlighterDark/DarkHighlightPainter.java b/core/src/main/java/javax/swing/text/DefaultHighlighterDark/DarkHighlightPainter.java index 3df62d79..12209920 100644 --- a/core/src/main/java/javax/swing/text/DefaultHighlighterDark/DarkHighlightPainter.java +++ b/core/src/main/java/javax/swing/text/DefaultHighlighterDark/DarkHighlightPainter.java @@ -40,6 +40,7 @@ import com.github.weisj.darklaf.graphics.GraphicsContext; import com.github.weisj.darklaf.graphics.GraphicsUtil; import com.github.weisj.darklaf.ui.text.DarkTextUI; import com.github.weisj.darklaf.ui.text.StyleConstantsEx; +import com.github.weisj.darklaf.util.PropertyUtil; /** * Note this class only sits inside this weird package because of a hack used in {@link @@ -409,7 +410,7 @@ public class DarkHighlightPainter extends DefaultHighlighter.DefaultHighlightPai private boolean isRounded(final JTextComponent c) { return !suppressRounded - && (roundedEdges || Boolean.TRUE.equals(c.getClientProperty(DarkTextUI.KEY_ROUNDED_SELECTION))); + && (roundedEdges || PropertyUtil.getBooleanProperty(c, DarkTextUI.KEY_ROUNDED_SELECTION)); } private Shape paintExtension(final Graphics2D g2d, final JTextComponent c, diff --git a/core/src/test/java/ui/list/ListDemo.java b/core/src/test/java/ui/list/ListDemo.java index 224005cc..4e9c5c99 100644 --- a/core/src/test/java/ui/list/ListDemo.java +++ b/core/src/test/java/ui/list/ListDemo.java @@ -34,6 +34,7 @@ import ui.ComponentDemo; import ui.DemoPanel; import com.github.weisj.darklaf.ui.list.DarkListUI; +import com.github.weisj.darklaf.util.PropertyUtil; public final class ListDemo implements ComponentDemo { @@ -52,7 +53,7 @@ public final class ListDemo implements ComponentDemo { JPanel controlPanel = panel.addControls(); controlPanel.add(new JCheckBox(DarkListUI.KEY_ALTERNATE_ROW_COLOR) { { - setSelected(Boolean.TRUE.equals(list.getClientProperty(DarkListUI.KEY_ALTERNATE_ROW_COLOR))); + setSelected(PropertyUtil.getBooleanProperty(list, DarkListUI.KEY_ALTERNATE_ROW_COLOR)); addActionListener(e -> list.putClientProperty(DarkListUI.KEY_ALTERNATE_ROW_COLOR, isSelected())); } }, "span"); diff --git a/core/src/test/java/ui/table/TableDemo.java b/core/src/test/java/ui/table/TableDemo.java index 1f8c1cc4..431f1120 100644 --- a/core/src/test/java/ui/table/TableDemo.java +++ b/core/src/test/java/ui/table/TableDemo.java @@ -37,6 +37,7 @@ import ui.DemoPanel; import com.github.weisj.darklaf.ui.table.DarkTableCellEditor; import com.github.weisj.darklaf.ui.table.DarkTableUI; import com.github.weisj.darklaf.util.PropertyKey; +import com.github.weisj.darklaf.util.PropertyUtil; public class TableDemo implements ComponentDemo { @@ -112,7 +113,7 @@ public class TableDemo implements ComponentDemo { }); controlPanel.add(new JCheckBox(DarkTableUI.KEY_ALTERNATE_ROW_COLOR) { { - setSelected(Boolean.TRUE.equals(table.getClientProperty(DarkTableUI.KEY_ALTERNATE_ROW_COLOR))); + setSelected(PropertyUtil.getBooleanProperty(table, DarkTableUI.KEY_ALTERNATE_ROW_COLOR)); addActionListener(e -> table.putClientProperty(DarkTableUI.KEY_ALTERNATE_ROW_COLOR, isSelected())); } }); @@ -144,7 +145,7 @@ public class TableDemo implements ComponentDemo { }); controlPanel.add(new JCheckBox(DarkTableUI.KEY_RENDER_BOOLEAN_AS_CHECKBOX) { { - setSelected(Boolean.TRUE.equals(table.getClientProperty(DarkTableUI.KEY_RENDER_BOOLEAN_AS_CHECKBOX))); + setSelected(PropertyUtil.getBooleanProperty(table, DarkTableUI.KEY_RENDER_BOOLEAN_AS_CHECKBOX)); addActionListener(e -> table.putClientProperty(DarkTableUI.KEY_RENDER_BOOLEAN_AS_CHECKBOX, isSelected())); } diff --git a/core/src/test/java/ui/tree/TreeDemo.java b/core/src/test/java/ui/tree/TreeDemo.java index 58b33423..c969db22 100644 --- a/core/src/test/java/ui/tree/TreeDemo.java +++ b/core/src/test/java/ui/tree/TreeDemo.java @@ -38,6 +38,7 @@ import com.github.weisj.darklaf.components.OverlayScrollPane; import com.github.weisj.darklaf.components.SelectableTreeNode; import com.github.weisj.darklaf.ui.tree.DarkTreeUI; import com.github.weisj.darklaf.util.PropertyKey; +import com.github.weisj.darklaf.util.PropertyUtil; public class TreeDemo implements ComponentDemo { @@ -96,13 +97,13 @@ public class TreeDemo implements ComponentDemo { }); controlPanel.add(new JCheckBox(DarkTreeUI.KEY_ALTERNATE_ROW_COLOR) { { - setSelected(Boolean.TRUE.equals(tree.getClientProperty(DarkTreeUI.KEY_ALTERNATE_ROW_COLOR))); + setSelected(PropertyUtil.getBooleanProperty(tree, DarkTreeUI.KEY_ALTERNATE_ROW_COLOR)); addActionListener(e -> tree.putClientProperty(DarkTreeUI.KEY_ALTERNATE_ROW_COLOR, isSelected())); } }); controlPanel.add(new JCheckBox(DarkTreeUI.KEY_RENDER_BOOLEAN_AS_CHECKBOX) { { - setSelected(Boolean.TRUE.equals(tree.getClientProperty(DarkTreeUI.KEY_RENDER_BOOLEAN_AS_CHECKBOX))); + setSelected(PropertyUtil.getBooleanProperty(tree, DarkTreeUI.KEY_RENDER_BOOLEAN_AS_CHECKBOX)); addActionListener(e -> tree.putClientProperty(DarkTreeUI.KEY_RENDER_BOOLEAN_AS_CHECKBOX, isSelected())); } }, "span"); diff --git a/macos/src/main/java/com/github/weisj/darklaf/platform/macos/ui/MacOSDecorationsUtil.java b/macos/src/main/java/com/github/weisj/darklaf/platform/macos/ui/MacOSDecorationsUtil.java index 81cb9ae4..0960515b 100644 --- a/macos/src/main/java/com/github/weisj/darklaf/platform/macos/ui/MacOSDecorationsUtil.java +++ b/macos/src/main/java/com/github/weisj/darklaf/platform/macos/ui/MacOSDecorationsUtil.java @@ -29,6 +29,7 @@ import java.awt.*; import javax.swing.*; import com.github.weisj.darklaf.platform.macos.JNIDecorationsMacOS; +import com.github.weisj.darklaf.util.PropertyUtil; import com.github.weisj.darklaf.util.SystemInfo; public class MacOSDecorationsUtil { @@ -80,11 +81,11 @@ public class MacOSDecorationsUtil { } private static boolean isFullWindowContentEnabled(final JRootPane rootPane) { - return Boolean.TRUE.equals(rootPane.getClientProperty(FULL_WINDOW_CONTENT_KEY)); + return PropertyUtil.getBooleanProperty(rootPane, FULL_WINDOW_CONTENT_KEY); } private static boolean isTransparentTitleBarEnabled(final JRootPane rootPane) { - return Boolean.TRUE.equals(rootPane.getClientProperty(TRANSPARENT_TITLE_BAR_KEY)); + return PropertyUtil.getBooleanProperty(rootPane, TRANSPARENT_TITLE_BAR_KEY); } private static void setFullWindowContentEnabled(final JRootPane rootPane, diff --git a/utils/src/main/java/com/github/weisj/darklaf/util/PropertyUtil.java b/utils/src/main/java/com/github/weisj/darklaf/util/PropertyUtil.java new file mode 100644 index 00000000..39e61005 --- /dev/null +++ b/utils/src/main/java/com/github/weisj/darklaf/util/PropertyUtil.java @@ -0,0 +1,64 @@ +/* + * MIT License + * + * Copyright (c) 2020 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.github.weisj.darklaf.util; + +import java.awt.*; +import java.util.Objects; + +import javax.swing.*; + +public class PropertyUtil { + + public static boolean getBooleanProperty(final Component c, final String property) { + return getBooleanProperty(c, property, false); + } + + public static boolean getBooleanProperty(final Component c, final String property, final boolean defaultValue) { + return c instanceof JComponent && getBooleanProperty((JComponent) c, property, defaultValue); + } + + public static boolean getBooleanProperty(final JComponent c, final String property) { + return getBooleanProperty(c, property, false); + } + + public static boolean getBooleanProperty(final JComponent c, final String property, final boolean defaultValue) { + if (c == null) return defaultValue; + Object obj = c.getClientProperty(property); + if (!defaultValue) { + return Boolean.TRUE.equals(obj); + } else { + return !Boolean.FALSE.equals(obj); + } + } + + public static boolean isPropertyEqual(final Component c, final String property, final T checkValue) { + return c instanceof JComponent && isPropertyEqual((JComponent) c, property, checkValue); + } + + public static boolean isPropertyEqual(final JComponent c, final String property, final T checkValue) { + if (c == null) return false; + Object obj = c.getClientProperty(property); + return Objects.equals(checkValue, obj); + } +}