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/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{ 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) {