[OpenJDK 2D-Dev] [9] Review request for 8151303 [macosx] [hidpi] JButton's low-res. icon is visible when clicking on it

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Tue Mar 15 16:35:40 UTC 2016


On 15/03/16 18:06, Sergey Bylokhov wrote:
> On 15.03.16 17:01, Alexander Scherbatiy wrote:
>
>>   One update will be that FilteredImageSource should implement
>> MultiResolutionImageProducer even it is used for non multi-resolution
>> images.
>>
>>    The MRI can be created using two general ways: using fixed number of
>> resolution variants or generating a resolution variant with necessary
>> quality on demand.
>>
>>   The current implementation is rely on that MRToolkitImage contains a
>> fixed number of resolution variants. In this case MediaTracker can
>> iterate over resolution variants and load them all.
>>
>>   Using MultiResolutionImageProducer leads that MRToolkitImage will not
>> know about number of resolution variants in case when they are generated
>> on the fly and there will be no way to load all of them by MediaTracker.
>
> Just an idea to thinking about, can we save this filter to the MRI 
> itself and apply it after some resolution variant will be created on 
> the fly?

Do you mean that it helps to leave the code in the AquaUtils class 
unchanged:
---------------
  124     static Image generateLightenedImage(final Image image, final 
int percent) {
  125         final GrayFilter filter = new GrayFilter(true, percent);
  126         final ImageProducer prod = new 
FilteredImageSource(image.getSource(), filter);
  127         return Toolkit.getDefaultToolkit().createImage(prod);
  128     }
---------------

   or it is just an a better way for a filtered multi-resolution image 
generation?

   Thanks,
   Alexandr.
>
>>
>> As I see, the way to solve it is only using MRI.getResolutionVariants()
>> method for the MultiResolutionImageProducer creation. So the result of
>> the call
>>     toolkit.createImage(new FilteredImageSource(mrImage.getSource(),
>> filter));
>>   will be a MRToolkitImage which is based on fixed number of filtered
>> resolution variants from the original MRI.
>>
>>   Thanks,
>>   Alexandr.
>>
>>> ...jim
>>>
>>> On 3/11/16 5:42 AM, Alexander Scherbatiy wrote:
>>>> On 09/03/16 16:58, Sergey Bylokhov wrote:
>>>>> Probably we should enhance 
>>>>> ImageProducer/Tk.createImage/ImageFilter to
>>>>> support this functionality? It seems that the number of usage of this
>>>>> check "image instanceof MultiResolutionImage" will grow over time.
>>>>     ImageProducer produces pixels for an image and is not able to take
>>>> an information about the image resolution variants.
>>>>
>>>>   May be we can add Toolkit.createImage(Image image, ImageFilter
>>>> imageFilter) method which takes MultiResolutionImage into account to
>>>> cover the common case where filtered image is created.
>>>>
>>>>   Thanks,
>>>>   Alexandr.
>>>>> I think that at least our own API should support MultiResolutionImage
>>>>> w/o such checks, otherwise the user will need to do the same.
>>>>>
>>>>> cc 2d-dev
>>>>>
>>>>> On 09.03.16 15:30, Alexander Scherbatiy wrote:
>>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> Could you review the fix:
>>>>>>    bug: https://bugs.openjdk.java.net/browse/JDK-8151303
>>>>>>    webrev: http://cr.openjdk.java.net/~alexsch/8151303/webrev.00
>>>>>>
>>>>>>    The AquaUtils does not take into account MultiResolutionImage for
>>>>>> selected/disabled/lightened images generation.
>>>>>>    The fix also leaves the MultiResolutionCachedImage check because
>>>>>> the
>>>>>> base system icon size can be differ from the requested painted size.
>>>>>>
>>>>>>    Thanks,
>>>>>>    Alexandr.
>>>>>
>>>>>
>>>>
>>
>
>




More information about the 2d-dev mailing list