マルチスクリーン
Multi Screen はマルチスクリーン用のデスクトップ型 Wayland コンポジターです。
はじめに
Multi-screenはマルチスクリーン用のデスクトップ型Waylandコンポジターのサンプルです。
QtでQt Wayland Compositorを作成するための基本原則については、Minimal QML exampleを参照してください。
マルチスクリーンのサポート
システム上で利用可能な各画面に対して、この例ではWaylandOutput のサブクラスであるCompositorScreen
を作成します。 物理的に利用可能な画面が1つしかない場合、この例ではダミーデータで3つの画面をエミュレートします。
Instantiator { id: screens model: emulated ? emulatedScreens : Qt.application.screens delegate: CompositorScreen { surfaceArea.color: "lightsteelblue" text: name compositor: comp screen: emulated ? Qt.application.screens[0] : modelData Component.onCompleted: if (!comp.defaultOutput) comp.defaultOutput = this position: Qt.point(virtualX, virtualY) windowed: emulated } }
Qt Wayland Compositorの標準的なセットアップと同じように、それぞれのWaylandOutput にはWindowがあり、クライアントのコンテンツを表示します。それぞれのWindowは他のWindowから分離されているため、Window間でQt Quickアイテムを共有することはできません。そのため、クライアントが接続し、ShellSurface が作成されると、ShellSurfaceItem が各スクリーンに作成されます。
for (var i = 0; i < screens.count; ++i) createShellSurfaceItem(shellSurface, moveItem, screens.objectAt(i));
これらのアイテムは、同じクライアントのコンテンツのビューとして機能します。クライアントのサーフェス自体は一度だけ作成され、サーフェスアイテムによって共有されます。
トップレベルのサーフェスアイテムは、各出力の背景Rectangle の子として作成される。これらのビューは後のために保存され、クライアントが子ウィンドウを生成する場合、それらはトップレベル・ウィンドウのアイテムの親になります。
var parentSurfaceItem = output.viewsBySurface[shellSurface.parentSurface]; var parent = parentSurfaceItem || output.surfaceArea;
クライアントのコンテンツは、一度に1つまたは2つのスクリーンのみに表示されます。ShellSurfaceItem 位置が同期されているので、ウィンドウが1つのスクリーンに入ると、同時に別のスクリーンから移動されます。これにより、画面間をシームレスに移動する1つのアイテムのように見えます。クライアントのグローバルな位置は共有のmoveItem に保存され、各画面のShellSurfaceItem の相対的な位置はこれに基づいて計算されます。現在moveItem
があるスクリーンの境界の外にある場合、その座標はこれを反映し、そのスクリーンには表示されません。
x: surfaceItem.moveItem.x - surfaceItem.output.geometry.x y: surfaceItem.moveItem.y - surfaceItem.output.geometry.y
最後に、WaylandQuickItem::setPrimary() が適切なタイミングで呼び出され、ShellSurface のプライマリ・ビューが設定されます。これは、クライアントが最大化またはフルスクリーンを要求したときに使用されます。プライマリ・ビューShellSurfaceItem は、現在どの程度表示されているかに基づいて選択される。
注意: 同じコンポジターで複数のWayland出力をサポートするためには、QGuiApplication オブジェクトを構築する前にQt::AA_ShareOpenGLContexts 属性を設定する必要があります。この例では、main()
関数の先頭でこれを行います。
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true);
Multi Outputも参照してください 。
©2024 The Qt Company Ltd. 本書に含まれるドキュメントの著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。