com.jidesoft.plaf.xerto.SlidingFrameBorder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jide-oss Show documentation
Show all versions of jide-oss Show documentation
JIDE Common Layer (Professional Swing Components)
/*
* @(#)FrameBorder.java
*
* Copyright 2002 - 2005 JIDE Software Inc. All rights reserved.
*/
package com.jidesoft.plaf.xerto;
import javax.swing.border.Border;
import javax.swing.plaf.UIResource;
import java.awt.*;
/**
* This class is an implementation of the DockableFrame border.
*/
public class SlidingFrameBorder implements Border, UIResource {
public static final int SHADOW_SIZE = 10;
protected Color _highlight;
protected Color _lightHighlight;
protected Color _shadow;
protected Color _darkShadow;
protected Insets _insets;
private static double LOG10 = Math.log(10);
public SlidingFrameBorder(Color highlight, Color lightHighlight,
Color shadow, Color darkShadow, Insets insets) {
_highlight = highlight;
_lightHighlight = lightHighlight;
_shadow = shadow;
_darkShadow = darkShadow;
_insets = insets;
}
/**
* Returns the insets of the border.
*
* @param c the component for which this border insets value applies
*/
public Insets getBorderInsets(Component c) {
return _insets;
}
/**
* Returns whether or not the border is opaque. If the border is opaque, it is responsible for filling in it's own
* background when painting.
*/
public boolean isBorderOpaque() {
return true;
}
public void paintBorder(Component c, Graphics g, int x, int y,
int width, int height) {
if (_insets.top >= SHADOW_SIZE) { //
g.setColor(XertoUtils.getFrameBorderColor());
g.drawRect(x, y + _insets.top - 1, width, height - _insets.top + 1);
g.setColor(_highlight);
g.drawLine(x, y + _insets.top - 5, x + width, y + _insets.top - 5);
g.setColor(_lightHighlight);
g.drawLine(x, y + _insets.top - 4, x + width, y + _insets.top - 4);
g.setColor(_highlight);
g.drawLine(x, y + _insets.top - 3, x + width, y + _insets.top - 3);
g.drawLine(x, y + _insets.top - 2, x + width, y + _insets.top - 2);
paintGradient(g, new Rectangle(x, y, width, _insets.top - 5), true, 40, false);
}
if (_insets.left >= SHADOW_SIZE) { //
g.setColor(XertoUtils.getFrameBorderColor());
g.drawRect(x + _insets.left - 1, y, width - _insets.left, height);
g.setColor(_highlight);
g.drawLine(x + _insets.left - 5, y, x + _insets.left - 5, y + height);
g.setColor(_lightHighlight);
g.drawLine(x + _insets.left - 4, y, x + _insets.left - 4, y + height);
g.setColor(_highlight);
g.drawLine(x + _insets.left - 3, y, x + _insets.left - 3, y + height);
g.drawLine(x + _insets.left - 2, y, x + _insets.left - 2, y + height);
paintGradient(g, new Rectangle(x, y, _insets.left - 5, height), false, 40, false);
}
if (_insets.bottom >= SHADOW_SIZE) {
g.setColor(XertoUtils.getFrameBorderColor());
g.drawRect(x, y, width, height - _insets.bottom);
g.setColor(_highlight);
g.drawLine(x, y + height - _insets.bottom + 1, x + width, y + height - _insets.bottom + 1);
g.drawLine(x, y + height - _insets.bottom + 2, x + width, y + height - _insets.bottom + 2);
g.setColor(_shadow);
g.drawLine(x, y + height - _insets.bottom + 3, x + width, y + height - _insets.bottom + 3);
g.setColor(_darkShadow);
g.drawLine(x, y + height - _insets.bottom + 4, x + width, y + height - _insets.bottom + 4);
paintGradient(g, new Rectangle(x, y + height - _insets.bottom + 4, width, _insets.bottom - 5), true, 100, true);
}
if (_insets.right >= SHADOW_SIZE) {
g.setColor(XertoUtils.getFrameBorderColor());
g.drawRect(x, y, width - _insets.right, height);
g.setColor(_highlight);
g.drawLine(x + width - _insets.right + 1, y, x + width - _insets.right + 1, y + height);
g.drawLine(x + width - _insets.right + 2, y, x + width - _insets.right + 2, y + height);
g.setColor(_shadow);
g.drawLine(x + width - _insets.right + 3, y, x + width - _insets.right + 3, y + height);
g.setColor(_darkShadow);
g.drawLine(x + width - _insets.right + 4, y, x + width - _insets.right + 4, y + height);
paintGradient(g, new Rectangle(x + width - _insets.right + 4, y, _insets.right - 5, height), false, 100, true);
}
}
public static void paintGradient(Graphics g, Rectangle rect, boolean isVertical, int darkness, boolean lighter) {
if (isVertical) {
for (int i = 1; i < rect.height; i++) {
int iAlpha = (int) ((1 - Math.log(i) / LOG10) * darkness);
g.setColor(new Color(0, 0, 0, iAlpha));
if (lighter) {
g.drawLine(rect.x, rect.y + i, rect.x + rect.width, rect.y + i);
}
else {
g.drawLine(rect.x, rect.y + rect.height - i, rect.x + rect.width, rect.y + rect.height - i);
}
}
}
else {
for (int i = 1; i < rect.width; i++) {
int iAlpha = (int) ((1 - Math.log(i) / LOG10) * darkness);
g.setColor(new Color(0, 0, 0, iAlpha));
if (lighter) {
g.drawLine(rect.x + i, rect.y, rect.x + i, rect.y + rect.height);
}
else {
g.drawLine(rect.x + rect.width - i, rect.y, rect.x + rect.width - i, rect.y + rect.height);
}
}
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy