diff --git a/platform/platform-api/src/com/intellij/ide/util/treeView/NodeRenderer.java b/platform/platform-api/src/com/intellij/ide/util/treeView/NodeRenderer.java index 81bca61ceae1..a593ddda4e65 100644 --- a/platform/platform-api/src/com/intellij/ide/util/treeView/NodeRenderer.java +++ b/platform/platform-api/src/com/intellij/ide/util/treeView/NodeRenderer.java @@ -9,10 +9,13 @@ import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.editor.colors.TextAttributesKey; import com.intellij.openapi.editor.markup.TextAttributes; +import com.intellij.openapi.util.IconLoader; +import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.ColoredTreeCellRenderer; import com.intellij.ui.SimpleTextAttributes; import com.intellij.ui.speedSearch.SpeedSearchUtil; +import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.tree.TreeUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -22,6 +25,13 @@ import java.awt.*; import java.util.List; public class NodeRenderer extends ColoredTreeCellRenderer { + protected Icon fixIconIfNeeded(Icon icon, boolean selected, boolean hasFocus) { + if (!UIUtil.isUnderDarcula() && Registry.is("ide.project.view.change.icon.on.selection") && selected && hasFocus) { + return IconLoader.getDarkIcon(icon, true); + } + return icon; + } + @Override public void customizeCellRenderer(@NotNull JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { Object node = TreeUtil.getUserObject(value); @@ -30,7 +40,7 @@ public class NodeRenderer extends ColoredTreeCellRenderer { NodeDescriptor descriptor = (NodeDescriptor)node; // TODO: use this color somewhere Color color = descriptor.getColor(); - setIcon(descriptor.getIcon()); + setIcon(fixIconIfNeeded(descriptor.getIcon(), selected, hasFocus)); } ItemPresentation p0 = getPresentation(node); @@ -38,7 +48,7 @@ public class NodeRenderer extends ColoredTreeCellRenderer { if (p0 instanceof PresentationData) { PresentationData presentation = (PresentationData)p0; Color color = node instanceof NodeDescriptor ? ((NodeDescriptor)node).getColor() : null; - setIcon(presentation.getIcon(false)); + setIcon(fixIconIfNeeded(presentation.getIcon(false), selected, hasFocus)); final List coloredText = presentation.getColoredText(); Color forcedForeground = presentation.getForcedTextForeground(); diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index c1bc8271c466..306f061c51b7 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -1639,4 +1639,6 @@ show.new.plugin.page=true show.new.plugin.page.description=Show new plugin page configurable ide.action.menu.item.pack.on.text.update=true +ide.project.view.change.icon.on.selection=false +ide.project.view.change.icon.on.selection.description=Use Darcula icons when tree element is focused and selected