14#include "compositor.h"
23#include <libdrm/drm_fourcc.h>
24#include <qpa/qwindowsysteminterface.h>
30static quint32 s_windowId = 0;
33 : QPlatformWindow(window)
34 , m_windowId(++s_windowId)
35 , m_scale(kwinApp()->devicePixelRatio())
37 Q_ASSERT(!window->property(
"_KWIN_WINDOW_IS_OFFSCREEN").toBool());
48 if (!m_swapchain || m_swapchain->size() != nativeSize
49 || !formats.contains(m_swapchain->format())
50 || m_swapchain->modifiers() != formats[m_swapchain->format()]) {
51 const bool software = window()->surfaceType() == QSurface::RasterSurface;
56 allocator = &shmAllocator;
61 for (
auto it = formats.begin(); it != formats.end(); it++) {
62 if (
auto info =
FormatInfo::get(it.key()); info && info->bitsPerColor == 8 && info->alphaBits == 8) {
66 .modifiers = it.value(),
73 m_swapchain = std::make_unique<Swapchain>(allocator,
options, buffer);
78 return m_swapchain.get();
94 QPlatformWindow::setVisible(visible);
104#if QT_VERSION < QT_VERSION_CHECK(6, 7, 0)
105 QWindowSystemInterface::handleWindowActivated(window());
107 QWindowSystemInterface::handleFocusWindowChanged(window());
113 const QRect oldGeometry = geometry();
114 QPlatformWindow::setGeometry(rect);
116 if (window()->isVisible() && rect.isValid()) {
117 QWindowSystemInterface::handleGeometryChange(window(), geometry());
120 if (isExposed() && oldGeometry.size() != rect.size()) {
121 QWindowSystemInterface::handleExposeEvent(window(), QRect(QPoint(), rect.size()));
155 m_handle->destroyWindow();
RenderBackend * backend() const
static Compositor * self()
virtual GraphicsBuffer * allocate(const GraphicsBufferOptions &options)=0
QSurfaceFormat format() const override
InternalWindow * internalWindow() const
void setGeometry(const QRect &rect) override
qreal devicePixelRatio() const override
void setVisible(bool visible) override
void requestActivateWindow() override
Swapchain * swapchain(const QHash< uint32_t, QList< uint64_t > > &formats)
WId winId() const override
void invalidateSurface() override
virtual GraphicsBufferAllocator * graphicsBufferAllocator() const
QSize size
The size of the buffer, in device pixels.