[OpenJDK 2D-Dev] Review request for 8029339 Custom MultiResolution image support on HiDPI displays

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Tue Jul 28 15:33:39 UTC 2015

  Hello Jim,

  Could you review the updated fix: 
   - the suggested comments are updated
   - the MultiResolutionRenderingHintsTest is updated to use custom 
GraphicsConfiguration and SurfaceData

On 7/23/2015 8:25 PM, Jim Graham wrote:
> Hi Alexandr,
> On 7/21/15 7:41 AM, Alexander Scherbatiy wrote:
>>    Hello Jim,
>>   Thank your for the review.
>>   Could you review the updated fix there the suggested comments are
>> updated:
>>      http://cr.openjdk.java.net/~alexsch/8029339/webrev.09/
> Minor comments embedded below.
>> On 7/14/2015 2:36 AM, Jim Graham wrote:
>>> AbstractMRI - getGraphics() should include "getGraphics() not
>>> supported on Multi-Resolution Images" as the exception description 
>>> text.
> AbstractMRI - the getGraphics() description string contains an 
> embedded '\n' and an embedded '\"', are those typos?
>>> BaseMRI - class comment - "The implementation will return the first
>>> ... satisfy the rendering request."  Add another sentence right there
>>> "The last image in the array will be returned if no suitable image is
>>> found that is larger than the rendering request."
> BaseMRI - whoops, my bad.  "that is larger than" should probably be 
> "that is as large as" to match the <= comparison
>>> SG2D.getResolutionVariant - using destRegionWH to calculate
>>> destImageWH can involve a lot of "do some math and then later have
>>> additional code undo it".  Would it be faster to just compute
>>> destImageWH directly, as in:
>>> float destImageWidth, destImageHeight;
>>> if (BASE) {
>>>     destImageWH = srcWH;
>>> } else if (DPI) {
>>>     destImageWH = (float) abs(srcWH * devScale);
>>> } else {
>>>     double destRegionWidth, destRegionHeight;
>>>     if (type) {
>>>     ...
>>>     }
>>>     destImageWH = (float) abs(srcWH * destRegionWH / swh);
>>> }
>>> Image rv = img.getRV(destImageWH);
> For the BASE and DPI_FIT cases shouldn't you use srcWidth,srcHeight 
> instead of sw,sh?  The sw,sh are affected by sub-image parameters, but 
> srcWidth,srcHeight are literally the size of the original image, which 
> is what you want to search the MRI for.  The sw,sh should only be used 
> to scale the srcWidth in the "else" clause - as in "srcWidth * 
> destRegionWidth / sw".

    You are right. sw and sh are sizes of a region in the original 
image. I have updated the fix to use srcWidth/Height.

>>> Is there intent to have the default case be mapped to DPI_FIT for
>>> Windows?
>>      I think yes.
> I didn't see where this was being done - is that a TBD follow-on fix 
> or did I miss a default somewhere?
    I think that it could be fixed with the updating WToolkit to load 
high-resolution toolkit images in the same way as it is done in LWCToolkit.
    At least it can be filled as a separate issue.

>>> MRRHTest - why not render to a BufferedImage and avoid Robot? Could it
>>> tap into internal APIs to create a BImg/compatibleImage with a given
>>> devScale?
>>     The DPI_FIT test includes case there a graphics transform is
>> identity but the device configuration transform has scale 2.
>>     There should be a way to set scale for the device configuration
>> transform;
> Ah yes, DPI_FIT needs a default transform.  Also, without a way to 
> manually create a device with a transform, that means that DPI_FIT is 
> only successfully tested if the tests are run on a HiDPI machine, right?
>>> MRRHTest - why allow up to delta=50 on the comparison?
>>      It is just for monitors that are calibrated on Mac OS X and they
>> colors are different from that which was set. The test uses colors which
>> have at least one color component differ by 255.
> Another issue that might go away if we could use BImg instead of robot.
>>> MRRHTest - since the scale factor comes from a dialog, we depend on
>>> running this on a HiDPI display to fully test the hints? Could using
>>> "scaled compatible images" allow testing this more definitively?
>>     Could you explain more what does it mean "scaled compatible images"?
> I seem to recall that there is a mechanism in there to create 
> backbuffer images for swing that record the fact that they are 
> scaled.  I forget how this is done, but I'm wondering if it could be 
> used to run all of this test code in a simulated scale environment 
> rather than using the actual configurations that AWT creates for the 
> current system.

    I have updated the test to use custom GraphicsConfiguration and 
SurfaceData. This allows to use custom scales both on the graphics 
configuration and on graphics.


>             ...jim

More information about the 2d-dev mailing list