mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-11 06:27:13 -06:00
MultiResolutionImageSupport optimizations:
- ProducerMultiResolutionImage: avoid creation of base image to get image width and height, because if screen is scaled then the base image would be never painted, but consumes memory and takes time to create it - MappedMultiResolutionImage: delegate getting width/height/source/property to original image, to defer/avoid creation of mapped image
This commit is contained in:
@@ -20,6 +20,8 @@ import java.awt.Dimension;
|
|||||||
import java.awt.Image;
|
import java.awt.Image;
|
||||||
import java.awt.image.AbstractMultiResolutionImage;
|
import java.awt.image.AbstractMultiResolutionImage;
|
||||||
import java.awt.image.BaseMultiResolutionImage;
|
import java.awt.image.BaseMultiResolutionImage;
|
||||||
|
import java.awt.image.ImageObserver;
|
||||||
|
import java.awt.image.ImageProducer;
|
||||||
import java.awt.image.MultiResolutionImage;
|
import java.awt.image.MultiResolutionImage;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -117,6 +119,26 @@ public class MultiResolutionImageSupport
|
|||||||
return mapAndCacheImage( mrImage );
|
return mapAndCacheImage( mrImage );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getWidth( ImageObserver observer ) {
|
||||||
|
return mrImage.getWidth( observer );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getHeight( ImageObserver observer ) {
|
||||||
|
return mrImage.getHeight( observer );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ImageProducer getSource() {
|
||||||
|
return mrImage.getSource();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getProperty( String name, ImageObserver observer ) {
|
||||||
|
return mrImage.getProperty( name, observer );
|
||||||
|
}
|
||||||
|
|
||||||
private Image mapAndCacheImage( Image image ) {
|
private Image mapAndCacheImage( Image image ) {
|
||||||
return cache.computeIfAbsent( image, img -> {
|
return cache.computeIfAbsent( image, img -> {
|
||||||
// using ImageIcon here makes sure that the image is loaded
|
// using ImageIcon here makes sure that the image is loaded
|
||||||
@@ -160,6 +182,16 @@ public class MultiResolutionImageSupport
|
|||||||
return produceAndCacheImage( dimensions[0] );
|
return produceAndCacheImage( dimensions[0] );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getWidth( ImageObserver observer ) {
|
||||||
|
return dimensions[0].width;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getHeight( ImageObserver observer ) {
|
||||||
|
return dimensions[0].height;
|
||||||
|
}
|
||||||
|
|
||||||
private Image produceAndCacheImage( Dimension size ) {
|
private Image produceAndCacheImage( Dimension size ) {
|
||||||
return cache.computeIfAbsent( size, size2 -> {
|
return cache.computeIfAbsent( size, size2 -> {
|
||||||
// using ImageIcon here makes sure that the image is loaded
|
// using ImageIcon here makes sure that the image is loaded
|
||||||
|
|||||||
Reference in New Issue
Block a user