package com.drawbridge.vl;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.RenderingHints;
import javax.swing.JComponent;
/***
* Fixed-size transparent popup shape
* @author Alistair Stead
*
*/
abstract class Popup extends JComponent
{
/**
*
*/
private static final long serialVersionUID = 250827727489092754L;
public static final int mSliderHeight = 30;
private Dimension mPreferredSize = new Dimension(250, 50);
private final boolean downwardTriangleVisible;
private float transparency;
public Popup(boolean downwardTriangleVisible, float transparency){
this.downwardTriangleVisible = downwardTriangleVisible;
this.transparency = transparency;
}
public void setTransparency(float f){
transparency = f;
}
@Override
public void paintComponent(Graphics g)
{
Graphics2D g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
int round = (mSliderHeight / 3 * 2);
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, transparency));
g2.setColor(Color.white);
g2.fillRoundRect(0, 0, getWidth() - 1, mSliderHeight, round, round);
g2.setColor(Color.decode("#AAAAAA"));
g2.drawRoundRect(0, 0, getWidth() - 1, mSliderHeight, round, round);
if(downwardTriangleVisible){
// Draw downward triangle
int triangleLength = 10;
g2.setColor(Color.white);
int centerX = (getWidth() / 2);
Point left = new Point(centerX - triangleLength - 5, mSliderHeight);
Point middle = new Point(centerX, mSliderHeight + triangleLength);
Point right = new Point(centerX + triangleLength + 5, mSliderHeight);
g2.drawLine(left.x, left.y, right.x, right.y);
Polygon p = new Polygon();
p.addPoint(left.x, left.y);
p.addPoint(middle.x, middle.y);
p.addPoint(right.x, right.y);
g2.fillPolygon(p);
g2.setColor(Color.decode("#AAAAAA"));
g2.drawLine(left.x, left.y, middle.x, middle.y);
g2.drawLine(middle.x, middle.y, right.x, right.y);
}
}
public void setPreferredSize(Dimension size){
mPreferredSize = size;
this.setSize(mPreferredSize);
}
@Override
public Dimension getMinimumSize()
{
return mPreferredSize;
}
@Override
public Dimension getMaximumSize()
{
return mPreferredSize;
}
@Override
public Dimension getPreferredSize()
{
return mPreferredSize;
}
}