@@ -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,12 @@ 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+ ImageData imageData = imageHandle .getImageData ();
338+ imageData = adaptImageDataIfDisabledOrGray (imageData ,this .styleFlag );
339+ init (imageData , imageHandle .zoom );
351340 }
352341 break ;
353342 }
@@ -698,9 +687,10 @@ public Image(Device device, ImageGcDrawer imageGcDrawer, int width, int height)
698687 init ();
699688}
700689
701- private ImageData adaptImageDataIfDisabledOrGray (ImageData data ) {
690+ private static ImageData adaptImageDataIfDisabledOrGray (ImageData data , int styleFlag ) {
702691 ImageData returnImageData = null ;
703- switch (this .styleFlag ) {
692+ System .out .println (styleFlag );
693+ switch (styleFlag ) {
704694 case SWT .IMAGE_DISABLE : {
705695 ImageData newData = applyDisableImageData (data , data .height , data .width );
706696 returnImageData = newData ;
@@ -726,7 +716,7 @@ void init() {
726716 this .isInitialized = true ;
727717}
728718
729- private ImageData applyDisableImageData (ImageData data , int height , int width ) {
719+ private static ImageData applyDisableImageData (ImageData data , int height , int width ) {
730720 PaletteData palette = data .palette ;
731721 ImageData newData = new ImageData (width , height , 32 , new PaletteData (0xFF , 0xFF00 , 0xFF0000 ));
732722 newData .alpha = data .alpha ;
@@ -775,7 +765,7 @@ private ImageData applyDisableImageData(ImageData data, int height, int width) {
775765 return newData ;
776766}
777767
778- private ImageData applyGrayImageData (ImageData data , int pHeight , int pWidth ) {
768+ private static ImageData applyGrayImageData (ImageData data , int pHeight , int pWidth ) {
779769 PaletteData palette = data .palette ;
780770 ImageData newData = data ;
781771 if (!palette .isDirect ) {
@@ -1456,7 +1446,7 @@ private static ImageData directToDirect(ImageData src, int newDepth, PaletteData
14561446
14571447private record HandleForImageDataContainer (int type , ImageData imageData , long [] handles ) {}
14581448
1459- private static HandleForImageDataContainer init (Device device , ImageData i ) {
1449+ private static HandleForImageDataContainer init (Device device , ImageData i , int styleFlag ) {
14601450 /* Windows does not support 2-bit images. Convert to 4-bit image. */
14611451 if (i .depth == 2 ) {
14621452 i = indexToIndex (i , 4 );
@@ -1665,7 +1655,7 @@ private void setImageMetadataForHandle(ImageHandle imageMetadata, int zoom) {
16651655
16661656private ImageHandle initIconHandle (Device device , ImageData source , ImageData mask , Integer zoom ) {
16671657 ImageData imageData = applyMask (source , mask );
1668- HandleForImageDataContainer imageDataHandle = init (device , imageData );
1658+ HandleForImageDataContainer imageDataHandle = init (device , imageData , this . styleFlag );
16691659 return initIconHandle (imageDataHandle .handles , zoom );
16701660}
16711661
@@ -1690,7 +1680,7 @@ private ImageHandle initBitmapHandle(ImageData imageData, long handle, Integer z
16901680
16911681static long [] initIcon (Device device , ImageData source , ImageData mask ) {
16921682 ImageData imageData = applyMask (source , mask );
1693- return init (device , imageData ).handles ;
1683+ return init (device , imageData , SWT . NONE ).handles ;
16941684}
16951685
16961686private static ImageData applyMask (ImageData source , ImageData mask ) {
@@ -1770,7 +1760,7 @@ private static ImageData applyMask(ImageData source, ImageData mask) {
17701760
17711761private ImageHandle init (ImageData i , int zoom ) {
17721762 if (i == null ) SWT .error (SWT .ERROR_NULL_ARGUMENT );
1773- HandleForImageDataContainer imageDataHandle = init (device , i );
1763+ HandleForImageDataContainer imageDataHandle = init (device , i , this . styleFlag );
17741764 switch (imageDataHandle .type ()) {
17751765 case SWT .ICON : {
17761766 return initIconHandle (imageDataHandle .handles (), zoom );
@@ -2007,6 +1997,11 @@ public Collection<Integer> getPreservedZoomLevels() {
20071997
20081998 protected abstract ElementAtZoom <ImageData > loadImageData (int zoom );
20091999
2000+ protected ElementAtZoom <ImageData > loadImageDataWithGrayOrDisablement (int zoom ) {
2001+ ElementAtZoom <ImageData > imageDataAtZoom = loadImageData (zoom );
2002+ return new ElementAtZoom <>(adaptImageDataIfDisabledOrGray (imageDataAtZoom .element (), styleFlag ), imageDataAtZoom .zoom ());
2003+ }
2004+
20102005 abstract ImageData newImageData (int zoom );
20112006
20122007 abstract AbstractImageProviderWrapper createCopy (Image image );
@@ -2119,9 +2114,8 @@ protected ImageHandle newImageHandle(ZoomContext zoomContext) {
21192114 }
21202115
21212116 private ImageHandle initializeHandleFromSource (ZoomContext zoomContext ) {
2122- ElementAtZoom <ImageData > imageDataAtZoom = loadImageData (zoomContext .targetZoom ());
2117+ ElementAtZoom <ImageData > imageDataAtZoom = loadImageDataWithGrayOrDisablement (zoomContext .targetZoom ());
21232118 ImageData imageData = DPIUtil .scaleImageData (device , imageDataAtZoom .element (), zoomContext .targetZoom (), imageDataAtZoom .zoom ());
2124- imageData = adaptImageDataIfDisabledOrGray (imageData );
21252119 return newImageHandle (imageData , zoomContext );
21262120 }
21272121}
@@ -2279,6 +2273,7 @@ ImageData newImageData(int zoom) {
22792273 if (memGC != null ) {
22802274 return newImageHandle (new ZoomContext (zoom )).getImageData ();
22812275 }
2276+
22822277 return getScaledImageData (zoom );
22832278 }
22842279
@@ -2412,9 +2407,8 @@ protected ImageHandle newImageHandle(ZoomContext zoomContext) {
24122407 }
24132408
24142409 private ImageHandle initializeHandleFromSource (int zoom ) {
2415- ElementAtZoom <ImageData > imageDataAtZoom = loadImageData (zoom );
2410+ ElementAtZoom <ImageData > imageDataAtZoom = loadImageDataWithGrayOrDisablement (zoom );
24162411 ImageData imageData = DPIUtil .scaleImageData (device , imageDataAtZoom .element (), zoom , imageDataAtZoom .zoom ());
2417- imageData = adaptImageDataIfDisabledOrGray (imageData );
24182412 return init (imageData , zoom );
24192413 }
24202414
@@ -2735,7 +2729,7 @@ protected long configureGCData(GCData data) {
27352729
27362730 @ Override
27372731 ImageData newImageData (int zoom ) {
2738- return loadImageData (zoom ).element ();
2732+ return loadImageDataWithGrayOrDisablement (zoom ).element ();
27392733 }
27402734
27412735 @ Override
@@ -2764,7 +2758,7 @@ protected ImageHandle newImageHandle(ZoomContext zoomContext) {
27642758 drawer .drawOn (gc , width , height );
27652759 ImageData imageData = image .getImageData (targetZoom );
27662760 drawer .postProcess (imageData );
2767- ImageData newData = adaptImageDataIfDisabledOrGray (imageData );
2761+ ImageData newData = adaptImageDataIfDisabledOrGray (imageData , styleFlag );
27682762 return init (newData , targetZoom );
27692763 } finally {
27702764 gc .dispose ();
0 commit comments