package com.qksnap.www.snap.gui;
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.TrayIcon;
import java.awt.Window;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Area;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import com.qksnap.www.snap.gui.events.*;
import com.sun.awt.AWTUtilities;
public class SelectGlassPane extends JPanel {
/** Our start point for rectangle drawing **/
public Point start = new Point();
/** Our finished point **/
public Point down = new Point();
/** Our rectangle **/
private Rectangle2D rect;
/** Are we drawing? **/
private boolean drawing;
/** Mouse Listener **/
private AreaDragListener ml2;
/** Constructor **/
public SelectGlassPane() {
super(null);
setOpaque(false);
ml2 = new AreaDragListener(false);
addMouseListener(ml2);
addMouseMotionListener(ml2);
addComponentListener(new ComponentAdapter() {
public void componentMoved(ComponentEvent e) {
setLocation(0, 0);
}
});
}
public Rectangle2D getRect() {
return rect;
}
public void setRect(Rectangle2D rect) {
this.rect = rect;
}
public void setFinish(Point point) {
this.down = point;
}
public void setStart(Point point) {
this.start = point;
}
public boolean isDrawing() {
return drawing;
}
public void setDrawing(boolean s) {
this.drawing = s;
}
/** Override our paint Component **/
protected void paintComponent(Graphics g) {
super.paintComponent(g);
// Set Window to 50% Opacity
AWTUtilities.setWindowOpacity(GlassFrame.getInstance(), 0.5f);
Graphics2D g2 = (Graphics2D) g.create();
Area area = new Area();
AlphaComposite old = (AlphaComposite) g2.getComposite();
Font saved = g2.getFont();
area.add(new Area(new Rectangle2D.Float(0,0,getWidth(),getHeight())));
AlphaComposite ta = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
g2.setComposite(ta);
if (getRect() != null && isDrawing()) {
area.subtract(new Area(getRect()));
g2.setColor(Color.GREEN.darker());
g2.setStroke(new BasicStroke(5));
g2.draw(getRect());
g2.setStroke(g2.getStroke()); // reset our stroke
g2.setColor(Color.black.darker());
g2.fill(area);
} else {
g2.setColor(Color.black.darker());
g2.fill(area);
g2.setColor(Color.red.darker());
g2.setComposite(old);
g2.setFont(new Font("Serif", Font.PLAIN, 36));
g2.drawString("Click and drag to make selection!",
(getWidth() / 2) - 150, getHeight() / 2);
}
area.reset();
area = null;
g2.setFont(saved);
g2.dispose();
}
}