/**
* @(#)PaletteTextComponentBorder.java
*
* Copyright (c) 2008 The authors and contributors of JHotDraw.
* You may not use, copy or modify this file, except in compliance with the
* accompanying license terms.
*/
package org.jhotdraw.gui.plaf.palette;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.LinearGradientPaint;
import java.awt.MultipleGradientPaint;
import java.awt.geom.Point2D;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.plaf.UIResource;
/**
* PaletteTextComponentBorder.
*
* @author Werner Randelshofer
* @version $Id$
*/
public class PaletteTextComponentBorder implements Border, UIResource {
private static final float[] enabledStops = new float[]{0f, 0.2f};
private static final Color[] enabledStopColors = new Color[]{new Color(0xc8c8c8), new Color(0xffffff)};
@Override
public void paintBorder(Component c, Graphics gr, int x, int y, int width, int height) {
Graphics2D g = (Graphics2D) gr;
int borderColor;
float[] stops;
Color[] stopColors;
if (!c.isEnabled()) {
borderColor = 0x80a5a5a5;
stops = enabledStops;
stopColors = enabledStopColors;
} else {
borderColor = 0xffa5a5a5;
stops = enabledStops;
stopColors = enabledStopColors;
}
String segmentPosition = getSegmentPosition(c);
if (segmentPosition == "first" || segmentPosition == "middle") {
width += 1;
}
g.setColor(new Color(borderColor, true));
g.drawRect(x, y, width - 1, height - 1);
LinearGradientPaint lgp = new LinearGradientPaint(
new Point2D.Float(x, y), new Point2D.Float(x, y + height - 1),
stops, stopColors,
MultipleGradientPaint.CycleMethod.REPEAT);
g.setPaint(lgp);
g.fillRect(x + 1, y + 1, width - 2, height - 2);
}
private String getSegmentPosition(Component c) {
String segmentPosition = null;
if (c instanceof JComponent) {
segmentPosition = (String) ((JComponent) c).getClientProperty("Palette.Component.segmentPosition");
}
return (segmentPosition == null) ? "only" : segmentPosition;
}
@Override
public Insets getBorderInsets(Component c) {
Insets insets;
String segmentPosition = getSegmentPosition(c);
if (segmentPosition == "first" ||
segmentPosition == "middle") {
insets = new Insets(3, 3, 3, 2);
} else {
insets = new Insets(3, 3, 3, 3);
}
return insets;
}
@Override
public boolean isBorderOpaque() {
return true;
}
}