package org.intellij.plugins.markdown.ui.preview.lobo; import org.lobobrowser.html.HtmlRendererContext; import org.lobobrowser.html.UserAgentContext; import org.lobobrowser.html.domimpl.DOMNodeImpl; import org.lobobrowser.html.gui.HtmlBlockPanel; import org.lobobrowser.html.renderer.FrameContext; import org.lobobrowser.html.renderer.RBlock; import org.lobobrowser.html.renderer.RBlockViewport; import java.awt.*; class ScrollPreservingHtmlBlockPanel extends HtmlBlockPanel { public ScrollPreservingHtmlBlockPanel(Color background, boolean opaque, UserAgentContext pcontext, HtmlRendererContext rcontext, FrameContext frameContext) { super(background, opaque, pcontext, rcontext, frameContext); } @Override public void setRootNode(DOMNodeImpl node) { if (node != null) { int oldX = 32768; int oldY = 32768; if (rblock != null) { final RBlockViewport viewport = rblock.getRBlockViewport(); oldX = viewport.getX(); oldY = viewport.getY(); } final RBlock block = new RBlock(node, 0, this.ucontext, this.rcontext, this.frameContext, this); block.setDefaultMarginInsets(this.defaultMarginInsets); // block.setDefaultPaddingInsets(this.defaultPaddingInsets); block.setDefaultOverflowX(this.defaultOverflowX); block.setDefaultOverflowY(this.defaultOverflowY); block.getRBlockViewport().setX(oldX); block.getRBlockViewport().setY(oldY); node.setUINode(block); this.rblock = block; } else { this.rblock = null; } this.invalidate(); this.validateAll(); this.repaint(); } }