diff --git a/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/GradientBackgroundListener.java b/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/GradientBackgroundListener.java index dca44f5ec7b..492d53cf188 100644 --- a/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/GradientBackgroundListener.java +++ b/bundles/org.eclipse.e4.ui.css.swt/src/org/eclipse/e4/ui/css/swt/properties/GradientBackgroundListener.java @@ -37,6 +37,7 @@ import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; +import org.eclipse.swt.graphics.ImageDataProvider; import org.eclipse.swt.graphics.ImageGcDrawer; import org.eclipse.swt.graphics.PaletteData; import org.eclipse.swt.graphics.Point; @@ -135,13 +136,17 @@ public void handleEvent(Event event) { } } - BufferedImage image = getBufferedImage(size.x, size.y, colors, - CSSSWTColorHelper.getPercents(grad)); - // long startTime = System.currentTimeMillis(); - ImageData imagedata = convertToSWT(image); - // System.out.println("Conversion took " - // + (System.currentTimeMillis() - startTime) + " ms"); - gradientImage = new Image(control.getDisplay(), imagedata); + ImageDataProvider imageDataProvider = zoom -> { + float scaleFactor = zoom / 100.0f; + int scaledWidth = Math.round(size.x * scaleFactor); + int scaledHeight = Math.round(size.y * scaleFactor); + BufferedImage image = getBufferedImage(scaledWidth, scaledHeight, colors, + CSSSWTColorHelper.getPercents(grad)); + ImageData imagedata = convertToSWT(image); + return imagedata; + }; + + gradientImage = new Image(control.getDisplay(), imageDataProvider); radialGradient = true; } else if (oldImage == null || oldImage.isDisposed() || oldImage.getBounds().height != size.y || radialGradient