mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
IDEA-230850 SVG viewer: fix image jumping during load
GitOrigin-RevId: 2baa2ad4718486d4941cb4e44dab7f967c523e6a
This commit is contained in:
committed by
intellij-monorepo-bot
parent
a7bd8255ac
commit
2a110d7272
@@ -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) {
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user