From 0458e409eebf5dbbfc8aa24726503302d8414018 Mon Sep 17 00:00:00 2001 From: Alexander Kuznetsov Date: Fri, 31 Jan 2025 13:36:45 +0100 Subject: [PATCH] [markdown][compose] IJPL-175711 IJPL-175739 Auto-scroll to the caret position after zooming/switching between views GitOrigin-RevId: 796ef433da94b362c8cbd325255341915035a335 --- .../markdown/compose/preview/MarkdownComposePanel.kt | 12 +++++++++++- .../markdown/ui/preview/MarkdownHtmlPanel.java | 4 ++++ .../markdown/ui/preview/MarkdownPreviewFileEditor.kt | 3 ++- 3 files changed, 17 insertions(+), 2 deletions(-) diff --git a/plugins/markdown/compose/src/main/kotlin/com/intellij/markdown/compose/preview/MarkdownComposePanel.kt b/plugins/markdown/compose/src/main/kotlin/com/intellij/markdown/compose/preview/MarkdownComposePanel.kt index a6d4148d86e9..2fe60ba75f32 100644 --- a/plugins/markdown/compose/src/main/kotlin/com/intellij/markdown/compose/preview/MarkdownComposePanel.kt +++ b/plugins/markdown/compose/src/main/kotlin/com/intellij/markdown/compose/preview/MarkdownComposePanel.kt @@ -107,6 +107,13 @@ internal class MarkdownComposePanel( } } } + LaunchedEffect(it.initialScrollOffset) { + coroutineScope.launch { + if (it.initialScrollOffset != 0) { + scrollToLineFlow.emit(it.initialScrollOffset) + } + } + } } Markdown( it.content, @@ -122,7 +129,10 @@ internal class MarkdownComposePanel( } override fun setHtml(html: String, initialScrollOffset: Int, document: VirtualFile?) { - updateHandler.setContent(html, initialScrollOffset, document) + } + + override fun setHtml(html: String, initialScrollOffset: Int, initialScrollLineNumber: Int, document: VirtualFile?) { + updateHandler.setContent(html, initialScrollLineNumber, document) } override fun reloadWithOffset(offset: Int) { diff --git a/plugins/markdown/core/src/org/intellij/plugins/markdown/ui/preview/MarkdownHtmlPanel.java b/plugins/markdown/core/src/org/intellij/plugins/markdown/ui/preview/MarkdownHtmlPanel.java index 9e7885785c48..b211f96bf005 100644 --- a/plugins/markdown/core/src/org/intellij/plugins/markdown/ui/preview/MarkdownHtmlPanel.java +++ b/plugins/markdown/core/src/org/intellij/plugins/markdown/ui/preview/MarkdownHtmlPanel.java @@ -48,6 +48,10 @@ public interface MarkdownHtmlPanel extends ScrollableMarkdownPreview, Disposable void setHtml(@NotNull String html, int initialScrollOffset, @Nullable VirtualFile document); + default void setHtml(@NotNull String html, int initialScrollOffset, int initialScrollLineNumber, @Nullable VirtualFile document) { + setHtml(html, initialScrollOffset, document); + } + /** * @return null if current preview implementation doesn't support any message passing. */ diff --git a/plugins/markdown/core/src/org/intellij/plugins/markdown/ui/preview/MarkdownPreviewFileEditor.kt b/plugins/markdown/core/src/org/intellij/plugins/markdown/ui/preview/MarkdownPreviewFileEditor.kt index efaf39fdc403..a4eb3d2d03cd 100644 --- a/plugins/markdown/core/src/org/intellij/plugins/markdown/ui/preview/MarkdownPreviewFileEditor.kt +++ b/plugins/markdown/core/src/org/intellij/plugins/markdown/ui/preview/MarkdownPreviewFileEditor.kt @@ -215,7 +215,8 @@ class MarkdownPreviewFileEditor( val editor = mainEditor.firstOrNull() ?: return writeIntentReadAction { val offset = editor.caretModel.offset - panel.setHtml(lastRenderedHtml, offset, file) + val line = editor.document.getLineNumber(offset) + panel.setHtml(lastRenderedHtml, offset, line, file) } }