画面のスパニング
Spanning ScreensはWaylandクライアントが複数のスクリーンにまたがる方法を示す例です。
はじめに
Spanning ScreensはWaylandコンポジターの例で、上下の画面にまたがってクライアントを最大化します。
QtでQt Wayland Compositorを作成する基本原則については、Minimal QML exampleを参照してください。
複数画面のサポート
Qt Wayland Compositorでは、画面はWaylandOutput 、クライアントとコンポジターのUIの両方を表すQt Quickシーンを含むためにWindowが使用されます。
この例では、プライマリ・スクリーンに2つのウィンドウを作成することで、マルチスクリーンをエミュレートしていますが、複数の物理的なスクリーンをターゲットにするようにコードを簡単に変更することができます。
// Enable the following to make the output target an actual screen, // for example when running on eglfs in a multi-display embedded system. // screen: Qt.application.screens[0]
各ウィンドウは独立したQt Quickシーンを表すので、同じクライアントコンテンツを両方のウィンドウに表示させるトリックが必要です。Qt Wayland Compositorでこれを行うには、同じクライアント・コンテンツの2つのビューを作成します:一つは "上 "ウィンドウ用、もう一つは "下 "ウィンドウ用です。これらのビューは同じグラフィック・バッファへの参照を共有します。これにより、クライアントの表面の異なる領域をそれぞれのウィンドウにコピーすることができます。
const topItem = chromeComponent.createObject(topSurfaceArea, { shellSurface }); const bottomItem = chromeComponent.createObject(bottomSurfaceArea, { shellSurface, y: Qt.binding(function() { return -topSurfaceArea.height;}) });
クライアントがシェル拡張 XdgShell に接続すると、サーフェスへの参照を2つ作成します。そのうちの1つは "top "出力に追加され、もう1つは "bottom "に追加される。ボトム出力上のアイテムは、トップ出力の高さに対応するオフセットも取得する。これにより、下の出力に表示されるクライアントサーフェスの一部が、上の出力が終わったところから始まるようになります。
const height = topSurfaceArea.pixelHeight + bottomSurfaceArea.pixelHeight; const width = Math.max(bottomSurfaceArea.pixelWidth, topSurfaceArea.pixelWidth); const size = Qt.size(width, height); toplevel.sendFullscreen(size);
さらに、上下のウィンドウの両方を埋めるように、クライアントの表面のサイズを変更するように指示します。最終的な結果は、2つのウィンドウ、つまり「スクリーン」にまたがるクライアントです。
複数のアイテムから同じクライアント・サーフェスを参照することは、いろいろなことに使えるツールだ。ウィンドウをスクリーンからスクリーンへ移動できるデスクトップスタイルのコンポジターのデモについては、マルチスクリーンの例を見てください。
Multi Outputの例では、クライアントサーフェスをサイズやその他のプロパティが異なる複数の出力に表示する方法を示しています。
注意: 同じコンポジターで複数のWayland出力をサポートするには、QGuiApplication オブジェクトを構築する前にQt::AA_ShareOpenGLContexts 属性を設定する必要があります。
©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 ここで提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。