From 4f8724b62bf883f2a905f9811091973604e0476e Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Fri, 12 Jan 2007 23:03:12 +0000 Subject: [PATCH] Improve a bit the image generator, even if it's just a toy: - use QImage instead of QPixmap, and save some QPixmap <-> QImage conversions - make it able to read from raw data (read from stdin) as a simple example of the functionality svn path=/trunk/playground/graphics/okular/; revision=622775 --- generators/kimgio/generator_kimgio.cpp | 31 ++++++++++++++++++++------ generators/kimgio/generator_kimgio.h | 7 +++++- 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/generators/kimgio/generator_kimgio.cpp b/generators/kimgio/generator_kimgio.cpp index a946b5b9b..2b34e1ea0 100644 --- a/generators/kimgio/generator_kimgio.cpp +++ b/generators/kimgio/generator_kimgio.cpp @@ -8,7 +8,6 @@ ***************************************************************************/ #include -#include #include #include @@ -27,11 +26,25 @@ KIMGIOGenerator::~KIMGIOGenerator() bool KIMGIOGenerator::loadDocument( const QString & fileName, QVector & pagesVector ) { - m_pix = new QPixmap(fileName); + if ( !m_img.load( fileName ) ) + return false; pagesVector.resize( 1 ); - Okular::Page * page = new Okular::Page( 0, m_pix->width(), m_pix->height(), Okular::Rotation0 ); + Okular::Page * page = new Okular::Page( 0, m_img.width(), m_img.height(), Okular::Rotation0 ); + pagesVector[0] = page; + + return true; +} + +bool KIMGIOGenerator::loadDocumentFromData( const QByteArray & fileData, QVector & pagesVector ) +{ + if ( !m_img.loadFromData( fileData ) ) + return false; + + pagesVector.resize( 1 ); + + Okular::Page * page = new Okular::Page( 0, m_img.width(), m_img.height(), Okular::Rotation0 ); pagesVector[0] = page; return true; @@ -39,8 +52,7 @@ bool KIMGIOGenerator::loadDocument( const QString & fileName, QVectorheight(); if ( request->page()->rotation() % 2 == 1 ) qSwap( width, height ); - QImage image = m_pix->toImage().scaled( width, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); + QImage image = m_img.scaled( width, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation ); request->page()->setPixmap( request->id(), new QPixmap( QPixmap::fromImage( image ) ) ); // signal that the request has been accomplished @@ -67,9 +79,14 @@ void KIMGIOGenerator::generatePixmap( Okular::PixmapRequest * request ) bool KIMGIOGenerator::print( KPrinter& printer ) { QPainter p( &printer ); - p.drawPixmap( 0, 0, *m_pix ); + p.drawImage( 0, 0, m_img ); return true; } +bool KIMGIOGenerator::hasFeature( GeneratorFeature feature ) const +{ + return feature == Okular::Generator::ReadRawData; +} + #include "generator_kimgio.moc" diff --git a/generators/kimgio/generator_kimgio.h b/generators/kimgio/generator_kimgio.h index 979d4f229..f0b117120 100644 --- a/generators/kimgio/generator_kimgio.h +++ b/generators/kimgio/generator_kimgio.h @@ -12,6 +12,8 @@ #include +#include + class KIMGIOGenerator : public Okular::Generator { Q_OBJECT @@ -21,6 +23,7 @@ class KIMGIOGenerator : public Okular::Generator // [INHERITED] load a document and fill up the pagesVector bool loadDocument( const QString & fileName, QVector & pagesVector ); + bool loadDocumentFromData( const QByteArray & fileData, QVector & pagesVector ); bool closeDocument(); // [INHERITED] perform actions on document / pages @@ -30,8 +33,10 @@ class KIMGIOGenerator : public Okular::Generator // [INHERITED] print document using already configured kprinter bool print( KPrinter& printer ); + bool hasFeature( GeneratorFeature feature ) const; + private: - QPixmap *m_pix; + QImage m_img; }; #endif