SVN commit 483004 by whuss: Port of commit 482999 Allow the plugins to set the transition effect for each page. M +26 -26 presentationwidget.cpp M +2 -1 presentationwidget.h M +17 -1 renderedDocumentPage.cpp M +13 -0 renderedDocumentPage.h --- trunk/KDE/kdegraphics/kviewshell/shell/presentationwidget.cpp #483003:483004 @@ -433,13 +433,35 @@ // opens the painter over the pixmap QPainter pixmapPainter; pixmapPainter.begin( &m_lastRenderedPixmap ); + + const KPDFPageTransition* transition = 0; + // generate welcome page if ( m_frameIndex == -1 ) generateIntroPage( pixmapPainter ); // generate a normal pixmap with extended margin filling if ( m_frameIndex >= 0 && m_frameIndex < m_cache->totalPages() ) { - generateContentsPage( m_frameIndex, pixmapPainter ); + PresentationFrame * frame = m_frames[m_frameIndex]; + + // translate painter and contents rect + QRect geom( frame->geometry ); + + SimplePageSize pageSize = m_cache->sizeOfPage(frame->page); + if (KVSPrefs::rotation() == KVSPrefs::EnumRotation::Landscape || + KVSPrefs::rotation() == KVSPrefs::EnumRotation::Seascape) + { + pageSize = pageSize.rotate90(); + } + double zoomWidth = pageSize.zoomForWidth(m_width, *this); + double zoomHeight = pageSize.zoomForHeight(m_height, *this); + double zoom = qMin(zoomWidth, zoomHeight); + + m_cache->setResolution(QPaintDevice::x11AppDpiX()*zoom); + RenderedDocumentPagePixmap* pageData = m_cache->getPage(frame->page); + + generateContentsPage(pageData, pixmapPainter); + transition = pageData->transition(); } pixmapPainter.end(); @@ -450,10 +472,6 @@ #endif // start transition on pages that have one - //FIXME - //const KPDFPageTransition * transition = m_frameIndex != -1 ? - // m_frames[ m_frameIndex ]->page->getTransition() : 0; - const KPDFPageTransition* transition = 0; if ( transition ) initTransition( transition ); else { @@ -523,26 +541,8 @@ } } -void PresentationWidget::generateContentsPage( int pageNum, QPainter & p ) +void PresentationWidget::generateContentsPage(RenderedDocumentPagePixmap* pageData, QPainter & p) { - PresentationFrame * frame = m_frames[ pageNum ]; - - // translate painter and contents rect - QRect geom( frame->geometry ); - - SimplePageSize pageSize = m_cache->sizeOfPage(frame->page); - if (KVSPrefs::rotation() == KVSPrefs::EnumRotation::Landscape || - KVSPrefs::rotation() == KVSPrefs::EnumRotation::Seascape) - { - pageSize = pageSize.rotate90(); - } - double zoomWidth = pageSize.zoomForWidth(m_width, *this); - double zoomHeight = pageSize.zoomForHeight(m_height, *this); - double zoom = qMin(zoomWidth, zoomHeight); - - m_cache->setResolution(QPaintDevice::x11AppDpiX()*zoom); - RenderedDocumentPagePixmap* pageData = m_cache->getPage(frame->page); - int pageWidth = pageData->width(); int pageHeight = pageData->height(); if (KVSPrefs::rotation() == KVSPrefs::EnumRotation::Landscape || @@ -558,13 +558,13 @@ if (!pageData) { - kdError(kvs::shell) << "Could not render page = " << frame->page << endl; + //kdError(kvs::shell) << "Could not render page = " << frame->page << endl; p.fillRect(pageRect, Qt::red); } else { // Paint widget contents - kdDebug(kvs::shell) << "draw page " << frame->page << " as presentation" << endl; + //kdDebug(kvs::shell) << "draw page " << frame->page << " as presentation" << endl; p.drawPixmap(translate, pageData->pixmap(), pageRect); } --- trunk/KDE/kdegraphics/kviewshell/shell/presentationwidget.h #483003:483004 @@ -17,6 +17,7 @@ #include #include +class RenderedDocumentPagePixmap; class DocumentPageCache; class PresentationFrame; class QTimer; @@ -62,7 +63,7 @@ void changePage( int newPage ); void generatePage(); void generateIntroPage( QPainter & p ); - void generateContentsPage( int page, QPainter & p ); + void generateContentsPage(RenderedDocumentPagePixmap* pageData, QPainter & p); void generateOverlay(); void initTransition( const KPDFPageTransition *transition ); const KPDFPageTransition defaultTransition() const; --- trunk/KDE/kdegraphics/kviewshell/shell/renderedDocumentPage.cpp #483003:483004 @@ -8,6 +8,7 @@ #include +#include "pagetransition.h" #include "renderedDocumentPage.h" #include "hyperlink.h" #include "kvs_debug.h" @@ -18,6 +19,7 @@ RenderedDocumentPage::RenderedDocumentPage() + : _transition(0) { textBoxList.reserve(250); pageNr = 0; @@ -27,7 +29,9 @@ RenderedDocumentPage::~RenderedDocumentPage() -{} +{ + delete _transition; +} void RenderedDocumentPage::setPageNumber(const PageNumber& pnr) @@ -426,5 +430,17 @@ return selection; } + +KPDFPageTransition* RenderedDocumentPage::transition() +{ + return _transition; +} + + +void RenderedDocumentPage::setTransition(KPDFPageTransition* pageTransition) +{ + _transition = pageTransition; +} + #include "renderedDocumentPage.moc" --- trunk/KDE/kdegraphics/kviewshell/shell/renderedDocumentPage.h #483003:483004 @@ -25,7 +25,9 @@ class TextBox; class TextSelection; +class KPDFPageTransition; + /** @short Represents a page in a document, contains the page's graphical representation and resolution-dependent information. @@ -238,6 +240,15 @@ */ virtual void clear(); + /** \brief Transition effect of the page + + Returns the transition effect of the page. 0 if no transition is + specified for this page. + */ + KPDFPageTransition* transition(); + + void setTransition(KPDFPageTransition* pageTransition); + private: /** \brief Page number @@ -246,6 +257,8 @@ */ PageNumber pageNr; + KPDFPageTransition* _transition; + QString pageText; };