|
|
|
@ -76,7 +76,7 @@ void OutputLocatorEffect::show()
|
|
|
|
|
|
|
|
|
|
const auto screens = effects->screens();
|
|
|
|
|
for (const auto screen : screens) {
|
|
|
|
|
auto scene = new OffscreenQuickScene(this);
|
|
|
|
|
auto scene = new OffscreenQuickScene();
|
|
|
|
|
scene->setSource(m_qmlUrl, {{QStringLiteral("outputName"), outputName(screen)}, {QStringLiteral("resolution"), screen->geometry().size()}, {QStringLiteral("scale"), screen->devicePixelRatio()}});
|
|
|
|
|
QRectF geometry(0, 0, scene->rootItem()->implicitWidth(), scene->rootItem()->implicitHeight());
|
|
|
|
|
geometry.moveCenter(screen->geometry().center());
|
|
|
|
@ -84,7 +84,7 @@ void OutputLocatorEffect::show()
|
|
|
|
|
connect(scene, &OffscreenQuickView::repaintNeeded, this, [scene] {
|
|
|
|
|
effects->addRepaint(scene->geometry());
|
|
|
|
|
});
|
|
|
|
|
m_scenesByScreens.insert(screen, scene);
|
|
|
|
|
m_scenesByScreens[screen].reset(scene);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_showTimer.start(std::chrono::milliseconds(2500));
|
|
|
|
@ -93,10 +93,12 @@ void OutputLocatorEffect::show()
|
|
|
|
|
void OutputLocatorEffect::hide()
|
|
|
|
|
{
|
|
|
|
|
m_showTimer.stop();
|
|
|
|
|
const QRegion repaintRegion = std::accumulate(m_scenesByScreens.cbegin(), m_scenesByScreens.cend(), QRegion(), [](QRegion region, OffscreenQuickScene *scene) {
|
|
|
|
|
return region |= scene->geometry();
|
|
|
|
|
});
|
|
|
|
|
qDeleteAll(m_scenesByScreens);
|
|
|
|
|
|
|
|
|
|
QRegion repaintRegion;
|
|
|
|
|
for (const auto &[screen, scene] : m_scenesByScreens) {
|
|
|
|
|
repaintRegion |= scene->geometry();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
m_scenesByScreens.clear();
|
|
|
|
|
effects->addRepaint(repaintRegion);
|
|
|
|
|
}
|
|
|
|
@ -106,12 +108,12 @@ void OutputLocatorEffect::paintScreen(const RenderTarget &renderTarget, const Re
|
|
|
|
|
effects->paintScreen(renderTarget, viewport, mask, region, screen);
|
|
|
|
|
// On X11 all screens are painted at once
|
|
|
|
|
if (effects->waylandDisplay()) {
|
|
|
|
|
if (auto scene = m_scenesByScreens.value(screen)) {
|
|
|
|
|
effects->renderOffscreenQuickView(renderTarget, viewport, scene);
|
|
|
|
|
if (auto it = m_scenesByScreens.find(screen); it != m_scenesByScreens.end()) {
|
|
|
|
|
effects->renderOffscreenQuickView(renderTarget, viewport, it->second.get());
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
for (auto scene : m_scenesByScreens) {
|
|
|
|
|
effects->renderOffscreenQuickView(renderTarget, viewport, scene);
|
|
|
|
|
for (const auto &[screen, scene] : m_scenesByScreens) {
|
|
|
|
|
effects->renderOffscreenQuickView(renderTarget, viewport, scene.get());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|