/*
* (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 campos de password.
* Esta clase cambia los asteriscos habituales por unos cuadrados con bordes redondeados
* @see NimRODPasswordFieldUI
* @author Nilo J. Gonzalez
*/
package com.nilo.plaf.nimrod;
import java.awt.*;
import javax.swing.*;
import javax.swing.text.*;
public class NimRODPasswordView extends PasswordView {
protected static int ancho = 9;
protected static int hueco = 3;
public NimRODPasswordView( Element elem) {
super( elem);
}
protected int drawEchoCharacter( Graphics g, int x, int y, char c) {
int w = getFontMetrics().charWidth( c);
w = ( w < ancho ? ancho : w);
int h = (getContainer().getHeight() - ancho) / 2;
Graphics2D g2D = (Graphics2D)g;
g2D.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2D.fillOval( x, h+1, w, w);
g2D.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_DEFAULT);
return x + w + hueco;
}
public Shape modelToView( int pos, Shape a, Position.Bias b) throws BadLocationException {
Container c = getContainer();
if ( c instanceof JPasswordField ) {
JPasswordField f = (JPasswordField)c;
if ( !f.echoCharIsSet() ) {
return super.modelToView( pos, a, b);
}
char echoChar = f.getEchoChar();
int w = f.getFontMetrics( f.getFont()).charWidth( echoChar);
w = ( w < ancho ? ancho : w) + hueco;
Rectangle alloc = adjustAllocation( a).getBounds();
int dx = (pos - getStartOffset()) * w;
alloc.x += dx - 2;
if ( alloc.x <= 5 ) {
alloc.x = 6;
}
alloc.width = 1;
return alloc;
}
return null;
}
public int viewToModel( float fx, float fy, Shape a, Position.Bias[] bias) {
bias[0] = Position.Bias.Forward;
int n = 0;
Container c = getContainer();
if ( c instanceof JPasswordField ) {
JPasswordField f = (JPasswordField)c;
if ( !f.echoCharIsSet() ) {
return super.viewToModel( fx, fy, a, bias);
}
char echoChar = f.getEchoChar();
int w = f.getFontMetrics( f.getFont()).charWidth( echoChar);
w = ( w < ancho ? ancho : w) + hueco;
a = adjustAllocation( a);
Rectangle alloc = (a instanceof Rectangle) ? (Rectangle)a : a.getBounds();
n = ((int)fx - alloc.x) / w;
if (n < 0) {
n = 0;
}
else if ( n > (getStartOffset() + getDocument().getLength()) ) {
n = getDocument().getLength() - getStartOffset();
}
}
return getStartOffset() + n;
}
}