| 
14 | 14 |  *******************************************************************************/  | 
15 | 15 | package org.eclipse.swt.tests.junit;  | 
16 | 16 | 
 
  | 
 | 17 | +import static org.eclipse.swt.internal.DPIUtil.pointToPixel;  | 
17 | 18 | import static org.eclipse.swt.tests.junit.SwtTestUtil.assertSWTProblem;  | 
18 | 19 | import static org.junit.jupiter.api.Assertions.assertArrayEquals;  | 
19 | 20 | import static org.junit.jupiter.api.Assertions.assertEquals;  | 
 | 
37 | 38 | import org.eclipse.swt.graphics.GC;  | 
38 | 39 | import org.eclipse.swt.graphics.Image;  | 
39 | 40 | import org.eclipse.swt.graphics.ImageData;  | 
 | 41 | +import org.eclipse.swt.graphics.ImageDataAtSizeProvider;  | 
 | 42 | +import org.eclipse.swt.graphics.ImageDataProvider;  | 
40 | 43 | import org.eclipse.swt.graphics.ImageGcDrawer;  | 
41 | 44 | import org.eclipse.swt.graphics.LineAttributes;  | 
42 | 45 | import org.eclipse.swt.graphics.PaletteData;  | 
 | 
51 | 54 | import org.junit.jupiter.api.AfterEach;  | 
52 | 55 | import org.junit.jupiter.api.BeforeEach;  | 
53 | 56 | import org.junit.jupiter.api.Test;  | 
 | 57 | +import org.junit.jupiter.api.condition.EnabledOnOs;  | 
 | 58 | +import org.junit.jupiter.api.condition.OS;  | 
 | 59 | +import org.junit.jupiter.params.ParameterizedTest;  | 
 | 60 | +import org.junit.jupiter.params.provider.ValueSource;  | 
54 | 61 | 
 
  | 
