kwin/src/backends/virtual/virtual_output.cpp

75 lines
1.8 KiB
C++
Raw Normal View History

2020-08-02 22:22:19 +00:00
/*
KWin - the KDE window manager
This file is part of the KDE project.
2020-08-02 22:22:19 +00:00
SPDX-FileCopyrightText: 2018 Roman Gilg <subdiff@gmail.com>
2020-08-02 22:22:19 +00:00
SPDX-License-Identifier: GPL-2.0-or-later
*/
#include "virtual_output.h"
#include "virtual_backend.h"
2020-11-19 08:52:29 +00:00
#include "renderloop_p.h"
#include "softwarevsyncmonitor.h"
namespace KWin
{
VirtualOutput::VirtualOutput(VirtualBackend *parent)
: Output(parent)
, m_backend(parent)
2020-11-19 08:52:29 +00:00
, m_renderLoop(new RenderLoop(this))
, m_vsyncMonitor(SoftwareVsyncMonitor::create())
{
connect(m_vsyncMonitor.get(), &VsyncMonitor::vblankOccurred, this, &VirtualOutput::vblank);
2020-11-19 08:52:29 +00:00
static int identifier = -1;
m_identifier = ++identifier;
setInformation(Information{
.name = QStringLiteral("Virtual-%1").arg(identifier),
});
}
VirtualOutput::~VirtualOutput()
{
}
2020-11-19 08:52:29 +00:00
RenderLoop *VirtualOutput::renderLoop() const
{
return m_renderLoop;
}
SoftwareVsyncMonitor *VirtualOutput::vsyncMonitor() const
{
return m_vsyncMonitor.get();
2020-11-19 08:52:29 +00:00
}
void VirtualOutput::init(const QPoint &logicalPosition, const QSize &pixelSize)
{
2020-11-19 08:52:29 +00:00
const int refreshRate = 60000; // TODO: Make the refresh rate configurable.
m_renderLoop->setRefreshRate(refreshRate);
m_vsyncMonitor->setRefreshRate(refreshRate);
setGeometry(QRect(logicalPosition, pixelSize));
}
void VirtualOutput::setGeometry(const QRect &geo)
{
auto mode = std::make_shared<OutputMode>(geo.size(), m_vsyncMonitor->refreshRate());
setModesInternal({mode}, mode);
moveTo(geo.topLeft());
}
2020-11-19 08:52:29 +00:00
void VirtualOutput::vblank(std::chrono::nanoseconds timestamp)
{
RenderLoopPrivate *renderLoopPrivate = RenderLoopPrivate::get(m_renderLoop);
renderLoopPrivate->notifyFrameCompleted(timestamp);
}
void VirtualOutput::updateEnablement(bool enable)
{
m_backend->enableOutput(this, enable);
}
}