package org.intellij.plugins.markdown.ui.preview.javafx;
import com.intellij.util.FieldAccessor;
import com.intellij.util.ui.JBUI;
import com.intellij.util.ui.UIUtil;
import javafx.application.Platform;
import javafx.embed.swing.JFXPanel;
import java.awt.*;
public class JFXPanelWrapper extends JFXPanel {
private static FieldAccessor<JFXPanel, Integer> myScaleFactorAccessor = new FieldAccessor<>(JFXPanel.class, "scaleFactor");
public JFXPanelWrapper() {
Platform.setImplicitExit(false);
}
/**
* This override fixes the situation of using multiple JFXPanels
* with jbtabs/splitters when some of them are not showing.
* On getMinimumSize there is no layout manager nor peer so
* the result could be #size() which is incorrect.
* @return zero size
*/
@Override
public Dimension getMinimumSize() {
return new Dimension(0, 0);
}
@Override
public void addNotify() {
// JFXPanel is scaled asynchronously after first repaint, what may lead
// to showing unscaled content. To work it around, set "scaleFactor" ahead.
if (UIUtil.isJreHiDPIEnabled()) myScaleFactorAccessor.set(this, Math.round(JBUI.sysScale(this)));
super.addNotify();
}
}