@@ -172,8 +172,7 @@ private boolean isReusable(int width, int height) {
172172 private Optional <ImageHandle > createHandleAtExactSize (int width , int height ) {
173173 Optional <ImageData > imageData = imageProvider .loadImageDataAtExactSize (width , height );
174174 if (imageData .isPresent ()) {
175- ImageData adaptedData = adaptImageDataIfDisabledOrGray (imageData .get ());
176- ImageHandle imageHandle = init (adaptedData , -1 );
175+ ImageHandle imageHandle = init (imageData .get (), -1 );
177176 return Optional .of (imageHandle );
178177 }
179178 return Optional .empty ();
@@ -186,9 +185,8 @@ private ImageHandle getOrCreateImageHandleAtClosestSize(int widthHint, int heigh
186185 int imageZoom = DPIUtil .getZoomForAutoscaleProperty (Math .max (imageZoomForWidth , imageZoomForHeight ));
187186 ImageHandle bestFittingHandle = zoomLevelToImageHandle .get (imageZoom );
188187 if (bestFittingHandle == null ) {
189- ImageData bestFittingImageData = imageProvider .loadImageData (imageZoom ).element ();
190- ImageData adaptedData = adaptImageDataIfDisabledOrGray (bestFittingImageData );
191- bestFittingHandle = init (adaptedData , -1 );
188+ ImageData bestFittingImageData = imageProvider .loadImageDataWithGrayOrDisablement (imageZoom ).element ();
189+ bestFittingHandle = init (bestFittingImageData , -1 );
192190 }
193191 return bestFittingHandle ;
194192 }
@@ -333,21 +331,10 @@ public Image(Device device, Image srcImage, int flag) {
333331 }
334332 break ;
335333 }
336- case SWT .IMAGE_DISABLE : {
337- for (ImageHandle imageHandle : srcImage .zoomLevelToImageHandle .values ()) {
338- Rectangle rect = imageHandle .getBounds ();
339- ImageData data = srcImage .getImageData (imageHandle .zoom );
340- ImageData newData = applyDisableImageData (data , rect .height , rect .width );
341- init (newData , imageHandle .zoom );
342- }
343- break ;
344- }
334+ case SWT .IMAGE_DISABLE :
345335 case SWT .IMAGE_GRAY : {
346336 for (ImageHandle imageHandle : srcImage .zoomLevelToImageHandle .values ()) {
347- Rectangle rect = imageHandle .getBounds ();
348- ImageData data = srcImage .getImageData (imageHandle .zoom );
349- ImageData newData = applyGrayImageData (data , rect .height , rect .width );
350- init (newData , imageHandle .zoom );
337+ srcImage .getImageData (imageHandle .zoom );
351338 }
352339 break ;
353340 }
@@ -698,9 +685,9 @@ public Image(Device device, ImageGcDrawer imageGcDrawer, int width, int height)
698685 init ();
699686}
700687
701- private ImageData adaptImageDataIfDisabledOrGray (ImageData data ) {
688+ private static ImageData adaptImageDataIfDisabledOrGray (ImageData data , int styleFlag ) {
702689 ImageData returnImageData = null ;
703- switch (this . styleFlag ) {
690+ switch (styleFlag ) {
704691 case SWT .IMAGE_DISABLE : {
705692 ImageData newData = applyDisableImageData (data , data .height , data .width );
706693 returnImageData = newData ;
@@ -726,7 +713,7 @@ void init() {
726713 this .isInitialized = true ;
727714}
728715
729- private ImageData applyDisableImageData (ImageData data , int height , int width ) {
716+ private static ImageData applyDisableImageData (ImageData data , int height , int width ) {
730717 PaletteData palette = data .palette ;
731718 ImageData newData = new ImageData (width , height , 32 , new PaletteData (0xFF , 0xFF00 , 0xFF0000 ));
732719 newData .alpha = data .alpha ;
@@ -775,7 +762,7 @@ private ImageData applyDisableImageData(ImageData data, int height, int width) {
775762 return newData ;
776763}
777764
778- private ImageData applyGrayImageData (ImageData data , int pHeight , int pWidth ) {
765+ private static ImageData applyGrayImageData (ImageData data , int pHeight , int pWidth ) {
779766 PaletteData palette = data .palette ;
780767 ImageData newData = data ;
781768 if (!palette .isDirect ) {
@@ -1456,7 +1443,7 @@ private static ImageData directToDirect(ImageData src, int newDepth, PaletteData
14561443
14571444private record HandleForImageDataContainer (int type , ImageData imageData , long [] handles ) {}
14581445
1459- private static HandleForImageDataContainer init (Device device , ImageData i ) {
1446+ private static HandleForImageDataContainer init (Device device , ImageData i , int styleFlag ) {
14601447 /* Windows does not support 2-bit images. Convert to 4-bit image. */
14611448 if (i .depth == 2 ) {
14621449 i = indexToIndex (i , 4 );
@@ -1665,7 +1652,7 @@ private void setImageMetadataForHandle(ImageHandle imageMetadata, int zoom) {
16651652
16661653private ImageHandle initIconHandle (Device device , ImageData source , ImageData mask , Integer zoom ) {
16671654 ImageData imageData = applyMask (source , mask );
1668- HandleForImageDataContainer imageDataHandle = init (device , imageData );
1655+ HandleForImageDataContainer imageDataHandle = init (device , imageData , this . styleFlag );
16691656 return initIconHandle (imageDataHandle .handles , zoom );
16701657}
16711658
@@ -1690,7 +1677,7 @@ private ImageHandle initBitmapHandle(ImageData imageData, long handle, Integer z
16901677
16911678static long [] initIcon (Device device , ImageData source , ImageData mask ) {
16921679 ImageData imageData = applyMask (source , mask );
1693- return init (device , imageData ).handles ;
1680+ return init (device , imageData , SWT . NONE ).handles ;
16941681}
16951682
16961683private static ImageData applyMask (ImageData source , ImageData mask ) {
@@ -1770,7 +1757,7 @@ private static ImageData applyMask(ImageData source, ImageData mask) {
17701757
17711758private ImageHandle init (ImageData i , int zoom ) {
17721759 if (i == null ) SWT .error (SWT .ERROR_NULL_ARGUMENT );
1773- HandleForImageDataContainer imageDataHandle = init (device , i );
1760+ HandleForImageDataContainer imageDataHandle = init (device , i , this . styleFlag );
17741761 switch (imageDataHandle .type ()) {
17751762 case SWT .ICON : {
17761763 return initIconHandle (imageDataHandle .handles (), zoom );
@@ -2007,6 +1994,11 @@ public Collection<Integer> getPreservedZoomLevels() {
20071994
20081995 protected abstract ElementAtZoom <ImageData > loadImageData (int zoom );
20091996
1997+ protected ElementAtZoom <ImageData > loadImageDataWithGrayOrDisablement (int zoom ) {
1998+ ElementAtZoom <ImageData > imageDataAtZoom = loadImageData (zoom );
1999+ return new ElementAtZoom <>(adaptImageDataIfDisabledOrGray (imageDataAtZoom .element (), styleFlag ), imageDataAtZoom .zoom ());
2000+ }
2001+
20102002 abstract ImageData newImageData (ZoomContext zoomContext );
20112003
20122004 abstract AbstractImageProviderWrapper createCopy (Image image );
@@ -2119,9 +2111,8 @@ protected ImageHandle newImageHandle(ZoomContext zoomContext) {
21192111 }
21202112
21212113 private ImageHandle initializeHandleFromSource (ZoomContext zoomContext ) {
2122- ElementAtZoom <ImageData > imageDataAtZoom = loadImageData (zoomContext .targetZoom ());
2114+ ElementAtZoom <ImageData > imageDataAtZoom = loadImageDataWithGrayOrDisablement (zoomContext .targetZoom ());
21232115 ImageData imageData = DPIUtil .scaleImageData (device , imageDataAtZoom .element (), zoomContext .targetZoom (), imageDataAtZoom .zoom ());
2124- imageData = adaptImageDataIfDisabledOrGray (imageData );
21252116 return newImageHandle (imageData , zoomContext );
21262117 }
21272118}
@@ -2413,9 +2404,8 @@ protected ImageHandle newImageHandle(ZoomContext zoomContext) {
24132404 }
24142405
24152406 private ImageHandle initializeHandleFromSource (int zoom ) {
2416- ElementAtZoom <ImageData > imageDataAtZoom = loadImageData (zoom );
2407+ ElementAtZoom <ImageData > imageDataAtZoom = loadImageDataWithGrayOrDisablement (zoom );
24172408 ImageData imageData = DPIUtil .scaleImageData (device , imageDataAtZoom .element (), zoom , imageDataAtZoom .zoom ());
2418- imageData = adaptImageDataIfDisabledOrGray (imageData );
24192409 return init (imageData , zoom );
24202410 }
24212411
@@ -2736,7 +2726,7 @@ protected long configureGCData(GCData data) {
27362726
27372727 @ Override
27382728 ImageData newImageData (ZoomContext zoomContext ) {
2739- return loadImageData (zoomContext .targetZoom ).element ();
2729+ return loadImageDataWithGrayOrDisablement (zoomContext .targetZoom ).element ();
27402730 }
27412731
27422732 @ Override
@@ -2765,8 +2755,8 @@ protected ImageHandle newImageHandle(ZoomContext zoomContext) {
27652755 drawer .drawOn (gc , width , height );
27662756 ImageData imageData = image .getImageData (targetZoom );
27672757 drawer .postProcess (imageData );
2768- ImageData newData = adaptImageDataIfDisabledOrGray (imageData );
2769- return init (newData , targetZoom );
2758+ imageData = adaptImageDataIfDisabledOrGray (imageData , styleFlag );
2759+ return init (imageData , targetZoom );
27702760 } finally {
27712761 gc .dispose ();
27722762 image .dispose ();
0 commit comments