Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* (C) Copyright 2005 Nilo J. Gonzalez
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser Gereral Public Licence as published by the Free
* Software Foundation; either version 2 of the Licence, or (at your opinion) any
* later version.
*
* This library is distributed in the hope that it will be usefull, but WITHOUT ANY
* WARRANTY; without even the implied warranty of merchantability or fitness for a
* particular purpose. See the GNU Lesser General Public Licence for more details.
*
* You should have received a copy of the GNU Lesser General Public Licence along
* with this library; if not, write to the Free Software Foundation, Inc., 59
* Temple Place, Suite 330, Boston, Ma 02111-1307 USA.
*
* http://www.gnu.org/licenses/lgpl.html (English)
* http://gugs.sindominio.net/gnu-gpl/lgpl-es.html (Espa?ol)
*
*
* Original author: Nilo J. Gonzalez
*/
package com.nilo.plaf.nimrod;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.*;
import java.util.Properties;
import javax.swing.*;
import javax.swing.plaf.ColorUIResource;
class NimRODUtils {
protected static Color rollColor;
static final int THIN = 0;
static final int FAT = 1;
static final int MATRIX_FAT = 5; // Esto define el grosor de la sombra de los titulos
static Kernel kernelFat;
static final int MATRIX_THIN = 3; // Esto define el grosor de la sombra de los menus
static Kernel kernelThin;
//static Color brillo = new Color( 255,255,255, 64);
//static Color sombra = new Color( 20,20,20, 50);
static Color getSombra() {
return getColorAlfa( getColorTercio( NimRODLookAndFeel.getControlDarkShadow(), Color.black),
64);
}
static Color getBrillo() {
return getColorAlfa( getColorTercio( NimRODLookAndFeel.getControlHighlight(), Color.white),
64);
}
static Color getSombraMenu() {
return new Color( 20,20,20, 50);
}
static Color getBrilloMenu() {
return new Color( 255,255,255, 64);
}
static NimRODTheme iniCustomColors( NimRODTheme nt, Properties props) {
String p1, p2, p3, s1, s2, s3, selection, background, w, b, opMenu, opFrame;
selection = props.getProperty( "nimrodlf.selection");
background = props.getProperty( "nimrodlf.background");
p1 = props.getProperty( "nimrodlf.p1");
p2 = props.getProperty( "nimrodlf.p2");
p3 = props.getProperty( "nimrodlf.p3");
s1 = props.getProperty( "nimrodlf.s1");
s2 = props.getProperty( "nimrodlf.s2");
s3 = props.getProperty( "nimrodlf.s3");
w = props.getProperty( "nimrodlf.w");
b = props.getProperty( "nimrodlf.b");
opMenu = props.getProperty( "nimrodlf.menuOpacity");
opFrame = props.getProperty( "nimrodlf.frameOpacity");
return iniCustomColors( nt, selection, background, p1, p2, p3, s1, s2, s3, w, b, opMenu, opFrame);
}
/**
* Esta funcion se usa para inicializar los colores del tema segun los argumentos que se le pasen.
*/
static NimRODTheme iniCustomColors( NimRODTheme nt, String selection, String background,
String p1, String p2, String p3,
String s1, String s2, String s3,
String w, String b, String opMenu, String opFrame) {
if ( selection != null ) {
nt.setPrimary( Color.decode( selection));
}
if ( background != null ) {
nt.setSecondary( Color.decode( background));
}
if ( p1 != null ) { nt.setPrimary1( Color.decode( p1)); }
if ( p2 != null ) { nt.setPrimary2( Color.decode( p2)); }
if ( p3 != null ) { nt.setPrimary3( Color.decode( p3)); }
if ( s1 != null ) { nt.setSecondary1( Color.decode( s1)); }
if ( s2 != null ) { nt.setSecondary2( Color.decode( s2)); }
if ( s3 != null ) { nt.setSecondary3( Color.decode( s3)); }
if ( w != null ) { nt.setWhite( Color.decode( w)); }
if ( b != null ) { nt.setBlack( Color.decode( b)); }
if ( opMenu != null) { nt.setMenuOpacity( Integer.parseInt( opMenu)); }
if ( opFrame != null) { nt.setFrameOpacity( Integer.parseInt( opFrame)); }
return nt;
}
static ImageIcon loadRes( String fich) {
try {
return new ImageIcon( Toolkit.getDefaultToolkit().createImage( readStream( NimRODLookAndFeel.class.getResourceAsStream( fich))));
}
catch ( Exception ex) {
ex.printStackTrace();
System.out.println( "No se puede cargar el recurso " + fich);
return null;
}
}
static byte[] readStream( InputStream input) throws IOException {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
int read;
byte[] buffer = new byte[256];
while ( (read = input.read( buffer, 0, 256)) != -1 ) {
bytes.write( buffer, 0, read);
}
return bytes.toByteArray();
}
/**
* Esta funcion se usa para pintar la barra de seleccion de los menus. Esta aqui
* para no repetirla en todas partes...
*/
static void pintaBarraMenu( Graphics g, JMenuItem menuItem, Color bgColor) {
ButtonModel model = menuItem.getModel();
Color oldColor = g.getColor();
int menuWidth = menuItem.getWidth();
int menuHeight = menuItem.getHeight();
if ( menuItem.isOpaque() ) {
g.setColor( menuItem.getBackground());
g.fillRect( 0,0, menuWidth, menuHeight);
}
if ( (menuItem instanceof JMenu && !(((JMenu)menuItem).isTopLevelMenu()) && model.isSelected())
||
model.isArmed() ) {
RoundRectangle2D.Float boton = new RoundRectangle2D.Float();
boton.x = 1;
boton.y = 0;
boton.width = menuWidth - 3;
boton.height = menuHeight - 1;
boton.arcwidth = 8;
boton.archeight = 8;
GradientPaint grad = new GradientPaint( 1,1, getBrilloMenu(),
0,menuHeight, getSombraMenu());
Graphics2D g2D = (Graphics2D)g;
g2D.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setColor( bgColor);
g2D.fill( boton);
g.setColor( bgColor.darker());
g2D.draw( boton);
g2D.setPaint( grad);
g2D.fill( boton);
g2D.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_DEFAULT);
}
g.setColor( oldColor);
}
static void paintFocus( Graphics g, int x, int y, int width, int height, int r1, int r2, Color color) {
paintFocus( g, x, y, width, height, r1, r2, 2.0f, color);
}
static void paintFocus( Graphics g, int x, int y, int width, int height, int r1, int r2, float grosor, Color color) {
Graphics2D g2d = (Graphics2D)g;
g2d.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
Stroke oldStroke = g2d.getStroke();
g2d.setColor( color);
g2d.setStroke( new BasicStroke( grosor));
if ( r1 == 0 && r2 == 0 ) {
g.drawRect( x, y, width, height);
}
else {
g.drawRoundRect( x,y, width-1,height-1, r1,r2);
}
g2d.setStroke( oldStroke);
g2d.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_DEFAULT);
}
static Color getRolloverColor() {
if ( rollColor == null ) {
rollColor = getColorAlfa( UIManager.getColor( "Button.focus"), 40);
}
return rollColor;
}
static Color getColorAlfa( Color col, int alfa) {
return new Color( col.getRed(), col.getGreen(), col.getBlue(), alfa);
}
static Color getColorMedio( Color a, Color b) {
return new Color( propInt( a.getRed(), b.getRed(), 2),
propInt( a.getGreen(), b.getGreen(), 2),
propInt( a.getBlue(), b.getBlue(), 2));
}
static ColorUIResource getColorTercio( Color a, Color b) {
return new ColorUIResource( propInt( a.getRed(), b.getRed(), 3),
propInt( a.getGreen(), b.getGreen(), 3),
propInt( a.getBlue(), b.getBlue(), 3));
}
private static int propInt( int a, int b, int prop) {
return b + ((a-b) / prop);
}
static void paintShadowTitleFat( Graphics g, String title, int x, int y, Color frente) {
paintShadowTitle( g, title, x, y, frente, Color.black, 1, FAT, SwingConstants.HORIZONTAL);
}
static void paintShadowTitleFat( Graphics g, String title, int x, int y, Color frente, Color shadow) {
paintShadowTitle( g, title, x, y, frente, shadow, 1, FAT, SwingConstants.HORIZONTAL);
}
static void paintShadowTitleFat( Graphics g, String title, int x, int y, Color frente, Color shadow, int desp) {
paintShadowTitle( g, title, x, y, frente, shadow, desp, FAT, SwingConstants.HORIZONTAL);
}
static void paintShadowTitleThin( Graphics g, String title, int x, int y, Color frente) {
paintShadowTitle( g, title, x, y, frente, Color.black, 1, THIN, SwingConstants.HORIZONTAL);
}
static void paintShadowTitleThin( Graphics g, String title, int x, int y, Color frente, Color shadow) {
paintShadowTitle( g, title, x, y, frente, shadow, 1, THIN, SwingConstants.HORIZONTAL);
}
static void paintShadowTitleThin( Graphics g, String title, int x, int y, Color frente, Color shadow, int desp) {
paintShadowTitle( g, title, x, y, frente, shadow, desp, THIN, SwingConstants.HORIZONTAL);
}
static void paintShadowTitleFatV( Graphics g, String title, int x, int y, Color frente) {
paintShadowTitle( g, title, x, y, frente, Color.black, 1, FAT, SwingConstants.VERTICAL);
}
static void paintShadowTitleFatV( Graphics g, String title, int x, int y, Color frente, Color shadow) {
paintShadowTitle( g, title, x, y, frente, shadow, 1, FAT, SwingConstants.VERTICAL);
}
static void paintShadowTitleFatV( Graphics g, String title, int x, int y, Color frente, Color shadow, int desp) {
paintShadowTitle( g, title, x, y, frente, shadow, desp, FAT, SwingConstants.VERTICAL);
}
static void paintShadowTitleThinV( Graphics g, String title, int x, int y, Color frente) {
paintShadowTitle( g, title, x, y, frente, Color.black, 1, THIN, SwingConstants.VERTICAL);
}
static void paintShadowTitleThinV( Graphics g, String title, int x, int y, Color frente, Color shadow) {
paintShadowTitle( g, title, x, y, frente, shadow, 1, THIN, SwingConstants.VERTICAL);
}
static void paintShadowTitleThinV( Graphics g, String title, int x, int y, Color frente, Color shadow, int desp) {
paintShadowTitle( g, title, x, y, frente, shadow, desp, THIN, SwingConstants.VERTICAL);
}
static void paintShadowTitle( Graphics g, String title,
int x, int y, Color frente, Color shadow,
int desp, int tipo, int orientation) {
// Si hay que rotar la fuente, se rota
Font f = g.getFont();
if ( orientation == SwingConstants.VERTICAL ) {
AffineTransform rotate = AffineTransform.getRotateInstance( Math.PI / 2);
f = f.deriveFont( rotate);
}
// Si hay que pintar sombra, se hacen un monton de cosas
if ( shadow != null ) {
int matrix = ( tipo == THIN ? MATRIX_THIN : MATRIX_FAT);
Rectangle2D rect = g.getFontMetrics().getStringBounds( title, g);
int w, h;
if ( orientation == SwingConstants.HORIZONTAL ) {
w = (int)rect.getWidth() + 6*matrix; // Hay que dejar espacio para las sombras y el borde
h = (int)rect.getHeight() + 6*matrix; // que ConvolveOp ignora por el EDGE_NO_OP
}
else {
h = (int)rect.getWidth() + 6*matrix; // Hay que dejar espacio para las sombras y el borde
w = (int)rect.getHeight() + 6*matrix; // que ConvolveOp ignora por el EDGE_NO_OP
}
// La sombra del titulo
BufferedImage iTitulo = new BufferedImage( w,h, BufferedImage.TYPE_INT_ARGB);
BufferedImage iSombra = new BufferedImage( w,h, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2 = iTitulo.createGraphics();
g2.setRenderingHint( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
g2.setFont( f);
g2.setColor( shadow);
g2.drawString( title, 3*matrix, 3*matrix); // La pintamos en el centro
ConvolveOp cop = new ConvolveOp( ( tipo == THIN ? kernelThin : kernelFat), ConvolveOp.EDGE_NO_OP, null);
cop.filter( iTitulo, iSombra); // A ditorsionar
// Por fin, pintamos el jodio titulo
g.drawImage( iSombra,
x - 3*matrix + desp, // Lo llevamos a la posicion original y le sumamos 1
y - 3*matrix + desp, // para que la sombra quede pelin desplazada
null);
}
// Si hay que pintar el frente, se pinta
if ( frente != null ) {
g.setFont( f);
g.setColor( frente);
g.drawString( title, x, y);
}
}
static Icon reescala( Icon ic, int maxW, int maxH) {
if ( ic == null ) {
return null;
}
if ( ic.getIconHeight() == maxH && ic.getIconWidth() == maxW ) {
return ic;
}
BufferedImage bi = new BufferedImage( ic.getIconHeight(), ic.getIconWidth(), BufferedImage.TYPE_INT_ARGB);
Graphics g = bi.createGraphics();
ic.paintIcon( null, g, 0, 0);
g.dispose();
Image bf = bi.getScaledInstance( maxW, maxH, Image.SCALE_SMOOTH);
return new ImageIcon( bf);
}
static int getOpacity() {
return getMenuOpacity();
}
static int getMenuOpacity() {
try {
NimRODTheme th = (NimRODTheme)NimRODLookAndFeel.theme;
return th.getMenuOpacity();
}
catch ( Throwable ex) {
return NimRODTheme.DEFAULT_MENU_OPACITY;
}
}
static float getMenuOpacityFloat() {
return getMenuOpacity() / 255f;
}
static int getFrameOpacity() {
try {
NimRODTheme th = (NimRODTheme)NimRODLookAndFeel.theme;
return th.getFrameOpacity();
}
catch ( Throwable ex) {
return NimRODTheme.DEFAULT_FRAME_OPACITY;
}
}
static float getFrameOpacityFloat() {
return getFrameOpacity() / 255f;
}
}