Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- From f978c91c94346bd982d692239ba562069b1f61f2 Mon Sep 17 00:00:00 2001
- From: Vlad Zahorodnii <[email protected]>
- Date: Wed, 10 Jan 2024 09:18:53 +0200
- Subject: [PATCH 1/3] scene: Fix software cursor clip region
- The dirty region is in the output local coordinate space.
- BUG: 479583
- (cherry picked from commit 36222adb259ecfe9dac205bc3a067fc7ba9b6053)
- ---
- src/compositor_wayland.cpp | 4 ++--
- src/scene/cursordelegate_opengl.cpp | 2 +-
- 2 files changed, 3 insertions(+), 3 deletions(-)
- diff --git a/src/compositor_wayland.cpp b/src/compositor_wayland.cpp
- index 0afd564bdd..f63ead7796 100644
- --- a/src/compositor_wayland.cpp
- +++ b/src/compositor_wayland.cpp
- @@ -257,9 +257,9 @@ void WaylandCompositor::addOutput(Output *output)
- }
- auto workspaceLayer = new RenderLayer(output->renderLoop());
- workspaceLayer->setDelegate(std::make_unique<SceneDelegate>(m_scene.get(), output));
- - workspaceLayer->setGeometry(output->rect());
- + workspaceLayer->setGeometry(output->rectF());
- connect(output, &Output::geometryChanged, workspaceLayer, [output, workspaceLayer]() {
- - workspaceLayer->setGeometry(output->rect());
- + workspaceLayer->setGeometry(output->rectF());
- });
- auto cursorLayer = new RenderLayer(output->renderLoop());
- diff --git a/src/scene/cursordelegate_opengl.cpp b/src/scene/cursordelegate_opengl.cpp
- index 4ef5299027..a3b78e628e 100644
- --- a/src/scene/cursordelegate_opengl.cpp
- +++ b/src/scene/cursordelegate_opengl.cpp
- @@ -66,7 +66,7 @@ void CursorDelegateOpenGL::paint(const RenderTarget &renderTarget, const QRegion
- GLFramebuffer::pushFramebuffer(fbo);
- const bool clipping = region != infiniteRegion();
- - const QRegion clipRegion = clipping ? RenderViewport(m_output->fractionalGeometry(), m_output->scale(), renderTarget).mapToRenderTarget(dirty) : infiniteRegion();
- + const QRegion clipRegion = clipping ? RenderViewport(m_output->rectF(), m_output->scale(), renderTarget).mapToRenderTarget(dirty) : infiniteRegion();
- if (clipping) {
- glEnable(GL_SCISSOR_TEST);
- --
- 2.43.0
- From 16cbf9ec972f9bb3c6a50007b0d5fcca8a1ce658 Mon Sep 17 00:00:00 2001
- From: Vlad Zahorodnii <[email protected]>
- Date: Thu, 11 Jan 2024 10:00:58 +0200
- Subject: [PATCH 2/3] core: Add Output::rectF
- (cherry picked from commit 571e4026acf1f11defaca46fdb647dcd9bf214cd)
- ---
- src/core/output.h | 10 ++++++++++
- 1 file changed, 10 insertions(+)
- diff --git a/src/core/output.h b/src/core/output.h
- index 5876b77036..dc81e117db 100644
- --- a/src/core/output.h
- +++ b/src/core/output.h
- @@ -238,6 +238,11 @@ public:
- */
- QRect rect() const;
- + /**
- + * Equivalent to `QRectF(QPointF(0, 0), geometryF().size())`
- + */
- + QRectF rectF() const;
- +
- /**
- * Returns the approximate vertical refresh rate of this output, in mHz.
- */
- @@ -480,6 +485,11 @@ inline QRect Output::rect() const
- return QRect(QPoint(0, 0), geometry().size());
- }
- +inline QRectF Output::rectF() const
- +{
- + return QRectF(QPointF(0, 0), geometryF().size());
- +}
- +
- KWIN_EXPORT QDebug operator<<(QDebug debug, const Output *output);
- } // namespace KWin
- --
- 2.43.0
- From f239703f0979df09c4a41bff146e37e818af8297 Mon Sep 17 00:00:00 2001
- From: =?UTF-8?q?Michal=20Mal=C3=BD?= <[email protected]>
- Date: Fri, 12 Jan 2024 12:40:22 +0100
- Subject: [PATCH 3/3] core: Rename Output::fractionalGeometry()
- In Qt, if an overloaded function returns QRectF/QSizeF/QPointF, it
- usually has F suffix. Do the same in kwin for the consistency sake.
- ---
- src/core/output.cpp | 2 +-
- src/core/output.h | 2 +-
- src/rules.cpp | 2 +-
- src/scene/workspacescene.cpp | 2 +-
- src/tiles/tile.cpp | 10 +++++-----
- src/tiles/tilemanager.cpp | 2 +-
- src/wayland/xdgoutput_v1.cpp | 2 +-
- src/workspace.cpp | 8 ++++----
- src/xwayland/xwayland.cpp | 3 ++-
- 9 files changed, 17 insertions(+), 16 deletions(-)
- diff --git a/src/core/output.cpp b/src/core/output.cpp
- index 483d06584c..20bf07e7bb 100644
- --- a/src/core/output.cpp
- +++ b/src/core/output.cpp
- @@ -462,7 +462,7 @@ QRect Output::geometry() const
- return QRect(m_state.position, pixelSize() / scale());
- }
- -QRectF Output::fractionalGeometry() const
- +QRectF Output::geometryF() const
- {
- return QRectF(m_state.position, QSizeF(pixelSize()) / scale());
- }
- diff --git a/src/core/output.h b/src/core/output.h
- index dc81e117db..2ba0ff3583 100644
- --- a/src/core/output.h
- +++ b/src/core/output.h
- @@ -231,7 +231,7 @@ public:
- /**
- * Returns geometry of this output in device independent pixels, without rounding
- */
- - QRectF fractionalGeometry() const;
- + QRectF geometryF() const;
- /**
- * Equivalent to `QRect(QPoint(0, 0), geometry().size())`
- diff --git a/src/rules.cpp b/src/rules.cpp
- index 6ddad43c97..e648d1252d 100644
- --- a/src/rules.cpp
- +++ b/src/rules.cpp
- @@ -781,7 +781,7 @@ QPointF WindowRules::checkPositionSafe(QPointF pos, bool init) const
- }
- const auto outputs = workspace()->outputs();
- const bool inAnyOutput = std::any_of(outputs.begin(), outputs.end(), [ret](const auto output) {
- - return output->fractionalGeometry().contains(ret);
- + return output->geometryF().contains(ret);
- });
- if (inAnyOutput) {
- return ret;
- diff --git a/src/scene/workspacescene.cpp b/src/scene/workspacescene.cpp
- index 94d26e5a2b..bb37238e8b 100644
- --- a/src/scene/workspacescene.cpp
- +++ b/src/scene/workspacescene.cpp
- @@ -372,7 +372,7 @@ void WorkspaceScene::postPaint()
- void WorkspaceScene::paint(const RenderTarget &renderTarget, const QRegion ®ion)
- {
- Output *output = kwinApp()->operationMode() == Application::OperationMode::OperationModeX11 ? nullptr : painted_screen;
- - RenderViewport viewport(output ? output->fractionalGeometry() : workspace()->geometry(), output ? output->scale() : 1, renderTarget);
- + RenderViewport viewport(output ? output->geometryF() : workspace()->geometry(), output ? output->scale() : 1, renderTarget);
- m_renderer->beginFrame(renderTarget, viewport);
- diff --git a/src/tiles/tile.cpp b/src/tiles/tile.cpp
- index 4a2ef0551c..cfe72d539d 100644
- --- a/src/tiles/tile.cpp
- +++ b/src/tiles/tile.cpp
- @@ -83,7 +83,7 @@ void Tile::setGeometryFromWindow(const QRectF &geom)
- void Tile::setGeometryFromAbsolute(const QRectF &geom)
- {
- - const QRectF outGeom = m_tiling->output()->fractionalGeometry();
- + const QRectF outGeom = m_tiling->output()->geometryF();
- const QRectF relGeom((geom.x() - outGeom.x()) / outGeom.width(),
- (geom.y() - outGeom.y()) / outGeom.height(),
- geom.width() / outGeom.width(),
- @@ -120,7 +120,7 @@ QRectF Tile::relativeGeometry() const
- QRectF Tile::absoluteGeometry() const
- {
- - const QRectF geom = m_tiling->output()->fractionalGeometry();
- + const QRectF geom = m_tiling->output()->geometryF();
- return QRectF(std::round(geom.x() + m_relativeGeometry.x() * geom.width()),
- std::round(geom.y() + m_relativeGeometry.y() * geom.height()),
- std::round(m_relativeGeometry.width() * geom.width()),
- @@ -129,7 +129,7 @@ QRectF Tile::absoluteGeometry() const
- QRectF Tile::absoluteGeometryInScreen() const
- {
- - const QRectF geom = m_tiling->output()->fractionalGeometry();
- + const QRectF geom = m_tiling->output()->geometryF();
- return QRectF(std::round(m_relativeGeometry.x() * geom.width()),
- std::round(m_relativeGeometry.y() * geom.height()),
- std::round(m_relativeGeometry.width() * geom.width()),
- @@ -208,7 +208,7 @@ void Tile::resizeFromGravity(Gravity gravity, int x_root, int y_root)
- return;
- }
- - const QRectF outGeom = m_tiling->output()->fractionalGeometry();
- + const QRectF outGeom = m_tiling->output()->geometryF();
- const QPointF relativePos = QPointF((x_root - outGeom.x()) / outGeom.width(), (y_root - outGeom.y()) / outGeom.height());
- QRectF newGeom = m_relativeGeometry;
- @@ -251,7 +251,7 @@ void Tile::resizeByPixels(qreal delta, Qt::Edge edge)
- return;
- }
- - const auto outGeom = m_tiling->output()->fractionalGeometry();
- + const auto outGeom = m_tiling->output()->geometryF();
- auto newGeom = m_relativeGeometry;
- switch (edge) {
- diff --git a/src/tiles/tilemanager.cpp b/src/tiles/tilemanager.cpp
- index 986e0e8efc..fff0a0febf 100644
- --- a/src/tiles/tilemanager.cpp
- +++ b/src/tiles/tilemanager.cpp
- @@ -96,7 +96,7 @@ Tile *TileManager::bestTileForPosition(const QPointF &pos)
- if (!exclusiveContains(r, pos)) {
- // This gives a strong preference for tiles that contain the point
- // still base on distance though as floating tiles can overlap
- - distance += m_output->fractionalGeometry().width();
- + distance += m_output->geometryF().width();
- }
- if (distance < minimumDistance) {
- minimumDistance = distance;
- diff --git a/src/wayland/xdgoutput_v1.cpp b/src/wayland/xdgoutput_v1.cpp
- index 78a98425d1..342a325c54 100644
- --- a/src/wayland/xdgoutput_v1.cpp
- +++ b/src/wayland/xdgoutput_v1.cpp
- @@ -120,7 +120,7 @@ void XdgOutputV1Interface::update()
- return;
- }
- - const QRectF geometry = output->handle()->fractionalGeometry();
- + const QRectF geometry = output->handle()->geometryF();
- const auto resources = resourceMap();
- if (pos != geometry.topLeft()) {
- diff --git a/src/workspace.cpp b/src/workspace.cpp
- index 09c3a388c2..a9764b5890 100644
- --- a/src/workspace.cpp
- +++ b/src/workspace.cpp
- @@ -2306,7 +2306,7 @@ void Workspace::updateClientArea()
- workAreas[desktop] = m_geometry;
- for (const Output *output : std::as_const(m_outputs)) {
- - screenAreas[desktop][output] = output->fractionalGeometry();
- + screenAreas[desktop][output] = output->geometryF();
- }
- }
- @@ -2356,7 +2356,7 @@ void Workspace::updateClientArea()
- }
- restrictedAreas[vd] += strutRegion;
- for (Output *output : std::as_const(m_outputs)) {
- - const auto geo = screenAreas[vd][output].intersected(adjustClientArea(window, output->fractionalGeometry()));
- + const auto geo = screenAreas[vd][output].intersected(adjustClientArea(window, output->geometryF()));
- // ignore the geometry if it results in the screen getting removed completely
- if (!geo.isEmpty()) {
- screenAreas[vd][output] = geo;
- @@ -2407,12 +2407,12 @@ QRectF Workspace::clientArea(clientAreaOption opt, const Output *output, const V
- return *outputIt;
- }
- }
- - return output->fractionalGeometry();
- + return output->geometryF();
- case MaximizeFullArea:
- case FullScreenArea:
- case MovementArea:
- case ScreenArea:
- - return output->fractionalGeometry();
- + return output->geometryF();
- case WorkArea:
- return m_workAreas.value(desktop, m_geometry);
- case FullArea:
- diff --git a/src/xwayland/xwayland.cpp b/src/xwayland/xwayland.cpp
- index 64b6ec9451..e90bae34e6 100644
- --- a/src/xwayland/xwayland.cpp
- +++ b/src/xwayland/xwayland.cpp
- @@ -593,10 +593,11 @@ void Xwayland::updatePrimary()
- }
- Output *const primaryOutput = workspace()->outputOrder().front();
- + const QRect primaryOutputGeometry = Xcb::toXNative(primaryOutput->geometryF());
- for (int i = 0; i < resources->num_crtcs; ++i) {
- Xcb::RandR::CrtcInfo crtcInfo(crtcs[i], resources->config_timestamp);
- const QRect geometry = crtcInfo.rect();
- - if (geometry.topLeft() == primaryOutput->geometry().topLeft()) {
- + if (geometry.topLeft() == primaryOutputGeometry.topLeft()) {
- auto outputs = crtcInfo.outputs();
- if (outputs && crtcInfo->num_outputs > 0) {
- qCDebug(KWIN_XWL) << "Setting primary" << primaryOutput << outputs[0];
- --
- 2.43.0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement