From c82390daea308bc2d1db4b1b654d9322b42f2d8a Mon Sep 17 00:00:00 2001 From: Zac Date: Mon, 1 Mar 2021 02:41:09 +1000 Subject: [PATCH 1/2] Folds: Add import missing from a previous commit --- src/main/java/net/vektah/codeglance/render/Folds.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/net/vektah/codeglance/render/Folds.kt b/src/main/java/net/vektah/codeglance/render/Folds.kt index 36fa550..fc596c7 100644 --- a/src/main/java/net/vektah/codeglance/render/Folds.kt +++ b/src/main/java/net/vektah/codeglance/render/Folds.kt @@ -26,6 +26,7 @@ package net.vektah.codeglance.render import com.intellij.openapi.editor.FoldRegion +import java.util.HashSet // Is a copy of Array that only contains folded folds and can be passed safely to another thread class Folds{ From 8792f153ebeced48a488ef28e75e83c1c2f0ad6f Mon Sep 17 00:00:00 2001 From: Zac Date: Mon, 1 Mar 2021 02:52:37 +1000 Subject: [PATCH 2/2] Minimap: Account for 'virtual space at bottom of page' intellij setting If the 'Show virtual space at bottom of page' setting is enabled, one page worth of lines are added to the highlighted (visible) section of the glance panel. --- .../net/vektah/codeglance/EditorPanelInjector.kt | 1 + src/main/java/net/vektah/codeglance/GlancePanel.kt | 10 +++++----- .../java/net/vektah/codeglance/render/Minimap.kt | 14 ++++++++++++-- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/vektah/codeglance/EditorPanelInjector.kt b/src/main/java/net/vektah/codeglance/EditorPanelInjector.kt index 6f01e23..737ded1 100644 --- a/src/main/java/net/vektah/codeglance/EditorPanelInjector.kt +++ b/src/main/java/net/vektah/codeglance/EditorPanelInjector.kt @@ -85,6 +85,7 @@ class EditorPanelInjector(private val project: Project, private val runner: Task val glancePanel = GlancePanel(project, editor, panel, runner) panel.add(glancePanel, where) panels.put(editor, glancePanel) + glancePanel.updateImage() } } diff --git a/src/main/java/net/vektah/codeglance/GlancePanel.kt b/src/main/java/net/vektah/codeglance/GlancePanel.kt index 9c8f6af..551c49a 100644 --- a/src/main/java/net/vektah/codeglance/GlancePanel.kt +++ b/src/main/java/net/vektah/codeglance/GlancePanel.kt @@ -38,12 +38,11 @@ import net.vektah.codeglance.concurrent.DirtyLock import net.vektah.codeglance.config.Config import net.vektah.codeglance.config.ConfigService import net.vektah.codeglance.render.* - -import javax.swing.* import java.awt.* import java.awt.event.* import java.awt.image.BufferedImage import java.lang.ref.SoftReference +import javax.swing.* /** * This JPanel gets injected into editor windows and renders a image generated by GlanceFileRenderer @@ -78,6 +77,7 @@ class GlancePanel(private val project: Project, fileEditor: FileEditor, private componentListener = object : ComponentAdapter() { override fun componentResized(componentEvent: ComponentEvent?) { updateSize() + updateImage() scrollstate.setVisibleHeight(height) this@GlancePanel.revalidate() this@GlancePanel.repaint() @@ -120,11 +120,11 @@ class GlancePanel(private val project: Project, fileEditor: FileEditor, private // the minimap is held by a soft reference so the GC can delete it at any time. // if its been deleted and we want it again (active tab) we recreate it. - private fun getOrCreateMap() : Minimap? { + private fun getOrCreateMap(): Minimap? { var map = mapRef.get() if (map == null) { - map = Minimap(configService.state!!) + map = Minimap(configService.state!!, editor) mapRef = SoftReference(map) } @@ -134,7 +134,7 @@ class GlancePanel(private val project: Project, fileEditor: FileEditor, private /** * Fires off a new task to the worker thread. This should only be called from the ui thread. */ - private fun updateImage() { + fun updateImage() { if (isDisabled) return if (project.isDisposed) return diff --git a/src/main/java/net/vektah/codeglance/render/Minimap.kt b/src/main/java/net/vektah/codeglance/render/Minimap.kt index de49037..9580784 100644 --- a/src/main/java/net/vektah/codeglance/render/Minimap.kt +++ b/src/main/java/net/vektah/codeglance/render/Minimap.kt @@ -25,9 +25,11 @@ package net.vektah.codeglance.render +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.diagnostic.Logger -import com.intellij.openapi.editor.FoldRegion +import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.colors.EditorColorsScheme +import com.intellij.openapi.editor.ex.EditorSettingsExternalizable import com.intellij.openapi.fileTypes.SyntaxHighlighter import com.intellij.psi.tree.IElementType import net.vektah.codeglance.config.Config @@ -39,7 +41,7 @@ import java.util.ArrayList /** * A rendered minimap of a document */ -class Minimap(private val config: Config) { +class Minimap(private val config: Config, private val editor: Editor) { var img: BufferedImage? = null var height: Int = 0 private val logger = Logger.getInstance(javaClass) @@ -92,6 +94,14 @@ class Minimap(private val config: Config) { this.line_endings = line_endings height = (lines + 1) * config.pixelsPerLine + if (EditorSettingsExternalizable.getInstance().isAdditionalPageAtBottom) { + ApplicationManager.getApplication().runReadAction { + val editorHeight = editor.component.height + val linesOnScreen = editorHeight / editor.lineHeight + height += linesOnScreen * config.pixelsPerLine + } + } + // If the image is too small to represent the entire document now then regenerate it // TODO: Copy old image when incremental update is added. if (img == null || img!!.height < height || img!!.width < config.width) {