001    /*
002     * $Id: BasicLoginPanelUI.java,v 1.4 2006/02/21 18:36:08 rbair Exp $
003     *
004     * Copyright 2004 Sun Microsystems, Inc., 4150 Network Circle,
005     * Santa Clara, California 95054, U.S.A. All rights reserved.
006     *
007     * This library is free software; you can redistribute it and/or
008     * modify it under the terms of the GNU Lesser General Public
009     * License as published by the Free Software Foundation; either
010     * version 2.1 of the License, or (at your option) any later version.
011     * 
012     * This library is distributed in the hope that it will be useful,
013     * but WITHOUT ANY WARRANTY; without even the implied warranty of
014     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
015     * Lesser General Public License for more details.
016     * 
017     * You should have received a copy of the GNU Lesser General Public
018     * License along with this library; if not, write to the Free Software
019     * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
020     */
021    package org.jdesktop.swingx.plaf.basic;
022    import java.awt.Font;
023    import java.awt.GradientPaint;
024    import java.awt.Graphics2D;
025    import java.awt.Image;
026    import java.awt.RenderingHints;
027    import java.awt.geom.GeneralPath;
028    import java.awt.image.BufferedImage;
029    import javax.swing.JComponent;
030    import javax.swing.UIManager;
031    import javax.swing.plaf.ComponentUI;
032    import org.jdesktop.swingx.JXLoginDialog;
033    import org.jdesktop.swingx.JXLoginPanel;
034    import org.jdesktop.swingx.plaf.LoginPanelUI;
035    /**
036     * Base implementation of the <code>JXLoginPanel</code> UI.
037     *
038     * @author rbair
039     */
040    public class BasicLoginPanelUI extends LoginPanelUI {
041        private JXLoginPanel dlg;
042        
043        /** Creates a new instance of BasicLoginDialogUI */
044        public BasicLoginPanelUI(JXLoginPanel dlg) {
045            this.dlg = dlg;
046        }
047        
048      public static ComponentUI createUI(JComponent c) {
049        return new BasicLoginPanelUI((JXLoginPanel)c);
050      }
051    
052        public Image getBanner() {
053            int w = 400;
054            int h = 60;
055            float loginStringX = w * .05f;
056            float loginStringY = h * .75f;
057    
058            BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
059            Graphics2D g2 = img.createGraphics();
060            Font font = UIManager.getFont("JXLoginPanel.banner.font");
061            g2.setFont(font);
062            Graphics2D originalGraphics = g2;
063            if(!dlg.getComponentOrientation().isLeftToRight()) {
064                originalGraphics = (Graphics2D)g2.create();
065                g2.scale(-1, 1);
066                g2.translate(-w, 0);
067                loginStringX = w - (((float)font.getStringBounds(dlg.getBannerText(), 
068                        originalGraphics.getFontRenderContext()).getWidth()) + w * .05f);
069            } 
070    
071            g2.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);
072            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
073            g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
074            g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
075    
076            //draw a big square
077            g2.setColor(UIManager.getColor("JXLoginPanel.banner.darkBackground"));
078            g2.fillRect(0, 0, w, h);
079    
080            //create the curve shape
081            GeneralPath curveShape = new GeneralPath(GeneralPath.WIND_NON_ZERO);
082            curveShape.moveTo(0, h * .6f);
083            curveShape.curveTo(w * .167f, h * 1.2f, w * .667f, h * -.5f, w, h * .75f);
084            curveShape.lineTo(w, h);
085            curveShape.lineTo(0, h);
086            curveShape.lineTo(0, h * .8f);
087            curveShape.closePath();
088    
089            //draw into the buffer a gradient (bottom to top), and the text "Login"
090            GradientPaint gp = new GradientPaint(0, h, UIManager.getColor("JXLoginPanel.banner.darkBackground"),
091                    0, 0, UIManager.getColor("JXLoginPanel.banner.lightBackground"));
092            g2.setPaint(gp);
093            g2.fill(curveShape);
094    
095            originalGraphics.setColor(UIManager.getColor("JXLoginPanel.banner.foreground"));
096            originalGraphics.drawString(dlg.getBannerText(), loginStringX, loginStringY);
097            return img;
098        }
099    }