diff --git a/src/main/java/com/chrisrm/idea/utils/IconReplacer.java b/src/main/java/com/chrisrm/idea/utils/IconReplacer.java index 4cfa8ab9f..905430c48 100644 --- a/src/main/java/com/chrisrm/idea/utils/IconReplacer.java +++ b/src/main/java/com/chrisrm/idea/utils/IconReplacer.java @@ -29,11 +29,12 @@ import com.chrisrm.idea.MTConfig; import com.chrisrm.idea.icons.tinted.TintedIcon; import com.chrisrm.idea.icons.tinted.TintedIconsService; -import com.intellij.ui.ColorUtil; -import com.intellij.util.IconUtil; +import com.intellij.openapi.util.IconLoader; import javax.swing.*; import java.awt.*; +import java.awt.image.ImageFilter; +import java.awt.image.RGBImageFilter; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.net.URL; @@ -89,8 +90,9 @@ public static void replaceIcons(final Class iconsClass, final String iconsRootPa public static Icon chromatizeIcon(final Icon newIcon) { if (MTConfig.getInstance().isMonochromeIcons()) { final Color primaryColor = MTConfig.getInstance().getSelectedTheme().getTheme().getPrimaryColor(); - final Icon mcIcon = IconUtil.colorize(newIcon, ColorUtil.brighter(primaryColor, 4), false); - return IconUtil.toSize(mcIcon, newIcon.getIconWidth(), newIcon.getIconHeight()); + IconLoader.setFilter(new ColorizeFilter(primaryColor)); + } else { + IconLoader.setFilter(new ImageFilter()); } return newIcon; } @@ -130,4 +132,26 @@ private static String patchUrlIfNeeded(final Object icon, final String iconsRoot return iconsRootPath; } + + private static class ColorizeFilter extends RGBImageFilter { + private final Color primaryColor; + + public ColorizeFilter(final Color primaryColor) { + this.primaryColor = primaryColor; + } + + @Override + public int filterRGB(final int x, final int y, final int pARGB) { + final float[] myBase = Color.RGBtoHSB(primaryColor.getRed(), primaryColor.getGreen(), primaryColor.getBlue(), null); + // Get color components + final int r = pARGB >> 16 & 0xFF; + final int g = pARGB >> 8 & 0xFF; + final int b = pARGB & 0xFF; + final float[] hsb = new float[3]; + Color.RGBtoHSB(r, g, b, hsb); + final int color = Color.HSBtoRGB(myBase[0], myBase[1] * hsb[1], myBase[2] * hsb[2]); + return (pARGB & 0xFF000000) | color & 0x00FFFFFF; + + } + } }