55 | 62 | /**  | 
56 | 63 |  * Automated Test Suite for class org.eclipse.swt.graphics.GC  | 
@@ -390,6 +397,155 @@ public void test_drawImageLorg_eclipse_swt_graphics_ImageIIII() {  | 
390 | 397 | 	images.dispose();  | 
391 | 398 | }  | 
392 | 399 | 
 
  | 
 | 400 | +@Test  | 
 | 401 | +public void test_drawImageLorg_eclipse_swt_graphics_ImageIIII_ImageDataProvider() {  | 
 | 402 | +	int width = 32;  | 
 | 403 | +	int height = 48;  | 
 | 404 | +	Image drawToImage = new Image(display, width, height);  | 
 | 405 | +	GC gc = new GC(drawToImage);  | 
 | 406 | +	gc.setAntialias(SWT.OFF);  | 
 | 407 | +	RGB drawnRgb = new RGB(255, 255, 255);  | 
 | 408 | +	RGB undrawnRgb = new RGB(0, 0, 0);  | 
 | 409 | +	ImageDataProvider imageDataProvider = zoom -> {  | 
 | 410 | +		if (zoom != 100) {  | 
 | 411 | +			return null;  | 
 | 412 | +		}  | 
 | 413 | +		PaletteData palette = new PaletteData(0xFF0000, 0xFF00, 0xFF);  | 
 | 414 | +		ImageData imageData = new ImageData(16, 16, 32, palette);  | 
 | 415 | +		int drawnPixel = palette.getPixel(drawnRgb);  | 
 | 416 | +		for (int i = 0; i < 16; i++) {  | 
 | 417 | +			imageData.setPixel(i, 0, drawnPixel);  | 
 | 418 | +			imageData.setPixel(i, 15, drawnPixel);  | 
 | 419 | +			imageData.setPixel(0, i, drawnPixel);  | 
 | 420 | +			imageData.setPixel(15, i, drawnPixel);  | 
 | 421 | +		}  | 
 | 422 | +		return imageData;  | 
 | 423 | +	};  | 
 | 424 | +	Image image = new Image(display, imageDataProvider);  | 
 | 425 | +	try {  | 
 | 426 | +		gc.drawImage(image, 0, 0, width, height);  | 
 | 427 | +		int zoom = DPIUtil.getDeviceZoom();  | 
 | 428 | +		ImageData printedImageData = drawToImage.getImageData(zoom);  | 
 | 429 | +		PaletteData printedPalette = printedImageData.palette;  | 
 | 430 | +		// Expect that image is blurry scaled to the desired extents  | 
 | 431 | +		assertEquals(drawnRgb, printedPalette.getRGB(printedImageData.getPixel(0, 0)));  | 
 | 432 | +		assertNotEquals(undrawnRgb, printedPalette.getRGB(printedImageData.getPixel(1, 1)));  | 
 | 433 | +		assertNotEquals(undrawnRgb, printedPalette.getRGB(printedImageData.getPixel(1, 2)));  | 
 | 434 | +		assertEquals(undrawnRgb, printedPalette.getRGB(printedImageData.getPixel(pointToPixel(width, zoom) / 2, pointToPixel(height, zoom) / 2)));  | 
 | 435 | +		assertNotEquals(undrawnRgb, printedPalette.getRGB(printedImageData.getPixel(pointToPixel(width, zoom) - 2, pointToPixel(height, zoom) - 3)));  | 
 | 436 | +		assertNotEquals(undrawnRgb, printedPalette.getRGB(printedImageData.getPixel(pointToPixel(width, zoom) - 2, pointToPixel(height, zoom) - 2)));  | 
 | 437 | +		assertEquals(drawnRgb, printedPalette.getRGB(printedImageData.getPixel(pointToPixel(width, zoom) - 1, pointToPixel(height, zoom) - 1)));  | 
 | 438 | +	} finally {  | 
 | 439 | +		image.dispose();  | 
 | 440 | +		drawToImage.dispose();  | 
 | 441 | +	}  | 
 | 442 | +}  | 
 | 443 | + | 
 | 444 | +@Test  | 
 | 445 | +@EnabledOnOs(value = OS.WINDOWS)  | 
 | 446 | +public void test_drawImageLorg_eclipse_swt_graphics_ImageIIII_ImageDataAtSizeProvider_invalid() {  | 
 | 447 | +	ImageDataAtSizeProvider provider = new ImageDataAtSizeProvider() {  | 
 | 448 | +		@Override  | 
 | 449 | +		public ImageData getImageData(int zoom) {  | 
 | 450 | +			return new ImageData(1, 1, 32, new PaletteData(0xFF0000, 0xFF00, 0xFF));  | 
 | 451 | +		}  | 
 | 452 | + | 
 | 453 | +		@Override  | 
 | 454 | +		public ImageData getImageData(int width, int height) {  | 
 | 455 | +			return null;  | 
 | 456 | +		}  | 
 | 457 | +	};  | 
 | 458 | +	Image image = new Image(display, provider);  | 
 | 459 | +	Image drawToImage = new Image(display, 1, 1);  | 
 | 460 | +	try {  | 
 | 461 | +		GC gc = new GC(drawToImage);  | 
 | 462 | +		Exception e = assertThrows(IllegalArgumentException.class, () -> gc.drawImage(image, 0, 0, 1, 1));  | 
 | 463 | +		assertSWTProblem("Incorrect exception thrown for provider == null", SWT.ERROR_INVALID_ARGUMENT, e);  | 
 | 464 | +	} finally {  | 
 | 465 | +		image.dispose();  | 
 | 466 | +		drawToImage.dispose();  | 
 | 467 | +	}  | 
 | 468 | +}  | 
 | 469 | + | 
 | 470 | +@ParameterizedTest  | 
 | 471 | +@ValueSource(ints = {SWT.IMAGE_COPY, SWT.IMAGE_DISABLE, SWT.IMAGE_GRAY, -1})  | 
 | 472 | +@EnabledOnOs(value = OS.WINDOWS)  | 
 | 473 | +public void test_drawImageLorg_eclipse_swt_graphics_ImageIIII_ImageDataAtSizeProvider(int styleFlag) {  | 
 | 474 | +	int width = 50;  | 
 | 475 | +	int height = 70;  | 
 | 476 | +	Image drawToImage = new Image(display, width, height);  | 
 | 477 | +	GC gc = new GC(drawToImage);  | 
 | 478 | +	gc.setAntialias(SWT.OFF);  | 
 | 479 | +	RGB drawnRgb = new RGB(255, 255, 255);  | 
 | 480 | +	RGB undrawnRgb = new RGB(0, 0, 0);  | 
 | 481 | +	ImageDataAtSizeProvider imageDataAtSizeProvider = new ImageDataAtSizeProvider() {  | 
 | 482 | +		@Override  | 
 | 483 | +		public ImageData getImageData(int width, int height) {  | 
 | 484 | +			PaletteData palette = new PaletteData(0xFF0000, 0xFF00, 0xFF);  | 
 | 485 | +			int drawnPixel = palette.getPixel(drawnRgb);  | 
 | 486 | +			ImageData imageData = new ImageData(width, height, 32, palette);  | 
 | 487 | +			for (int i = 0; i < width; i++) {  | 
 | 488 | +				imageData.setPixel(i, 0, drawnPixel);  | 
 | 489 | +				imageData.setPixel(i, height - 1, drawnPixel);  | 
 | 490 | +			}  | 
 | 491 | +			for (int i = 0; i < height; i++) {  | 
 | 492 | +				imageData.setPixel(0, i, drawnPixel);  | 
 | 493 | +				imageData.setPixel(width - 1, i, drawnPixel);  | 
 | 494 | +			}  | 
 | 495 | +			return imageData;  | 
 | 496 | +		}  | 
 | 497 | +		@Override  | 
 | 498 | +		public ImageData getImageData(int zoom) {  | 
 | 499 | +			return new ImageData(1, 1, 32, new PaletteData(0xFF0000, 0xFF00, 0xFF));  | 
 | 500 | +		}  | 
 | 501 | +	};  | 
 | 502 | +	Image image = styleImage(new Image(display, imageDataAtSizeProvider), styleFlag);  | 
 | 503 | + | 
 | 504 | +	try {  | 
 | 505 | +		gc.drawImage(image, 0, 0, width, height);  | 
 | 506 | +		int zoom = DPIUtil.getDeviceZoom();  | 
 | 507 | +		ImageData printedImageData = drawToImage.getImageData(zoom);  | 
 | 508 | +		PaletteData printedPalette = printedImageData.palette;  | 
 | 509 | +		RGB styledDrawnRgb = getStyledRgb(drawnRgb, styleFlag);  | 
 | 510 | +		RGB styledUndrawnRgb = getStyledRgb(undrawnRgb, styleFlag);  | 
 | 511 | +		assertEquals(styledDrawnRgb, printedPalette.getRGB(printedImageData.getPixel(0, 0)));  | 
 | 512 | +		assertEquals(styledUndrawnRgb, printedPalette.getRGB(printedImageData.getPixel(1, 1)));  | 
 | 513 | +		assertEquals(styledUndrawnRgb, printedPalette.getRGB(printedImageData.getPixel(pointToPixel(width, zoom) / 2, pointToPixel(height, zoom) / 2)));  | 
 | 514 | +		assertEquals(styledUndrawnRgb, printedPalette.getRGB(printedImageData.getPixel(pointToPixel(width, zoom) - 2, pointToPixel(height, zoom) - 2)));  | 
 | 515 | +		assertEquals(styledDrawnRgb, printedPalette.getRGB(printedImageData.getPixel(pointToPixel(width, zoom) - 4, pointToPixel(height, zoom) - 1)));  | 
 | 516 | +	} finally {  | 
 | 517 | +		image.dispose();  | 
 | 518 | +		drawToImage.dispose();  | 
 | 519 | +	}  | 
 | 520 | +}  | 
 | 521 | + | 
 | 522 | +private Image styleImage(Image image, int styleFlag) {  | 
 | 523 | +	if (styleFlag == -1) {  | 
 | 524 | +		return image;  | 
 | 525 | +	}  | 
 | 526 | +	Image styledImage = new Image(display, image, styleFlag);  | 
 | 527 | +	image.dispose();  | 
 | 528 | +	return styledImage;  | 
 | 529 | +}  | 
 | 530 | + | 
 | 531 | +private RGB getStyledRgb(RGB rgb, int styleFlag) {  | 
 | 532 | +	if (styleFlag == -1) {  | 
 | 533 | +		return rgb;  | 
 | 534 | +	}  | 
 | 535 | +	PaletteData palette = new PaletteData(0xFF0000, 0xFF00, 0xFF);  | 
 | 536 | +	ImageData referenceData = new ImageData(1, 1, 32, palette);  | 
 | 537 | +	referenceData.setPixel(0, 0, palette.getPixel(rgb));  | 
 | 538 | +	Image referenceImage = new Image(display, referenceData);  | 
 | 539 | +	Image styledReferenceImage = new Image(display, referenceImage, styleFlag);  | 
 | 540 | +	try {  | 
 | 541 | +		ImageData styledmageData = styledReferenceImage.getImageData();  | 
 | 542 | +		return styledmageData.palette.getRGB(styledmageData.getPixel(0, 0));  | 
 | 543 | +	} finally {  | 
 | 544 | +		styledReferenceImage.dispose();  | 
 | 545 | +		referenceImage.dispose();  | 
 | 546 | +	}  | 
 | 547 | +}  | 
 | 548 | + | 
393 | 549 | @Test  | 
394 | 550 | public void test_drawLineIIII() {  | 
395 | 551 | 	gc.drawLine(0,0,0,20);  | 
 | 
0 commit comments