IDEA-230850 SVG viewer: fix image jumping during load

GitOrigin-RevId: 2baa2ad4718486d4941cb4e44dab7f967c523e6a
This commit is contained in:
Vladimir Kharitonov
2023-02-21 15:33:07 +01:00
committed by intellij-monorepo-bot
parent a7bd8255ac
commit 2a110d7272
2 changed files with 25 additions and 23 deletions

View File

@@ -126,15 +126,7 @@ class JCefImageViewer(private val myFile: VirtualFile,
return
}
if (options.isSmartZooming) {
val zoomFactor = options.getSmartZoomFactor(
Rectangle(Point(0, 0), Dimension(myState.imageSize.width, myState.imageSize.height)),
Dimension(myState.viewportSize.width, myState.viewportSize.height),
5
)
execute("setZoom(${zoomFactor});")
}
else {
if (!options.isSmartZooming) {
execute("setZoom(${state.zoomFactor});")
}
}
@@ -236,7 +228,7 @@ class JCefImageViewer(private val myFile: VirtualFile,
@Suppress("DEPRECATION")
myViewerStateJSQuery = JBCefJSQuery.create(myBrowser)
myViewerStateJSQuery.addHandler { s: String ->
val oldStatus = myState.status
val oldState = myState
try {
myState = jsonParser.decodeFromString(s)
}
@@ -245,8 +237,15 @@ class JCefImageViewer(private val myFile: VirtualFile,
return@addHandler JBCefJSQuery.Response(null, 255, "Failed to parse the viewer state")
}
// Init the viewer zoom factor
if (oldStatus == ViewerState.Status.INIT && oldStatus != myState.status) setState(myEditorState)
val zoomOptions = OptionsManager.getInstance().options.editorOptions.zoomOptions
if (oldState.status == ViewerState.Status.INIT && zoomOptions.isSmartZooming) {
val zoomFactor = zoomOptions.getSmartZoomFactor(
Rectangle(Point(0, 0), Dimension(myState.imageSize.width, myState.imageSize.height)),
Dimension(myState.viewportSize.width, myState.viewportSize.height),
5
)
execute("setZoom(${zoomFactor});")
}
SwingUtilities.invokeLater {
if (myState.status == ViewerState.Status.OK) {

View File

@@ -72,8 +72,9 @@
#svg_canvas {
transform-origin: 0 0;
width: fit-content;
height: fit-content;
width: 0;
height: 0;
overflow: hidden;
position: absolute;
top: 50%;
left: 50%;
@@ -382,17 +383,19 @@
function setImageUrl(url) {
if (!url) return
let size_observer = new ResizeObserver(() => {
setZoom(gState.zoom)
})
size_observer.observe(gUI.image)
if (gState.status === ViewerStatus.INIT) {
let size_observer = new ResizeObserver(() => {
setZoom(gState.zoom)
})
size_observer.observe(gUI.image)
let image_loaded_listener = function () {
size_observer.unobserve(gUI.image)
size_observer.disconnect()
gUI.image.removeEventListener('load', image_loaded_listener)
let remove_observer = function () {
size_observer.unobserve(gUI.image)
size_observer.disconnect()
gUI.image.removeEventListener('load', remove_observer)
}
gUI.image.addEventListener('load', remove_observer)
}
gUI.image.addEventListener('load', image_loaded_listener)
if (gIsDebug) {
let url_input = document.getElementById("url_input")