Skip to content

Commit e4890da

Browse files
committed
[Win32] Initialize copied image provider wrapper on correct image #2188
When copying an image based on an input stream, the copied provider wrapper was erroneously created on the original image. This change adapts the instantiation to create the warpper on the correct image. Fixes #2188
1 parent 925a294 commit e4890da

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2084,7 +2084,7 @@ protected Rectangle getBounds(int zoom) {
20842084

20852085
@Override
20862086
AbstractImageProviderWrapper createCopy(Image image) {
2087-
return new ImageDataLoaderStreamProviderWrapper(inputStreamData);
2087+
return image.new ImageDataLoaderStreamProviderWrapper(inputStreamData);
20882088
}
20892089
}
20902090

tests/org.eclipse.swt.tests/JUnit Tests/org/eclipse/swt/tests/junit/Test_org_eclipse_swt_graphics_Image.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import static org.junit.Assume.assumeFalse;
2727
import static org.junit.Assume.assumeTrue;
2828

29+
import java.io.ByteArrayInputStream;
2930
import java.io.IOException;
3031
import java.io.InputStream;
3132
import java.nio.file.Files;
@@ -437,6 +438,23 @@ public void test_ConstructorLorg_eclipse_swt_graphics_Device_ImageGcDrawer() {
437438
image.dispose();
438439
}
439440

441+
@Test
442+
public void test_ConstructorLorg_eclipse_swt_graphics_DeviceImageI() throws IOException {
443+
byte[] bytes = Files.readAllBytes(Path.of(getPath("collapseall.png")));
444+
Image sourceImage = new Image(display, new ByteArrayInputStream(bytes));
445+
Image copiedImage = new Image(display, sourceImage, SWT.IMAGE_COPY);
446+
Image targetImage = new Image(display, 1, 1);
447+
GC gc = new GC(targetImage);
448+
gc.drawImage(sourceImage, 0, 0);
449+
gc.drawImage(targetImage, 0, 0);
450+
451+
assertEquals(0, imageDataComparator().compare(sourceImage.getImageData(), copiedImage.getImageData()));
452+
453+
sourceImage.dispose();
454+
copiedImage.dispose();
455+
targetImage.dispose();
456+
}
457+
440458
@Test
441459
public void test_equalsLjava_lang_Object() {
442460
Image image = null;

0 commit comments

Comments
 (0)