[OpenJDK 2D-Dev] [9] Review request for 8073320 Windows HiDPI Graphics support
Jim Graham
james.graham at oracle.com
Sat Oct 10 00:14:16 UTC 2015
Hi Alexandr,
Just 2 potential issues I found:
SG2D.java - getResolutionVariant() doesn't take a transform so it can't
take into account the scaling in the transform handed to drawImage(img,
xform). We can leave that as a follow-on bug fix (it won't do bad
things, but it may not pick the best resolution source image).
WGLOffscreenSD (in WGLSD.java) - does peer.getBounds() cache the bounds?
If so, then every time we call get bounds on the WGLWSD we will
permanently modify the peer's bounds. Would it be better to not make the
assumption and just make a protected copy here (perhaps with scale != 1?).
WGLWindowSD - same comment
D3DWindowSD - same comment
GDIWindowSD - same comment
The rest of these are tweaks and optimizations.
BISD.java - why do you have default initializers for the scale fields?
(There are only 2 constructors to cover.)
BIGC.java - [2][NUMTYPES] would involve a lot fewer objects than
[NUMTYPES][2]...
BIGC.java - Or... If we only have 2 variations of each type, why not
just have 2 static arrays instead of a double-indexed array?
int index = (scaleX && scaleY) ? 0 : 1;
becomes:
BIGC configarray = (scaleX && scaleY) ? standardArray : scaledArray;
SG2D.java - Another way of dealing with transform in scaleImage would be
to make a copy of the incoming transform and adjust it to match the
request, as in:
// You can probably assert that dxywh == 0,0,imgW,imgH, or:
AffineTransform renderTX;
if (dxywh == 0,0,imgW,imgH) {
renderTX = xform;
} else {
// Should never happen in practice...
AffineTransform renderTX = new AffineTransform(xform);
renderTX.translate(dx1, dy1);
renderTX.scale((dx2 - dx1) / imgW, (dy2 - dy1) / imgH);
}
double-nested-try {
imagepipe.transformImage(..., renderTX);
} catch (InvalidPipe...) {...}
It would be more code, though, since you'd have to have 2 sets of
"double-nested-try-catch(InvalidPipe)" blocks.
Win32GD.java - is there a need to have static initializers for the scale
fields?
I'll leave the native code review to someone more familiar with that
code base...
...jim
On 9/22/15 2:33 AM, Alexander Scherbatiy wrote:
>
> Hello,
>
> Could you review the fix:
> bug: https://bugs.openjdk.java.net/browse/JDK-8073320
> webrev: http://cr.openjdk.java.net/~alexsch/8073320/webrev.00
>
> This is an initial part of the HiDPI Graphics support on Windows for
> the JEP 263: HiDPI Graphics on Windows and Linux
> http://openjdk.java.net/jeps/263
>
> - scale factors are added to surface dates
> - window size, events coordinates and font are scaled on native side
> - backup buffered image is scaled in SunVolatileImage
> - AwtRobot MouseMove() and GetRGBPixels() methods are updated
> - GetDpiForMonitor function is used to query the specified monitor
> for the horizontal and vertical DPI values.
> If it is not available ID2D1Factory::GetDesktopDpi method is used
> instead.
> - "sun.java2d.uiScale.enabled", "sun.java2d.win.uiScale",
> "sun.java2d.win.uiScaleX", and "sun.java2d.win.uiScaleY" options are
> added for the testing purposes.
>
> Thanks,
> Alexandr.
>
More information about the 2d-dev
mailing list