/* Copyright (c) 2010 The Regents of the University of California. All rights reserved. Permission is hereby granted, without written agreement and without license or royalty fees, to use, copy, modify, and distribute this software and its documentation for any purpose, provided that the above copyright notice and the following two paragraphs appear in all copies of this software. IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.. */ package org.clothocore.widget.dashboard2.gui; import java.awt.AlphaComposite; import java.awt.BasicStroke; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Composite; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.RenderingHints; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import javax.swing.JPanel; import javax.swing.SwingUtilities; import org.clothocore.widget.dashboard2.util.ColorTintFilter; import org.clothocore.widget.dashboard2.util.GaussianBlurFilter; /** * * @author J. Christopher Anderson */ public class BlurPanel extends JPanel { public BlurPanel() { super(new BorderLayout()); _bp = this; //Add a mouse listener to silence any mouse events addMouseListener(new java.awt.event.MouseAdapter() { } ); } public static BlurPanel getBlurPanel() { return _bp; } @Override public boolean isOpaque() { return false; } @Override protected void paintComponent(Graphics g) { // enables anti-aliasing Graphics2D g2 = (Graphics2D) g; g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR); //Draw the blurry image Application mainFrame = Application.getApp(); int width = mainFrame.getRootPane().getWidth(); int height = mainFrame.getRootPane().getHeight(); g2.drawImage(backDrop, 0, 0, width, height, null); //Sets a 75% translucent composite AlphaComposite alpha = AlphaComposite.SrcOver.derive(0.75f); Composite composite = g2.getComposite(); g2.setComposite(alpha); //Put in the rounded black box g2.setColor(TEXT_BOX_COLOR); RoundRectangle2D.Double rr = new RoundRectangle2D.Double(45, 200, 125, 25, 9, 9); g2.fill(rr); g2.setStroke(new BasicStroke(1.5f)); g2.setColor(TEXT_COLOR); g2.draw(rr); g2.setComposite(composite); // Draws the text g2.setColor(TEXT_COLOR); g2.drawString(_label, 60, 217); g2.setComposite(composite); } public void setBlurring(final boolean isit, final String text) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { _label = text; Application.getApp().buttonPanel.searchbar.jtf.getCaret().setVisible(!isit); setVisible(isit); } }); } @Override public void setVisible(boolean visible) { if (visible) { Application mainFrame = Application.getApp(); System.out.println(mainFrame); backDrop = GraphicsUtilities.createCompatibleImage(mainFrame.getRootPane().getWidth(), mainFrame.getRootPane().getHeight()); Graphics2D g2 = backDrop.createGraphics(); mainFrame.getRootPane().paint(g2); g2.dispose(); backDrop = GraphicsUtilities.createThumbnail(backDrop, mainFrame.getRootPane().getWidth() / 2); backDrop = new ColorTintFilter(Color.BLACK, 0.10f).filter(backDrop, null); backDrop = new GaussianBlurFilter(5).filter(backDrop, null); } else { if (backDrop != null) { backDrop.flush(); } backDrop = null; } super.setVisible(visible); } /*----------------- variables -----------------*/ private Rectangle _screenRect; private BufferedImage backDrop = null; String _label="empty"; private static final Color TEXT_COLOR = new Color(245,245,245); private static final Color TEXT_BOX_COLOR = new Color(20,20,20); private static final Color GRADIENT_COLOR2 = Color.WHITE; private static final Color GRADIENT_COLOR1 = Color.GRAY; private static BlurPanel _bp; }