diff options
| author | fitzsim <fitzsim@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-01-20 21:05:39 +0000 |
|---|---|---|
| committer | fitzsim <fitzsim@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-01-20 21:05:39 +0000 |
| commit | fe6e657ead0263e382d2549fc3fc9b5e6c15a8b3 (patch) | |
| tree | 423331742bb4b07e189a268d6b36af5c2cc302cf /libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java | |
| parent | a7c785a58c21355a9011271a9cb0b0f28816a8fe (diff) | |
| download | ppe42-gcc-fe6e657ead0263e382d2549fc3fc9b5e6c15a8b3.tar.gz ppe42-gcc-fe6e657ead0263e382d2549fc3fc9b5e6c15a8b3.zip | |
2004-01-20 Thomas Fitzsimmons <fitzsim@redhat.com>
* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
(native create): Add width parameter.
(create): Calculate text entry width based on current font's
metrics and number of columns. Set TextField's font if not
already set. Call native create.
(gtkEntryGetBorderWidth): New native method.
(gtkEntryGetSize): Remove method.
(getMinimumSize): Call minimumSize.
(getPreferredSize): Call preferredSize.
(minimumSize): Calculate minimum size based on backing
GtkEntry's borders, font metrics and number of columns.
(preferredSize): Likewise for preferred size.
(get_border_width): New static function.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@76228 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java')
| -rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java | 100 |
1 files changed, 76 insertions, 24 deletions
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java index 98f55d0717c..8ee06d6f2b3 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkTextFieldPeer.java @@ -41,6 +41,7 @@ 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; @@ -48,14 +49,38 @@ import java.awt.peer.TextFieldPeer; public class GtkTextFieldPeer extends GtkTextComponentPeer implements TextFieldPeer { + native void create (int width); -// native void create (ComponentPeer parent, String text); + void create () + { + Font f = awtComponent.getFont (); + + // By default, Sun sets a TextField's font when its peer is + // created. If f != null then the peer's font is set by + // GtkComponent.create. + if (f == null) + { + f = new Font ("Fixed", Font.PLAIN, 12); + awtComponent.setFont (f); + } - native void create (); + FontMetrics fm; + if (GtkToolkit.useGraphics2D ()) + fm = new GdkClasspathFontPeerMetrics (f); + else + fm = new GdkFontMetrics (f); - native void gtkEntryGetSize (int dims[]); + TextField tf = ((TextField) awtComponent); + int cols = tf.getColumns (); + + int text_width = cols * fm.getMaxAdvance (); + + create (text_width); + } - native void gtkSetFont(String name, int style, int size); + native int gtkEntryGetBorderWidth (); + + native void gtkSetFont (String name, int style, int size); public GtkTextFieldPeer (TextField tf) { @@ -67,34 +92,61 @@ public class GtkTextFieldPeer extends GtkTextComponentPeer public Dimension getMinimumSize (int cols) { - int dims[] = new int[2]; - - gtkEntryGetSize (dims); - - return (new Dimension (dims[0], dims[1])); + return minimumSize (cols); } public Dimension getPreferredSize (int cols) { - int dims[] = new int[2]; - - gtkEntryGetSize (dims); - - return (new Dimension (dims[0], dims[1])); + return preferredSize (cols); } - - public native void setEchoChar (char c); - /* Deprecated */ + public native void setEchoChar (char c); + // Deprecated public Dimension minimumSize (int cols) { - return getMinimumSize (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) { - return getPreferredSize (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) @@ -104,18 +156,18 @@ public class GtkTextFieldPeer extends GtkTextComponentPeer public void setFont (Font f) { - gtkSetFont(f.getName(), f.getStyle(), f.getSize()); + gtkSetFont (f.getName (), f.getStyle (), f.getSize ()); } public void handleEvent (AWTEvent e) { if (e.getID () == KeyEvent.KEY_PRESSED) { - KeyEvent ke = (KeyEvent)e; + KeyEvent ke = (KeyEvent) e; - if (!ke.isConsumed() - && ke.getKeyCode() == KeyEvent.VK_ENTER) - postActionEvent (getText(), ke.getModifiers ()); + if (!ke.isConsumed () + && ke.getKeyCode () == KeyEvent.VK_ENTER) + postActionEvent (getText (), ke.getModifiers ()); } super.handleEvent (e); |

