Skip to content

Commit 018f3fb

Browse files
Streamline calls to Image#adaptImageDataIfDisabledOrGray()
Enabling a consistent pattern to apply disablement or graying of an Image. They are applied whenever a handle is being created from init method. Ensuring streamline usage and avoid double calls to this method.
1 parent d03c44e commit 018f3fb

File tree

2 files changed

+17
-31
lines changed

2 files changed

+17
-31
lines changed

bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Cursor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -245,7 +245,7 @@ private static CursorHandle setupCursorFromImageData(Device device, ImageData so
245245
if (mask == null) {
246246
mask = source.getTransparencyMask();
247247
}
248-
long [] result = Image.initIcon(device, source, mask);
248+
long [] result = Image.initIcon(device, source, mask, SWT.NONE);
249249
hBitmap = result[0];
250250
hMask = result[1];
251251
}

bundles/org.eclipse.swt/Eclipse SWT/win32/org/eclipse/swt/graphics/Image.java

Lines changed: 16 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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

14571445
private 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

16661655
private 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

16961685
private static ImageData applyMask(ImageData source, ImageData mask) {
@@ -1770,7 +1759,7 @@ private static ImageData applyMask(ImageData source, ImageData mask) {
17701759

17711760
private 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

Comments
 (0)