src/macosx/classes/sun/java2d/opengl/CGLSurfaceData.java
Print this page
*** 28,48 ****
import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
- import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.image.ColorModel;
import sun.java2d.SunGraphics2D;
import sun.java2d.SurfaceData;
import sun.lwawt.macosx.CPlatformView;
public abstract class CGLSurfaceData extends OGLSurfaceData {
protected CPlatformView pView;
private CGLGraphicsConfig graphicsConfig;
native void validate(int xoff, int yoff, int width, int height, boolean isOpaque);
--- 28,52 ----
import java.awt.Graphics;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Image;
import java.awt.Rectangle;
+ import java.awt.geom.AffineTransform;
import java.awt.image.ColorModel;
import sun.java2d.SunGraphics2D;
import sun.java2d.SurfaceData;
+ import sun.java2d.pipe.Region;
import sun.lwawt.macosx.CPlatformView;
public abstract class CGLSurfaceData extends OGLSurfaceData {
+ protected final int scale;
+ protected final int width;
+ protected final int height;
protected CPlatformView pView;
private CGLGraphicsConfig graphicsConfig;
native void validate(int xoff, int yoff, int width, int height, boolean isOpaque);
*** 50,63 ****
int xoff, int yoff, boolean isOpaque);
protected native boolean initPbuffer(long pData, long pConfigInfo,
boolean isOpaque, int width, int height);
protected CGLSurfaceData(CPlatformView pView, CGLGraphicsConfig gc,
! ColorModel cm, int type)
{
! super(gc, cm, type);
this.pView = pView;
this.graphicsConfig = gc;
long pConfigInfo = gc.getNativeConfigInfo();
long pPeerData = 0L;
--- 54,75 ----
int xoff, int yoff, boolean isOpaque);
protected native boolean initPbuffer(long pData, long pConfigInfo,
boolean isOpaque, int width, int height);
+ protected CGLSurfaceData(CGLGraphicsConfig gc, ColorModel cm, int type,
+ int width, int height) {
+ super(gc, cm, type);
+ scale = gc.getDevice().getScaleFactor();
+ this.width = width * scale;
+ this.height = height * scale;
+ }
+
protected CGLSurfaceData(CPlatformView pView, CGLGraphicsConfig gc,
! ColorModel cm, int type,int width, int height)
{
! this(gc, cm, type, width, height);
this.pView = pView;
this.graphicsConfig = gc;
long pConfigInfo = gc.getNativeConfigInfo();
long pPeerData = 0L;
*** 68,80 ****
}
initOps(pConfigInfo, pPeerData, 0, 0, 0, isOpaque);
}
protected CGLSurfaceData(CGLLayer layer, CGLGraphicsConfig gc,
! ColorModel cm, int type)
{
! super(gc, cm, type);
this.graphicsConfig = gc;
long pConfigInfo = gc.getNativeConfigInfo();
long layerPtr = 0L;
boolean isOpaque = true;
--- 80,92 ----
}
initOps(pConfigInfo, pPeerData, 0, 0, 0, isOpaque);
}
protected CGLSurfaceData(CGLLayer layer, CGLGraphicsConfig gc,
! ColorModel cm, int type,int width, int height)
{
! this(gc, cm, type, width, height);
this.graphicsConfig = gc;
long pConfigInfo = gc.getNativeConfigInfo();
long layerPtr = 0L;
boolean isOpaque = true;
*** 155,171 ****
public void validate() {
// Overridden in CGLWindowSurfaceData below
}
protected native void clearWindow();
public static class CGLWindowSurfaceData extends CGLSurfaceData {
public CGLWindowSurfaceData(CPlatformView pView,
CGLGraphicsConfig gc) {
! super(pView, gc, gc.getColorModel(), WINDOW);
}
@Override
public SurfaceData getReplacement() {
return pView.getSurfaceData();
--- 167,213 ----
public void validate() {
// Overridden in CGLWindowSurfaceData below
}
+ @Override
+ public int getDefaultScale() {
+ return scale;
+ }
+
+ @Override
+ public boolean copyArea(SunGraphics2D sg2d, int x, int y, int w, int h,
+ int dx, int dy) {
+ final int state = sg2d.transformState;
+ if (state > SunGraphics2D.TRANSFORM_TRANSLATESCALE
+ || sg2d.compositeState >= SunGraphics2D.COMP_XOR) {
+ return false;
+ }
+ if (state <= SunGraphics2D.TRANSFORM_ANY_TRANSLATE) {
+ x += sg2d.transX;
+ y += sg2d.transY;
+ } else if (state == SunGraphics2D.TRANSFORM_TRANSLATESCALE) {
+ final double[] coords = {x, y, x + w, y + h, x + dx, y + dy};
+ sg2d.transform.transform(coords, 0, coords, 0, 3);
+ x = (int) Math.ceil(coords[0] - 0.5);
+ y = (int) Math.ceil(coords[1] - 0.5);
+ w = ((int) Math.ceil(coords[2] - 0.5)) - x;
+ h = ((int) Math.ceil(coords[3] - 0.5)) - y;
+ dx = ((int) Math.ceil(coords[4] - 0.5)) - x;
+ dy = ((int) Math.ceil(coords[5] - 0.5)) - y;
+ }
+ oglRenderPipe.copyArea(sg2d, x, y, w, h, dx, dy);
+ return true;
+ }
+
protected native void clearWindow();
public static class CGLWindowSurfaceData extends CGLSurfaceData {
public CGLWindowSurfaceData(CPlatformView pView,
CGLGraphicsConfig gc) {
! super(pView, gc, gc.getColorModel(), WINDOW, 0, 0);
}
@Override
public SurfaceData getReplacement() {
return pView.getSurfaceData();
*** 215,235 ****
* the layer redirects all painting to the buffer's graphics.
*/
public static class CGLLayerSurfaceData extends CGLSurfaceData {
private CGLLayer layer;
- private int width, height;
public CGLLayerSurfaceData(CGLLayer layer, CGLGraphicsConfig gc,
int width, int height) {
! super(layer, gc, gc.getColorModel(), FBOBJECT);
!
! this.width = width;
! this.height = height;
this.layer = layer;
!
! initSurface(width, height);
}
@Override
public SurfaceData getReplacement() {
return layer.getSurfaceData();
--- 257,272 ----
* the layer redirects all painting to the buffer's graphics.
*/
public static class CGLLayerSurfaceData extends CGLSurfaceData {
private CGLLayer layer;
public CGLLayerSurfaceData(CGLLayer layer, CGLGraphicsConfig gc,
int width, int height) {
! super(layer, gc, gc.getColorModel(), FBOBJECT, width, height);
this.layer = layer;
! initSurface(this.width, this.height);
}
@Override
public SurfaceData getReplacement() {
return layer.getSurfaceData();
*** 294,315 ****
}
}
public static class CGLOffScreenSurfaceData extends CGLSurfaceData {
private Image offscreenImage;
- private int width, height;
public CGLOffScreenSurfaceData(CPlatformView pView,
CGLGraphicsConfig gc, int width, int height, Image image,
ColorModel cm, int type) {
! super(pView, gc, cm, type);
!
! this.width = width;
! this.height = height;
offscreenImage = image;
!
! initSurface(width, height);
}
@Override
public SurfaceData getReplacement() {
return restoreContents(offscreenImage);
--- 331,347 ----
}
}
public static class CGLOffScreenSurfaceData extends CGLSurfaceData {
private Image offscreenImage;
public CGLOffScreenSurfaceData(CPlatformView pView,
CGLGraphicsConfig gc, int width, int height, Image image,
ColorModel cm, int type) {
! super(pView, gc, cm, type, width, height);
offscreenImage = image;
! initSurface(this.width, this.height);
}
@Override
public SurfaceData getReplacement() {
return restoreContents(offscreenImage);