Drawing errors when upscaling
The "display-invalidate" signal handler (in spice-widget.c invalidate()) passes too small rectangles to queue_draw_area() when upscaling is used. This is because spice-widget-cairo.c spice_cairo_draw_event() uses CAIRO_FILTER_GOOD (the default setting), which upscales using bilinear interpolation so that a pixel change affects also neighbouring pixels. The problem can be fixed at least by either turning bilinear filtering off or by enlarging the rectangle. Attached are two possibilities to fix the problem.
One way to reproduce the issue: run e.g. Ubuntu 18.04 virtual machine in QEMU (qemu-system-x86_64 -enable-kvm -m 4096 -hda /somewhere/ubuntu18.04.qcow2 -vga qxl -device intel-hda -device hda-output -spice port=5901,addr=127.0.0.1,disable-ticketing), start remove-viewer, switch to virtual console in the virtual machine (i.e. press Ctrl+Alt+F3), zoom in (Ctrl++) as far as possible and start typing and backspacing. Observe the smudging.