Warning, /plasma/kwin/doc/coding-conventions.md is written in an unsupported language. File is not indexed.
0001 # Coding Conventions
0002
0003 This document describes some of the recommended coding conventions that should be followed in KWin.
0004
0005 For KWin, it is recommended to follow the KDE Frameworks Coding Style.
0006
0007
0008 ## `auto` Keyword
0009
0010 Optionally, you can use the `auto` keyword in the following cases. If in doubt, for example if using
0011 `auto` could make the code less readable, do not use `auto`. Keep in mind that code is read much more
0012 often than written.
0013
0014 * When it avoids repetition of a type in the same statement.
0015
0016 ```
0017 auto something = new MyCustomType;
0018 auto keyEvent = static_cast<QKeyEvent *>(event);
0019 auto myList = QStringList({ "FooThing", "BarThing" });
0020 ```
0021
0022 * When assigning iterator types.
0023
0024 ```
0025 auto it = myList.const_iterator();
0026 ```
0027
0028
0029 ## `QRect::right()` and `QRect::bottom()`
0030
0031 For historical reasons, the `QRect::right()` and `QRect::bottom()` functions deviate from the true
0032 bottom-right corner of the rectangle. Note that this is not the case for the `QRectF` class.
0033
0034 As a general rule, avoid using `QRect::right()` and `QRect::bottom()` as well methods that operate
0035 on them. There are exceptions, though.
0036
0037 Exception 1: you can use `QRect::moveRight()` and `QRect::moveBottom()` to snap a `QRect` to
0038 another `QRect` as long as the corresponding borders match, for example
0039
0040 ```
0041 // Ok
0042 rect.moveRight(anotherRect.right());
0043 rect.moveBottom(anotherRect.bottom());
0044 rect.moveBottomRight(anotherRect.bottomRight());
0045
0046 // Bad
0047 rect.moveRight(anotherRect.left() - 1); // must be rect.moveLeft(anotherRect.left() - rect.width());
0048 rect.moveBottom(anotherRect.top() - 1); // must be rect.moveTop(anotherRect.top() - rect.height());
0049 rect.moveBottomRight(anotherRect.topLeft() - QPoint(1, 1));
0050 ```
0051
0052 Exception 2: you can use `QRect::setRight()` and `QRect::setBottom()` to clip a `QRect` by another
0053 `QRect` as long as the corresponding borders match, for example
0054
0055 ```
0056 // Ok
0057 rect.setRight(anotherRect.right());
0058 rect.setBottom(anotherRect.bottom());
0059 rect.setBottomRight(anotherRect.bottomRight());
0060
0061 // Bad
0062 rect.setRight(anotherRect.left());
0063 rect.setBottom(anotherRect.top());
0064 rect.setBottomRight(anotherRect.topLeft());
0065 ```
0066
0067 Exception 3: you can use `QRect::right()` and `QRect::bottom()` in conditional statements as long
0068 as the compared borders are the same, for example
0069
0070 ```
0071 // Ok
0072 if (rect.right() > anotherRect.right()) {
0073 return;
0074 }
0075 if (rect.bottom() > anotherRect.bottom()) {
0076 return;
0077 }
0078
0079 // Bad
0080 if (rect.right() > anotherRect.left()) {
0081 return;
0082 }
0083 if (rect.bottom() > anotherRect.top()) {
0084 return;
0085 }
0086 ```