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);