[plasma/kwin] src/utils: Make top/bottom/left/right gravity center window along orthogonal axis
Vlad Zahorodnii <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 43e1f4ee28b9e1fc15b98f3c5b76d864ad0dca91 by Vlad Zahorodnii.
Committed on 03/08/2026 at 13:24.
Pushed by vladz into branch 'master'.
Make top/bottom/left/right gravity center window along orthogonal axis
This makes kwin center windows with aspect ratio along orthogonal axis.
For example, if you resize a window by dragging the left edge, the
window will be centered vertically.
I would like kwin to center toplevels if their size changes
spontaneously, this takes kwin one step closer to that goal. Centering
the window produces less awkward results in those cases.
M +15 -3 src/utils/gravity.cpp
https://invent.kde.org/plasma/kwin/-/commit/43e1f4ee28b9e1fc15b98f3c5b76d864ad0dca91
diff --git a/src/utils/gravity.cpp b/src/utils/gravity.cpp
index f538915273c..6334ddbeb0e 100644
--- a/src/utils/gravity.cpp
+++ b/src/utils/gravity.cpp
@@ -34,22 +34,34 @@ RectF Gravity::apply(const RectF &rect, const RectF &bounds) const
geometry.moveBottom(bounds.bottom());
break;
case Gravity::Top:
+ geometry.moveBottom(bounds.bottom());
+ geometry.moveHorizontalCenter(bounds.horizontalCenter());
+ break;
case Gravity::TopRight:
geometry.moveLeft(bounds.left());
geometry.moveBottom(bounds.bottom());
break;
case Gravity::Right:
- case Gravity::BottomRight:
- case Gravity::Bottom:
+ geometry.moveLeft(bounds.left());
+ geometry.moveVerticalCenter(bounds.verticalCenter());
+ break;
case Gravity::None:
+ case Gravity::BottomRight:
geometry.moveLeft(bounds.left());
geometry.moveTop(bounds.top());
break;
+ case Gravity::Bottom:
+ geometry.moveHorizontalCenter(bounds.horizontalCenter());
+ geometry.moveTop(bounds.top());
+ break;
case Gravity::BottomLeft:
- case Gravity::Left:
geometry.moveRight(bounds.right());
geometry.moveTop(bounds.top());
break;
+ case Gravity::Left:
+ geometry.moveRight(bounds.right());
+ geometry.moveVerticalCenter(bounds.verticalCenter());
+ break;
}
return geometry;