diff options
Diffstat (limited to 'libjava/gnu/java')
-rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java | 110 |
1 files changed, 91 insertions, 19 deletions
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java index c38207c90cb..e31a481537f 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkTextAreaPeer.java @@ -40,23 +40,46 @@ package gnu.java.awt.peer.gtk; import java.awt.Dimension; import java.awt.Font; +import java.awt.FontMetrics; import java.awt.TextArea; import java.awt.peer.TextAreaPeer; public class GtkTextAreaPeer extends GtkTextComponentPeer implements TextAreaPeer { - native void create (int scrollbarVisibility); + native void create (int width, int height, int scrollbarVisibility); - native void gtkSetFont(String name, int style, int size); + native void gtkSetFont (String name, int style, int size); void create () { - create (((TextArea)awtComponent).getScrollbarVisibility ()); + Font f = awtComponent.getFont (); + + // By default, Sun sets a TextArea'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); + } + + FontMetrics fm; + if (GtkToolkit.useGraphics2D ()) + fm = new GdkClasspathFontPeerMetrics (f); + else + fm = new GdkFontMetrics (f); + + TextArea ta = ((TextArea) awtComponent); + int rows = ta.getRows (); + int cols = ta.getColumns (); + + int width = cols * fm.getMaxAdvance (); + int height = rows * (fm.getMaxDescent () + fm.getMaxAscent ()); + + create (width, height, ta.getScrollbarVisibility ()); } - native void gtkTextGetSize (int dims[]); - public GtkTextAreaPeer (TextArea ta) { super (ta); @@ -67,31 +90,80 @@ public class GtkTextAreaPeer extends GtkTextComponentPeer public Dimension getMinimumSize (int rows, int cols) { - int dims[] = new int[2]; - - gtkTextGetSize (dims); - - return (new Dimension (dims[0], dims[1])); + return minimumSize (rows, cols); } public Dimension getPreferredSize (int rows, int cols) { - int dims[] = new int[2]; - - gtkTextGetSize (dims); - - return (new Dimension (dims[0], dims[1])); + return preferredSize (rows, cols); } - /* Deprecated */ + native int getHScrollbarHeight (); + native int getVScrollbarWidth (); + + // Deprecated public Dimension minimumSize (int rows, int cols) { - return getMinimumSize (rows, cols); + TextArea ta = ((TextArea) awtComponent); + int hScrollbarHeight = 0; + int vScrollbarWidth = 0; + int height = 0; + int width = 0; + + if (ta.getScrollbarVisibility () == TextArea.SCROLLBARS_BOTH + || ta.getScrollbarVisibility () == TextArea.SCROLLBARS_HORIZONTAL_ONLY) + height = getHScrollbarHeight (); + + if (ta.getScrollbarVisibility () == TextArea.SCROLLBARS_BOTH + || ta.getScrollbarVisibility () == TextArea.SCROLLBARS_VERTICAL_ONLY) + width = getVScrollbarWidth (); + + Font f = awtComponent.getFont (); + if (f == null) + return new Dimension (width, height); + + FontMetrics fm; + if (GtkToolkit.useGraphics2D ()) + fm = new GdkClasspathFontPeerMetrics (f); + else + fm = new GdkFontMetrics (f); + + width += cols * fm.getMaxAdvance (); + height += rows * (fm.getMaxDescent () + fm.getMaxAscent ()); + + return new Dimension (width, height); } public Dimension preferredSize (int rows, int cols) { - return getPreferredSize (rows, cols); + TextArea ta = ((TextArea) awtComponent); + int hScrollbarHeight = 0; + int vScrollbarWidth = 0; + int height = 0; + int width = 0; + + if (ta.getScrollbarVisibility () == TextArea.SCROLLBARS_BOTH + || ta.getScrollbarVisibility () == TextArea.SCROLLBARS_HORIZONTAL_ONLY) + height = getHScrollbarHeight (); + + if (ta.getScrollbarVisibility () == TextArea.SCROLLBARS_BOTH + || ta.getScrollbarVisibility () == TextArea.SCROLLBARS_VERTICAL_ONLY) + width = getVScrollbarWidth (); + + Font f = awtComponent.getFont (); + if (f == null) + return new Dimension (width, height); + + FontMetrics fm; + if (GtkToolkit.useGraphics2D ()) + fm = new GdkClasspathFontPeerMetrics (f); + else + fm = new GdkFontMetrics (f); + + width += cols * fm.getMaxAdvance (); + height += rows * (fm.getMaxDescent () + fm.getMaxAscent ()); + + return new Dimension (width, height); } public void replaceText (String str, int start, int end) @@ -106,6 +178,6 @@ public class GtkTextAreaPeer extends GtkTextComponentPeer public void setFont (Font f) { - gtkSetFont(f.getName(), f.getStyle(), f.getSize()); + gtkSetFont (f.getName (), f.getStyle (), f.getSize ()); } } |