package app.navigps.gui.buttons;
import app.navigps.gui.borders.EmptyOvalBorder;
import app.navigps.gui.borders.OvalBorder;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Shape;
import java.awt.geom.Area;
import java.awt.geom.GeneralPath;
import java.awt.geom.RoundRectangle2D;
import javax.swing.Action;
/**
*
* @author Grzegorz (vara) Warywoda
*/
public class RoundButton extends OpacityButton{
private RoundRectangle2D visibleRec;
private float roundX=0;
private float roundY=0;
/**
*
* @param label
*/
public RoundButton(String label){
super(label);
setFocusPainted(false);
setBorder(null);
}
/**
*
* @param a
*/
public RoundButton(Action a){
super(a);
setFocusPainted(false);
setBorder(null);
}
/**
*
* @param label
* @param arcw
* @param arch
*/
public RoundButton(String label,float arcw,float arch){
this(label);
roundX = arcw;
roundY = arch;
setDefaultBorder();
}
/**
*
* @param g
*/
@Override
public void paint(Graphics g){
if(visibleRec == null || getWidth()!=visibleRec.getWidth() || getHeight() != visibleRec.getHeight())
visibleRec = new RoundRectangle2D.Double(0,0,getWidth(),getHeight(),getRoundX(), getRoundY());
Shape orgClip = g.getClip();
Area newClip = new Area(orgClip);
Area visbClip = new Area(visibleRec);
newClip.intersect(visbClip);
GeneralPath gpClip = new GeneralPath(newClip);
g.setClip(gpClip);
super.paint(g);
}
/**
*
* @param g
*/
@Override
public void paintComponent(Graphics g){
super.paintComponent(g);
}
/**
*
* @param g
*/
@Override
protected void paintBorder(Graphics g) {
super.paintBorder(g);
}
/**
* @return the roundX
*/
public float getRoundX() {
return roundX;
}
/**
* @param roundX the roundX to set
*/
public void setRoundX(float roundX) {
this.roundX = roundX;
}
/**
* @return the roundY
*/
public float getRoundY() {
return roundY;
}
/**
* @param roundY the roundY to set
*/
public void setRoundY(float roundY) {
this.roundY = roundY;
}
/**
*
* @param arcw
* @param arch
*/
public void setRound(float arcw,float arch){
setRoundX(arcw);
setRoundY(arch);
}
/**
*
*/
public void setDefaultBorder(){
setBorder(new OvalBorder(3,3,3,3,getRoundX(),getRoundY(),new Color(80,80,100)));
}
public void setDefaultEmptyBorder(){
setBorder(new EmptyOvalBorder(3,3,3,3,getRoundX(),getRoundY()));
}
}