eglfs: Add basic support for controlling how the virtual desktop is formed
Choose between horizontal (default) and vertical. Task-number: QTBUG-55188 Change-Id: Ibc490b0ad8c60b66db785455c57987eb8afdad0d Reviewed-by: Dominik Holland <dominik.holland@pelagicore.com> Reviewed-by: Andy Nichols <andy.nichols@qt.io>
This commit is contained in:
parent
7de7f981dc
commit
9ab5c329bf
@ -373,7 +373,12 @@ void QEglFSKmsDevice::createScreens()
|
||||
QEglFSKmsScreen *screen = createScreenForConnector(resources, connector, pos);
|
||||
if (screen) {
|
||||
integration->addScreen(screen);
|
||||
pos.rx() += screen->geometry().width();
|
||||
|
||||
if (m_integration->virtualDesktopLayout() == QEglFSKmsIntegration::VirtualDesktopLayoutVertical)
|
||||
pos.ry() += screen->geometry().height();
|
||||
else
|
||||
pos.rx() += screen->geometry().width();
|
||||
|
||||
siblings << screen;
|
||||
|
||||
if (!primaryScreen)
|
||||
|
@ -65,6 +65,7 @@ QEglFSKmsIntegration::QEglFSKmsIntegration()
|
||||
, m_hwCursor(false)
|
||||
, m_pbuffers(false)
|
||||
, m_separateScreens(false)
|
||||
, m_virtualDesktopLayout(VirtualDesktopLayoutHorizontal)
|
||||
{}
|
||||
|
||||
void QEglFSKmsIntegration::platformInit()
|
||||
@ -149,6 +150,11 @@ bool QEglFSKmsIntegration::separateScreens() const
|
||||
return m_separateScreens;
|
||||
}
|
||||
|
||||
QEglFSKmsIntegration::VirtualDesktopLayout QEglFSKmsIntegration::virtualDesktopLayout() const
|
||||
{
|
||||
return m_virtualDesktopLayout;
|
||||
}
|
||||
|
||||
QMap<QString, QVariantMap> QEglFSKmsIntegration::outputSettings() const
|
||||
{
|
||||
return m_outputSettings;
|
||||
@ -169,15 +175,15 @@ void QEglFSKmsIntegration::loadConfig()
|
||||
|
||||
QFile file(QString::fromUtf8(json));
|
||||
if (!file.open(QFile::ReadOnly)) {
|
||||
qCDebug(qLcEglfsKmsDebug) << "Could not open config file"
|
||||
<< json << "for reading";
|
||||
qCWarning(qLcEglfsKmsDebug) << "Could not open config file"
|
||||
<< json << "for reading";
|
||||
return;
|
||||
}
|
||||
|
||||
const QJsonDocument doc = QJsonDocument::fromJson(file.readAll());
|
||||
if (!doc.isObject()) {
|
||||
qCDebug(qLcEglfsKmsDebug) << "Invalid config file" << json
|
||||
<< "- no top-level JSON object";
|
||||
qCWarning(qLcEglfsKmsDebug) << "Invalid config file" << json
|
||||
<< "- no top-level JSON object";
|
||||
return;
|
||||
}
|
||||
|
||||
@ -188,6 +194,16 @@ void QEglFSKmsIntegration::loadConfig()
|
||||
m_devicePath = object.value(QLatin1String("device")).toString();
|
||||
m_separateScreens = object.value(QLatin1String("separateScreens")).toBool(m_separateScreens);
|
||||
|
||||
const QString vdOriString = object.value(QLatin1String("virtualDesktopLayout")).toString();
|
||||
if (!vdOriString.isEmpty()) {
|
||||
if (vdOriString == QLatin1String("horizontal"))
|
||||
m_virtualDesktopLayout = VirtualDesktopLayoutHorizontal;
|
||||
else if (vdOriString == QLatin1String("vertical"))
|
||||
m_virtualDesktopLayout = VirtualDesktopLayoutVertical;
|
||||
else
|
||||
qCWarning(qLcEglfsKmsDebug) << "Unknown virtualDesktop value" << vdOriString;
|
||||
}
|
||||
|
||||
const QJsonArray outputs = object.value(QLatin1String("outputs")).toArray();
|
||||
for (int i = 0; i < outputs.size(); i++) {
|
||||
const QVariantMap outputSettings = outputs.at(i).toObject().toVariantMap();
|
||||
@ -207,6 +223,7 @@ void QEglFSKmsIntegration::loadConfig()
|
||||
<< "\thwcursor:" << m_hwCursor << "\n"
|
||||
<< "\tpbuffers:" << m_pbuffers << "\n"
|
||||
<< "\tseparateScreens:" << m_separateScreens << "\n"
|
||||
<< "\tvirtualDesktopLayout:" << m_virtualDesktopLayout << "\n"
|
||||
<< "\toutputs:" << m_outputSettings;
|
||||
}
|
||||
|
||||
|
@ -56,6 +56,11 @@ Q_EGLFS_EXPORT Q_DECLARE_LOGGING_CATEGORY(qLcEglfsKmsDebug)
|
||||
class Q_EGLFS_EXPORT QEglFSKmsIntegration : public QEglFSDeviceIntegration
|
||||
{
|
||||
public:
|
||||
enum VirtualDesktopLayout {
|
||||
VirtualDesktopLayoutHorizontal,
|
||||
VirtualDesktopLayoutVertical
|
||||
};
|
||||
|
||||
QEglFSKmsIntegration();
|
||||
|
||||
void platformInit() Q_DECL_OVERRIDE;
|
||||
@ -70,6 +75,7 @@ public:
|
||||
|
||||
virtual bool hwCursor() const;
|
||||
virtual bool separateScreens() const;
|
||||
virtual VirtualDesktopLayout virtualDesktopLayout() const;
|
||||
QMap<QString, QVariantMap> outputSettings() const;
|
||||
|
||||
QEglFSKmsDevice *device() const;
|
||||
@ -83,6 +89,7 @@ protected:
|
||||
bool m_hwCursor;
|
||||
bool m_pbuffers;
|
||||
bool m_separateScreens;
|
||||
VirtualDesktopLayout m_virtualDesktopLayout;
|
||||
QString m_devicePath;
|
||||
QMap<QString, QVariantMap> m_outputSettings;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user