diff options
author | David Jee <djee@redhat.com> | 2004-01-26 21:55:42 +0000 |
---|---|---|
committer | David Jee <djee@gcc.gnu.org> | 2004-01-26 21:55:42 +0000 |
commit | 7edbd87e17d9240077eed1993436365ad6c4365c (patch) | |
tree | 9ab7045766c5842438bf57c60f381f2d8dce8bb0 /libjava/gnu/java | |
parent | 81a88a6157451550a5753e436021523f93226fc9 (diff) | |
download | gcc-7edbd87e17d9240077eed1993436365ad6c4365c.zip gcc-7edbd87e17d9240077eed1993436365ad6c4365c.tar.gz gcc-7edbd87e17d9240077eed1993436365ad6c4365c.tar.bz2 |
2004-01-26 David Jee <djee@redhat.com>
* gnu/java/awt/peer/gtk/GtkComponentPeer.java
(handleEvent): Implemented. Handles PaintEvents.
(paint): Implemented. Use GTK native methods to queue updates
for this heavyweight peer.
* gnu/java/awt/peer/gtk/GtkContainerPeer.java
(handleEvent): Removed.
* java/awt/Component.java
(paint): Implemented. Explictly paint the heavyweight peer.
(update): Clear the background for heavyweight components.
(paintAll): No need to call peer.paint() anymore.
(processEvent): Don't process PaintEvents here. It's now done in
the peer's handleEvent().
(processPaintEvent): Removed.
* java/awt/Container.java
(paint): No need to call super.paint(). Visit heavyweight
children as well.
(update): Don't clear the background here. It's done in
Component.update().
(visitChildren): Added check to not recurse into Containers.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
(filter_expose_event_handler): New method. Filter unwanted
expose events while painting heavyweight peers.
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_addExposeFilter):
New method. Connect filter and block pre_event_handler.
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_removeExposeFilter):
New method. Disconnect filter and unblock pre_event_handler.
(Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetQueueDrawArea):
New method. Invalidate and update given area.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c
(pre_event_handler): Add checks for unwanted expose events.
From-SVN: r76668
Diffstat (limited to 'libjava/gnu/java')
-rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java | 50 | ||||
-rw-r--r-- | libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java | 35 |
2 files changed, 49 insertions, 36 deletions
diff --git a/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java index 9a56619..4b29bcc 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkComponentPeer.java @@ -91,6 +91,9 @@ public class GtkComponentPeer extends GtkGenericPeer native void gtkWidgetSetCursor (int type); native void gtkWidgetSetBackground (int red, int green, int blue); native void gtkWidgetSetForeground (int red, int green, int blue); + native void gtkWidgetQueueDrawArea(int x, int y, int width, int height); + native void addExposeFilter(); + native void removeExposeFilter(); void create () { @@ -217,6 +220,37 @@ public class GtkComponentPeer extends GtkGenericPeer public void handleEvent (AWTEvent event) { + int id = event.getID(); + + switch (id) + { + case PaintEvent.PAINT: + case PaintEvent.UPDATE: + { + try + { + Graphics g = getGraphics (); + + // Some peers like GtkFileDialogPeer are repainted by Gtk itself + if (g == null) + break; + + g.setClip (((PaintEvent)event).getUpdateRect()); + + if (id == PaintEvent.PAINT) + awtComponent.paint (g); + else + awtComponent.update (g); + + g.dispose (); + } + catch (InternalError e) + { + System.err.println (e); + } + } + break; + } } public boolean isFocusTraversable () @@ -235,7 +269,21 @@ public class GtkComponentPeer extends GtkGenericPeer public void paint (Graphics g) { - awtComponent.paint (g); + Component parent = awtComponent.getParent(); + GtkComponentPeer parentPeer = null; + if ((parent instanceof Container) && !parent.isLightweight()) + parentPeer = (GtkComponentPeer) parent.getPeer(); + + addExposeFilter(); + if (parentPeer != null) + parentPeer.addExposeFilter(); + + Rectangle clip = g.getClipBounds(); + gtkWidgetQueueDrawArea(clip.x, clip.y, clip.width, clip.height); + + removeExposeFilter(); + if (parentPeer != null) + parentPeer.removeExposeFilter(); } public Dimension preferredSize () diff --git a/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java b/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java index e888172..361dea7 100644 --- a/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java +++ b/libjava/gnu/java/awt/peer/gtk/GtkContainerPeer.java @@ -100,41 +100,6 @@ public class GtkContainerPeer extends GtkComponentPeer return new GdkGraphics (this); } - public void handleEvent (AWTEvent event) - { - int id = event.getID(); - - switch (id) - { - case PaintEvent.PAINT: - case PaintEvent.UPDATE: - { - try - { - Graphics g = getGraphics (); - - // Some peers like GtkFileDialogPeer are repainted by Gtk itself - if (g == null) - break; - - g.setClip (((PaintEvent)event).getUpdateRect()); - - if (id == PaintEvent.PAINT) - awtComponent.paint (g); - else - awtComponent.update (g); - - g.dispose (); - } - catch (InternalError e) - { - System.err.println (e); - } - } - break; - } - } - public void beginLayout () { } public void endLayout () { } public boolean isPaintPending () { return false; } |