IDEA-97673 images: do not downscale images below preferred size on "Smart Zoom"

* this allows to avoid blinking when editor is shown (as we no longer need canvasSize)
This commit is contained in:
Aleksey Pivovarov
2018-01-30 18:56:22 +03:00
parent e05af5bab3
commit 9f429b64ee
@@ -481,24 +481,11 @@ final class ImageEditorUI extends JPanel implements DataProvider, CopyProvider,
@Nullable
private Double getSmartZoomFactor(@NotNull ZoomOptions zoomOptions) {
Dimension canvasSize = myScrollPane.getViewport().getExtentSize();
canvasSize.height -= ImageComponent.IMAGE_INSETS * 2;
canvasSize.width -= ImageComponent.IMAGE_INSETS * 2;
if (canvasSize.width <= 0 || canvasSize.height <= 0) return null;
BufferedImage image = imageComponent.getDocument().getValue();
if (image == null) return null;
if (canvasSize.width < image.getWidth() ||
canvasSize.height < image.getHeight()) {
return Math.min((double)canvasSize.height / image.getHeight(),
(double)canvasSize.width / image.getWidth());
}
if (image.getWidth() == 0 || image.getHeight() == 0) return null;
Dimension preferredMinimumSize = zoomOptions.getPrefferedSize();
preferredMinimumSize.width = Math.min(preferredMinimumSize.width, canvasSize.width);
preferredMinimumSize.height = Math.min(preferredMinimumSize.height, canvasSize.height);
if (image.getWidth() < preferredMinimumSize.width &&
image.getHeight() < preferredMinimumSize.height) {
double factor = (preferredMinimumSize.getWidth() / (double)image.getWidth() +
@@ -506,6 +493,17 @@ final class ImageEditorUI extends JPanel implements DataProvider, CopyProvider,
return Math.ceil(factor);
}
Dimension canvasSize = myScrollPane.getViewport().getExtentSize();
canvasSize.height -= ImageComponent.IMAGE_INSETS * 2;
canvasSize.width -= ImageComponent.IMAGE_INSETS * 2;
if (canvasSize.width <= 0 || canvasSize.height <= 0) return null;
if (canvasSize.width < image.getWidth() ||
canvasSize.height < image.getHeight()) {
return Math.min((double)canvasSize.height / image.getHeight(),
(double)canvasSize.width / image.getWidth());
}
return 1.0d;
}