<AWT Dev> [OpenJDK 2D-Dev] [9] Review request for 8073320 Windows HiDPI Graphics support

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Wed Oct 21 13:34:02 UTC 2015


  Could you review the updated fix:
    http://cr.openjdk.java.net/~alexsch/8073320/webrev.01/

  - xform is concatenated with transform in SG2D.getResolutionVariant() 
method
  - imagepipe.transformImage() is used for drawImage(Image, 
AffineTransform,...) case
  - scale factors are made final in BufImgSurfaceData
  - two arrays are used for configs caching in BIGC
  - scale factors intialized from properties are moved to the static 
block in Win32GD

On 10/10/2015 3:14 AM, Jim Graham wrote:
> 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?

    No. peer.getBounds() directly calls targetComponent.getBounds() 
which returns a copy of original bounds.

   Thanks,
   Alexandr.
> 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 awt-dev mailing list