GtkTextFieldPeer.java [plain text]
package gnu.java.awt.peer.gtk;
import java.awt.AWTEvent;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.TextField;
import java.awt.event.KeyEvent;
import java.awt.peer.TextFieldPeer;
public class GtkTextFieldPeer extends GtkTextComponentPeer
implements TextFieldPeer
{
native void create (int width);
void create ()
{
Font f = awtComponent.getFont ();
if (f == null)
{
f = new Font ("Fixed", Font.PLAIN, 12);
awtComponent.setFont (f);
}
FontMetrics fm;
if (GtkToolkit.useGraphics2D ())
fm = new GdkClasspathFontPeerMetrics (f);
else
fm = new GdkFontMetrics (f);
TextField tf = ((TextField) awtComponent);
int cols = tf.getColumns ();
int text_width = cols * fm.getMaxAdvance ();
create (text_width);
}
native int gtkEntryGetBorderWidth ();
native void gtkSetFont (String name, int style, int size);
public GtkTextFieldPeer (TextField tf)
{
super (tf);
if (tf.echoCharIsSet ())
setEchoChar (tf.getEchoChar ());
}
public Dimension getMinimumSize (int cols)
{
return minimumSize (cols);
}
public Dimension getPreferredSize (int cols)
{
return preferredSize (cols);
}
public native void setEchoChar (char c);
public Dimension minimumSize (int cols)
{
int dim[] = new int[2];
gtkWidgetGetPreferredDimensions (dim);
Font f = awtComponent.getFont ();
if (f == null)
return new Dimension (2 * gtkEntryGetBorderWidth (), dim[1]);
FontMetrics fm;
if (GtkToolkit.useGraphics2D ())
fm = new GdkClasspathFontPeerMetrics (f);
else
fm = new GdkFontMetrics (f);
int text_width = cols * fm.getMaxAdvance ();
int width = text_width + 2 * gtkEntryGetBorderWidth ();
return new Dimension (width, dim[1]);
}
public Dimension preferredSize (int cols)
{
int dim[] = new int[2];
gtkWidgetGetPreferredDimensions (dim);
Font f = awtComponent.getFont ();
if (f == null)
return new Dimension (2 * gtkEntryGetBorderWidth (), dim[1]);
FontMetrics fm;
if (GtkToolkit.useGraphics2D ())
fm = new GdkClasspathFontPeerMetrics (f);
else
fm = new GdkFontMetrics (f);
int text_width = cols * fm.getMaxAdvance ();
int width = text_width + 2 * gtkEntryGetBorderWidth ();
return new Dimension (width, dim[1]);
}
public void setEchoCharacter (char c)
{
setEchoChar (c);
}
public void setFont (Font f)
{
gtkSetFont (f.getName (), f.getStyle (), f.getSize ());
}
public void handleEvent (AWTEvent e)
{
if (e.getID () == KeyEvent.KEY_PRESSED)
{
KeyEvent ke = (KeyEvent) e;
if (!ke.isConsumed ()
&& ke.getKeyCode () == KeyEvent.VK_ENTER)
postActionEvent (getText (), ke.getModifiers ());
}
super.handleEvent (e);
}
}