/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/*
* BussyPanelUI.java
*
* Created on 2009-04-10, 13:22:47
*/
package app.navigps.gui.detailspanel.UI;
import app.navigps.gui.detailspanel.SimpleBusyPanel;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.geom.AffineTransform;
import java.awt.geom.RoundRectangle2D;
import javax.swing.JComponent;
import javax.swing.plaf.PanelUI;
/**
*
* @author Grzegorz (wara) Warywoda
*/
public class BusyPanelUI extends PanelUI{
private Color textColor = new Color(255,255,255);
private Color shadowColor = new Color(190,190,190);
private GlyphVector gText;
private String sText = "";
private Point textPosition = new Point(0, 0);
private boolean drawShadow = true;
private GlyphVector convertText(Graphics2D g2,JComponent comp,String text){
FontRenderContext frc = g2.getFontRenderContext();
g2.setFont(g2.getFont().deriveFont(AffineTransform.getScaleInstance(2.0, 2.0)));
GlyphVector gv = g2.getFont().createGlyphVector(frc, text);
gv.setGlyphTransform(0, AffineTransform.getScaleInstance(2,2));
return gv;
}
private void updateText(Graphics2D g2,JComponent comp){
String text = ((SimpleBusyPanel)comp).getText();
//System.out.println("Text '"+text+"' internal text '"+sText+"'");
if(!text.equals(sText)){
gText = convertText(g2, comp, text);
sText = text;
}
}
private void updateTextPosition(JComponent comp){
//System.out.println("Update text !!");
if(gText != null){
int width = comp.getWidth();
int height = comp.getHeight();
Rectangle textBounds = gText.getOutline().getBounds();
int x = (width-(int)textBounds.getWidth())>>1;
int y = ((height-(int)textBounds.getHeight())>>1);
textPosition.setLocation(x, y);
}
}
@Override
public void installUI(JComponent c) {
}
@Override
public void uninstallUI(JComponent c) {
textPosition=null;
gText = null;
sText = null;
}
@Override
public void update(Graphics g, JComponent c) {
updateText((Graphics2D)g, c);
updateTextPosition(c);
paint(g, c);
}
@Override
public void paint(Graphics g, JComponent c) {
//System.out.println("Paint "+getClass().getCanonicalName());
Graphics2D g2 = (Graphics2D)g.create();
g2.setColor(c.getBackground());
RoundRectangle2D round = ((SimpleBusyPanel)c).computeVisibleChildrenArea();
g2.fillRoundRect((int)round.getX(),(int)round.getY(),
(int)round.getWidth(),(int)round.getHeight(),
(int)round.getArcWidth(),(int)round.getArcHeight());
if(!sText.equals("")){
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.85f));
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_ALPHA_INTERPOLATION,RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY);
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(textColor);
g2.drawGlyphVector(gText, textPosition.x,textPosition.y);
if(isDrawShadow()){
g2.setColor(shadowColor);
g2.drawGlyphVector(gText, textPosition.x+1, textPosition.y+1);
}
}
g2.dispose();
}
private boolean checkComponent(JComponent comp){
return (comp instanceof SimpleBusyPanel);
}
/**
* @return the drawShadow
*/
public boolean isDrawShadow() {
return drawShadow;
}
/**
* @param drawShadow the drawShadow to set
*/
public void setDrawShadow(boolean drawShadow) {
this.drawShadow = drawShadow;
}
}