chromiumembedded / java-cef

Java Chromium Embedded Framework (JCEF). A simple framework for embedding Chromium-based browsers in other applications using the Java programming language.
https://bitbucket.org/chromiumembedded/java-cef
Other
647 stars 141 forks source link

Incorrect size when using device scale factor on Linux #412

Open magreenblatt opened 2 years ago

magreenblatt commented 2 years ago

Original report by Enes Altınkaya (Bitbucket: nsfnd).


When --force-device-scale-factor argument is set on Linux, web page is not displayed properly.

I’m on Arch Linux, Plasma desktop, with these environment variables set.

GDK_DPI_SCALE=0.5
GDK_SCALE=2
PLASMA_USE_QT_SCALING=1
QT_AUTO_SCREEN_SCALE_FACTOR=0

Global scale setting on KDE → Display Settings is set to 175%

Edit:

With windowless_rendering_enabled set to false, if I resize the window continuously for a couple of seconds, page fits the window, shown in the second video attachment.

cefSettings.windowless_rendering_enabled = false;

magreenblatt commented 2 years ago

Original comment by Enes Altınkaya (Bitbucket: nsfnd).


Solved by adding XFlush after the XMoveResizeWindow in native/util_linux.cpp X_XMoveResizeWindow and X_XReparentWindow (https://youtrack.jetbrains.com/issue/JBR-3403)

And resizing browser uicompoment back and forth onAfterCreated

client.addLifeSpanHandler(new CefLifeSpanHandler() {
            @Override
            public boolean onBeforePopup(CefBrowser browser, CefFrame frame, String target_url, String target_frame_name) {
                return false;
            }
            @Override
            public void onAfterCreated(CefBrowser browser) {
                SwingUtilities.invokeLater(() -> {
                    browser.getUIComponent().setSize(1281, 720);
                    browser.getUIComponent().setSize(1280, 720);
                });
            }
            @Override
            public void onAfterParentChanged(CefBrowser browser) {
            }
            @Override
            public boolean doClose(CefBrowser browser) {
                return false;
            }
            @Override
            public void onBeforeClose(CefBrowser browser) {
            }
        });

magreenblatt commented 2 years ago

Original changes by Enes Altınkaya (Bitbucket: nsfnd).


magreenblatt commented 2 years ago

Original changes by Enes Altınkaya (Bitbucket: nsfnd).