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