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
This commit is contained in:
Thomas Fitzsimmons 2004-01-20 21:24:09 +00:00 committed by Thomas Fitzsimmons
parent 9011501793
commit c01c143789
2 changed files with 33 additions and 2 deletions

View file

@ -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.

View file

@ -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.