diff --git a/platform/platform-api/src/com/intellij/ui/components/JBViewport.java b/platform/platform-api/src/com/intellij/ui/components/JBViewport.java index 6223af12960f..45e97bcd7b98 100644 --- a/platform/platform-api/src/com/intellij/ui/components/JBViewport.java +++ b/platform/platform-api/src/com/intellij/ui/components/JBViewport.java @@ -647,4 +647,13 @@ public class JBViewport extends JViewport implements ZoomableViewport { } return size; } + + @Override + protected boolean computeBlit(int dx, int dy, Point blitFrom, Point blitTo, Dimension blitSize, Rectangle blitPaint) { + if (JBSwingUtilities.hasCGTransform(this)) { + return false; // disable blit scrolling + } + + return super.computeBlit(dx, dy, blitFrom, blitTo, blitSize, blitPaint); + } } diff --git a/platform/util/ui/src/com/intellij/util/ui/JBSwingUtilities.java b/platform/util/ui/src/com/intellij/util/ui/JBSwingUtilities.java index 69a4be06dcd4..6e7e38b3db3c 100644 --- a/platform/util/ui/src/com/intellij/util/ui/JBSwingUtilities.java +++ b/platform/util/ui/src/com/intellij/util/ui/JBSwingUtilities.java @@ -2,11 +2,13 @@ package com.intellij.util.ui; import com.intellij.openapi.Disposable; +import com.intellij.util.LazyInitializer; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; +import java.awt.image.BufferedImage; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -55,4 +57,14 @@ public final class JBSwingUtilities { } return gg; } + + public static boolean hasCGTransform(@NotNull JComponent c) { + Graphics2D dummyGraphics = DUMMY_GRAPHICS.get(); + return runGlobalCGTransform(c, dummyGraphics) != dummyGraphics; + } + + private static final LazyInitializer.LazyValue DUMMY_GRAPHICS = LazyInitializer.create(() -> { + var image = new BufferedImage(1, 1, BufferedImage.TYPE_INT_ARGB); + return image.createGraphics(); + }); }