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

org.jdesktop.swingx.demos.highlighter.RolloverIconHighlighter Maven / Gradle / Ivy

package org.jdesktop.swingx.demos.highlighter;

import java.awt.Component;
import java.awt.Dimension;
import java.awt.image.BufferedImage;
import java.util.logging.Logger;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.Painter;

import org.jdesktop.swingx.decorator.ComponentAdapter;
import org.jdesktop.swingx.decorator.HighlightPredicate;
import org.jdesktop.swingx.decorator.IconHighlighter;
import org.jdesktop.swingx.icon.PainterIcon;
import org.jdesktop.swingx.icon.RadianceIcon;
import org.jdesktop.swingx.painter.AbstractAreaPainter;
import org.jdesktop.swingx.painter.ImagePainter;
import org.jdesktop.swingx.renderer.IconValue;
import org.jdesktop.swingx.renderer.WrappingIconPanel;

import com.jhlabs.image.InvertFilter;

/* Filter:
import com.jhlabs.image.BumpFilter;
import com.jhlabs.image.DiffuseFilter;
import com.jhlabs.image.EmbossFilter;
import com.jhlabs.image.EqualizeFilter;
import com.jhlabs.image.FlareFilter;
import com.jhlabs.image.InvertFilter;
import com.jhlabs.image.LensBlurFilter;
import com.jhlabs.image.MarbleFilter;
import com.jhlabs.image.PointillizeFilter;
import com.jhlabs.image.SmearFilter;
import com.jhlabs.image.SparkleFilter;

 */
public class RolloverIconHighlighter extends IconHighlighter {

	private static final Logger LOG = Logger.getLogger(RolloverIconHighlighter.class.getName());
	IconValue iconValue;

    public RolloverIconHighlighter() {
        this((HighlightPredicate) null);
    }
    public RolloverIconHighlighter(HighlightPredicate predicate) {
        this(predicate, null);
    }
    public RolloverIconHighlighter(IconValue iv) {
        this(null, iv);
    }
    public RolloverIconHighlighter(HighlightPredicate predicate, IconValue iv) {
        super(predicate);
//        setIcon(icon);
        this.iconValue = iv;
    }

    @Override
    protected boolean canHighlight(Component component, ComponentAdapter adapter) {
        return component instanceof WrappingIconPanel;
    }

    @Override
    protected Component doHighlight(Component component, ComponentAdapter adapter) {
    	if(component instanceof WrappingIconPanel wip) {
    		Icon icon = iconValue==null ? wip.getIcon() : iconValue.getIcon(adapter.getValue());
    		LOG.fine("icon:"+icon);
    		PainterIcon painterIcon = new PainterIcon(new Dimension(icon.getIconWidth(), icon.getIconHeight()));
        	BufferedImage image = null;
        	if(icon instanceof RadianceIcon ri) {
        		image = ri.toImage(1);
        	} else if(icon instanceof ImageIcon ii) {
        		image = (BufferedImage)ii.getImage();
        	} else {
/*        		WARNUNG: no highlighting for org.jdesktop.swingx.icon.PainterIcon@592c127c
//        		WARNUNG: no highlighting for javax.swing.plaf.nimbus.NimbusIcon@2e76ae70
   passiert bei XTreeDemo mit Nimbus,
   weil dort für die nimbus icons directoryIcon verwendet werden

 */       		
        		LOG.warning("no highlighting for "+icon);
        	}
        	AbstractAreaPainter delegate = new ImagePainter(image);
        	delegate.setFilters(new InvertFilter());
        	painterIcon.setPainter((Painter)delegate);
        	wip.setIcon(painterIcon);
        	return wip;
    	}
        return super.doHighlight(component, adapter);
//    	in super:
//        if (getIcon() != null) {
//            if (component instanceof IconAware) {
//                ((IconAware) component).setIcon(getIcon());
//            } else if (component instanceof JLabel) {
//                ((JLabel) component).setIcon(getIcon());
//            }
//        }
//        return component;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy