diff --git a/platform/util/src/com/intellij/ui/ColorUtil.java b/platform/util/src/com/intellij/ui/ColorUtil.java index 9eb0dc278b83..0e562c09a2e7 100644 --- a/platform/util/src/com/intellij/ui/ColorUtil.java +++ b/platform/util/src/com/intellij/ui/ColorUtil.java @@ -61,6 +61,28 @@ public class ColorUtil { return Color.getHSBColor(hsb[0], hsb[1], brightness); } + @NotNull + public static Color saturate(@NotNull Color color, int tones) { + final float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), null); + float saturation = hsb[1]; + for (int i = 0; i < tones; i++) { + saturation = Math.min(1, saturation * 1.1F); + if (saturation == 1) break; + } + return Color.getHSBColor(hsb[0], saturation, hsb[2]); + } + + @NotNull + public static Color desaturate(@NotNull Color color, int tones) { + final float[] hsb = Color.RGBtoHSB(color.getRed(), color.getGreen(), color.getBlue(), null); + float saturation = hsb[1]; + for (int i = 0; i < tones; i++) { + saturation = Math.max(0, saturation / 1.1F); + if (saturation == 0) break; + } + return Color.getHSBColor(hsb[0], saturation, hsb[2]); + } + public static Color dimmer(@NotNull Color color) { float[] rgb = color.getRGBColorComponents(null); diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPanel.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPanel.java index 6f6dd79cebf7..2ff5ecbae6df 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPanel.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/frame/CommitPanel.java @@ -40,6 +40,7 @@ import com.intellij.vcs.log.data.LoadingDetails; import com.intellij.vcs.log.data.VcsLogData; import com.intellij.vcs.log.ui.VcsLogColorManager; import com.intellij.vcs.log.ui.render.TagIcon; +import com.intellij.vcs.log.ui.render.TagLabelPainter; import com.intellij.vcs.log.ui.render.TextLabelPainter; import com.intellij.vcs.log.util.VcsUserUtil; import org.jetbrains.annotations.NotNull; @@ -505,9 +506,9 @@ class CommitPanel extends JBPanel { for (VcsRef reference : typeAndRefs.getValue()) { Icon icon = null; if (index == 0) { + Color color = TagLabelPainter.getTagColor(type); icon = new TagIcon(height, getBackground(), - typeAndRefs.getValue().size() > 1 ? new Color[]{type.getBackgroundColor(), - type.getBackgroundColor()} : new Color[]{type.getBackgroundColor()}); + typeAndRefs.getValue().size() > 1 ? new Color[]{color, color} : new Color[]{color}); } JBLabel label = new JBLabel(reference.getName() + (index != typeAndRefs.getValue().size() - 1 ? "," : ""), diff --git a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/TagLabelPainter.java b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/TagLabelPainter.java index e2e8030f94cc..26fbd4043305 100644 --- a/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/TagLabelPainter.java +++ b/platform/vcs-log/impl/src/com/intellij/vcs/log/ui/render/TagLabelPainter.java @@ -32,7 +32,7 @@ package com.intellij.vcs.log.ui.render; import com.intellij.openapi.ui.GraphicsConfig; import com.intellij.openapi.util.Pair; -import com.intellij.ui.JBColor; +import com.intellij.ui.ColorUtil; import com.intellij.ui.SimpleColoredComponent; import com.intellij.util.ObjectUtils; import com.intellij.util.containers.ContainerUtil; @@ -78,9 +78,8 @@ public class TagLabelPainter { VcsRef firstRef = ObjectUtils.assertNotNull(ContainerUtil.getFirstItem(typeAndRefs.getValue())); VcsRefType type = typeAndRefs.getKey(); boolean multiple = typeAndRefs.getValue().size() > 1; - TagIcon tagIcon = new TagIcon(myHeight, myBackground, multiple - ? new Color[]{type.getBackgroundColor(), type.getBackgroundColor()} - : new Color[]{type.getBackgroundColor()}); + Color color = getTagColor(type); + TagIcon tagIcon = new TagIcon(myHeight, myBackground, multiple ? new Color[]{color, color} : new Color[]{color}); String text = firstRef.getName() + (multiple ? " +" : ""); myLabels.add(Pair.create(text, tagIcon)); @@ -89,6 +88,18 @@ public class TagLabelPainter { } } + @NotNull + public static Color getTagColor(@NotNull VcsRefType type) { + Color color = type.getBackgroundColor(); + if (UIUtil.isUnderDarcula()) { + color = ColorUtil.brighter(color, 2); + } + else { + color = ColorUtil.darker(color, 2); + } + return ColorUtil.saturate(color, 5); + } + public void paint(@NotNull Graphics2D g2, int x, int y, int height) { if (myLabels.isEmpty()) return;