shadow: handle DPR outside the renderer
QPainter's auto-scaling is prone to off-by-one rounding errors and draws on fractional coordinates. With this change, we paint on a 1x DPR QPainter and scale the shadow offset and strength manually based on DPR.
This resolves an issue with resulting in seams on the right and bottom edges of a menu due to shadow boundaries being off-by-one.
The following screenshot demonstrates the "seam" glitch.