001 /*
002 * Copyright (c) 2003 JGoodies Karsten Lentzsch. All Rights Reserved.
003 *
004 * Redistribution and use in source and binary forms, with or without
005 * modification, are permitted provided that the following conditions are met:
006 *
007 * o Redistributions of source code must retain the above copyright notice, this
008 * list of conditions and the following disclaimer.
009 *
010 * o Redistributions in binary form must reproduce the above copyright notice,
011 * this list of conditions and the following disclaimer in the documentation
012 * and/or other materials provided with the distribution.
013 *
014 * o Neither the name of JGoodies Karsten Lentzsch nor the names of its
015 * contributors may be used to endorse or promote products derived from this
016 * software without specific prior written permission.
017 *
018 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
020 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
021 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
022 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
023 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
024 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
025 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
026 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
027 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
028 * POSSIBILITY OF SUCH DAMAGE.
029 */
030 package org.springframework.richclient.components;
031
032 import java.awt.Color;
033 import java.awt.Component;
034 import java.awt.Graphics;
035 import java.awt.Insets;
036
037 import javax.swing.UIManager;
038 import javax.swing.border.AbstractBorder;
039
040 public class ShadowBorder extends AbstractBorder {
041
042 private static final Insets INSETS = new Insets(1, 1, 3, 3);
043
044 public Insets getBorderInsets(Component c) {
045 return INSETS;
046 }
047
048 public void paintBorder(Component c, Graphics g, int x, int y, int w, int h) {
049
050 Color shadow = UIManager.getColor("controlShadow");
051 if (shadow == null) {
052 shadow = Color.GRAY;
053 }
054 Color lightShadow = new Color(shadow.getRed(), shadow.getGreen(), shadow.getBlue(), 170);
055 Color lighterShadow = new Color(shadow.getRed(), shadow.getGreen(), shadow.getBlue(), 70);
056 g.translate(x, y);
057
058 g.setColor(shadow);
059 g.fillRect(0, 0, w - 3, 1);
060 g.fillRect(0, 0, 1, h - 3);
061 g.fillRect(w - 3, 1, 1, h - 3);
062 g.fillRect(1, h - 3, w - 3, 1);
063 // Shadow line 1
064 g.setColor(lightShadow);
065 g.fillRect(w - 3, 0, 1, 1);
066 g.fillRect(0, h - 3, 1, 1);
067 g.fillRect(w - 2, 1, 1, h - 3);
068 g.fillRect(1, h - 2, w - 3, 1);
069 // Shadow line2
070 g.setColor(lighterShadow);
071 g.fillRect(w - 2, 0, 1, 1);
072 g.fillRect(0, h - 2, 1, 1);
073 g.fillRect(w - 2, h - 2, 1, 1);
074 g.fillRect(w - 1, 1, 1, h - 2);
075 g.fillRect(1, h - 1, w - 2, 1);
076 g.translate(-x, -y);
077 }
078 }