aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Fitzsimmons <fitzsim@redhat.com>2004-01-20 21:24:09 +0000
committerThomas Fitzsimmons <fitzsim@gcc.gnu.org>2004-01-20 21:24:09 +0000
commitc01c143789ef36be55a16b399775a6d84dffb992 (patch)
tree78d8ff190e6b0e72cde58a5a6f203fe2ad124fef
parent901150179382792c4786c922b7d67a21f3202e7a (diff)
downloadgcc-c01c143789ef36be55a16b399775a6d84dffb992.zip
gcc-c01c143789ef36be55a16b399775a6d84dffb992.tar.gz
gcc-c01c143789ef36be55a16b399775a6d84dffb992.tar.bz2
GtkComponentPeer.java (setBounds): Calculate proper offsets for heavyweight components packed in lightweight...
2004-01-20 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/java/awt/peer/gtk/GtkComponentPeer.java (setBounds): Calculate proper offsets for heavyweight components packed in lightweight containers. From-SVN: r76230
-rw-r--r--libjava/ChangeLog4
-rw-r--r--libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java31
2 files changed, 33 insertions, 2 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index 98b8497..95f86ef 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,5 +1,9 @@
2004-01-20 Thomas Fitzsimmons <fitzsim@redhat.com>
+ * gnu/java/awt/peer/gtk/GtkComponentPeer.java (setBounds):
+ Calculate proper offsets for heavyweight components packed in
+ lightweight containers.
+
* gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c
(native create): Add width parameter.
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java
index ee067ce..9a56619 100644
--- a/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java
+++ b/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java
@@ -42,6 +42,7 @@ import java.awt.AWTEvent;
import java.awt.BufferCapabilities;
import java.awt.Color;
import java.awt.Component;
+import java.awt.Container;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.Font;
@@ -302,8 +303,34 @@ public class GtkComponentPeer extends GtkGenericPeer
public void setBounds (int x, int y, int width, int height)
{
Component parent = awtComponent.getParent ();
-
- if (parent instanceof Window)
+
+ // Heavyweight components that are children of one or more
+ // lightweight containers have to be handled specially. Because
+ // calls to GLightweightPeer.setBounds do nothing, GTK has no
+ // knowledge of the lightweight containers' positions. So we have
+ // to add the offsets manually when placing a heavyweight
+ // component within a lightweight container. The lightweight
+ // container may itself be in a lightweight container and so on,
+ // so we need to continue adding offsets until we reach a
+ // container whose position GTK knows -- that is, the first
+ // non-lightweight.
+ boolean lightweightChild = false;
+ Insets i;
+ while (parent.isLightweight ())
+ {
+ lightweightChild = true;
+
+ i = ((Container) parent).getInsets ();
+
+ x += parent.getX () + i.left;
+ y += parent.getY () + i.top;
+
+ parent = parent.getParent ();
+ }
+
+ // We only need to convert from Java to GTK coordinates if we're
+ // placing a heavyweight component in a Window.
+ if (parent instanceof Window && !lightweightChild)
{
Insets insets = ((Window) parent).getInsets ();
// Convert from Java coordinates to GTK coordinates.