From bdcc7d3eb17eef7e0dc514b7ddbcc502f9bc3739 Mon Sep 17 00:00:00 2001 From: Fabio D'Urso Date: Fri, 11 Oct 2013 15:56:27 +0200 Subject: [PATCH] kimgio generator: tiled rendering support REVIEW: 113250 --- generators/kimgio/generator_kimgio.cpp | 28 +++++++++++++++++++++----- 1 file changed, 23 insertions(+), 5 deletions(-) diff --git a/generators/kimgio/generator_kimgio.cpp b/generators/kimgio/generator_kimgio.cpp index 06c2c7ac3..ef300c812 100644 --- a/generators/kimgio/generator_kimgio.cpp +++ b/generators/kimgio/generator_kimgio.cpp @@ -53,6 +53,7 @@ KIMGIOGenerator::KIMGIOGenerator( QObject *parent, const QVariantList &args ) { setFeature( ReadRawData ); setFeature( Threaded ); + setFeature( TiledRendering ); setFeature( PrintNative ); setFeature( PrintToFile ); @@ -139,12 +140,29 @@ bool KIMGIOGenerator::doCloseDocument() QImage KIMGIOGenerator::image( Okular::PixmapRequest * request ) { // perform a smooth scaled generation - int width = request->width(); - int height = request->height(); - if ( request->page()->rotation() % 2 == 1 ) - qSwap( width, height ); + if ( request->isTile() ) + { + const QRect srcRect = request->normalizedRect().geometry( m_img.width(), m_img.height() ); + const QRect destRect = request->normalizedRect().geometry( request->width(), request->height() ); - return m_img.scaled( width, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); + QImage destImg( destRect.size(), QImage::Format_RGB32 ); + destImg.fill( Qt::white ); + + QPainter p( &destImg ); + p.setRenderHint( QPainter::SmoothPixmapTransform ); + p.drawImage( destImg.rect(), m_img, srcRect ); + + return destImg; + } + else + { + int width = request->width(); + int height = request->height(); + if ( request->page()->rotation() % 2 == 1 ) + qSwap( width, height ); + + return m_img.scaled( width, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); + } } bool KIMGIOGenerator::print( QPrinter& printer )