@@ -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 ();
@@ -187,8 +186,7 @@ private ImageHandle getOrCreateImageHandleAtClosestSize(int widthHint, int heigh
187186 ImageHandle bestFittingHandle = zoomLevelToImageHandle .get (imageZoom );
188187 if (bestFittingHandle == null ) {
189188 ImageData bestFittingImageData = imageProvider .loadImageData (imageZoom ).element ();
190- ImageData adaptedData = adaptImageDataIfDisabledOrGray (bestFittingImageData );
191- bestFittingHandle = init (adaptedData , -1 );
189+ bestFittingHandle = init (bestFittingImageData , -1 );
192190 }
193191 return bestFittingHandle ;
194192 }
@@ -333,21 +331,11 @@ 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- }
345- case SWT .IMAGE_GRAY : {
334+ case SWT .IMAGE_DISABLE :
335+ case SWT .IMAGE_GRAY :{
346336 for (ImageHandle imageHandle : srcImage .zoomLevelToImageHandle .values ()) {
347- Rectangle rect = imageHandle .getBounds ();
348337 ImageData data = srcImage .getImageData (imageHandle .zoom );
349- ImageData newData = applyGrayImageData (data , rect .height , rect .width );
350- init (newData , imageHandle .zoom );
338+ init (data , imageHandle .zoom );
351339 }
352340 break ;
353341 }
@@ -698,9 +686,9 @@ public Image(Device device, ImageGcDrawer imageGcDrawer, int width, int height)
698686 init ();
699687}
700688
701- private ImageData adaptImageDataIfDisabledOrGray (ImageData data ) {
689+ private static ImageData adaptImageDataIfDisabledOrGray (ImageData data , int styleFlag ) {
702690 ImageData returnImageData = null ;
703- switch (this . styleFlag ) {
691+ switch (styleFlag ) {
704692 case SWT .IMAGE_DISABLE : {
705693 ImageData newData = applyDisableImageData (data , data .height , data .width );
706694 returnImageData = newData ;
@@ -726,7 +714,7 @@ void init() {
726714 this .isInitialized = true ;
727715}
728716
729- private ImageData applyDisableImageData (ImageData data , int height , int width ) {
717+ private static ImageData applyDisableImageData (ImageData data , int height , int width ) {
730718 PaletteData palette = data .palette ;
731719 ImageData newData = new ImageData (width , height , 32 , new PaletteData (0xFF , 0xFF00 , 0xFF0000 ));
732720 newData .alpha = data .alpha ;
@@ -775,7 +763,7 @@ private ImageData applyDisableImageData(ImageData data, int height, int width) {
775763 return newData ;
776764}
777765
778- private ImageData applyGrayImageData (ImageData data , int pHeight , int pWidth ) {
766+ private static ImageData applyGrayImageData (ImageData data , int pHeight , int pWidth ) {
779767 PaletteData palette = data .palette ;
780768 ImageData newData = data ;
781769 if (!palette .isDirect ) {
@@ -1456,7 +1444,8 @@ private static ImageData directToDirect(ImageData src, int newDepth, PaletteData
14561444
14571445private record HandleForImageDataContainer (int type , ImageData imageData , long [] handles ) {}
14581446
1459- private static HandleForImageDataContainer init (Device device , ImageData i ) {
1447+ private static HandleForImageDataContainer init (Device device , ImageData i , int styleFlag ) {
1448+ i = adaptImageDataIfDisabledOrGray (i , styleFlag );
14601449 /* Windows does not support 2-bit images. Convert to 4-bit image. */
14611450 if (i .depth == 2 ) {
14621451 i = indexToIndex (i , 4 );
@@ -1665,7 +1654,7 @@ private void setImageMetadataForHandle(ImageHandle imageMetadata, int zoom) {
16651654
16661655private ImageHandle initIconHandle (Device device , ImageData source , ImageData mask , Integer zoom ) {
16671656 ImageData imageData = applyMask (source , mask );
1668- HandleForImageDataContainer imageDataHandle = init (device , imageData );
1657+ HandleForImageDataContainer imageDataHandle = init (device , imageData , this . styleFlag );
16691658 return initIconHandle (imageDataHandle .handles , zoom );
16701659}
16711660
@@ -1688,9 +1677,9 @@ private ImageHandle initBitmapHandle(ImageData imageData, long handle, Integer z
16881677 return new ImageHandle (handle , zoom , imageData .transparentPixel );
16891678}
16901679
1691- static long [] initIcon (Device device , ImageData source , ImageData mask ) {
1680+ static long [] initIcon (Device device , ImageData source , ImageData mask , int styleFlag ) {
16921681 ImageData imageData = applyMask (source , mask );
1693- return init (device , imageData ).handles ;
1682+ return init (device , imageData , styleFlag ).handles ;
16941683}
16951684
16961685private static ImageData applyMask (ImageData source , ImageData mask ) {
@@ -1770,7 +1759,7 @@ private static ImageData applyMask(ImageData source, ImageData mask) {
17701759
17711760private ImageHandle init (ImageData i , int zoom ) {
17721761 if (i == null ) SWT .error (SWT .ERROR_NULL_ARGUMENT );
1773- HandleForImageDataContainer imageDataHandle = init (device , i );
1762+ HandleForImageDataContainer imageDataHandle = init (device , i , this . styleFlag );
17741763 switch (imageDataHandle .type ()) {
17751764 case SWT .ICON : {
17761765 return initIconHandle (imageDataHandle .handles (), zoom );
@@ -2121,7 +2110,6 @@ protected ImageHandle newImageHandle(ZoomContext zoomContext) {
21212110 private ImageHandle initializeHandleFromSource (ZoomContext zoomContext ) {
21222111 ElementAtZoom <ImageData > imageDataAtZoom = loadImageData (zoomContext .targetZoom ());
21232112 ImageData imageData = DPIUtil .scaleImageData (device , imageDataAtZoom .element (), zoomContext .targetZoom (), imageDataAtZoom .zoom ());
2124- imageData = adaptImageDataIfDisabledOrGray (imageData );
21252113 return newImageHandle (imageData , zoomContext );
21262114 }
21272115}
@@ -2415,7 +2403,6 @@ protected ImageHandle newImageHandle(ZoomContext zoomContext) {
24152403 private ImageHandle initializeHandleFromSource (int zoom ) {
24162404 ElementAtZoom <ImageData > imageDataAtZoom = loadImageData (zoom );
24172405 ImageData imageData = DPIUtil .scaleImageData (device , imageDataAtZoom .element (), zoom , imageDataAtZoom .zoom ());
2418- imageData = adaptImageDataIfDisabledOrGray (imageData );
24192406 return init (imageData , zoom );
24202407 }
24212408
@@ -2765,8 +2752,7 @@ protected ImageHandle newImageHandle(ZoomContext zoomContext) {
27652752 drawer .drawOn (gc , width , height );
27662753 ImageData imageData = image .getImageData (targetZoom );
27672754 drawer .postProcess (imageData );
2768- ImageData newData = adaptImageDataIfDisabledOrGray (imageData );
2769- return init (newData , targetZoom );
2755+ return init (imageData , targetZoom );
27702756 } finally {
27712757 gc .dispose ();
27722758 image .dispose ();
0 commit comments