On Fri, 23 May 2025 20:59:41 GMT, Phil Race <p...@openjdk.org> wrote:
>> Graphics copyArea overflow check bails out of copying pixels if there is >> overflow. >> The spec says ""If a portion of the source rectangle lies outside the bounds >> of the component, or is obscured by another window or component, {@code >> copyArea} *will be unable to copy* the associated pixels" >> >> which suggests that we should always copy the parts inside the bounds and >> never the parts outside the bounds >> but it seems currently, in the case of overflow it no longer copies any >> pixels, including the parts that are inside. >> So, the fix clips the copyarea region to clip bounds so it will only affect >> pixels within the valid bounds, and any pixels outside will be ignored. > > src/java.desktop/share/native/libawt/java2d/loops/Blit.c line 85: > >> 83: dstInfo.bounds.x2 = UNSAFE_TO_ADD(dstx, width) >> 84: ? clipInfo.bounds.x2 : (dstx + width); >> 85: dstInfo.bounds.y2 = UNSAFE_TO_ADD(dsty, height) > > why wouldn't you always want to limit it to the clip ? > I mean shouldn't it be like this ? > dstInfo.bounds.x2 = UNSAFE_TO_ADD(dstx, width) ? clipInfo.bounds.x2 : > (((dstx + width) > clipInfo.bounds.x2) ? clipInfo.bounds.x2 : (dstx + width)); > or maybe a bit more readable as > dstInfo.bounds.x2 = ((UNSAFE_TO_ADD(dstx, width) || ((dstx + width) > > clipInfo.bounds.x2)) ? clipInfo.bounds.x2 : (dstx + width); That is because down below it anyway calls `SurfaceData_IntersectBounds(&dstInfo.bounds, &clipInfo.bounds); ` so it should clip to clipInfo.bounds there I presume.. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/25340#discussion_r2106426836