[Markdown][IDEA-326905] Use a local copy of the graphics object to ensure that antialiasing settings won't leak to other renderers

GitOrigin-RevId: 70898237564ab43dc95d68fc79b66114c0306f27
This commit is contained in:
Ivan Posti
2023-08-21 11:17:41 +02:00
committed by intellij-monorepo-bot
parent 5a26112b5e
commit ad742eaf43
3 changed files with 23 additions and 8 deletions

View File

@@ -37,4 +37,13 @@ internal object GraphicsUtils {
val arc = Arc2D.Double(x.toDouble(), y.toDouble(), width.toDouble(), height.toDouble(), start, 180.0, Arc2D.PIE)
fill(arc)
}
fun <T> Graphics2D.useCopy(block: (Graphics2D) -> T): T {
val local = create() as Graphics2D
try {
return block(local)
} finally {
local.dispose()
}
}
}

View File

@@ -11,6 +11,7 @@ import com.intellij.openapi.actionSystem.ActionGroup
import com.intellij.openapi.actionSystem.ActionManager
import com.intellij.openapi.actionSystem.ActionToolbar
import com.intellij.openapi.actionSystem.DataProvider
import com.intellij.openapi.actionSystem.impl.ToolbarUtils
import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.application.invokeLater
import com.intellij.openapi.command.executeCommand
@@ -29,11 +30,11 @@ import org.intellij.plugins.markdown.editor.tables.actions.TableActionKeys
import org.intellij.plugins.markdown.editor.tables.actions.TableActionPlaces
import org.intellij.plugins.markdown.editor.tables.selectColumn
import org.intellij.plugins.markdown.editor.tables.ui.presentation.GraphicsUtils.clearOvalOverEditor
import org.intellij.plugins.markdown.editor.tables.ui.presentation.GraphicsUtils.useCopy
import org.intellij.plugins.markdown.lang.MarkdownTokenTypes
import org.intellij.plugins.markdown.lang.psi.impl.MarkdownTable
import org.intellij.plugins.markdown.lang.psi.impl.MarkdownTableRow
import org.intellij.plugins.markdown.lang.psi.util.hasType
import com.intellij.openapi.actionSystem.impl.ToolbarUtils
import java.awt.*
import java.awt.event.MouseEvent
import java.lang.ref.WeakReference
@@ -78,9 +79,11 @@ internal class HorizontalBarPresentation(private val editor: Editor, private val
if (isInvalid) {
return
}
GraphicsUtil.setupAntialiasing(graphics)
GraphicsUtil.setupRoundedBorderAntialiasing(graphics)
paintBars(graphics)
graphics.useCopy { local ->
GraphicsUtil.setupAntialiasing(local)
GraphicsUtil.setupRoundedBorderAntialiasing(local)
paintBars(local)
}
}
override fun toString() = "HorizontalBarPresentation"

View File

@@ -10,6 +10,7 @@ import com.intellij.openapi.actionSystem.ActionGroup
import com.intellij.openapi.actionSystem.ActionManager
import com.intellij.openapi.actionSystem.ActionToolbar
import com.intellij.openapi.actionSystem.DataProvider
import com.intellij.openapi.actionSystem.impl.ToolbarUtils
import com.intellij.openapi.application.ModalityState
import com.intellij.openapi.application.invokeLater
import com.intellij.openapi.command.executeCommand
@@ -29,9 +30,9 @@ import org.intellij.plugins.markdown.editor.tables.actions.TableActionKeys
import org.intellij.plugins.markdown.editor.tables.actions.TableActionPlaces
import org.intellij.plugins.markdown.editor.tables.ui.presentation.GraphicsUtils.clearHalfOvalOverEditor
import org.intellij.plugins.markdown.editor.tables.ui.presentation.GraphicsUtils.fillHalfOval
import org.intellij.plugins.markdown.editor.tables.ui.presentation.GraphicsUtils.useCopy
import org.intellij.plugins.markdown.lang.psi.impl.MarkdownTableRow
import org.intellij.plugins.markdown.lang.psi.impl.MarkdownTableSeparatorRow
import com.intellij.openapi.actionSystem.impl.ToolbarUtils
import java.awt.Dimension
import java.awt.Graphics2D
import java.awt.Point
@@ -101,9 +102,11 @@ internal class VerticalBarPresentation(
if (!row.isValid || editor.isDisposed || boundsState == initialState) {
return
}
GraphicsUtil.setupAntialiasing(graphics)
GraphicsUtil.setupRoundedBorderAntialiasing(graphics)
paintRow(graphics, rowLocation)
graphics.useCopy { local ->
GraphicsUtil.setupAntialiasing(local)
GraphicsUtil.setupRoundedBorderAntialiasing(local)
paintRow(local, rowLocation)
}
}
private fun calculateBarRect(location: RowLocation): Rectangle {