Use floating geometry throughout

David Edmundson requested to merge work/floating_geometry into master

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 because using QRectF's center should behave the same to the user.

Edited by David Edmundson

Merge request reports