Summary: Hopefully, the new document makes it clear when one can use QRect::right() and QRect::bottom(). Reviewers: #kwin, davidedmundson Reviewed By: #kwin, davidedmundson Subscribers: davidedmundson, kwin Tags: #kwin Differential Revision: https://phabricator.kde.org/D27060
2.5 KiB
Coding Conventions
This document describes some of the recommended coding conventions that should be followed in KWin.
For KWin, it is recommended to follow the KDE Frameworks Coding Style.
auto
Keyword
Optionally, you can use the auto
keyword in the following cases. If in doubt, for example if using
auto
could make the code less readable, do not use auto
. Keep in mind that code is read much more
often than written.
-
When it avoids repetition of a type in the same statement.
auto something = new MyCustomType; auto keyEvent = static_cast<QKeyEvent *>(event); auto myList = QStringList({ "FooThing", "BarThing" });
-
When assigning iterator types.
auto it = myList.const_iterator();
QRect::right()
and QRect::bottom()
For historical reasons, the QRect::right()
and QRect::bottom()
functions deviate from the true
bottom-right corner of the rectangle. Note that this is not the case for the QRectF
class.
As a general rule, avoid using QRect::right()
and QRect::bottom()
as well methods that operate
on them. There are exceptions, though.
Exception 1: you can use QRect::moveRight()
and QRect::moveBottom()
to snap a QRect
to
another QRect
as long as the corresponding borders match, for example
// Ok
rect.moveRight(anotherRect.right());
rect.moveBottom(anotherRect.bottom());
rect.moveBottomRight(anotherRect.bottomRight());
// Bad
rect.moveRight(anotherRect.left() - 1); // must be rect.moveLeft(anotherRect.left() - rect.width());
rect.moveBottom(anotherRect.top() - 1); // must be rect.moveTop(anotherRect.top() - rect.height());
rect.moveBottomRight(anotherRect.topLeft() - QPoint(1, 1));
Exception 2: you can use QRect::setRight()
and QRect::setBottom()
to clip a QRect
by another
QRect
as long as the corresponding borders match, for example
// Ok
rect.setRight(anotherRect.right());
rect.setBottom(anotherRect.bottom());
rect.setBottomRight(anotherRect.bottomRight());
// Bad
rect.setRight(anotherRect.left());
rect.setBottom(anotherRect.top());
rect.setBottomRight(anotherRect.topLeft());
Exception 3: you can use QRect::right()
and QRect::bottom()
in conditional statements as long
as the compared borders are the same, for example
// Ok
if (rect.right() > anotherRect.right()) {
return;
}
if (rect.bottom() > anotherRect.bottom()) {
return;
}
// Bad
if (rect.right() > anotherRect.left()) {
return;
}
if (rect.bottom() > anotherRect.top()) {
return;
}