Hello,
Here is our patch, as requested.
Index: part.cpp =================================================================== --- part.cpp (revision 976771) +++ part.cpp (working copy) @@ -253,6 +253,7 @@ GuiUtils::setIconLoader( iconLoader() ); + m_sidebar = new Sidebar( parentWidget ); setWidget( m_sidebar ); Index: core/document.cpp =================================================================== --- core/document.cpp (revision 976771) +++ core/document.cpp (working copy) @@ -1638,7 +1638,7 @@ } d->m_bookmarkManager->setUrl( d->m_url ); - // 3. setup observers inernal lists and data + // 3. setup observers internal lists and data foreachObserver( notifySetup( d->m_pagesVector, DocumentObserver::DocumentChanged ) ); // 4. set initial page (restoring the page saved in xml if loaded) @@ -2459,6 +2459,10 @@ (*it)->notifyZoom( factor ); } +void Document::setViewportZoom(double factor) { + d->m_viewportIterator->viewZoom.zoom = factor; +} + void Document::setPrevViewport() // restore viewport from the history { @@ -3187,12 +3191,12 @@ QByteArray Document::fontData(const FontInfo &font) const { QByteArray result; - + if (d->m_generator) { QMetaObject::invokeMethod(d->m_generator, "requestFontData", Qt::DirectConnection, Q_ARG(Okular::FontInfo, font), Q_ARG(QByteArray *, &result)); } - + return result; } @@ -3547,6 +3551,7 @@ autoFit.enabled = false; autoFit.width = false; autoFit.height = false; + viewZoom.zoom = 1; } DocumentViewport::DocumentViewport( const QString & xmlDesc ) @@ -3560,6 +3565,7 @@ autoFit.enabled = false; autoFit.width = false; autoFit.height = false; + viewZoom.zoom = 1; // check for string presence if ( xmlDesc.isEmpty() ) @@ -3599,6 +3605,9 @@ autoFit.width = token.section( ':', 1, 1 ) == "T"; autoFit.height = token.section( ':', 2, 2 ) == "T"; } + else if ( token.startsWith( "Z1" ) ) + viewZoom.zoom = token.section( ':', 1, 1 ).toDouble(); + // proceed tokenizing string field++; token = xmlDesc.section( ';', field, field ); @@ -3618,6 +3627,10 @@ if ( autoFit.enabled ) s += QString( ";AF1:" ) + (autoFit.width ? "T" : "F") + ':' + (autoFit.height ? "T" : "F"); + + // if has zoom data, save it on string + s += QString( ";Z1:" ) + QString::number( viewZoom.zoom ); + return s; } @@ -3641,6 +3654,8 @@ (( autoFit.width != vp.autoFit.width ) || ( autoFit.height != vp.autoFit.height )) ) return false; + if ( ( viewZoom.zoom != vp.viewZoom.zoom )) + return false; return true; } Index: core/document.h =================================================================== --- core/document.h (revision 976771) +++ core/document.h (working copy) @@ -323,6 +323,8 @@ */ void setNextDocumentDestination( const QString &namedDestination ); + void setViewportZoom(double factor); + /** * Sets the zoom for the current document. * @@ -782,6 +784,13 @@ bool width; bool height; } autoFit; + + /** + * Zoom data + */ + struct { + double zoom; + } viewZoom; }; /** Index: ui/pageview.cpp =================================================================== --- ui/pageview.cpp (revision 976771) +++ ui/pageview.cpp (working copy) @@ -956,16 +956,18 @@ center( newCenterX, newCenterY ); d->blockPixmapsRequest = false; + setCapability( Zoom, QVariant(vp.viewZoom.zoom) ); + // request visible pixmaps in the current viewport and recompute it slotRequestVisiblePixmaps(); // enable setViewport calls d->blockViewport = false; - // update zoom text if in a ZoomFit/* zoom mode - if ( d->zoomMode != ZoomFixed ) - updateZoomText(); + // update zoom text + updateZoomText(); + // since the page has moved below cursor, update it updateCursor( widget()->mapFromGlobal( QCursor::pos() ) ); } @@ -1095,7 +1097,7 @@ switch ( capability ) { case Zoom: - return d->zoomFactor; + return d->zoomFactor; case ZoomModality: return d->zoomMode; } @@ -1280,7 +1282,7 @@ { // this saves us from infinite resizing loop because of scrollbars appearing and disappearing // see bug 160628 for more info - // TODO looks are still a bit ugly because things are left uncentered + // TODO looks are still a bit ugly because things are left uncentered // but better a bit ugly than unusable d->bothScrollbarsVisible = false; widget()->resize( e->size() ); @@ -1344,6 +1346,7 @@ newViewport.pageNumber = d->items.count() - 1; newViewport.rePos.enabled = true; newViewport.rePos.normalizedY = 0.0; + newViewport.viewZoom.zoom = d->zoomFactor; d->document->setViewport( newViewport ); } } @@ -1366,6 +1369,7 @@ newViewport.pageNumber = 0; newViewport.rePos.enabled = true; newViewport.rePos.normalizedY = 1.0; + newViewport.viewZoom.zoom = d->zoomFactor; d->document->setViewport( newViewport ); } } @@ -2185,6 +2189,7 @@ newViewport.pageNumber = d->items.count() - 1; newViewport.rePos.enabled = true; newViewport.rePos.normalizedY = 0.0; + newViewport.viewZoom.zoom = d->zoomFactor; d->document->setViewport( newViewport ); } } @@ -2200,6 +2205,7 @@ newViewport.pageNumber = 0; newViewport.rePos.enabled = true; newViewport.rePos.normalizedY = 1.0; + newViewport.viewZoom.zoom = d->zoomFactor; d->document->setViewport( newViewport ); } } @@ -2667,6 +2673,9 @@ } } + d->document->setViewportZoom(d->zoomFactor); + + d->aZoomIn->setEnabled( d->zoomFactor < 3.9 ); d->aZoomOut->setEnabled( d->zoomFactor > 0.2 ); } @@ -3132,6 +3141,7 @@ newViewport.rePos.enabled = true; newViewport.rePos.normalizedX = focusedX; newViewport.rePos.normalizedY = focusedY; + newViewport.viewZoom.zoom = d->zoomFactor; // set the viewport to other observers d->document->setViewport( newViewport , PAGEVIEW_ID); }
_______________________________________________ Okular-devel mailing list Okular-devel@kde.org https://mail.kde.org/mailman/listinfo/okular-devel