Skip to content

Commit

Permalink
Revert removal of checking for SLINT_FULLSCREEN
Browse files Browse the repository at this point in the history
env var and related docs.

Use `QWindow::setWindowStates()` to set the fullscreen state for Qt
backend.
  • Loading branch information
qhua948 committed Jan 8, 2024
1 parent 12f8534 commit 7ab4869
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 8 deletions.
1 change: 1 addition & 0 deletions docker/Dockerfile.torizon-demos
Expand Up @@ -53,5 +53,6 @@ RUN apt-get update \

COPY --from=build /slint/demos/* /usr/bin/

ENV SLINT_FULLSCREEN=1
ENV SLINT_BACKEND=winit-skia
CMD /usr/bin/printerdemo
7 changes: 7 additions & 0 deletions docs/reference/src/advanced/backend_qt.md
Expand Up @@ -10,3 +10,10 @@ macOS, Windows, Linux with Wayland and X11, and direct full-screen rendering via
The Qt backend only supports software rendering at the moment. That means it runs with any graphics driver,
but it does not utilize GPU hardware acceleration.

## Configuration Options

The Qt backend reads and interprets the following environment variables:

| Name | Accepted Values | Description |
|--------------------|-----------------|--------------------------------------------------------------------|
| `SLINT_FULLSCREEN` | any value | If this variable is set, every window is shown in fullscreen mode. |
8 changes: 8 additions & 0 deletions docs/reference/src/advanced/backend_winit.md
Expand Up @@ -17,3 +17,11 @@ The Winit backend supports different renderers. They can be explicitly selected
| Skia Software | Software-only rendering with Skia | `winit-skia-software` |
| software | Software-rendering, no GPU required | `winit-software` |


## Configuration Options

The Winit backend reads and interprets the following environment variables:

| Name | Accepted Values | Description |
|--------------------|-----------------|--------------------------------------------------------------------|
| `SLINT_FULLSCREEN` | any value | If this variable is set, every window is shown in fullscreen mode. |
11 changes: 6 additions & 5 deletions examples/fullscreen_toggle/fullscreen_toggle.cpp
Expand Up @@ -8,11 +8,12 @@ int main()
{
auto app_window = AppWindow::create();
bool fullscreen = false;
app_window.on_fullscreen_toggle([fullscreen, main_window_weak = slint::ComponentWeakHandle(main_window)] {
auto main_window = *main_window_weak.lock();
fullscreen = !fullscreen;
main_window.window().set_fullscreen(fullscreen);
});
app_window.on_fullscreen_toggle(
[fullscreen, main_window_weak = slint::ComponentWeakHandle(main_window)] {
auto main_window = *main_window_weak.lock();
fullscreen = !fullscreen;
main_window.window().set_fullscreen(fullscreen);
});

main_window->run();
}
13 changes: 10 additions & 3 deletions internal/backends/qt/qt_window.rs
Expand Up @@ -1530,7 +1530,11 @@ impl WindowAdapter for QtWindow {
fn set_visible(&self, visible: bool) -> Result<(), PlatformError> {
if visible {
let widget_ptr = self.widget_ptr();
cpp! {unsafe [widget_ptr as "QWidget*"] {
let fullscreen = std::env::var("SLINT_FULLSCREEN").is_ok();
cpp! {unsafe [widget_ptr as "QWidget*", fullscreen as "bool"] {
if (fullscreen) {
widget_ptr->setWindowState(widget_ptr->windowState() | Qt::WindowFullScreen);
}
widget_ptr->show();
}};
let qt_platform_name = cpp! {unsafe [] -> qttypes::QString as "QString" {
Expand Down Expand Up @@ -1701,10 +1705,13 @@ impl WindowAdapter for QtWindow {
fn set_fullscreen(&self, fullscreen: bool) {
let widget_ptr = self.widget_ptr();
cpp! {unsafe [widget_ptr as "QWidget*", fullscreen as "bool"] {
// Depending on the request, we either set or clear the fullscreen bits.
// See also: https://doc.qt.io/qt-6/qt.html#WindowState-enum
const auto state = widget_ptr->windowState();
if (fullscreen) {
widget_ptr->setWindowState(Qt::WindowFullScreen);
widget_ptr->setWindowState(state | Qt::WindowFullScreen);
} else {
widget_ptr->setWindowState(Qt::WindowNoState);
widget_ptr->setWindowState(state & ~Qt::WindowFullScreen);
}
}
};
Expand Down
4 changes: 4 additions & 0 deletions internal/backends/winit/winitwindowadapter.rs
Expand Up @@ -188,6 +188,10 @@ impl WinitWindowAdapter {
#[cfg(target_arch = "wasm32")] canvas_id: &str,
) -> Result<WindowBuilder, PlatformError> {
let mut window_builder = WindowBuilder::new().with_transparent(true).with_visible(false);
if std::env::var("SLINT_FULLSCREEN").is_ok() {
window_builder =
window_builder.with_fullscreen(Some(winit::window::Fullscreen::Borderless(None)));
}

window_builder = window_builder.with_title("Slint Window".to_string());

Expand Down

0 comments on commit 7ab4869

Please sign in to comment.