/*******************************************************************************
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Tiny Look and Feel * * (C) Copyright 2003 - 2007 Hans Bickel * * For
* licensing information and credits, please refer to the * comment in file
* de.muntjak.tinylookandfeel.TinyLookAndFeel * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*/
package de.muntjak.tinylookandfeel.borders;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
import javax.swing.border.AbstractBorder;
import javax.swing.plaf.UIResource;
import de.muntjak.tinylookandfeel.Theme;
/**
* TinyPopupMenuBorder
*
* @version 1.0
* @author Hans Bickel
*/
@SuppressWarnings (
{ "all" } )
public class TinyPopupMenuBorder extends AbstractBorder implements UIResource
{
/**
* Draws a simple 3d border for the given component.
*
* @param mainColor The component to draw its border.
* @param g The graphics context.
* @param x The x coordinate of the top left corner.
* @param y The y coordinate of the top left corner.
* @param w The width.
* @param h The height.
*/
public void paintBorder ( Component c, Graphics g, int x, int y, int w, int h )
{
switch ( Theme.derivedStyle [ Theme.style ] )
{
case Theme.TINY_STYLE :
drawTinyBorder ( g, x, y, w, h );
break;
case Theme.W99_STYLE :
drawWinBorder ( g, x, y, w, h );
break;
case Theme.YQ_STYLE :
drawXpBorder ( g, x, y, w, h );
break;
}
}
private void drawTinyBorder ( Graphics g, int x, int y, int w, int h )
{
}
private void drawWinBorder ( Graphics g, int x, int y, int w, int h )
{
g.translate ( x, y );
// Inner highlight:
g.setColor ( Theme.menuInnerHilightColor [ Theme.style ].getColor () );
g.drawLine ( 1, 1, w - 3, 1 );
g.drawLine ( 1, 1, 1, h - 3 );
// Inner shadow:
g.setColor ( Theme.menuInnerShadowColor [ Theme.style ].getColor () );
g.drawLine ( w - 2, 1, w - 2, h - 2 );
g.drawLine ( 1, h - 2, w - 2, h - 2 );
// Outer highlight:
g.setColor ( Theme.menuOuterHilightColor [ Theme.style ].getColor () );
g.drawLine ( 0, 0, w - 2, 0 );
g.drawLine ( 0, 0, 0, h - 1 );
// Outer shadow:
g.setColor ( Theme.menuOuterShadowColor [ Theme.style ].getColor () );
g.drawLine ( w - 1, 0, w - 1, h - 1 );
g.drawLine ( 0, h - 1, w - 1, h - 1 );
g.translate ( -x, -y );
}
private void drawXpBorder ( Graphics g, int x, int y, int w, int h )
{
g.translate ( x, y );
// Inner highlight:
g.setColor ( Theme.menuInnerHilightColor [ Theme.style ].getColor () );
g.drawLine ( 1, 1, w - 3, 1 );
g.drawLine ( 1, 1, 1, h - 3 );
// Inner shadow:
g.setColor ( Theme.menuInnerShadowColor [ Theme.style ].getColor () );
g.drawLine ( w - 2, 1, w - 2, h - 2 );
g.drawLine ( 1, h - 2, w - 2, h - 2 );
// Outer highlight:
g.setColor ( Theme.menuOuterHilightColor [ Theme.style ].getColor () );
g.drawLine ( 0, 0, w - 2, 0 );
g.drawLine ( 0, 0, 0, h - 1 );
// Outer shadow:
g.setColor ( Theme.menuOuterShadowColor [ Theme.style ].getColor () );
g.drawLine ( w - 1, 0, w - 1, h - 1 );
g.drawLine ( 0, h - 1, w - 1, h - 1 );
g.translate ( -x, -y );
}
/**
* Gets the border insets for a given component.
*
* @param mainColor The component to get its border insets.
* @return Always returns the same insets as defined in <code>insets</code>.
*/
public Insets getBorderInsets ( Component c )
{
return Theme.menuBorderInsets [ Theme.style ];
}
}