You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
144 lines
3.9 KiB
144 lines
3.9 KiB
/*************************************************************************** |
|
* Copyright (C) 2007 Tobias Koenig <tokoe@kde.org> * |
|
* * |
|
* This program is free software; you can redistribute it and/or modify * |
|
* it under the terms of the GNU General Public License as published by * |
|
* the Free Software Foundation; either version 2 of the License, or * |
|
* (at your option) any later version. * |
|
***************************************************************************/ |
|
|
|
#include "core/page.h" |
|
#include "core/textpage.h" |
|
|
|
#include "threadedgenerator.h" |
|
#include "threadedgenerator_p.h" |
|
|
|
using namespace Okular; |
|
|
|
class ThreadedGenerator::Private |
|
{ |
|
public: |
|
Private( ThreadedGenerator *parent ) |
|
: mParent( parent ), |
|
mPixmapReady( true ), |
|
mTextPageReady( true ) |
|
{ |
|
mPixmapGenerationThread = new PixmapGenerationThread( mParent ); |
|
mParent->connect( mPixmapGenerationThread, SIGNAL( finished() ), |
|
mParent, SLOT( pixmapGenerationFinished() ), |
|
Qt::QueuedConnection ); |
|
|
|
mTextPageGenerationThread = new TextPageGenerationThread( mParent ); |
|
mParent->connect( mTextPageGenerationThread, SIGNAL( finished() ), |
|
mParent, SLOT( textpageGenerationFinished() ), |
|
Qt::QueuedConnection ); |
|
} |
|
|
|
~Private() |
|
{ |
|
if ( mPixmapGenerationThread ) |
|
mPixmapGenerationThread->wait(); |
|
|
|
delete mPixmapGenerationThread; |
|
|
|
if ( mTextPageGenerationThread ) |
|
mTextPageGenerationThread->wait(); |
|
|
|
delete mTextPageGenerationThread; |
|
} |
|
|
|
void pixmapGenerationFinished(); |
|
void textpageGenerationFinished(); |
|
|
|
ThreadedGenerator *mParent; |
|
PixmapGenerationThread *mPixmapGenerationThread; |
|
TextPageGenerationThread *mTextPageGenerationThread; |
|
bool mPixmapReady; |
|
bool mTextPageReady; |
|
}; |
|
|
|
void ThreadedGenerator::Private::pixmapGenerationFinished() |
|
{ |
|
PixmapRequest *request = mPixmapGenerationThread->request(); |
|
mPixmapGenerationThread->endGeneration(); |
|
|
|
request->page()->setPixmap( request->id(), new QPixmap( QPixmap::fromImage( mPixmapGenerationThread->image() ) ) ); |
|
|
|
mPixmapReady = true; |
|
|
|
mParent->signalPixmapRequestDone( request ); |
|
} |
|
|
|
void ThreadedGenerator::Private::textpageGenerationFinished() |
|
{ |
|
Page *page = mTextPageGenerationThread->page(); |
|
mTextPageGenerationThread->endGeneration(); |
|
|
|
mTextPageReady = true; |
|
|
|
if ( mTextPageGenerationThread->textPage() ) |
|
page->setTextPage( mTextPageGenerationThread->textPage() ); |
|
} |
|
|
|
ThreadedGenerator::ThreadedGenerator() |
|
: d( new Private( this ) ) |
|
{ |
|
} |
|
|
|
ThreadedGenerator::~ThreadedGenerator() |
|
{ |
|
delete d; |
|
} |
|
|
|
bool ThreadedGenerator::canRequestPixmap() const |
|
{ |
|
return d->mPixmapReady; |
|
} |
|
|
|
void ThreadedGenerator::requestPixmap( PixmapRequest * request ) |
|
{ |
|
d->mPixmapReady = false; |
|
|
|
d->mPixmapGenerationThread->startGeneration( request ); |
|
} |
|
|
|
bool ThreadedGenerator::canRequestTextPage() const |
|
{ |
|
return d->mTextPageReady; |
|
} |
|
|
|
void ThreadedGenerator::requestTextPage( Page * page ) |
|
{ |
|
d->mTextPageReady = false; |
|
|
|
d->mTextPageGenerationThread->startGeneration( page ); |
|
} |
|
|
|
TextPage* ThreadedGenerator::textPage( Page* ) |
|
{ |
|
return 0; |
|
} |
|
|
|
bool ThreadedGenerator::canGeneratePixmap() const |
|
{ |
|
// dummy implementation |
|
return false; |
|
} |
|
|
|
void ThreadedGenerator::generatePixmap( PixmapRequest* ) |
|
{ |
|
// dummy implementation |
|
} |
|
|
|
bool ThreadedGenerator::canGenerateTextPage() const |
|
{ |
|
// dummy implementation |
|
return false; |
|
} |
|
|
|
void ThreadedGenerator::generateSyncTextPage( Page* ) |
|
{ |
|
// dummy implementation |
|
} |
|
|
|
#include "threadedgenerator.moc"
|
|
|