A 1 pixel thick line drawn by Cairo with integer coordinates, instead of appearing crisp and solid, appears 2 pixels thick and blurry.
I found an old blog post explaining the problem here: Why are all my lines fuzzy in cairo?
It suggests adding 0.5 to all coordinates drawn by Cairo, but this is not ideal.
I tried this with a basic program that draws a grid of lines, I added 0.5 to the coordinates and the lines appeared solid and 1 pixel thick, but with dynamic scaling you get a really bad side effect - if you scale the object with some smoothing/damping effect, on reverting back to a scale of 1.0 exactly you will be met with a very noticeable judder, ending for some reason offset 1px to the right and bottom of where we started.
Similarly, if I negate 0.5 from the coordinates, this happens:
Is there a way around this?