/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Liquid Look and Feel *
* *
* Author, Miroslav Lazarevic *
* *
* For licensing information and credits, please refer to the *
* comment in file com.birosoft.liquid.LiquidLookAndFeel *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
package com.birosoft.liquid;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Color;
import javax.swing.UIManager;
import javax.swing.border.AbstractBorder;
import javax.swing.plaf.UIResource;
/**
* A frame for internal frames
*
*/
public class LiquidInternalFrameBorder extends AbstractBorder implements UIResource
{
/**
*
*/
private static final long serialVersionUID = 527236686631130345L;
/** indicates whether the internal frame is active */
boolean isActive;
boolean isPalette = false;
public LiquidInternalFrameBorder()
{
}
/** insets of the frame */
private static final Insets insets = new Insets(0, 4, 4, 4);
/**
* Uses the skins to paint the border
* @see javax.swing.border.Border#paintBorder(Component, Graphics, int, int, int, int)
*/
public void paintBorder(Component c, Graphics g, int x, int y, int w, int h)
{
int frameTitleHeight = isPalette ? UIManager.getInt("InternalFrame.paletteTitleHeight") : UIManager.getInt("InternalFrame.frameTitleHeight");
drawLeftTop(g, isActive, 4, frameTitleHeight);
g.translate(0, frameTitleHeight);
drawLeft(g, isActive, 4, h - frameTitleHeight - 4);
g.translate(0, -frameTitleHeight);
g.translate(0, h - 4);
//getSkinBottom().draw(g, index, w, 4);
drawBottom(g, isActive, w, 4);
g.translate(0, - (h - 4));
g.translate(w - 4, 0);
drawRightTop(g, isActive, 4, frameTitleHeight);
g.translate(0, frameTitleHeight);
drawRight(g, isActive, 4, h - frameTitleHeight - 4);
g.translate(0, -frameTitleHeight);
g.translate(- (w - 4), 0);
}
private void drawLeftTop(Graphics g, boolean isSelected, int w, int h)
{
Color c = isSelected ? new Color(62,145,235) : new Color(175,214,255);
g.setColor(c);
g.fillRect(0, 0, w, h);
c = isSelected ? new Color(94,172,255) : new Color(226,240,255);
g.setColor(c);
g.drawLine(0, 0, w, 0);
g.drawLine(0, 0, 0, h);
c = isSelected ? new Color(60,141,228) : new Color(170,207,247);
g.setColor(c);
g.drawLine(1, 1, w, 1);
for (int i=4; i<h; i += 4)
{
c = isSelected ? new Color(59,138,223) : new Color(166,203,242);
g.setColor(c);
g.drawLine(1, i, w, i);
c = isSelected ? new Color(60,141,228) : new Color(170,207,247);
g.setColor(c);
g.drawLine(1, i+1, w, i+1);
}
c = isSelected ? new Color(47,111,180) : new Color(135,164,196);
g.setColor(c);
g.drawLine(w-1, h-1, w-1, h-1);
}
private void drawLeft(Graphics g, boolean isSelected, int w, int h)
{
Color c = isSelected ? new Color(62,145,235) : new Color(175,214,255);
g.setColor(c);
g.fillRect(0, 0, w, h);
c = isSelected ? new Color(94,172,255) : new Color(226,240,255);
g.setColor(c);
g.drawLine(0, 0, 0, h);
c = isSelected ? new Color(59,138,223) : new Color(166,203,242);
g.setColor(c);
g.drawLine(1, 0, w, 0);
for (int i=3; i < h; i += 4)
{
c = isSelected ? new Color(59,138,223) : new Color(166,203,242);
g.setColor(c);
g.drawLine(1, i, w, i);
c = isSelected ? new Color(60,141,228) : new Color(170,207,247);
g.setColor(c);
g.drawLine(1, i+1, w, i+1);
}
c = isSelected ? new Color(47,111,180) : new Color(135,164,196);
g.setColor(c);
g.drawLine(w-1, 0, w-1, h);
}
private void drawRightTop(Graphics g, boolean isSelected, int w, int h)
{
Color c = isSelected ? new Color(62,145,235) : new Color(175,214,255);
g.setColor(c);
g.fillRect(0, 0, w, h);
c = isSelected ? new Color(94,172,255) : new Color(226,240,255);
g.setColor(c);
g.drawLine(0, 0, w-2, 0);
c = isSelected ? new Color(60,141,228) : new Color(170,207,247);
g.setColor(c);
g.drawLine(0, 1, w-2, 1);
for (int i=4; i<h; i += 4)
{
c = isSelected ? new Color(59,138,223) : new Color(166,203,242);
g.setColor(c);
g.drawLine(0, i, w-2, i);
c = isSelected ? new Color(60,141,228) : new Color(170,207,247);
g.setColor(c);
g.drawLine(0, i+1, w-2, i+1);
}
c = isSelected ? new Color(94,172,255) : new Color(226,240,255);
g.setColor(c);
g.drawLine(0, h-1, 0, h-1);
c = isSelected ? new Color(47,111,180) : new Color(135,164,196);
g.setColor(c);
g.drawLine(w-1, 0, w-1, h);
}
private void drawRight(Graphics g, boolean isSelected, int w, int h)
{
Color c = isSelected ? new Color(62,145,235) : new Color(175,214,255);
g.setColor(c);
g.fillRect(0, 0, w, h);
c = isSelected ? new Color(94,172,255) : new Color(226,240,255);
g.setColor(c);
g.drawLine(0, 0, 0, h);
c = isSelected ? new Color(59,138,223) : new Color(166,203,242);
g.setColor(c);
g.drawLine(1, 0, w, 0);
for (int i=3; i<h; i += 4)
{
c = isSelected ? new Color(59,138,223) : new Color(166,203,242);
g.setColor(c);
g.drawLine(1, i, w, i);
c = isSelected ? new Color(60,141,228) : new Color(170,207,247);
g.setColor(c);
g.drawLine(1, i+1, w, i+1);
}
c = isSelected ? new Color(47,111,180) : new Color(135,164,196);
g.setColor(c);
g.drawLine(w-1, 0, w-1, h);
}
private void drawBottom(Graphics g, boolean isSelected, int w, int h)
{
Color c = isSelected ? new Color(62,145,235) : new Color(175,214,255);
g.setColor(c);
g.fillRect(1, 0, w-1, h-1);
c = isSelected ? new Color(94,172,255) : new Color(226,240,255);
g.setColor(c);
g.drawLine(3, 0, w-4, 0);
g.drawLine(0, 0, 0, h-2);
c = isSelected ? new Color(47,111,180) : new Color(135,164,196);
g.setColor(c);
g.drawLine(0, h-1, w, h-1);
g.drawLine(w-1, 0, w-1, h-1);
}
/**
*
* @see javax.swing.border.Border#getBorderInsets(Component)
*/
public Insets getBorderInsets(Component c)
{
return insets;
}
/**
* inform the border whether the internal frame is active or not
* @param isActive
*/
public void setActive(boolean isActive)
{
this.isActive = isActive;
}
}