mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user