From dae16b1ef2823e87f024c860581efda67ea824c0 Mon Sep 17 00:00:00 2001 From: Aleksey Pivovarov Date: Mon, 18 Mar 2024 18:31:05 +0100 Subject: [PATCH] IDEA-349443 ui: fix VCS Log graph rendering with 'Set Background Image' feature enabled IdeBackgroundUtil is not compatible with the blit scrolling. Normally, blit is already disabled by usage of transparent scrollbars. But 'com.intellij.ui.components.ScrollSettings.isNotSupportedYet' disables transparent scrollbars for tables, so it needs to be disabled explicitly. GitOrigin-RevId: fca2decea3ebb734998de622fe87e4b2be9ae000 --- .../src/com/intellij/ui/components/JBViewport.java | 9 +++++++++ .../src/com/intellij/util/ui/JBSwingUtilities.java | 12 ++++++++++++ 2 files changed, 21 insertions(+) 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(); + }); }