package com.atlauncher.plaf; import com.atlauncher.Resources; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.Toolkit; import java.awt.geom.AffineTransform; import java.awt.image.AffineTransformOp; import java.awt.image.BufferedImage; import java.util.HashMap; import java.util.Map; public final class UIUtils{ private UIUtils(){} public static final Color TRANSPARENT = new Color(0, 0, 0, 0); public static final Color GRAY = new Color(40, 45, 50); public static final Dimension SIZE = Toolkit.getDefaultToolkit().getScreenSize(); public static final Font DINPRO_BLACK = Resources.makeFont0("dinpro-black"); private static Map<RenderingHints.Key, Object> hints; private static Map<RenderingHints.Key, Object> oldHints; public static Image flip(BufferedImage image){ AffineTransform mirror = AffineTransform.getScaleInstance(-1, 1); mirror.translate(-image.getWidth(null), 0); AffineTransformOp op = new AffineTransformOp(mirror, AffineTransformOp.TYPE_NEAREST_NEIGHBOR); image = op.filter(image, null); return image; } public static <T extends Image> BufferedImage resize(T img, int len, int height){ BufferedImage i = new BufferedImage(len, height, BufferedImage.TYPE_INT_ARGB); Graphics2D g = i.createGraphics(); g.drawImage(img, 0, 0, len, height, null); g.dispose(); g.setComposite(AlphaComposite.Src); g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); return i; } public static AlphaComposite alpha(float alpha){ return AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha); } @Deprecated public static void drawCrossHair(Graphics g, int x, int y, int len, Color c){ int subLen = (len / 2) - 1; g.setColor(c); g.fillRect(x, y, len, 1); g.fillRect(x - subLen, y - subLen, 1, len); } public static BufferedImage createColoredBackground(Color c){ BufferedImage background = Resources.makeImage("background/scene"); BufferedImage b = new BufferedImage(background.getWidth(), background.getHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D g = (Graphics2D) b.getGraphics(); g.setColor(c); g.fillRect(0, 0, b.getWidth(), b.getHeight()); return b; } public static void antialiasOn(Graphics g){ Graphics2D g2 = (Graphics2D) g; if(hints == null){ hints = new HashMap<>(); hints.put(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON); hints.put(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); hints.put(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); oldHints = new HashMap<>(); oldHints.put(RenderingHints.KEY_FRACTIONALMETRICS, g2.getRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS)); oldHints.put(RenderingHints.KEY_TEXT_ANTIALIASING, g2.getRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING)); oldHints.put(RenderingHints.KEY_ANTIALIASING, g2.getRenderingHint(RenderingHints.KEY_ANTIALIASING)); } g2.addRenderingHints(hints); } public static void antialiasOff(Graphics g){ ((Graphics2D) g).addRenderingHints(oldHints); } }