bool QgsMapCanvasItem::setRenderContextVariables( QPainter* p, QgsRenderContext& context ) const { if ( !mMapCanvas || !p ) { return false; } QgsMapRenderer* mapRenderer = mMapCanvas->mapRenderer(); if ( !mapRenderer ) { return false; } context.setPainter( p ); context.setRendererScale( mMapCanvas->scale() ); int dpi = mapRenderer->outputDpi(); int painterDpi = p->device()->logicalDpiX(); double scaleFactor = 1.0; double rasterScaleFactor = 1.0; //little trick to find out if painting origines from composer or main map canvas if ( data( 1 ).toString() == "composer" ) { rasterScaleFactor = painterDpi / 25.4; scaleFactor = dpi / 25.4; } else { if ( mapRenderer->outputUnits() == QgsMapRenderer::Millimeters ) { scaleFactor = dpi / 25.4; } } context.setScaleFactor( scaleFactor ); context.setRasterScaleFactor( rasterScaleFactor ); return true; }