001 /*
002 * $Id: BasicLoginPaneUI.java 3256 2009-02-10 20:09:41Z kschaefe $
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 java.beans.PropertyChangeEvent;
030 import java.beans.PropertyChangeListener;
031
032 import javax.swing.JComponent;
033 import javax.swing.UIManager;
034 import javax.swing.plaf.ComponentUI;
035
036 import org.jdesktop.swingx.JXLoginPane;
037 import org.jdesktop.swingx.plaf.LoginPaneUI;
038 import org.jdesktop.swingx.plaf.UIManagerExt;
039 /**
040 * Base implementation of the <code>JXLoginPane</code> UI.
041 *
042 * @author rbair
043 */
044 public class BasicLoginPaneUI extends LoginPaneUI {
045 private class LocaleHandler implements PropertyChangeListener {
046 /**
047 * {@inheritDoc}
048 */
049 public void propertyChange(PropertyChangeEvent evt) {
050 Object src = evt.getSource();
051
052 if (src instanceof JComponent) {
053 ((JComponent) src).updateUI();
054 }
055 }
056 }
057
058 private JXLoginPane dlg;
059
060 /** Creates a new instance of BasicLoginDialogUI */
061 public BasicLoginPaneUI(JXLoginPane dlg) {
062 this.dlg = dlg;
063 // dlg.addPropertyChangeListener("locale", new LocaleHandler());
064 }
065
066 public static ComponentUI createUI(JComponent c) {
067 return new BasicLoginPaneUI((JXLoginPane)c);
068 }
069
070 public void installUI(JComponent c) {
071 installDefaults();
072 }
073
074 protected void installDefaults() {
075 String s = dlg.getBannerText();
076 if (s == null || s.equals("")) {
077 dlg.setBannerText(UIManagerExt.getString("JXLoginPane.bannerString", dlg.getLocale()));
078 }
079
080 s = dlg.getErrorMessage();
081 if (s == null || s.equals("")) {
082 dlg.setErrorMessage(UIManagerExt.getString("JXLoginPane.errorMessage", dlg.getLocale()));
083 }
084 }
085
086 /**
087 * Creates default 400x60 banner for the login panel.
088 * @see org.jdesktop.swingx.plaf.LoginPaneUI#getBanner()
089 */
090 public Image getBanner() {
091 int w = 400;
092 int h = 60;
093 float loginStringX = w * .05f;
094 float loginStringY = h * .75f;
095
096 BufferedImage img = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
097 Graphics2D g2 = img.createGraphics();
098 try {
099 Font font = UIManager.getFont("JXLoginPane.bannerFont");
100 g2.setFont(font);
101 Graphics2D originalGraphics = g2;
102
103 try {
104 if (!dlg.getComponentOrientation().isLeftToRight()) {
105 originalGraphics = (Graphics2D) g2.create();
106 g2.scale(-1, 1);
107 g2.translate(-w, 0);
108 loginStringX = w
109 - (((float) font.getStringBounds(
110 dlg.getBannerText(),
111 originalGraphics.getFontRenderContext())
112 .getWidth()) + w * .05f);
113 }
114
115 g2.setRenderingHint(RenderingHints.KEY_RENDERING,
116 RenderingHints.VALUE_RENDER_QUALITY);
117 g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
118 RenderingHints.VALUE_ANTIALIAS_ON);
119 g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
120 RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
121 g2.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS,
122 RenderingHints.VALUE_FRACTIONALMETRICS_ON);
123
124 // draw a big square
125 g2.setColor(UIManager
126 .getColor("JXLoginPane.bannerDarkBackground"));
127 g2.fillRect(0, 0, w, h);
128
129 // create the curve shape
130 GeneralPath curveShape = new GeneralPath(
131 GeneralPath.WIND_NON_ZERO);
132 curveShape.moveTo(0, h * .6f);
133 curveShape.curveTo(w * .167f, h * 1.2f, w * .667f, h * -.5f, w,
134 h * .75f);
135 curveShape.lineTo(w, h);
136 curveShape.lineTo(0, h);
137 curveShape.lineTo(0, h * .8f);
138 curveShape.closePath();
139
140 // draw into the buffer a gradient (bottom to top), and the text
141 // "Login"
142 GradientPaint gp = new GradientPaint(0, h, UIManager
143 .getColor("JXLoginPane.bannerDarkBackground"), 0, 0,
144 UIManager.getColor("JXLoginPane.bannerLightBackground"));
145 g2.setPaint(gp);
146 g2.fill(curveShape);
147
148 originalGraphics.setColor(UIManager
149 .getColor("JXLoginPane.bannerForeground"));
150 originalGraphics.drawString(dlg.getBannerText(), loginStringX,
151 loginStringY);
152 } finally {
153 originalGraphics.dispose();
154 }
155 } finally {
156 g2.dispose();
157 }
158 return img;
159 }
160 }