src/macosx/classes/sun/lwawt/LWWindowPeer.java
Print this page
*** 25,35 ****
package sun.lwawt;
import java.awt.*;
import java.awt.event.*;
- import java.awt.image.BufferedImage;
import java.awt.peer.*;
import java.util.List;
import javax.swing.*;
--- 25,34 ----
*** 73,93 ****
private GraphicsConfiguration graphicsConfig;
private SurfaceData surfaceData;
private final Object surfaceDataLock = new Object();
- private int backBufferCount;
- private BufferCapabilities backBufferCaps;
-
- // The back buffer is used for two purposes:
- // 1. To render all the lightweight peers
- // 2. To provide user with a BufferStrategy
- // Need to check if a single back buffer can be used for both
- // TODO: VolatileImage
- // private VolatileImage backBuffer;
- private volatile BufferedImage backBuffer;
-
private volatile int windowState = Frame.NORMAL;
// check that the mouse is over the window
private volatile boolean isMouseOver = false;
--- 72,81 ----
*** 225,235 ****
oldData.invalidate();
}
if (isGrabbing()) {
ungrab();
}
- destroyBuffers();
platformWindow.dispose();
super.disposeImpl();
}
@Override
--- 213,222 ----
*** 256,268 ****
}
}
}
@Override
! public GraphicsConfiguration getGraphicsConfiguration() {
return graphicsConfig;
}
@Override
public boolean updateGraphicsData(GraphicsConfiguration gc) {
setGraphicsConfig(gc);
return false;
--- 243,257 ----
}
}
}
@Override
! public final GraphicsConfiguration getGraphicsConfiguration() {
! synchronized (getStateLock()) {
return graphicsConfig;
}
+ }
@Override
public boolean updateGraphicsData(GraphicsConfiguration gc) {
setGraphicsConfig(gc);
return false;
*** 283,334 ****
}
return platformWindow.transformGraphics(new SunGraphics2D(getSurfaceData(), fg, bg, f));
}
@Override
- public void createBuffers(int numBuffers, BufferCapabilities caps)
- throws AWTException
- {
- try {
- // Assume this method is never called with numBuffers <= 1, as 0 is
- // unsupported, and 1 corresponds to a SingleBufferStrategy which
- // doesn't depend on the peer. Screen is considered as a separate
- // "buffer", that's why numBuffers - 1
- assert numBuffers > 1;
-
- replaceSurfaceData(numBuffers - 1, caps, false);
- } catch (InvalidPipeException z) {
- throw new AWTException(z.toString());
- }
- }
-
- @Override
- public final Image getBackBuffer() {
- synchronized (getStateLock()) {
- return backBuffer;
- }
- }
-
- @Override
- public void flip(int x1, int y1, int x2, int y2,
- BufferCapabilities.FlipContents flipAction)
- {
- platformWindow.flip(x1, y1, x2, y2, flipAction);
- }
-
- @Override
- public final void destroyBuffers() {
- final Image oldBB = getBackBuffer();
- synchronized (getStateLock()) {
- backBuffer = null;
- }
- if (oldBB != null) {
- oldBB.flush();
- }
- }
-
- @Override
public void setBounds(int x, int y, int w, int h, int op) {
if ((op & SET_CLIENT_SIZE) != 0) {
// SET_CLIENT_SIZE is only applicable to window peers, so handle it here
// instead of pulling 'insets' field up to LWComponentPeer
// no need to add insets since Window's notion of width and height includes insets.
--- 272,281 ----
*** 341,361 ****
}
if (h < MINIMUM_HEIGHT) {
h = MINIMUM_HEIGHT;
}
! if (graphicsConfig instanceof TextureSizeConstraining) {
! final int maxW = ((TextureSizeConstraining)graphicsConfig).getMaxTextureWidth();
! final int maxH = ((TextureSizeConstraining)graphicsConfig).getMaxTextureHeight();
if (w > maxW) {
w = maxW;
}
if (h > maxH) {
h = maxH;
}
- }
// Don't post ComponentMoved/Resized and Paint events
// until we've got a notification from the delegate
setBounds(x, y, w, h, op, false, false);
// Get updated bounds, so we don't have to handle 'op' here manually
--- 288,306 ----
}
if (h < MINIMUM_HEIGHT) {
h = MINIMUM_HEIGHT;
}
! final int maxW = getLWGC().getMaxTextureWidth();
! final int maxH = getLWGC().getMaxTextureHeight();
if (w > maxW) {
w = maxW;
}
if (h > maxH) {
h = maxH;
}
// Don't post ComponentMoved/Resized and Paint events
// until we've got a notification from the delegate
setBounds(x, y, w, h, op, false, false);
// Get updated bounds, so we don't have to handle 'op' here manually
*** 429,453 ****
min.height = Math.max(min.height, MINIMUM_HEIGHT);
} else {
min = new Dimension(MINIMUM_WIDTH, MINIMUM_HEIGHT);
}
- final int maxW, maxH;
- if (graphicsConfig instanceof TextureSizeConstraining) {
- maxW = ((TextureSizeConstraining)graphicsConfig).getMaxTextureWidth();
- maxH = ((TextureSizeConstraining)graphicsConfig).getMaxTextureHeight();
- } else {
- maxW = maxH = Integer.MAX_VALUE;
- }
-
final Dimension max;
if (getTarget().isMaximumSizeSet()) {
max = getTarget().getMaximumSize();
! max.width = Math.min(max.width, maxW);
! max.height = Math.min(max.height, maxH);
} else {
! max = new Dimension(maxW, maxH);
}
platformWindow.setSizeConstraints(min.width, min.height, max.width, max.height);
}
--- 374,391 ----
min.height = Math.max(min.height, MINIMUM_HEIGHT);
} else {
min = new Dimension(MINIMUM_WIDTH, MINIMUM_HEIGHT);
}
final Dimension max;
if (getTarget().isMaximumSizeSet()) {
max = getTarget().getMaximumSize();
! max.width = Math.min(max.width, getLWGC().getMaxTextureWidth());
! max.height = Math.min(max.height, getLWGC().getMaxTextureHeight());
} else {
! max = new Dimension(getLWGC().getMaxTextureWidth(),
! getLWGC().getMaxTextureHeight());
}
platformWindow.setSizeConstraints(min.width, min.height, max.width, max.height);
}
*** 1012,1036 ****
private void replaceSurfaceData() {
replaceSurfaceData(true);
}
! private void replaceSurfaceData(boolean blit) {
! replaceSurfaceData(backBufferCount, backBufferCaps, blit);
! }
!
! private void replaceSurfaceData(int newBackBufferCount,
! BufferCapabilities newBackBufferCaps,
! boolean blit) {
synchronized (surfaceDataLock) {
final SurfaceData oldData = getSurfaceData();
surfaceData = platformWindow.replaceSurfaceData();
- // TODO: volatile image
- // VolatileImage oldBB = backBuffer;
- BufferedImage oldBB = backBuffer;
- backBufferCount = newBackBufferCount;
- backBufferCaps = newBackBufferCaps;
final Rectangle size = getSize();
if (getSurfaceData() != null && oldData != getSurfaceData()) {
clearBackground(size.width, size.height);
}
--- 950,963 ----
private void replaceSurfaceData() {
replaceSurfaceData(true);
}
! private void replaceSurfaceData(final boolean blit) {
synchronized (surfaceDataLock) {
final SurfaceData oldData = getSurfaceData();
surfaceData = platformWindow.replaceSurfaceData();
final Rectangle size = getSize();
if (getSurfaceData() != null && oldData != getSurfaceData()) {
clearBackground(size.width, size.height);
}
*** 1041,1079 ****
if (oldData != null && oldData != getSurfaceData()) {
// TODO: drop oldData for D3D/WGL pipelines
// This can only happen when this peer is being created
oldData.flush();
}
-
- // TODO: volatile image
- // backBuffer = (VolatileImage)delegate.createBackBuffer();
- backBuffer = (BufferedImage) platformWindow.createBackBuffer();
- if (backBuffer != null) {
- Graphics g = backBuffer.getGraphics();
- try {
- Rectangle r = getBounds();
- if (g instanceof Graphics2D) {
- ((Graphics2D) g).setComposite(AlphaComposite.Src);
- }
- g.setColor(nonOpaqueBackground);
- g.fillRect(0, 0, r.width, r.height);
- if (g instanceof SunGraphics2D) {
- SG2DConstraint((SunGraphics2D) g, getRegion());
- }
- if (!isTextured()) {
- g.setColor(getBackground());
- g.fillRect(0, 0, r.width, r.height);
- }
- if (oldBB != null) {
- // Draw the old back buffer to the new one
- g.drawImage(oldBB, 0, 0, null);
- oldBB.flush();
- }
- } finally {
- g.dispose();
- }
- }
}
}
private void blitSurfaceData(final SurfaceData src, final SurfaceData dst) {
//TODO blit. proof-of-concept
--- 968,977 ----
*** 1090,1107 ****
getRegion(), 0, 0, 0, 0, size.width, size.height);
}
}
}
- public int getBackBufferCount() {
- return backBufferCount;
- }
-
- public BufferCapabilities getBackBufferCaps() {
- return backBufferCaps;
- }
-
/*
* Request the window insets from the delegate and compares it
* with the current one. This method is mostly called by the
* delegate, e.g. when the window state is changed and insets
* should be recalculated.
--- 988,997 ----