|
What this is
Other links
The source code/* ** AWT Widget Package. ** Copyright (c) 1997 by Timothy Gerard Endres ** ** This program is free software. ** ** You may redistribute it and/or modify it under the terms of the GNU ** General Public License as published by the Free Software Foundation. ** Version 2 of the license should be included with this distribution in ** the file LICENSE, as well as License.html. If the license is not ** included with this distribution, you may find a copy at the FSF web ** site at 'www.gnu.org' or 'www.fsf.org', or you may write to the ** Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139 USA. ** ** THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY OF ANY KIND, ** NOT EVEN THE IMPLIED WARRANTY OF MERCHANTABILITY. THE AUTHOR ** OF THIS SOFTWARE, ASSUMES _NO_ RESPONSIBILITY FOR ANY ** CONSEQUENCE RESULTING FROM THE USE, MODIFICATION, OR ** REDISTRIBUTION OF THIS SOFTWARE. ** */ package com.ice.widget; import java.awt.*; public class BorderPanel extends Panel { static public final int NONE = 0; static public final int FLAT = 1; static public final int RIDGE = 2; static public final int GROOVE = 3; static public final int RAISED = 4; static public final int SUNKEN = 5; protected int insetWidth; protected int marginWidth; protected int borderWidth; protected int borderStyle; protected double darkFactor; protected double liteFactor; public BorderPanel( int inset, int border, int margin, int style ) { super(); // Sanity switch ( this.borderStyle ) { case BorderPanel.RIDGE: case BorderPanel.GROOVE: case BorderPanel.RAISED: case BorderPanel.SUNKEN: if ( (border & 1) != 0 ) border++; if ( border < 2 ) border = 2; break; case BorderPanel.FLAT: break; case BorderPanel.NONE: break; } if ( border >= inset ) { margin = 0; border = inset; } else if ( border + margin >= inset ) { margin = inset - border; } this.insetWidth = inset; this.marginWidth = margin; this.borderWidth = border; this.borderStyle = style; this.darkFactor = 0.70; // larger multiplier makes lighter this.liteFactor = 0.82; // larger multiplier makes lighter } public Insets getInsets() { Insets peer = super.getInsets(); Insets result = new Insets( peer.top + this.insetWidth, peer.left + this.insetWidth, peer.bottom + this.insetWidth, peer.right + this.insetWidth ); return result; } public double getDarkFactor() { return this.darkFactor; } public void setDarkFactor( double factor ) { this.darkFactor = factor; // larger multiplier makes lighter } public double getLiteFactor() { return this.liteFactor; } public void setLiteFactor( double factor ) { this.liteFactor = factor; // larger multiplier makes lighter } public void update( Graphics updateG ) { this.paint( updateG ); } public void paint( Graphics g ) { super.paint( g ); Dimension sz = this.getSize(); Insets insets = super.getInsets(); // The origin and dimensions of our frame's area // (which is inside the panel's insets. int xorigin = insets.left; int yorigin = insets.top; int width = sz.width - (insets.left + insets.right); int height = sz.height - (insets.top + insets.bottom); g.setClip( xorigin, yorigin, width, height ); switch ( this.borderStyle ) { case BorderPanel.RIDGE: this.drawRidgeBorder ( g, xorigin, yorigin, width, height ); break; case BorderPanel.GROOVE: this.drawGrooveBorder ( g, xorigin, yorigin, width, height ); break; case BorderPanel.RAISED: this.drawRaisedBorder ( g, xorigin, yorigin, width, height ); break; case BorderPanel.SUNKEN: this.drawSunkenBorder ( g, xorigin, yorigin, width, height ); break; case BorderPanel.FLAT: this.drawFlatBorder ( g, xorigin, yorigin, width, height ); break; } } protected void drawRidgeBorder( Graphics g, int xorigin, int yorigin, int width, int height ) { Color bgColor = this.getBackground(); Color liteColor = this.lighten( bgColor ); Color darkColor = this.darken( bgColor ); int inside = this.insetWidth - ( this.borderWidth + this.marginWidth ); int bX = xorigin + inside; int bY = yorigin + inside; int bW = width - (2 * inside); int bH = height - (2 * inside); if ( this.borderWidth == 2 ) { g.setColor( liteColor ); g.drawLine( bX, bY, (bX + (bW - 1)), bY ); // top g.drawLine( bX, bY, bX, (bY + (bH - 1)) ); // left g.drawLine( (bX + (bW - 2)), (bY + 1), (bX + (bW - 2)), (bY + (bH - 2)) ); // right g.drawLine( (bX + 1), (bY + (bH - 2)), (bX + (bW - 2)), (bY + (bH - 2)) ); // bottom g.setColor( darkColor ); g.drawLine( (bX + 1), (bY + 1), (bX + (bW - 2)), (bY + 1) ); // top g.drawLine( (bX + 1), (bY + 1), (bX + 1), (bY + (bH - 2)) ); // left g.drawLine( (bX + (bW - 1)), (bY + 1), (bX + (bW - 1)), (bY + (bH - 2)) ); // right g.drawLine( (bX + 1), (bY + (bH - 1)), (bX + (bW - 2)), (bY + (bH - 1)) ); // bottom } else { } } protected void drawGrooveBorder( Graphics g, int xorigin, int yorigin, int width, int height ) { } protected void drawRaisedBorder( Graphics g, int xorigin, int yorigin, int width, int height ) { } protected void drawSunkenBorder( Graphics g, int xorigin, int yorigin, int width, int height ) { } protected void drawFlatBorder( Graphics g, int xorigin, int yorigin, int width, int height ) { Color saveColor = g.getColor(); g.setColor( Color.black ); if ( this.borderWidth == 1 ) { g.drawRect( 0, 0, width - 1, height - 1 ); } else { g.fillRect( 0, 0, width - 1, this.borderWidth - 1 ); // top g.fillRect( width - (this.borderWidth + 1), 0, this.borderWidth - 1, height - 1 ); // right g.fillRect( 0, (height - this.borderWidth), width - 1, this.borderWidth - 1 ); // bottom g.fillRect( 0, 0, this.borderWidth - 1, height - 1 ); // left } } protected Color darken( Color color ) { int newval; double minFactor, factor; minFactor = 1.0; int red = color.getRed(); int green = color.getGreen(); int blue = color.getBlue(); factor = ((double)red / 255.0); if ( factor < minFactor ) minFactor = factor; factor = ((double)green / 255.0); if ( factor < minFactor ) minFactor = factor; factor = ((double)blue / 255.0); if ( factor < minFactor ) minFactor = factor; factor = minFactor * this.darkFactor; newval = (int)((double)red * factor); red = Math.max( newval, 0 ); newval = (int)((double)green * factor); green = Math.max( newval, 0 ); newval = (int)((double)blue * factor); blue = Math.max( newval, 0 ); return new Color( red, green, blue ); } protected Color lighten( Color color ) { int newval; double maxFactor, factor; maxFactor = 0.0; int red = color.getRed(); int green = color.getGreen(); int blue = color.getBlue(); factor = ((double)red / 255.0); if ( factor > maxFactor ) maxFactor = factor; factor = ((double)green / 255.0); if ( factor > maxFactor ) maxFactor = factor; factor = ((double)blue / 255.0); if ( factor > maxFactor ) maxFactor = factor; if ( maxFactor > this.liteFactor ) maxFactor = this.liteFactor; factor = (1.0 / maxFactor); newval = (int)((double)red * factor); red = Math.min( newval, 255 ); newval = (int)((double)green * factor); green = Math.min( newval, 255 ); newval = (int)((double)blue * factor); blue = Math.min( newval, 255 ); return new Color( red, green, blue ); } } |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.