https://bugs.kde.org/show_bug.cgi?id=477820

--- Comment #4 from fanzhuyi...@gmail.com ---
I think I figured out what was causing this bug.

The original placeSmart [1] was written under the assumption that all
coordinates and dimensions are integers.
Thus, it uses the `int` type to store such things. However, this assumption no
longer holds under fractional scaling.
In particular, the various methods of QRectF return qreal types [2], which can
be non integers.

Hence, currently the code mixes arithmetic between integers and floats, and
sometimes implicitly converts the results
to ints. Thus, after this sequence of assignments,
> int possible;
> possible = area.y() + area.height();
> y = possible;
the expression `(y < area.y() + area.height())` might evaluate to true, causing
an infinite loop.

[1]
https://invent.kde.org/plasma/kwin/-/blob/dd9e04fb180a7e7c9a49cd029fe497f19c537618/src/placement.cpp#L159
[2] https://doc.qt.io/qt-6/qrectf.html

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to