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);
native void gtkWidgetSetBackground (int red, int green, int blue);
native void gtkWidgetSetForeground (int red, int green, int blue);
void create ()
{
Font f = awtComponent.getFont ();
if (f == null)
{
f = new Font ("Dialog", Font.PLAIN, 12);
awtComponent.setFont (f);
}
FontMetrics fm = getFontMetrics (f);
TextField tf = ((TextField) awtComponent);
int cols = tf.getColumns ();
int text_width = cols * fm.getMaxAdvance ();
create (text_width);
setEditable (tf.isEditable ());
}
native int gtkEntryGetBorderWidth ();
native void gtkWidgetModifyFont (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 = getFontMetrics (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 = getFontMetrics (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 handleEvent (AWTEvent e)
{
if (e.getID () == KeyEvent.KEY_PRESSED)
{
KeyEvent ke = (KeyEvent) e;
if (!ke.isConsumed ()
&& ke.getKeyCode () == KeyEvent.VK_ENTER)
postActionEvent (getText (), ke.getModifiersEx ());
}
super.handleEvent (e);
}
}