@@ -307,12 +307,29 @@ class NVGImage {
307307
308308 void renderJUCEComponent (NVGcontext* nvg, Component& component, float const scale)
309309 {
310- Image componentImage = component.createComponentSnapshot (Rectangle<int >(0 , 0 , component.getWidth (), component.getHeight ()), false , scale);
311- if (componentImage.isNull ())
312- return ;
313-
310+ nvgSave (nvg);
311+ nvgScale (nvg, 1 .0f / scale, 1 .0f / scale);
312+
313+ Point<float > offset;
314+ nvgTransformGetSubpixelOffset (nvg, &offset.x , &offset.y );
315+
316+ auto w = roundToInt (scale * (float ) component.getWidth ()) + 1 ;
317+ auto h = roundToInt (scale * (float ) component.getHeight ()) + 1 ;
318+
319+ Image componentImage (component.isOpaque () ? Image::RGB : Image::ARGB, w, h, true );
320+ {
321+ Graphics g (componentImage);
322+ g.addTransform (AffineTransform::translation (offset.x , offset.y ));
323+ g.addTransform (AffineTransform::scale (scale, scale));
324+ component.paintEntireComponent (g, true );
325+ }
326+
314327 loadJUCEImage (nvg, componentImage);
315- render (nvg, { 0 , 0 , component.getWidth (), component.getHeight () });
328+
329+ // Make sure image pixel grid aligns with physical pixels
330+ nvgTransformQuantize (nvg);
331+ render (nvg, { 0 , 0 , w, h });
332+ nvgRestore (nvg);
316333 }
317334
318335
0 commit comments