|
37 | 37 | import org.eclipse.swt.graphics.GC; |
38 | 38 | import org.eclipse.swt.graphics.Image; |
39 | 39 | import org.eclipse.swt.graphics.ImageData; |
| 40 | +import org.eclipse.swt.graphics.ImageDataAtSizeProvider; |
| 41 | +import org.eclipse.swt.graphics.ImageDataProvider; |
40 | 42 | import org.eclipse.swt.graphics.ImageGcDrawer; |
41 | 43 | import org.eclipse.swt.graphics.LineAttributes; |
42 | 44 | import org.eclipse.swt.graphics.PaletteData; |
|
51 | 53 | import org.junit.jupiter.api.AfterEach; |
52 | 54 | import org.junit.jupiter.api.BeforeEach; |
53 | 55 | import org.junit.jupiter.api.Test; |
| 56 | +import org.junit.jupiter.api.condition.EnabledOnOs; |
| 57 | +import org.junit.jupiter.api.condition.OS; |
54 | 58 |
|
55 | 59 | /** |
56 | 60 | * Automated Test Suite for class org.eclipse.swt.graphics.GC |
@@ -390,6 +394,120 @@ public void test_drawImageLorg_eclipse_swt_graphics_ImageIIII() { |
390 | 394 | images.dispose(); |
391 | 395 | } |
392 | 396 |
|
| 397 | +@Test |
| 398 | +public void test_drawImageLorg_eclipse_swt_graphics_ImageIIII_ImageDataProvider() { |
| 399 | + int width = 32; |
| 400 | + int height = 48; |
| 401 | + Image drawToImage = new Image(display, width, height); |
| 402 | + GC gc = new GC(drawToImage); |
| 403 | + gc.setAntialias(SWT.OFF); |
| 404 | + RGB drawnRgb = new RGB(10, 0, 0); |
| 405 | + RGB undrawnRgb = new RGB(0, 0, 0); |
| 406 | + ImageDataProvider imageDataProvider = zoom -> { |
| 407 | + if (zoom != 100) { |
| 408 | + return null; |
| 409 | + } |
| 410 | + PaletteData palette = new PaletteData(0xFF0000, 0xFF00, 0xFF); |
| 411 | + ImageData imageData = new ImageData(16, 16, 32, palette); |
| 412 | + int redPixel = palette.getPixel(drawnRgb); |
| 413 | + for (int i = 0; i < 16; i++) { |
| 414 | + imageData.setPixel(i, 0, redPixel); |
| 415 | + imageData.setPixel(i, 15, redPixel); |
| 416 | + imageData.setPixel(0, i, redPixel); |
| 417 | + imageData.setPixel(15, i, redPixel); |
| 418 | + } |
| 419 | + return imageData; |
| 420 | + }; |
| 421 | + Image image = new Image(display, imageDataProvider); |
| 422 | + try { |
| 423 | + gc.drawImage(image, 0, 0, width, height); |
| 424 | + ImageData printedImageData = drawToImage.getImageData(); |
| 425 | + PaletteData printedPalette = printedImageData.palette; |
| 426 | + // Expect that image is blurry scaled to the desired extents |
| 427 | + assertEquals(drawnRgb, printedPalette.getRGB(printedImageData.getPixel(0, 0))); |
| 428 | + assertEquals(drawnRgb, printedPalette.getRGB(printedImageData.getPixel(1, 1))); |
| 429 | + assertNotEquals(undrawnRgb, printedPalette.getRGB(printedImageData.getPixel(1, 2))); |
| 430 | + assertNotEquals(undrawnRgb, printedPalette.getRGB(printedImageData.getPixel(width - 2, height - 3))); |
| 431 | + assertEquals(drawnRgb, printedPalette.getRGB(printedImageData.getPixel(width - 2, height - 2))); |
| 432 | + assertEquals(drawnRgb, printedPalette.getRGB(printedImageData.getPixel(width - 1, height - 1))); |
| 433 | + } finally { |
| 434 | + image.dispose(); |
| 435 | + drawToImage.dispose(); |
| 436 | + } |
| 437 | +} |
| 438 | + |
| 439 | +@Test |
| 440 | +@EnabledOnOs(value = OS.WINDOWS) |
| 441 | +public void test_drawImageLorg_eclipse_swt_graphics_ImageIIII_ImageDataAtSizeProvider_invalid() { |
| 442 | + ImageDataAtSizeProvider provider = new ImageDataAtSizeProvider() { |
| 443 | + @Override |
| 444 | + public ImageData getImageData(int zoom) { |
| 445 | + return new ImageData(1, 1, 32, new PaletteData(0xFF0000, 0xFF00, 0xFF)); |
| 446 | + } |
| 447 | + |
| 448 | + @Override |
| 449 | + public ImageData getImageData(int width, int height) { |
| 450 | + return null; |
| 451 | + } |
| 452 | + }; |
| 453 | + Image image = new Image(display, provider); |
| 454 | + Image drawToImage = new Image(display, 1, 1); |
| 455 | + try { |
| 456 | + GC gc = new GC(drawToImage); |
| 457 | + Exception e = assertThrows(IllegalArgumentException.class, () -> gc.drawImage(image, 0, 0, 1, 1)); |
| 458 | + assertSWTProblem("Incorrect exception thrown for provider == null", SWT.ERROR_INVALID_ARGUMENT, e); |
| 459 | + } finally { |
| 460 | + image.dispose(); |
| 461 | + drawToImage.dispose(); |
| 462 | + } |
| 463 | +} |
| 464 | + |
| 465 | +@Test |
| 466 | +@EnabledOnOs(value = OS.WINDOWS) |
| 467 | +public void test_drawImageLorg_eclipse_swt_graphics_ImageIIII_ImageDataAtSizeProvider() { |
| 468 | + int width = 50; |
| 469 | + int height = 70; |
| 470 | + Image drawToImage = new Image(display, width, height); |
| 471 | + GC gc = new GC(drawToImage); |
| 472 | + gc.setAntialias(SWT.OFF); |
| 473 | + RGB drawnRgb = new RGB(10, 0, 0); |
| 474 | + RGB undrawnRgb = new RGB(0, 0, 0); |
| 475 | + ImageDataAtSizeProvider imageDataAtSizeProvider = new ImageDataAtSizeProvider() { |
| 476 | + @Override |
| 477 | + public ImageData getImageData(int width, int height) { |
| 478 | + PaletteData palette = new PaletteData(0xFF0000, 0xFF00, 0xFF); |
| 479 | + int redPixel = palette.getPixel(drawnRgb); |
| 480 | + ImageData imageData = new ImageData(width, height, 32, palette); |
| 481 | + for (int i = 0; i < width; i++) { |
| 482 | + imageData.setPixel(i, 0, redPixel); |
| 483 | + imageData.setPixel(i, height - 1, redPixel); |
| 484 | + } |
| 485 | + for (int i = 0; i < height; i++) { |
| 486 | + imageData.setPixel(0, i, redPixel); |
| 487 | + imageData.setPixel(width - 1, i, redPixel); |
| 488 | + } |
| 489 | + return imageData; |
| 490 | + } |
| 491 | + @Override |
| 492 | + public ImageData getImageData(int zoom) { |
| 493 | + return new ImageData(1, 1, 32, new PaletteData(0xFF0000, 0xFF00, 0xFF)); |
| 494 | + } |
| 495 | + }; |
| 496 | + Image image = new Image(display, imageDataAtSizeProvider); |
| 497 | + try { |
| 498 | + gc.drawImage(image, 0, 0, width, height); |
| 499 | + ImageData printedImageData = drawToImage.getImageData(); |
| 500 | + PaletteData printedPalette = printedImageData.palette; |
| 501 | + assertEquals(drawnRgb, printedPalette.getRGB(printedImageData.getPixel(0, 0))); |
| 502 | + assertEquals(undrawnRgb, printedPalette.getRGB(printedImageData.getPixel(1, 1))); |
| 503 | + assertEquals(undrawnRgb, printedPalette.getRGB(printedImageData.getPixel(width - 2, height - 2))); |
| 504 | + assertEquals(drawnRgb, printedPalette.getRGB(printedImageData.getPixel(width -1 , height - 2))); |
| 505 | + } finally { |
| 506 | + image.dispose(); |
| 507 | + drawToImage.dispose(); |
| 508 | + } |
| 509 | +} |
| 510 | + |
393 | 511 | @Test |
394 | 512 | public void test_drawLineIIII() { |
395 | 513 | gc.drawLine(0,0,0,20); |
|
0 commit comments