All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.nilo.plaf.nimrod.NimRODButtonUI Maven / Gradle / Ivy

Go to download

NimROD Look and Feel is an extension of the Metal Look and Feel, so it should be a portable look and feel. This POM was contributed by Rob Manning and can be used to build this laf from the original source code if the source code is structured according to Maven conventions.

The newest version!
/*
 *                 (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
 */

/**
 * Esta clase implementa los botones.
 * @author Nilo J. Gonzalez
 */
 
package com.nilo.plaf.nimrod;

import java.awt.*;
import java.awt.geom.*;
import java.awt.event.*;

import java.beans.*;

import javax.swing.*;
import javax.swing.plaf.*;
import javax.swing.plaf.metal.*;
import javax.swing.event.*;

public class NimRODButtonUI extends MetalButtonUI {
  protected MiListener miml;
  //static private NimRODButtonUI ui;
  
  protected boolean oldOpaque;

	public static ComponentUI createUI( JComponent c) {
    return new NimRODButtonUI();
    /*if ( ui == null ) {
      ui = new NimRODButtonUI();
    }
    
    return ui;
    */
  }
	
  public void installDefaults( AbstractButton button) {
    super.installDefaults( button);

    button.setBorder( NimRODBorders.getButtonBorder());
    
    selectColor = NimRODLookAndFeel.getFocusColor();
  }
  
  public void unsinstallDefaults( AbstractButton button) {
    super.uninstallDefaults( button);
    
    button.setBorder( MetalBorders.getButtonBorder());
  }
  
  public void installListeners( AbstractButton b) {
    super.installListeners( b);
    
    miml = new MiListener( b);
    b.addMouseListener( miml);
    b.addPropertyChangeListener( miml);
    b.addFocusListener( miml);
  }
  
  protected void uninstallListeners( AbstractButton b) {
    b.removeMouseListener( miml);
    b.removePropertyChangeListener( miml);
    b.removeFocusListener( miml);
  }
  
  protected void paintButtonPressed( Graphics g, AbstractButton b) {
    if ( !oldOpaque ) {
      return;
    }
    
  	if ( b.isContentAreaFilled() ) {
      Graphics2D g2D = (Graphics2D)g;
      g2D.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      g2D.setColor( NimRODUtils.getColorAlfa( selectColor, 100));
      RoundRectangle2D.Float boton = hazBoton( b);
      g2D.fill( boton);
      g2D.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_DEFAULT);
	  }
	}

	protected void paintFocus( Graphics g, AbstractButton b,
														 Rectangle viewRect, Rectangle textRect, Rectangle iconRect) {
    if ( !b.isFocusPainted() || !oldOpaque ) {
      return;
    }
    if ( b.getParent() instanceof JToolBar ) {
      return;  // No se pinta el foco cuando estamos en una barra
    }
    
    NimRODUtils.paintFocus( g, 3,3, b.getWidth()-6, b.getHeight()-6, 2, 2, NimRODLookAndFeel.getFocusColor());
  }
  
  public void update( Graphics g, JComponent c) {
    oldOpaque = c.isOpaque();
    
    if ( c.getParent() instanceof JToolBar ) {
      super.update( g,c);
    }
    else {
      c.setOpaque( false);
      super.update( g,c);
      c.setOpaque( oldOpaque);
    }
  }
  
  public void paint( Graphics g, JComponent c) {  
    ButtonModel mod = ((AbstractButton)c).getModel();
    
    if ( oldOpaque ) {
      Graphics2D g2D = (Graphics2D)g;
      g2D.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      
      RoundRectangle2D.Float boton = hazBoton( c);
      
      // This line is a fix from Ross Judson
      g2D.clip( boton);
      
      g2D.setColor( NimRODLookAndFeel.getControl());
      g2D.fill( boton);
      
      if ( c.getParent() instanceof JToolBar ) {
        if ( mod.isRollover() || mod.isPressed() || mod.isSelected()) {
          c.setBorder( NimRODBorders.getGenBorder());
        }
        else {
          c.setBorder( NimRODBorders.getEmptyGenBorder());
        }
        
        if ( mod.isPressed() || mod.isSelected() ) {
          g2D.setColor( NimRODLookAndFeel.getFocusColor());
          g2D.fill( boton);
        }
      }
      else {
        GradientPaint grad = null;
        
        if ( mod.isPressed() || mod.isSelected() ) {
        	grad = new GradientPaint( 0,0, NimRODUtils.getSombra(), 
                                    0,c.getHeight(), NimRODUtils.getBrillo());
    		}
    		else {
        	grad = new GradientPaint( 0,0, NimRODUtils.getBrillo(), 
                                    0,c.getHeight(), NimRODUtils.getSombra());
    		}
    		
    		g2D.setPaint( grad);
        g2D.fill( boton);
        
        if ( mod.isRollover() ) {
          g2D.setColor( NimRODUtils.getRolloverColor());
          g2D.fill( boton);
        }
      }
      
      g2D.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_DEFAULT);
    }

    super.paint( g, c);
  }
  
  private RoundRectangle2D.Float hazBoton( JComponent c) {
    RoundRectangle2D.Float boton = new RoundRectangle2D.Float(); 
    boton.x = 0;
    boton.y = 0;
    boton.width = c.getWidth();
    boton.height = c.getHeight();
    boton.arcwidth = 8;
    boton.archeight = 8;
    
    return boton;
  }
  
  /////////////////////////////////////
  
  public class MiListener extends MouseInputAdapter implements PropertyChangeListener, FocusListener {
    private AbstractButton papi;
    
    MiListener( AbstractButton b) {
      papi = b;
    }
    
    public void refresh() {
      if ( papi != null && papi.getParent() != null ) {
        papi.getParent().repaint( papi.getX()-5, papi.getY()-5, 
                                  papi.getWidth()+10, papi.getHeight()+10);
      }
    }
    
    public void mouseEntered( MouseEvent e) {
      papi.getModel().setRollover( true);
      refresh();
    }

    public void mouseExited( MouseEvent e) {
      papi.getModel().setRollover( false);
      refresh();
    }
    
    public void mousePressed(MouseEvent e) {
      papi.getModel().setRollover( false);
      refresh();
    }

    public void mouseReleased(MouseEvent e) {
      papi.getModel().setRollover( false);
      refresh();
    }

    public void propertyChange( PropertyChangeEvent evt) {
      if ( evt.getPropertyName().equals( "enabled") ) {
        refresh();
      }
    }

    public void focusGained( FocusEvent e) {
      refresh();
    }

    public void focusLost( FocusEvent e) {
      refresh();
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy