Skip to content

Commit

Permalink
fix monochrome icons by the use of filters
Browse files Browse the repository at this point in the history
Signed-off-by: mallowigi <[email protected]>
  • Loading branch information
mallowigi committed Feb 12, 2018
1 parent 226c634 commit 2074c9a
Showing 1 changed file with 28 additions and 4 deletions.
32 changes: 28 additions & 4 deletions src/main/java/com/chrisrm/idea/utils/IconReplacer.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;

}
}
}

0 comments on commit 2074c9a

Please sign in to comment.