38QEglFSKmsScreen::QEglFSKmsScreen(QEglFSKmsDevice *device,
const QKmsOutput &output,
bool headless)
39 : QEglFSScreen(
static_cast<QEglFSIntegration *>(QGuiApplicationPrivate::platformIntegration())->display())
42 , m_cursorOutOfRange(
false)
43 , m_powerState(PowerStateOn)
44 , m_interruptHandler(
new QEglFSKmsInterruptHandler(
this))
45 , m_headless(headless)
49 if (m_output.edid_blob) {
50 QByteArray edid(
reinterpret_cast<
const char *>(m_output.edid_blob->data), m_output.edid_blob->length);
51 if (m_edid.parse(edid))
52 qCDebug(qLcEglfsKmsDebug,
"EDID data for output \"%s\": identifier '%s', manufacturer '%s', model '%s', serial '%s', physical size: %.2fx%.2f",
53 name().toLatin1().constData(),
54 m_edid.identifier.toLatin1().constData(),
55 m_edid.manufacturer.toLatin1().constData(),
56 m_edid.model.toLatin1().constData(),
57 m_edid.serialNumber.toLatin1().constData(),
58 m_edid.physicalSize.width(), m_edid.physicalSize.height());
60 qCDebug(qLcEglfsKmsDebug) <<
"Failed to parse EDID data for output" << name();
62 qCDebug(qLcEglfsKmsDebug) <<
"No EDID data for output" << name();
65 s_screens.insert(
this);
83QRect QEglFSKmsScreen::rawGeometry()
const
86 return QRect(QPoint(0, 0), m_device->screenConfig()->headlessSize());
88 return QRect(m_pos.x(), m_pos.y(),
89 m_output.size.width(),
90 m_output.size.height());
121QSizeF QEglFSKmsScreen::physicalSize()
const
123 if (!m_output.physical_size.isEmpty()) {
124 return m_output.physical_size;
126 const QSize s = geometry().size();
127 return QSizeF(0.254 * s.width(), 0.254 * s.height());
199QList<QPlatformScreen::Mode> QEglFSKmsScreen::modes()
const
201 QList<QPlatformScreen::Mode> list;
202 list.reserve(m_output.modes.size());
204 for (
const drmModeModeInfo &info : std::as_const(m_output.modes))
205 list.append({QSize(info.hdisplay, info.vdisplay),
206 qreal(info.vrefresh > 0 ? info.vrefresh : 60)});