mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
PY-82344 Fix disposer exception
(cherry picked from commit 713c7c0b49884b0b6744c60b119329336906a9e2) GitOrigin-RevId: e0f732af21c33be59aabf505a39b6918563f036b
This commit is contained in:
committed by
intellij-monorepo-bot
parent
55277d1f50
commit
49abc884b2
+12
-22
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user