mirror of
https://invent.kde.org/graphics/okular
synced 2024-10-05 23:49:20 +00:00
Removed possibility to have a tiles manager per observer
Now only the PageView can have a tiles manager.
This commit is contained in:
parent
bdbd03f5c9
commit
e12966b259
|
@ -266,11 +266,11 @@ void DocumentPrivate::cleanupPixmapMemory( qulonglong memoryToFree )
|
|||
QLinkedList< AllocatedPixmap * > pixmapsToKeep;
|
||||
while ( memoryToFree > 0 )
|
||||
{
|
||||
AllocatedPixmap * p = searchLowestPriorityPixmap( false, true );
|
||||
AllocatedPixmap * p = searchLowestPriorityPixmap( false, true, PAGEVIEW_ID );
|
||||
if ( !p ) // No pixmap to remove
|
||||
break;
|
||||
|
||||
TilesManager *tilesManager = m_pagesVector.at( p->page )->tilesManager( p->id );
|
||||
TilesManager *tilesManager = m_pagesVector.at( p->page )->tilesManager();
|
||||
if ( tilesManager && tilesManager->totalMemory() > 0 )
|
||||
{
|
||||
qulonglong memoryDiff = p->memory;
|
||||
|
@ -305,7 +305,7 @@ void DocumentPrivate::cleanupPixmapMemory( qulonglong memoryToFree )
|
|||
* thenRemoveIt is set, the pixmap is removed from m_allocatedPixmaps before
|
||||
* returning it
|
||||
*/
|
||||
AllocatedPixmap * DocumentPrivate::searchLowestPriorityPixmap( bool unloadableOnly, bool thenRemoveIt )
|
||||
AllocatedPixmap * DocumentPrivate::searchLowestPriorityPixmap( bool unloadableOnly, bool thenRemoveIt, int observerId )
|
||||
{
|
||||
QLinkedList< AllocatedPixmap * >::iterator pIt = m_allocatedPixmaps.begin();
|
||||
QLinkedList< AllocatedPixmap * >::iterator pEnd = m_allocatedPixmaps.end();
|
||||
|
@ -317,11 +317,15 @@ AllocatedPixmap * DocumentPrivate::searchLowestPriorityPixmap( bool unloadableOn
|
|||
while ( pIt != pEnd )
|
||||
{
|
||||
const AllocatedPixmap * p = *pIt;
|
||||
const int distance = qAbs( p->page - currentViewportPage );
|
||||
if ( maxDistance < distance && ( !unloadableOnly || m_observers.value( p->id )->canUnloadPixmap( p->page ) ) )
|
||||
// Filter by observer
|
||||
if ( observerId == -1 || p->id == observerId )
|
||||
{
|
||||
maxDistance = distance;
|
||||
farthestPixmap = pIt;
|
||||
const int distance = qAbs( p->page - currentViewportPage );
|
||||
if ( maxDistance < distance && ( !unloadableOnly || m_observers.value( p->id )->canUnloadPixmap( p->page ) ) )
|
||||
{
|
||||
maxDistance = distance;
|
||||
farthestPixmap = pIt;
|
||||
}
|
||||
}
|
||||
++pIt;
|
||||
}
|
||||
|
@ -1049,7 +1053,7 @@ void DocumentPrivate::sendGeneratorRequest()
|
|||
}
|
||||
|
||||
QRect requestRect = r->isTile() ? r->normalizedRect().geometry( r->width(), r->height() ) : QRect( 0, 0, r->width(), r->height() );
|
||||
TilesManager *tilesManager = r->page()->tilesManager( r->id() );
|
||||
TilesManager *tilesManager = ( r->id() == PAGEVIEW_ID ) ? r->page()->tilesManager() : 0;
|
||||
|
||||
// request only if page isn't already present or request has invalid id
|
||||
if ( ( !r->d->mForce && r->page()->hasPixmap( r->id(), r->width(), r->height(), r->normalizedRect() ) ) || r->id() <= 0 || r->id() >= MAX_OBSERVER_ID )
|
||||
|
@ -1092,7 +1096,7 @@ void DocumentPrivate::sendGeneratorRequest()
|
|||
}
|
||||
tilesManager->setRequest( r->normalizedRect(), r->width(), r->height() );
|
||||
r->page()->deletePixmap( r->id() );
|
||||
r->page()->setTilesManager( r->id(), tilesManager );
|
||||
r->page()->d->setTilesManager( tilesManager );
|
||||
r->setTile( true );
|
||||
|
||||
// Change normalizedRect to the smallest rect that contains all
|
||||
|
@ -1157,7 +1161,7 @@ void DocumentPrivate::sendGeneratorRequest()
|
|||
|
||||
// [MEM] preventive memory freeing
|
||||
qulonglong pixmapBytes = 0;
|
||||
TilesManager * tm = request->page()->tilesManager( request->id() );
|
||||
TilesManager * tm = ( request->id() == PAGEVIEW_ID ) ? request->page()->tilesManager() : 0;
|
||||
if ( tm )
|
||||
pixmapBytes = tm->totalMemory();
|
||||
else
|
||||
|
@ -1289,13 +1293,12 @@ void DocumentPrivate::refreshPixmaps( int pageNumber )
|
|||
requestedPixmaps.push_back( p );
|
||||
}
|
||||
|
||||
QMap< int, TilesManager* >::const_iterator tmIt = page->d->m_tilesManagers.constBegin(), tmEnd = page->d->m_tilesManagers.constEnd();
|
||||
for ( ; tmIt != tmEnd; tmIt++ )
|
||||
TilesManager *tilesManager = page->tilesManager();
|
||||
if ( tilesManager )
|
||||
{
|
||||
TilesManager * tilesManager = *tmIt;
|
||||
tilesManager->markDirty();
|
||||
|
||||
PixmapRequest * p = new PixmapRequest( tmIt.key(), pageNumber, tilesManager->width(), tilesManager->height(), 1, true );
|
||||
PixmapRequest * p = new PixmapRequest( PAGEVIEW_ID, pageNumber, tilesManager->width(), tilesManager->height(), 1, true );
|
||||
|
||||
NormalizedRect tilesRect;
|
||||
|
||||
|
@ -4062,7 +4065,7 @@ void DocumentPrivate::requestDone( PixmapRequest * req )
|
|||
{
|
||||
// [MEM] 1.2 append memory allocation descriptor to the FIFO
|
||||
qulonglong memoryBytes = 0;
|
||||
const TilesManager *tm = req->page()->tilesManager( req->id() );
|
||||
const TilesManager *tm = ( req->id() == PAGEVIEW_ID ) ? req->page()->tilesManager() : 0;
|
||||
if ( tm )
|
||||
memoryBytes = tm->totalMemory();
|
||||
else
|
||||
|
|
|
@ -98,7 +98,7 @@ class DocumentPrivate
|
|||
qulonglong calculateMemoryToFree();
|
||||
void cleanupPixmapMemory();
|
||||
void cleanupPixmapMemory( qulonglong memoryToFree );
|
||||
AllocatedPixmap * searchLowestPriorityPixmap( bool unloadableOnly = false, bool thenRemoveIt = false );
|
||||
AllocatedPixmap * searchLowestPriorityPixmap( bool unloadableOnly = false, bool thenRemoveIt = false, int observerId = -1 /* any */ );
|
||||
void calculateMaxTextPages();
|
||||
qulonglong getTotalMemory();
|
||||
qulonglong getFreeMemory( qulonglong *freeSwap = 0 );
|
||||
|
|
|
@ -62,7 +62,7 @@ static void deleteObjectRects( QLinkedList< ObjectRect * >& rects, const QSet<Ob
|
|||
}
|
||||
|
||||
PagePrivate::PagePrivate( Page *page, uint n, double w, double h, Rotation o )
|
||||
: m_page( page ), m_number( n ), m_orientation( o ),
|
||||
: m_tilesManager( 0 ), m_page( page ), m_number( n ), m_orientation( o ),
|
||||
m_width( w ), m_height( h ), m_doc( 0 ), m_boundingBox( 0, 0, 1, 1 ),
|
||||
m_rotation( Rotation0 ),
|
||||
m_text( 0 ), m_transition( 0 ), m_textSelections( 0 ),
|
||||
|
@ -89,7 +89,7 @@ PagePrivate::~PagePrivate()
|
|||
|
||||
void PagePrivate::imageRotationDone( RotationJob * job )
|
||||
{
|
||||
TilesManager *tm = m_page->tilesManager( job->id() );
|
||||
TilesManager *tm = ( job->id() == PAGEVIEW_ID ) ? m_page->tilesManager() : 0;
|
||||
if ( tm )
|
||||
{
|
||||
QPixmap *pixmap = new QPixmap( QPixmap::fromImage( job->image() ) );
|
||||
|
@ -214,7 +214,7 @@ void Page::setBoundingBox( const NormalizedRect& bbox )
|
|||
|
||||
bool Page::hasPixmap( int id, int width, int height, const NormalizedRect &rect ) const
|
||||
{
|
||||
TilesManager *tm = tilesManager( id );
|
||||
TilesManager *tm = ( id == PAGEVIEW_ID ) ? tilesManager() : 0;
|
||||
if ( tm )
|
||||
{
|
||||
if ( width != tm->width() || height != tm->height() )
|
||||
|
@ -391,16 +391,10 @@ void PagePrivate::rotateAt( Rotation orientation )
|
|||
}
|
||||
|
||||
/**
|
||||
* Rotate tiles managers
|
||||
* Rotate tiles manager
|
||||
*/
|
||||
QMapIterator< int, TilesManager* > tIt( m_tilesManagers );
|
||||
while ( it.hasNext() )
|
||||
{
|
||||
it.next();
|
||||
|
||||
TilesManager *tilesManager = tIt.value();
|
||||
tilesManager->setRotation( m_rotation );
|
||||
}
|
||||
if ( m_tilesManager )
|
||||
m_tilesManager->setRotation( m_rotation );
|
||||
|
||||
/**
|
||||
* Rotate the object rects on the page.
|
||||
|
@ -498,7 +492,7 @@ QLinkedList< FormField * > Page::formFields() const
|
|||
void Page::setPixmap( int id, QPixmap *pixmap, const NormalizedRect &rect )
|
||||
{
|
||||
if ( d->m_rotation == Rotation0 ) {
|
||||
TilesManager *tm = tilesManager( id );
|
||||
TilesManager *tm = ( id == PAGEVIEW_ID ) ? tilesManager() : 0;
|
||||
if ( tm )
|
||||
{
|
||||
tm->setPixmap( pixmap, rect );
|
||||
|
@ -703,9 +697,11 @@ void Page::setFormFields( const QLinkedList< FormField * >& fields )
|
|||
|
||||
void Page::deletePixmap( int id )
|
||||
{
|
||||
TilesManager *tm = d->m_tilesManagers.take( id );
|
||||
if ( tm )
|
||||
delete tm;
|
||||
if ( id == PAGEVIEW_ID && d->m_tilesManager )
|
||||
{
|
||||
delete d->m_tilesManager;
|
||||
d->m_tilesManager = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
PagePrivate::PixmapObject object = d->m_pixmaps.take( id );
|
||||
|
@ -722,8 +718,8 @@ void Page::deletePixmaps()
|
|||
}
|
||||
|
||||
d->m_pixmaps.clear();
|
||||
qDeleteAll( d->m_tilesManagers );
|
||||
d->m_tilesManagers.clear();
|
||||
delete d->m_tilesManager;
|
||||
d->m_tilesManager = 0;
|
||||
}
|
||||
|
||||
void Page::deleteRects()
|
||||
|
@ -978,25 +974,14 @@ const QPixmap * Page::_o_nearestPixmap( int pixID, int w, int h ) const
|
|||
return pixmap;
|
||||
}
|
||||
|
||||
TilesManager *Page::tilesManager( int id ) const
|
||||
TilesManager *Page::tilesManager() const
|
||||
{
|
||||
TilesManager *tilesManager = 0;
|
||||
|
||||
QMap< int, TilesManager* >::iterator itTilesManager = d->m_tilesManagers.find( id );
|
||||
if ( itTilesManager != d->m_tilesManagers.end() )
|
||||
tilesManager = *itTilesManager;
|
||||
|
||||
return tilesManager;
|
||||
return d->m_tilesManager;
|
||||
}
|
||||
|
||||
void Page::setTilesManager( int id, TilesManager *tm )
|
||||
void PagePrivate::setTilesManager( TilesManager *tm )
|
||||
{
|
||||
QMap< int, TilesManager* >::const_iterator itTilesManager = d->m_tilesManagers.constFind( id );
|
||||
if ( itTilesManager != d->m_tilesManagers.constEnd() )
|
||||
{
|
||||
if ( *itTilesManager )
|
||||
delete *itTilesManager;
|
||||
}
|
||||
|
||||
d->m_tilesManagers.insert( id, tm );
|
||||
delete m_tilesManager;
|
||||
m_tilesManager = tm;
|
||||
}
|
||||
|
||||
|
|
11
core/page.h
11
core/page.h
|
@ -362,14 +362,11 @@ class OKULAR_EXPORT Page
|
|||
void deleteAnnotations();
|
||||
|
||||
/**
|
||||
* Returns the tile manager for the observer with the given @p id.
|
||||
* Returns the tile manager for the PAGEVIEW_ID observer.
|
||||
*
|
||||
* @since 0.16 (KDE 4.10)
|
||||
*/
|
||||
TilesManager *tilesManager( int id ) const;
|
||||
|
||||
/**
|
||||
* Sets a tiles manager for the given @p id
|
||||
*/
|
||||
void setTilesManager( int id, TilesManager *tm );
|
||||
TilesManager *tilesManager() const;
|
||||
|
||||
private:
|
||||
PagePrivate* const d;
|
||||
|
|
|
@ -103,6 +103,11 @@ class PagePrivate
|
|||
*/
|
||||
void deleteTextSelections();
|
||||
|
||||
/**
|
||||
* Sets the tiles manager for the PAGEVIEW_ID observer
|
||||
*/
|
||||
void setTilesManager( TilesManager *tm );
|
||||
|
||||
class PixmapObject
|
||||
{
|
||||
public:
|
||||
|
@ -110,7 +115,7 @@ class PagePrivate
|
|||
Rotation m_rotation;
|
||||
};
|
||||
QMap< int, PixmapObject > m_pixmaps;
|
||||
QMap< int, TilesManager* > m_tilesManagers;
|
||||
TilesManager* m_tilesManager;
|
||||
|
||||
Page *m_page;
|
||||
int m_number;
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#include "core/utils.h"
|
||||
#include "guiutils.h"
|
||||
#include "settings.h"
|
||||
#include "core/observer.h"
|
||||
#include "core/tilesmanager_p.h"
|
||||
|
||||
K_GLOBAL_STATIC_WITH_ARGS( QPixmap, busyPixmap, ( KIconLoader::global()->loadIcon("okular", KIconLoader::NoGroup, 32, KIconLoader::DefaultState, QStringList(), 0, true) ) )
|
||||
|
@ -85,7 +86,7 @@ void PagePainter::paintCroppedPageOnPainter( QPainter * destPainter, const Okula
|
|||
}
|
||||
destPainter->fillRect( limits, backgroundColor );
|
||||
|
||||
Okular::TilesManager *tilesManager = page->tilesManager( pixID );
|
||||
Okular::TilesManager *tilesManager = ( pixID == PAGEVIEW_ID ) ? page->tilesManager() : 0;
|
||||
const QPixmap *pixmap = 0;
|
||||
if ( !tilesManager )
|
||||
{
|
||||
|
|
|
@ -3144,7 +3144,7 @@ void PageView::drawDocumentOnPainter( const QRect & contentsRect, QPainter * p )
|
|||
|
||||
Okular::NormalizedRect crop;
|
||||
|
||||
if ( item->page()->tilesManager( PAGEVIEW_ID ) )
|
||||
if ( item->page()->tilesManager() )
|
||||
{
|
||||
QVector< Okular::VisiblePageRect * >::const_iterator vIt = d->document->visiblePageRects().constBegin(), vEnd = d->document->visiblePageRects().constEnd();
|
||||
for ( ; vIt != vEnd; ++vIt )
|
||||
|
@ -4019,7 +4019,7 @@ void PageView::slotRequestVisiblePixmaps( int newValue )
|
|||
kWarning() << "checking for text for page" << i->pageNumber() << "=" << i->page()->hasTextPage();
|
||||
#endif
|
||||
|
||||
Okular::TilesManager *tilesManager = i->page()->tilesManager( PAGEVIEW_ID );
|
||||
Okular::TilesManager *tilesManager = i->page()->tilesManager();
|
||||
Okular::NormalizedRect expandedVisibleRect = vItem->rect;
|
||||
if ( tilesManager && Okular::Settings::memoryLevel() != Okular::Settings::EnumMemoryLevel::Low )
|
||||
{
|
||||
|
@ -4047,7 +4047,7 @@ void PageView::slotRequestVisiblePixmaps( int newValue )
|
|||
if ( tilesManager )
|
||||
{
|
||||
Okular::NormalizedRect tilesRect;
|
||||
QList<Okular::Tile> tiles = i->page()->tilesManager( PAGEVIEW_ID )->tilesAt( expandedVisibleRect );
|
||||
QList<Okular::Tile> tiles = tilesManager->tilesAt( expandedVisibleRect );
|
||||
QList<Okular::Tile>::const_iterator tIt = tiles.constBegin(), tEnd = tiles.constEnd();
|
||||
while ( tIt != tEnd )
|
||||
{
|
||||
|
@ -4113,7 +4113,7 @@ void PageView::slotRequestVisiblePixmaps( int newValue )
|
|||
if ( tailRequest < (int)d->items.count() )
|
||||
{
|
||||
PageViewItem * i = d->items[ tailRequest ];
|
||||
Okular::TilesManager *tilesManager = i->page()->tilesManager( PAGEVIEW_ID );
|
||||
Okular::TilesManager *tilesManager = i->page()->tilesManager();
|
||||
|
||||
Okular::NormalizedRect preRenderRegion;
|
||||
QRect intersectionRect = expandedViewportRect.intersect( i->croppedGeometry() );
|
||||
|
@ -4161,7 +4161,7 @@ void PageView::slotRequestVisiblePixmaps( int newValue )
|
|||
if ( headRequest >= 0 )
|
||||
{
|
||||
PageViewItem * i = d->items[ headRequest ];
|
||||
Okular::TilesManager *tilesManager = i->page()->tilesManager( PAGEVIEW_ID );
|
||||
Okular::TilesManager *tilesManager = i->page()->tilesManager();
|
||||
|
||||
Okular::NormalizedRect preRenderRegion;
|
||||
QRect intersectionRect = expandedViewportRect.intersect( i->croppedGeometry() );
|
||||
|
|
Loading…
Reference in a new issue