Merge from mainline.
[official-gcc.git] / libjava / classpath / gnu / java / awt / peer / GLightweightPeer.java
blob88733b92f8c88347a795ef1f49d252c01a17f908
1 /* GLightweightPeer.java --
2 Copyright (C) 2003, 2004, 2006 Free Software Foundation, Inc.
4 This file is part of GNU Classpath.
6 GNU Classpath is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2, or (at your option)
9 any later version.
11 GNU Classpath is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with GNU Classpath; see the file COPYING. If not, write to the
18 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 02110-1301 USA.
21 Linking this library statically or dynamically with other modules is
22 making a combined work based on this library. Thus, the terms and
23 conditions of the GNU General Public License cover the whole
24 combination.
26 As a special exception, the copyright holders of this library give you
27 permission to link this library with independent modules to produce an
28 executable, regardless of the license terms of these independent
29 modules, and to copy and distribute the resulting executable under
30 terms of your choice, provided that you also meet, for each linked
31 independent module, the terms and conditions of the license of that
32 module. An independent module is a module which is not derived from
33 or based on this library. If you modify this library, you may extend
34 this exception to your version of the library, but you are not
35 obligated to do so. If you do not wish to do so, delete this
36 exception statement from your version. */
39 package gnu.java.awt.peer;
41 import java.awt.AWTEvent;
42 import java.awt.AWTException;
43 import java.awt.BufferCapabilities;
44 import java.awt.Color;
45 import java.awt.Component;
46 import java.awt.Cursor;
47 import java.awt.Dimension;
48 import java.awt.Font;
49 import java.awt.FontMetrics;
50 import java.awt.Graphics;
51 import java.awt.GraphicsConfiguration;
52 import java.awt.Image;
53 import java.awt.Insets;
54 import java.awt.Point;
55 import java.awt.Rectangle;
56 import java.awt.Toolkit;
57 import java.awt.event.MouseAdapter;
58 import java.awt.event.MouseEvent;
59 import java.awt.event.PaintEvent;
60 import java.awt.image.ColorModel;
61 import java.awt.image.ImageObserver;
62 import java.awt.image.ImageProducer;
63 import java.awt.image.VolatileImage;
64 import java.awt.peer.ComponentPeer;
65 import java.awt.peer.ContainerPeer;
66 import java.awt.peer.LightweightPeer;
69 * Another possible implementation strategy for lightweight peers is
70 * to make GLightweightPeer a placeholder class that implements
71 * LightweightPeer. Then the Component and Container classes could
72 * identify a peer as lightweight and handle it specially. The
73 * current approach is probably more clear but less efficient.
76 /**
77 * A stub class that implements the ComponentPeer and ContainerPeer
78 * interfaces using callbacks into the Component and Container
79 * classes. GLightweightPeer allows the Component and Container
80 * classes to treat lightweight and heavyweight peers in the same way.
82 * Lightweight components are painted directly onto their parent
83 * containers through an Image object provided by the toolkit.
85 public class GLightweightPeer
86 implements LightweightPeer, ContainerPeer
88 private Component comp;
90 private Insets containerInsets;
92 public GLightweightPeer(Component comp)
94 this.comp = comp;
97 // -------- java.awt.peer.ContainerPeer implementation:
99 public Insets insets()
101 return getInsets ();
104 public Insets getInsets()
106 if (containerInsets == null)
107 containerInsets = new Insets (0,0,0,0);
108 return containerInsets;
111 public void beginValidate()
115 public void endValidate()
119 public void beginLayout()
123 public void endLayout()
127 public boolean isPaintPending()
129 return false;
132 // -------- java.awt.peer.ComponentPeer implementation:
134 public int checkImage(Image img, int width, int height, ImageObserver o)
136 return comp.getToolkit().checkImage(img, width, height, o);
139 public Image createImage(ImageProducer prod)
141 return comp.getToolkit().createImage(prod);
144 /* This method is not called. */
145 public Image createImage(int width, int height)
147 return null;
150 public void disable() {}
152 public void dispose() {}
154 public void enable() {}
156 public GraphicsConfiguration getGraphicsConfiguration()
158 return null;
161 public FontMetrics getFontMetrics(Font f)
163 return comp.getToolkit().getFontMetrics(f);
166 /* Returning null here tells the Component object that called us to
167 * use its parent's Graphics. */
168 public Graphics getGraphics()
170 return null;
173 public Point getLocationOnScreen()
175 Point parentLocation = comp.getParent().getLocationOnScreen();
176 return new Point (parentLocation.x + comp.getX(),
177 parentLocation.y + comp.getY());
180 public Dimension getMinimumSize()
182 return new Dimension(comp.getWidth(), comp.getHeight());
185 /* A lightweight component's preferred size is equivalent to its
186 * Component width and height values. */
187 public Dimension getPreferredSize()
189 return new Dimension(comp.getWidth(), comp.getHeight());
192 /* Returning null here tells the Component object that called us to
193 * use its parent's Toolkit. */
194 public Toolkit getToolkit()
196 return null;
199 public void handleEvent(AWTEvent e) {}
201 public void hide() {}
203 public boolean isFocusable()
205 return false;
208 public boolean isFocusTraversable()
210 return false;
213 public Dimension minimumSize()
215 return getMinimumSize();
218 public Dimension preferredSize()
220 return getPreferredSize();
223 public void paint(Graphics graphics) {}
225 public boolean prepareImage(Image img, int width, int height,
226 ImageObserver o)
228 return comp.getToolkit().prepareImage(img, width, height, o);
231 public void print(Graphics graphics) {}
233 public void repaint(long tm, int x, int y, int width, int height)
235 Component p = comp.getParent();
236 if (p != null)
237 p.repaint(tm, x + comp.getX(), y + comp.getY(), width, height);
240 public void requestFocus() {}
242 public boolean requestFocus(Component source, boolean bool1, boolean bool2, long x)
244 return false;
247 public void reshape(int x, int y, int width, int height) {}
249 public void setBackground(Color color) {}
251 public void setBounds(int x, int y, int width, int height) {}
254 * Sets the cursor on the heavy-weight parent peer.
255 * Called by the MouseListener on mouse enter.
257 public void setCursor(Cursor cursor)
259 Component p = comp.getParent();
260 while (p != null && p.isLightweight())
261 p = p.getParent();
263 if (p != null)
265 // Don't actually change the cursor of the component
266 // otherwise other childs inherit this cursor.
267 ComponentPeer peer = p.getPeer();
268 if (peer != null)
269 peer.setCursor(cursor);
273 public void setEnabled(boolean enabled) {}
275 public void setEventMask(long eventMask) {}
277 public void setFont(Font font) {}
279 public void setForeground(Color color) {}
281 public void setVisible(boolean visible) {}
283 public void show() {}
285 public ColorModel getColorModel ()
287 return comp.getColorModel ();
290 public boolean isObscured()
292 return false;
295 public boolean canDetermineObscurity()
297 return false;
300 public void coalescePaintEvent(PaintEvent e) { }
302 public void updateCursorImmediately() { }
304 public VolatileImage createVolatileImage(int width, int height)
306 return null;
309 public boolean handlesWheelScrolling()
311 return false;
314 public void createBuffers(int x, BufferCapabilities capabilities)
315 throws AWTException { }
317 public Image getBackBuffer()
319 return null;
322 public void flip(BufferCapabilities.FlipContents contents) { }
324 public void destroyBuffers() { }
326 public boolean isRestackSupported()
328 return false;
331 public void cancelPendingPaint(int x, int y, int width, int height)
336 public void restack()
341 public Rectangle getBounds()
343 return null;
346 public void reparent(ContainerPeer parent)
351 public void setBounds(int x, int y, int z, int width, int height)
356 public boolean isReparentSupported()
358 return false;
361 public void layout()