Browse Source

Use correct background color on DefaultTreeCellRenderer.

pull/198/head
weisj 5 years ago
parent
commit
dd866309bc
  1. 19
      core/src/main/java/com/github/weisj/darklaf/ui/cell/CellUtil.java
  2. 4
      core/src/main/java/com/github/weisj/darklaf/ui/cell/hint/CellHintPopupListener.java
  3. 2
      core/src/main/java/com/github/weisj/darklaf/ui/table/renderer/DarkTableCellEditor.java
  4. 1
      core/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeCellRendererDelegate.java
  5. 6
      core/src/test/java/ui/table/TableDemo.java
  6. 15
      utils/src/main/java/com/github/weisj/darklaf/util/PropertyUtil.java

19
core/src/main/java/com/github/weisj/darklaf/ui/cell/CellUtil.java

@ -27,7 +27,10 @@ package com.github.weisj.darklaf.ui.cell;
import java.awt.*; import java.awt.*;
import javax.swing.*; import javax.swing.*;
import javax.swing.plaf.UIResource;
import javax.swing.tree.DefaultTreeCellRenderer;
import com.github.weisj.darklaf.graphics.ColorWrapper;
import com.github.weisj.darklaf.ui.list.DarkListUI; import com.github.weisj.darklaf.ui.list.DarkListUI;
import com.github.weisj.darklaf.ui.table.DarkTableUI; import com.github.weisj.darklaf.ui.table.DarkTableUI;
import com.github.weisj.darklaf.ui.table.renderer.IconWrapper; import com.github.weisj.darklaf.ui.table.renderer.IconWrapper;
@ -334,7 +337,14 @@ public class CellUtil {
public static void setupTreeBackground(final Component comp, final JTree parent, final boolean selected, public static void setupTreeBackground(final Component comp, final JTree parent, final boolean selected,
final int row) { final int row) {
setupBackground(comp, getTreeBackground(comp, parent, selected, row)); Color bg = getTreeBackground(comp, parent, selected, row);
setupBackground(comp, bg);
if (comp instanceof DefaultTreeCellRenderer) {
Color c = comp.getBackground();
if (c == null || c instanceof UIResource || c instanceof NonUIResourceColorWrapper) {
comp.setBackground(new NonUIResourceColorWrapper(bg));
}
}
} }
public static Color getTreeBackground(final JTree tree, final boolean selected, final int row) { public static Color getTreeBackground(final JTree tree, final boolean selected, final int row) {
@ -554,4 +564,11 @@ public class CellUtil {
Rectangle rect = table.getVisibleRect(); Rectangle rect = table.getVisibleRect();
return table.rowAtPoint(rect.getLocation()); return table.rowAtPoint(rect.getLocation());
} }
private static class NonUIResourceColorWrapper extends ColorWrapper {
public NonUIResourceColorWrapper(final Color color) {
super(color);
}
}
} }

4
core/src/main/java/com/github/weisj/darklaf/ui/cell/hint/CellHintPopupListener.java

@ -95,8 +95,8 @@ public class CellHintPopupListener<T extends JComponent, I> extends MouseInputAd
if (visibleBounds.contains(p)) { if (visibleBounds.contains(p)) {
final Component comp = cellContainer.getEffectiveCellRendererComponent(index, isEditing); final Component comp = cellContainer.getEffectiveCellRendererComponent(index, isEditing);
final Dimension prefSize = isEditing final Dimension prefSize = isEditing
? comp.getBounds().getSize() ? comp.getBounds().getSize()
: comp.getPreferredSize(); : comp.getPreferredSize();
if (!(visibleBounds.width >= prefSize.width && visibleBounds.height >= prefSize.height)) { if (!(visibleBounds.width >= prefSize.width && visibleBounds.height >= prefSize.height)) {
Point popupLocation = cellContainer.getComponent().getLocationOnScreen(); Point popupLocation = cellContainer.getComponent().getLocationOnScreen();
Rectangle rect = calculatePopupBounds(cellBounds, visibleBounds, !isEditing); Rectangle rect = calculatePopupBounds(cellBounds, visibleBounds, !isEditing);

2
core/src/main/java/com/github/weisj/darklaf/ui/table/renderer/DarkTableCellEditor.java

@ -130,7 +130,7 @@ public class DarkTableCellEditor extends DefaultCellEditor {
} }
} }
} }
} catch (ParseException ignore) { } } catch (ParseException ignore) {}
} }
public boolean shouldSelectCell(final EventObject anEvent) { public boolean shouldSelectCell(final EventObject anEvent) {

1
core/src/main/java/com/github/weisj/darklaf/ui/tree/DarkTreeCellRendererDelegate.java

@ -74,6 +74,7 @@ public class DarkTreeCellRendererDelegate extends TreeCellRendererDelegate imple
renderer = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, isFocused); renderer = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, isFocused);
} }
CellUtil.setupTreeForeground(renderer, tree, selected); CellUtil.setupTreeForeground(renderer, tree, selected);
CellUtil.setupTreeBackground(renderer, tree, selected, row);
return renderer; return renderer;
} }

6
core/src/test/java/ui/table/TableDemo.java

@ -31,14 +31,14 @@ import javax.swing.*;
import javax.swing.table.JTableHeader; import javax.swing.table.JTableHeader;
import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellEditor;
import ui.ComponentDemo;
import ui.DemoPanel;
import com.github.weisj.darklaf.ui.table.DarkTableUI; import com.github.weisj.darklaf.ui.table.DarkTableUI;
import com.github.weisj.darklaf.ui.table.renderer.DarkTableCellEditor; import com.github.weisj.darklaf.ui.table.renderer.DarkTableCellEditor;
import com.github.weisj.darklaf.util.PropertyKey; import com.github.weisj.darklaf.util.PropertyKey;
import com.github.weisj.darklaf.util.PropertyUtil; import com.github.weisj.darklaf.util.PropertyUtil;
import ui.ComponentDemo;
import ui.DemoPanel;
public class TableDemo implements ComponentDemo { public class TableDemo implements ComponentDemo {
public static void main(final String[] args) { public static void main(final String[] args) {

15
utils/src/main/java/com/github/weisj/darklaf/util/PropertyUtil.java

@ -38,18 +38,12 @@ public class PropertyUtil {
public static void installBackground(final Component component, final Color color) { public static void installBackground(final Component component, final Color color) {
if (component == null || color == null) return; if (component == null || color == null) return;
Color c = component.getBackground(); component.setBackground(chooseColor(component.getBackground(), color));
if (c == null || c instanceof UIResource) {
component.setBackground(color);
}
} }
public static void installForeground(final Component component, final Color color) { public static void installForeground(final Component component, final Color color) {
if (component == null || color == null) return; if (component == null || color == null) return;
Color c = component.getForeground(); component.setForeground(chooseColor(component.getForeground(), color));
if (c == null || c instanceof UIResource) {
component.setForeground(color);
}
} }
public static void installBorder(final JComponent component, final Border border) { public static void installBorder(final JComponent component, final Border border) {
@ -187,4 +181,9 @@ public class PropertyUtil {
.map(type::cast) .map(type::cast)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
public static Color chooseColor(final Color currentColor, final Color newColor) {
if (currentColor == null || currentColor instanceof UIResource) return newColor;
return currentColor;
}
} }

Loading…
Cancel
Save