[OpenJDK 2D-Dev] <AWT Dev> [8] Review request for 8011059 [macosx] Make JDK demos look perfect on retina displays

Peter Levart peter.levart at gmail.com
Thu Oct 31 20:46:35 UTC 2013


On 10/29/2013 05:45 PM, Alexander Scherbatiy wrote:
>> 2. I'm not sure that the proposed getScaledImageName() implementation 
>> in ScalableToolkitImage works perfectly for URLs like this:
>>
>> http://www.exampmle.com/dir/image
>>
>> In this case it will try to find 2x image here:
>>
>> http://www.example@2x.com/dir/image
>>
>> which doesn't look correct.
>        Fixed. Only path part of a URL is converted to path2x. 

Hi Alexander,

URLs like this:

http://www.example.com/dir.ext/image

will still be translated to:

http://www.example.com/dir@2x.ext/image


I think you need to search for last '.' after the last  '/' in the 
getScaledImageName();


Also the following code has some additional bugs:

  853         static Image toScalableImage(Image image, URL url) {
  854
  855             if (url != null && !url.toString().contains("@2x")
  856                     && !(image instanceof ScalableToolkitImage)) {
  857                 String protocol = url.getProtocol();
  858                 String host = url.getHost();
  859                 String file = url.getPath();
  860                 String file2x =*host +*getScaledImageName(file);
  861                 try {
  862                     URL url2x = new URL(protocol, host, file2x);
  863                     url2x.openStream();
  864                     return new ScalableToolkitImage(image, getDefaultToolkit().getImage(url2x));
  865                 } catch (Exception ignore) {
  866                 }
  867             }
  868             return image;
  869         }

Why are you prepending *host* to getScaledImageName(file) in line 860? 
Let's take the following URL for example:

http://www.example.com/dir/image.jpg

protocol = "http"
host = "www.example.com"
file = "/dir/image.jpg"
file2x = "*www.example.com*/dir/image at 2x.jpg"
url2x = URL("http://www.example.com*www.example.com*/dir/image@2x.jpg")


You are missing a part in URL (de)construction - the optional port! For 
example in the following URL:

http://www.example.com:8080/dir/image.jpg

You should extract the port from original URL and use it in new URL 
construction if present (!= -1).


I would also close the stream explicitly after probing for existence of 
resource rather than delegating to GC which might not be promptly and 
can cause resource exhaustion (think of MAX. # of open file descriptors):

         try (InputStream probe = url.openStream()) {}



Regards, Peter


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openjdk.java.net/pipermail/2d-dev/attachments/20131031/12d0e129/attachment.html>


More information about the 2d-dev mailing list