diff --git a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/promo/PyCommunityToUnifiedWelcomeScreenBannerBase.kt b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/promo/PyCommunityToUnifiedWelcomeScreenBannerBase.kt index 47ee28c8e8cf..e479e4c51da1 100644 --- a/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/promo/PyCommunityToUnifiedWelcomeScreenBannerBase.kt +++ b/python/ide/impl/src/com/intellij/pycharm/community/ide/impl/promo/PyCommunityToUnifiedWelcomeScreenBannerBase.kt @@ -2,7 +2,7 @@ package com.intellij.pycharm.community.ide.impl.promo import com.intellij.openapi.Disposable -import com.intellij.openapi.observable.util.whenDisposed +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.util.Disposer import com.intellij.openapi.wm.BannerStartPagePromoter import com.intellij.openapi.wm.impl.IdeBackgroundUtil @@ -18,6 +18,7 @@ import javax.swing.JPanel @ApiStatus.Internal abstract class PyCommunityToUnifiedWelcomeScreenBannerBase : BannerStartPagePromoter() { + override val headerLabel: @Nls String = "" override val actionLabel: @Nls String = "" override val description: @Nls String = "" @@ -32,24 +33,28 @@ abstract class PyCommunityToUnifiedWelcomeScreenBannerBase : BannerStartPageProm override fun runAction() {} fun wrapIntoSvgBackgroundPanel(panel: JPanel): JPanel { - val disposable = Disposer.newDisposable("BackgroundPanel") val url = WelcomeToUnifiedWelcomeScreenBanner::class.java.getResource("/backgrounds/promotion_bg.svg") ?: return panel val backgroundImage = SVGLoader.load(url, 1f) - val backgroundPanel = BackgroundPanel(BorderLayout(), backgroundImage, disposable) + val backgroundPanel = BackgroundPanel(BorderLayout(), backgroundImage) backgroundPanel.add(panel, BorderLayout.CENTER) backgroundPanel.isOpaque = false return backgroundPanel } - private class BackgroundPanel(layout: LayoutManager, private val image: Image, parentDisposable: Disposable) : JPanel(layout) { + private class BackgroundPanel(layout: LayoutManager, private val image: Image) : JPanel(layout), Disposable { - private var disposable: Disposable? = null + // Unfortunately, we don't have a proper disposable hierarchy for BannerStartPagePromoter + private var disposable: Disposable = Disposer.newDisposable(ApplicationManager.getApplication(), + "PyCommunityToUnifiedWelcomeScreenBannerBase.BackgroundPanel") init { - parentDisposable.whenDisposed { clearResources() } installBackground() } + override fun dispose() { + Disposer.dispose(disposable) + } + override fun paintComponent(g: Graphics) { super.paintComponent(g) val g2 = g.create() as Graphics2D @@ -63,31 +68,16 @@ abstract class PyCommunityToUnifiedWelcomeScreenBannerBase : BannerStartPageProm } } - override fun getComponentGraphics(g: Graphics?): Graphics? { + override fun getComponentGraphics(g: Graphics?): Graphics { return JBSwingUtilities.runGlobalCGTransform(this, super.getComponentGraphics(g)) } - override fun updateUI() { - super.updateUI() - @Suppress("SENSELESS_COMPARISON") - if (image != null) { - installBackground() - } - } - private fun installBackground() { - clearResources() - disposable = Disposer.newDisposable("BackgroundPanel") IdeBackgroundUtil.createTemporaryBackgroundTransform(this, image, IdeBackgroundUtil.Fill.SCALE, IdeBackgroundUtil.Anchor.MIDDLE_RIGHT, 1f, JBInsets.emptyInsets(), disposable) } - - private fun clearResources() { - disposable?.let { Disposer.dispose(it) } - disposable = null - } } } \ No newline at end of file