package com.zygorclient.gui.wrappers; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import javax.swing.JPanel; import com.zygorclient.gui.worker.SwingWork; import com.zygorclient.util.ImageUtil; public class GraphicPanel extends JPanel { //Image variables private static RenderingHints antialiasing = new RenderingHints(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON); private BufferedImage startImage; private BufferedImage image; private boolean imageOverlay = false; private volatile boolean running = false; private double deltaTheta = 0; private int x=0, y=0; public GraphicPanel(BufferedImage image) { this.image = image; this.setPreferredSize(new Dimension(image.getWidth(), image.getHeight())); this.setOpaque(false); this.repaint(); this.addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { if (GraphicPanel.this.imageOverlay && GraphicPanel.this.isEnabled()) { GraphicPanel.this.startImage = getImage(); setImage(ImageUtil.createOverlay(ImageUtil.scale(GraphicPanel.this.image, 1), 0.95)); } } @Override public void mouseExited(MouseEvent e) { if (GraphicPanel.this.imageOverlay && GraphicPanel.this.isEnabled()) setImage(GraphicPanel.this.startImage); } }); } public void setImage(BufferedImage image) { this.image = image; this.repaint(); } public BufferedImage getImage() { return this.image; } public void setOverlay(boolean b) { this.imageOverlay = b; } public boolean isActive() { return this.running; } public void start() { if (this.running) return; this.running = true; SwingWork.submit(true, new Runnable() { public void run() { while (GraphicPanel.this.running) { try { Thread.sleep(12); //The lower this value, the faster the thing rotates GraphicPanel.this.deltaTheta-=.1; //subtract for CCW, add for CW GraphicPanel.this.repaint(); } catch (Exception ignored) { } } } }); } public void stop() { if (!this.running) return; this.running = false; this.deltaTheta = 0; this.repaint(); } @Override public void paintComponent(Graphics g1) { super.paintComponent(g1); Graphics2D g = (Graphics2D) g1; g.setRenderingHints(antialiasing); if (this.running) g.rotate(this.deltaTheta, this.image.getWidth()/2, this.image.getHeight()/2); g.drawImage(this.image, this.x, this.y, null); } }