summaryrefslogtreecommitdiff
path: root/gnu/java
diff options
context:
space:
mode:
authorThomas Fitzsimmons <fitzsim@redhat.com>2006-03-16 03:24:18 +0000
committerThomas Fitzsimmons <fitzsim@redhat.com>2006-03-16 03:24:18 +0000
commit270d334aa80ac5cc204e167749b28af8649d9e9e (patch)
tree48f5f75da67ca47ca7af6ddeeb8be1201688af19 /gnu/java
parent50fc0fe5b9ad536dd58ee682e07a7fa92f3697a0 (diff)
downloadclasspath-270d334aa80ac5cc204e167749b28af8649d9e9e.tar.gz
2006-03-15 Thomas Fitzsimmons <fitzsim@redhat.com>
PR classpath/26486 * gnu/java/awt/peer/gtk/GtkCanvasPeer.java (getGraphics): Remove method. (handleEvent): Likewise. * gnu/java/awt/peer/gtk/GtkComponentPeer.java (isInRepaint): Remove field. (beginNativeRepaint): Remove method. (endNativeRepaint): Likewise. (handleEvent): Call paintComponent and updateComponent. (paintComponent): New method. (updateComponent): Likewise. (repaint): Return early if width or height is less than one. (postExposeEvent): Remove isInRepaint reference. * gnu/java/awt/peer/gtk/GtkContainerPeer.java: (getGraphics): Remove method. * gnu/java/awt/peer/gtk/GtkDialogPeer.java (getGraphics): Inherit from GtkWindowPeer. (postMouseEvent): Likewise. (postExposeEvent): Likewise. * gnu/java/awt/peer/gtk/GtkFileDialogPeer.java (updateComponent): Override to do nothing. * gnu/java/awt/peer/gtk/GtkFramePeer.java (getGraphics): Inherit from GtkWindowPeer. (postMouseEvent): Likewise. (postExposeEvent): Likewise. * gnu/java/awt/peer/gtk/GtkPanelPeer.java (handleEvent): Inherit paint and update handling from GtkComponentPeer. (updateComponent): Override to call paintComponent. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c: Replace gdk_flush calls with schedule_flush calls. (flush): New function. (schedule_flush): Likewise.
Diffstat (limited to 'gnu/java')
-rw-r--r--gnu/java/awt/peer/gtk/GtkCanvasPeer.java41
-rw-r--r--gnu/java/awt/peer/gtk/GtkComponentPeer.java89
-rw-r--r--gnu/java/awt/peer/gtk/GtkContainerPeer.java5
-rw-r--r--gnu/java/awt/peer/gtk/GtkDialogPeer.java28
-rw-r--r--gnu/java/awt/peer/gtk/GtkFileDialogPeer.java7
-rw-r--r--gnu/java/awt/peer/gtk/GtkFramePeer.java28
-rw-r--r--gnu/java/awt/peer/gtk/GtkPanelPeer.java40
-rw-r--r--gnu/java/awt/peer/gtk/GtkWindowPeer.java69
8 files changed, 111 insertions, 196 deletions
diff --git a/gnu/java/awt/peer/gtk/GtkCanvasPeer.java b/gnu/java/awt/peer/gtk/GtkCanvasPeer.java
index dc2176120..16166afa4 100644
--- a/gnu/java/awt/peer/gtk/GtkCanvasPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkCanvasPeer.java
@@ -54,45 +54,8 @@ public class GtkCanvasPeer extends GtkComponentPeer implements CanvasPeer
super (c);
}
- public Graphics getGraphics ()
- {
- if (GtkToolkit.useGraphics2D ())
- return new GdkGraphics2D (this);
- else
- 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 ();
- 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;
- }
- }
-
- /* Preferred size for a drawing widget is always what the user requested */
+ // Preferred size for a drawing widget is always what the user
+ // requested.
public Dimension getPreferredSize ()
{
return awtComponent.getSize ();
diff --git a/gnu/java/awt/peer/gtk/GtkComponentPeer.java b/gnu/java/awt/peer/gtk/GtkComponentPeer.java
index 821183927..61cc3a82a 100644
--- a/gnu/java/awt/peer/gtk/GtkComponentPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkComponentPeer.java
@@ -86,8 +86,6 @@ public class GtkComponentPeer extends GtkGenericPeer
Insets insets;
- boolean isInRepaint;
-
/* this isEnabled differs from Component.isEnabled, in that it
knows if a parent is disabled. In that case Component.isEnabled
may return true, but our isEnabled will always return false */
@@ -176,16 +174,6 @@ public class GtkComponentPeer extends GtkGenericPeer
gtkWidgetSetParent (p);
}
- void beginNativeRepaint ()
- {
- isInRepaint = true;
- }
-
- void endNativeRepaint ()
- {
- isInRepaint = false;
- }
-
/*
* Set the bounds of this peer's AWT Component based on dimensions
* returned by the native windowing system. Most Components impose
@@ -250,6 +238,8 @@ public class GtkComponentPeer extends GtkGenericPeer
return getToolkit().getFontMetrics(font);
}
+ // getGraphics may be overridden by derived classes but it should
+ // never return null.
public Graphics getGraphics ()
{
if (GtkToolkit.useGraphics2D ())
@@ -291,30 +281,10 @@ public class GtkComponentPeer extends GtkGenericPeer
switch (id)
{
case PaintEvent.PAINT:
+ paintComponent((PaintEvent) event);
+ break;
case PaintEvent.UPDATE:
- {
- try
- {
- Graphics g = getGraphics();
-
- if (!awtComponent.isShowing() || awtComponent.getWidth() < 1
- || awtComponent.getHeight() < 1 || 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);
- }
- }
+ updateComponent((PaintEvent) event);
break;
case KeyEvent.KEY_PRESSED:
ke = (KeyEvent) event;
@@ -328,7 +298,49 @@ public class GtkComponentPeer extends GtkGenericPeer
break;
}
}
-
+
+ // This method and its overrides are the only methods in the peers
+ // that should call awtComponent.paint.
+ protected void paintComponent (PaintEvent event)
+ {
+ // Do not call Component.paint if the component is not showing or
+ // if its bounds form a degenerate rectangle.
+ if (!awtComponent.isShowing()
+ || (awtComponent.getWidth() < 1 || awtComponent.getHeight() < 1))
+ return;
+
+ // Creating and disposing a GdkGraphics every time paint is called
+ // seems expensive. However, the graphics state does not carry
+ // over between calls to paint, and resetting the graphics object
+ // may even be more costly than simply creating a new one.
+ GdkGraphics g = (GdkGraphics) getGraphics();
+
+ g.setClip(event.getUpdateRect());
+
+ awtComponent.paint(g);
+
+ g.dispose();
+ }
+
+ // This method and its overrides are the only methods in the peers
+ // that should call awtComponent.update.
+ protected void updateComponent (PaintEvent event)
+ {
+ // Do not call Component.update if the component is not showing or
+ // if its bounds form a degenerate rectangle.
+ if (!awtComponent.isShowing()
+ || (awtComponent.getWidth() < 1 || awtComponent.getHeight() < 1))
+ return;
+
+ GdkGraphics g = (GdkGraphics) getGraphics();
+
+ g.setClip(event.getUpdateRect());
+
+ awtComponent.update(g);
+
+ g.dispose();
+ }
+
public boolean isFocusTraversable ()
{
return true;
@@ -369,7 +381,7 @@ public class GtkComponentPeer extends GtkGenericPeer
public void repaint (long tm, int x, int y, int width, int height)
{
- if (x == 0 && y == 0 && width == 0 && height == 0)
+ if (width < 1 || height < 1)
return;
if (tm <= 0)
@@ -563,8 +575,7 @@ public class GtkComponentPeer extends GtkGenericPeer
protected void postExposeEvent (int x, int y, int width, int height)
{
- if (!isInRepaint)
- q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+ q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
new Rectangle (x, y, width, height)));
}
diff --git a/gnu/java/awt/peer/gtk/GtkContainerPeer.java b/gnu/java/awt/peer/gtk/GtkContainerPeer.java
index 23737b0b0..06076e77f 100644
--- a/gnu/java/awt/peer/gtk/GtkContainerPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkContainerPeer.java
@@ -99,11 +99,6 @@ public class GtkContainerPeer extends GtkComponentPeer
}
}
- public Graphics getGraphics ()
- {
- return super.getGraphics();
- }
-
public void beginLayout () { }
public void endLayout () { }
public boolean isPaintPending () { return false; }
diff --git a/gnu/java/awt/peer/gtk/GtkDialogPeer.java b/gnu/java/awt/peer/gtk/GtkDialogPeer.java
index 3e3125a2b..3254f566d 100644
--- a/gnu/java/awt/peer/gtk/GtkDialogPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkDialogPeer.java
@@ -51,34 +51,6 @@ public class GtkDialogPeer extends GtkWindowPeer
{
super (dialog);
}
-
- public Graphics getGraphics ()
- {
- Graphics g;
- if (GtkToolkit.useGraphics2D ())
- g = new GdkGraphics2D (this);
- else
- g = new GdkGraphics (this);
- g.translate (-insets.left, -insets.top);
- return g;
- }
-
- protected void postMouseEvent(int id, long when, int mods, int x, int y,
- int clickCount, boolean popupTrigger)
- {
- super.postMouseEvent (id, when, mods,
- x + insets.left, y + insets.top,
- clickCount, popupTrigger);
- }
-
- protected void postExposeEvent (int x, int y, int width, int height)
- {
- if (!isInRepaint)
- q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
- new Rectangle (x + insets.left,
- y + insets.top,
- width, height)));
- }
void create ()
{
diff --git a/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java b/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
index a0ae9e9ee..8650578f7 100644
--- a/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java
@@ -41,6 +41,7 @@ package gnu.java.awt.peer.gtk;
import java.awt.Dialog;
import java.awt.FileDialog;
import java.awt.Graphics;
+import java.awt.event.PaintEvent;
import java.awt.peer.FileDialogPeer;
import java.io.File;
import java.io.FilenameFilter;
@@ -166,10 +167,10 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
return filter.accept(dir, filename);
}
- public Graphics getGraphics ()
+ // Sun does not call FileDialog.update.
+ protected void updateComponent (PaintEvent event)
{
- // GtkFileDialog will repaint by itself
- return null;
+ // Override GtkComponetPeer.updateComponent to do nothing.
}
// called back by native side: handle_response_cb
diff --git a/gnu/java/awt/peer/gtk/GtkFramePeer.java b/gnu/java/awt/peer/gtk/GtkFramePeer.java
index f59e781c2..c8cc9423b 100644
--- a/gnu/java/awt/peer/gtk/GtkFramePeer.java
+++ b/gnu/java/awt/peer/gtk/GtkFramePeer.java
@@ -196,17 +196,6 @@ public class GtkFramePeer extends GtkWindowPeer
}
}
- public Graphics getGraphics ()
- {
- Graphics g;
- if (GtkToolkit.useGraphics2D ())
- g = new GdkGraphics2D (this);
- else
- g = new GdkGraphics (this);
- g.translate (-insets.left, -insets.top);
- return g;
- }
-
protected void postConfigureEvent (int x, int y, int width, int height)
{
int frame_width = width + insets.left + insets.right;
@@ -231,23 +220,6 @@ public class GtkFramePeer extends GtkWindowPeer
}
}
- protected void postMouseEvent(int id, long when, int mods, int x, int y,
- int clickCount, boolean popupTrigger)
- {
- super.postMouseEvent (id, when, mods,
- x + insets.left, y + insets.top,
- clickCount, popupTrigger);
- }
-
- protected void postExposeEvent (int x, int y, int width, int height)
- {
- if (!isInRepaint)
- q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
- new Rectangle (x + insets.left,
- y + insets.top,
- width, height)));
- }
-
public int getState ()
{
return 0;
diff --git a/gnu/java/awt/peer/gtk/GtkPanelPeer.java b/gnu/java/awt/peer/gtk/GtkPanelPeer.java
index 88bb71569..16eb8c8fb 100644
--- a/gnu/java/awt/peer/gtk/GtkPanelPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkPanelPeer.java
@@ -59,37 +59,19 @@ public class GtkPanelPeer extends GtkContainerPeer
public void handleEvent(AWTEvent event)
{
int id = event.getID();
- switch (id)
- {
- case MouseEvent.MOUSE_PRESSED:
- awtComponent.requestFocusInWindow();
- break;
- case PaintEvent.UPDATE:
- case PaintEvent.PAINT:
- {
- try
- {
- Graphics g = getGraphics();
- if (! awtComponent.isShowing() || awtComponent.getWidth() < 1
- || awtComponent.getHeight() < 1 || g == null)
- return;
-
- g.setClip(((PaintEvent) event).getUpdateRect());
-
- // Do not want to clear anything before painting.);
- awtComponent.paint(g);
-
- g.dispose();
- return;
- }
- catch (InternalError e)
- {
- System.err.println(e);
- }
- }
- }
+
+ if (id == MouseEvent.MOUSE_PRESSED)
+ awtComponent.requestFocusInWindow();
+
super.handleEvent(event);
}
+ protected void updateComponent (PaintEvent event)
+ {
+ // Do not want to clear anything before painting. Sun never
+ // calls Panel.update, only Panel.paint.
+ paintComponent(event);
+ }
+
native void connectSignals ();
}
diff --git a/gnu/java/awt/peer/gtk/GtkWindowPeer.java b/gnu/java/awt/peer/gtk/GtkWindowPeer.java
index 6cc1390ea..70c6615fa 100644
--- a/gnu/java/awt/peer/gtk/GtkWindowPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkWindowPeer.java
@@ -42,6 +42,7 @@ import java.awt.AWTEvent;
import java.awt.Component;
import java.awt.Frame;
import java.awt.Graphics;
+import java.awt.Rectangle;
import java.awt.Window;
import java.awt.event.PaintEvent;
import java.awt.event.WindowEvent;
@@ -244,37 +245,55 @@ public class GtkWindowPeer extends GtkContainerPeer
// TODO Auto-generated method stub
}
+
+ protected void postExposeEvent (int x, int y, int width, int height)
+ {
+ // Translate GTK co-ordinates, which do not include a window
+ // frame's insets, to AWT co-ordinates, which do include a window
+ // frame's insets. GtkWindowPeer should always have all-zero
+ // insets but GtkFramePeer and GtkDialogPeer insets will be
+ // non-zero.
+ q().postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
+ new Rectangle (x + insets.left,
+ y + insets.top,
+ width, height)));
+ }
+
public boolean requestWindowFocus()
{
// TODO Auto-generated method stub
return false;
}
- public void handleEvent(AWTEvent event)
+ public Graphics getGraphics ()
{
- int id = event.getID();
- if (id == PaintEvent.UPDATE || id == PaintEvent.PAINT)
- {
- try
- {
- Graphics g = getGraphics();
- if (! awtComponent.isShowing() || awtComponent.getWidth() < 1
- || awtComponent.getHeight() < 1 || g == null)
- return;
-
- g.setClip(((PaintEvent) event).getUpdateRect());
-
- // Do not want to clear anything before painting.
- awtComponent.paint(g);
-
- g.dispose();
- return;
- }
- catch (InternalError e)
- {
- System.err.println(e);
- }
- }
- super.handleEvent(event);
+ Graphics g = super.getGraphics ();
+ // Translate AWT co-ordinates, which include a window frame's
+ // insets, to GTK co-ordinates, which do not include a window
+ // frame's insets. GtkWindowPeer should always have all-zero
+ // insets but GtkFramePeer and GtkDialogPeer insets will be
+ // non-zero.
+ g.translate (-insets.left, -insets.top);
+ return g;
+ }
+
+ protected void updateComponent (PaintEvent event)
+ {
+ // Do not clear anything before painting. Sun never calls
+ // Window.update, only Window.paint.
+ paintComponent(event);
+ }
+
+ protected void postMouseEvent(int id, long when, int mods, int x, int y,
+ int clickCount, boolean popupTrigger)
+ {
+ // Translate AWT co-ordinates, which include a window frame's
+ // insets, to GTK co-ordinates, which do not include a window
+ // frame's insets. GtkWindowPeer should always have all-zero
+ // insets but GtkFramePeer and GtkDialogPeer insets will be
+ // non-zero.
+ super.postMouseEvent (id, when, mods,
+ x + insets.left, y + insets.top,
+ clickCount, popupTrigger);
}
}