@@ -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,15 +685,17 @@ 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 : {
692+ System .out .println ("Disablement" );
705693 ImageData newData = applyDisableImageData (data , data .height , data .width );
706694 returnImageData = newData ;
707695 break ;
708696 }
709697 case SWT .IMAGE_GRAY : {
698+ System .out .println ("Grayed" );
710699 ImageData newData = applyGrayImageData (data , data .height , data .width );
711700 returnImageData = newData ;
712701 break ;
@@ -726,7 +715,7 @@ void init() {
726715 this .isInitialized = true ;
727716}
728717
729- private ImageData applyDisableImageData (ImageData data , int height , int width ) {
718+ private static ImageData applyDisableImageData (ImageData data , int height , int width ) {
730719 PaletteData palette = data .palette ;
731720 ImageData newData = new ImageData (width , height , 32 , new PaletteData (0xFF , 0xFF00 , 0xFF0000 ));
732721 newData .alpha = data .alpha ;
@@ -775,7 +764,7 @@ private ImageData applyDisableImageData(ImageData data, int height, int width) {
775764 return newData ;
776765}
777766
778- private ImageData applyGrayImageData (ImageData data , int pHeight , int pWidth ) {
767+ private static ImageData applyGrayImageData (ImageData data , int pHeight , int pWidth ) {
779768 PaletteData palette = data .palette ;
780769 ImageData newData = data ;
781770 if (!palette .isDirect ) {
@@ -1456,7 +1445,7 @@ private static ImageData directToDirect(ImageData src, int newDepth, PaletteData
14561445
14571446private record HandleForImageDataContainer (int type , ImageData imageData , long [] handles ) {}
14581447
1459- private static HandleForImageDataContainer init (Device device , ImageData i ) {
1448+ private static HandleForImageDataContainer init (Device device , ImageData i , int 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
@@ -1690,7 +1679,7 @@ private ImageHandle initBitmapHandle(ImageData imageData, long handle, Integer z
16901679
16911680static long [] initIcon (Device device , ImageData source , ImageData mask ) {
16921681 ImageData imageData = applyMask (source , mask );
1693- return init (device , imageData ).handles ;
1682+ return init (device , imageData , SWT . NONE ).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 );
@@ -2007,6 +1996,11 @@ public Collection<Integer> getPreservedZoomLevels() {
20071996
20081997 protected abstract ElementAtZoom <ImageData > loadImageData (int zoom );
20091998
1999+ protected ElementAtZoom <ImageData > loadImageDataWithGrayOrDisablement (int zoom ) {
2000+ ElementAtZoom <ImageData > imageDataAtZoom = loadImageData (zoom );
2001+ return new ElementAtZoom <>(adaptImageDataIfDisabledOrGray (imageDataAtZoom .element (), styleFlag ), imageDataAtZoom .zoom ());
2002+ }
2003+
20102004 abstract ImageData newImageData (ZoomContext zoomContext );
20112005
20122006 abstract AbstractImageProviderWrapper createCopy (Image image );
@@ -2019,7 +2013,8 @@ ImageData getScaledImageData (int zoom) {
20192013 ElementAtZoom <ImageData > getClosestAvailableImageData (int zoom ) {
20202014 TreeSet <Integer > availableZooms = new TreeSet <>(zoomLevelToImageHandle .keySet ());
20212015 int closestZoom = Optional .ofNullable (availableZooms .higher (zoom )).orElse (availableZooms .lower (zoom ));
2022- return new ElementAtZoom <>(getImageMetadata (new ZoomContext (closestZoom )).getImageData (), closestZoom );
2016+ ImageData imageData = getImageMetadata (new ZoomContext (closestZoom )).getImageData ();
2017+ return new ElementAtZoom <>(adaptImageDataIfDisabledOrGray (imageData , styleFlag ), closestZoom );
20232018 }
20242019
20252020 protected Optional <ImageData > loadImageDataAtExactSize (int width , int height ) {
@@ -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}
@@ -2413,9 +2407,8 @@ protected ImageHandle newImageHandle(ZoomContext zoomContext) {
24132407 }
24142408
24152409 private ImageHandle initializeHandleFromSource (int zoom ) {
2416- ElementAtZoom <ImageData > imageDataAtZoom = loadImageData (zoom );
2410+ ElementAtZoom <ImageData > imageDataAtZoom = loadImageDataWithGrayOrDisablement (zoom );
24172411 ImageData imageData = DPIUtil .scaleImageData (device , imageDataAtZoom .element (), zoom , imageDataAtZoom .zoom ());
2418- imageData = adaptImageDataIfDisabledOrGray (imageData );
24192412 return init (imageData , zoom );
24202413 }
24212414
@@ -2736,7 +2729,7 @@ protected long configureGCData(GCData data) {
27362729
27372730 @ Override
27382731 ImageData newImageData (ZoomContext zoomContext ) {
2739- return loadImageData (zoomContext .targetZoom ).element ();
2732+ return loadImageDataWithGrayOrDisablement (zoomContext .targetZoom ).element ();
27402733 }
27412734
27422735 @ Override
@@ -2764,9 +2757,9 @@ protected ImageHandle newImageHandle(ZoomContext zoomContext) {
27642757 try {
27652758 drawer .drawOn (gc , width , height );
27662759 ImageData imageData = image .getImageData (targetZoom );
2760+ imageData = adaptImageDataIfDisabledOrGray (imageData , styleFlag );
27672761 drawer .postProcess (imageData );
2768- ImageData newData = adaptImageDataIfDisabledOrGray (imageData );
2769- return init (newData , targetZoom );
2762+ return init (imageData , targetZoom );
27702763 } finally {
27712764 gc .dispose ();
27722765 image .dispose ();
0 commit comments