Use floating geometry throughout
With fractional scaling integer based logical geometry may not match device pixels. Once we have a floating point base we can fix that. This also is important for our X11 scale override, with a scale of 2 we could get logical sizes with halves.
We already have all input being floating point, this doubles down on it for all remaining geometry.
- Outputs remain integer to ensure that any screen on the right remains aligned.
- Placement also remains integer based for now.
- Repainting is untouched as we always expand outwards (QRectF::toAdjustedRect().
- Decoration is untouched for now
- Struts are rounded to integers
- Rules are integer in the config, but floating in the adjusting/API This should also be fine.
At some point we'll add a method to snap to the device pixel
grid. Effectively round(value * dpr) / dpr
though right now things
mostly work.
This also gets rid of a lot of hacks for QRect right and bottom which are very confusing.
Parts to watch out in the port are: QRectF::contains now includes edges QRectF::right and bottom are now sane so previous hacks have to be removed QRectF(QPoint, QPoint) behaves differently for the same reason QRectF::center too
In test results some adjusted values which are the result of QRect.center because using QRectF's center should behave the same to the user.