1
0
Fork 0
flightgear/utils/fgqcanvas/WindowData.cpp
James Turner 6e465f9dbe FGQCanvas: Multi-window support (for RPi4)
To support EGLFS on the RPi4 dual outputs, enable multiple windows
within a single process.
2019-08-31 23:40:46 +01:00

86 lines
1.8 KiB
C++

#include "WindowData.h"
#include <QScreen>
#include <QGuiApplication>
#include <QDebug>
#include "jsonutils.h"
WindowData::WindowData(QObject *parent) : QObject(parent)
{
}
QJsonObject WindowData::saveState() const
{
QJsonObject json;
json["rect"] = rectToJsonArray(m_windowRect);
if (!m_screenName.isEmpty()) {
json["screen"] = m_screenName;
}
if (!m_title.isEmpty()) {
json["title"] = m_title;
}
// support frameless option here?
json["state"] = static_cast<int>(m_state);
return json;
}
bool WindowData::restoreState(QJsonObject state)
{
m_windowRect = jsonArrayToRect(state.value("rect").toArray());
emit windowRectChanged(m_windowRect);
if (state.contains("screen")) {
m_screenName = state.value("screen").toString();
} else {
m_screenName.clear();
}
if (state.contains("title")) {
m_title = state.value("title").toString();
}
if (state.contains("state")) {
m_state = static_cast<Qt::WindowState>(state.value("state").toInt());
}
return true;
}
QRect WindowData::windowRect() const
{
return m_windowRect;
}
QScreen *WindowData::screen() const
{
if (m_screenName.isEmpty())
return nullptr;
QStringList screenNames;
Q_FOREACH(auto s, qApp->screens()) {
if (s->name() == m_screenName) {
return s;
}
screenNames.append(s->name());
}
qWarning() << "couldn't find a screen with name:" << m_screenName;
qWarning() << "Available screens:" << screenNames.join(", ");
return nullptr;
}
void WindowData::setWindowState(Qt::WindowState ws)
{
m_state = ws;
}
void WindowData::setWindowRect(QRect windowRect)
{
if (m_windowRect == windowRect)
return;
m_windowRect = windowRect;
emit windowRectChanged(m_windowRect);
}