# HG changeset patch # User prr # Date 1469468172 25200 # Node ID 59833102e41b3598ee1cf9436589eb8917d26857 # Parent a7297a9dd5fa6c126a0e73bedb507ed2e55e527d 8147542: ClassCastException when repainting after display resolution change Reviewed-by: prr, flar Contributed-by: alexey.ushakov@jetbrains.com diff -r a7297a9dd5fa -r 59833102e41b jdk/src/java.desktop/unix/classes/sun/java2d/xr/XRPMBlitLoops.java --- a/jdk/src/java.desktop/unix/classes/sun/java2d/xr/XRPMBlitLoops.java Mon Jul 25 15:29:24 2016 +0530 +++ b/jdk/src/java.desktop/unix/classes/sun/java2d/xr/XRPMBlitLoops.java Mon Jul 25 10:36:12 2016 -0700 @@ -127,7 +127,11 @@ vImgSurfaceType = SurfaceType.IntArgbPre; } - if (vImg == null || vImg.getWidth() < w || vImg.getHeight() < h) { + if (vImg == null || vImg.getWidth() < w || vImg.getHeight() < h || + // Sometimes we get volatile image of wrong dest surface type, + // so recreating it + !(vImg.getDestSurface() instanceof XRSurfaceData)) + { if (vImg != null) { vImg.flush(); } @@ -142,6 +146,11 @@ } Blit swToSurfaceBlit = Blit.getFromCache(src.getSurfaceType(), CompositeType.SrcNoEa, vImgSurfaceType); + + if (!(vImg.getDestSurface() instanceof XRSurfaceData)) { + throw new InvalidPipeException("wrong surface data type: " + vImg.getDestSurface()); + } + XRSurfaceData vImgSurface = (XRSurfaceData) vImg.getDestSurface(); swToSurfaceBlit.Blit(src, vImgSurface, AlphaComposite.Src, null, sx, sy, 0, 0, w, h);