Small refactor in TextDocumentGeneratorPrivate

add const to a few variables

Make two functions return a qlist instead of using a member qlist to
return the results in them
remotes/origin/Applications/19.04
Albert Astals Cid 7 years ago
parent 753719b5b6
commit 5cce9a11fe
  1. 29
      core/textdocumentgenerator.cpp
  2. 58
      core/textdocumentgenerator_p.h

@ -165,8 +165,10 @@ void TextDocumentGeneratorPrivate::addMetaData( DocumentInfo::Key key, const QSt
mDocumentInfo.set( key, value ); mDocumentInfo.set( key, value );
} }
void TextDocumentGeneratorPrivate::generateLinkInfos() QList<TextDocumentGeneratorPrivate::LinkInfo> TextDocumentGeneratorPrivate::generateLinkInfos() const
{ {
QList<LinkInfo> result;
for ( int i = 0; i < mLinkPositions.count(); ++i ) { for ( int i = 0; i < mLinkPositions.count(); ++i ) {
const LinkPosition &linkPosition = mLinkPositions[ i ]; const LinkPosition &linkPosition = mLinkPositions[ i ];
@ -177,12 +179,16 @@ void TextDocumentGeneratorPrivate::generateLinkInfos()
info.boundingRect, info.page ); info.boundingRect, info.page );
if ( info.page >= 0 ) if ( info.page >= 0 )
mLinkInfos.append( info ); result.append( info );
} }
return result;
} }
void TextDocumentGeneratorPrivate::generateAnnotationInfos() QList<TextDocumentGeneratorPrivate::AnnotationInfo> TextDocumentGeneratorPrivate::generateAnnotationInfos() const
{ {
QList<AnnotationInfo> result;
for ( int i = 0; i < mAnnotationPositions.count(); ++i ) { for ( int i = 0; i < mAnnotationPositions.count(); ++i ) {
const AnnotationPosition &annotationPosition = mAnnotationPositions[ i ]; const AnnotationPosition &annotationPosition = mAnnotationPositions[ i ];
@ -193,8 +199,10 @@ void TextDocumentGeneratorPrivate::generateAnnotationInfos()
info.boundingRect, info.page ); info.boundingRect, info.page );
if ( info.page >= 0 ) if ( info.page >= 0 )
mAnnotationInfos.append( info ); result.append( info );
} }
return result;
} }
void TextDocumentGeneratorPrivate::generateTitleInfos() void TextDocumentGeneratorPrivate::generateTitleInfos()
@ -310,17 +318,15 @@ Document::OpenResult TextDocumentGenerator::loadDocumentWithPassword( const QStr
d->mDocument = d->mConverter->document(); d->mDocument = d->mConverter->document();
d->generateTitleInfos(); d->generateTitleInfos();
d->generateLinkInfos(); const QList<TextDocumentGeneratorPrivate::LinkInfo> linkInfos = d->generateLinkInfos();
d->generateAnnotationInfos(); const QList<TextDocumentGeneratorPrivate::AnnotationInfo> annotationInfos = d->generateAnnotationInfos();
pagesVector.resize( d->mDocument->pageCount() ); pagesVector.resize( d->mDocument->pageCount() );
const QSize size = d->mDocument->pageSize().toSize(); const QSize size = d->mDocument->pageSize().toSize();
QVector< QLinkedList<Okular::ObjectRect*> > objects( d->mDocument->pageCount() ); QVector< QLinkedList<Okular::ObjectRect*> > objects( d->mDocument->pageCount() );
for ( int i = 0; i < d->mLinkInfos.count(); ++i ) { for ( const TextDocumentGeneratorPrivate::LinkInfo &info : linkInfos ) {
const TextDocumentGeneratorPrivate::LinkInfo &info = d->mLinkInfos.at( i );
// in case that the converter report bogus link info data, do not assert here // in case that the converter report bogus link info data, do not assert here
if ( info.page >= objects.count() ) if ( info.page >= objects.count() )
continue; continue;
@ -331,8 +337,7 @@ Document::OpenResult TextDocumentGenerator::loadDocumentWithPassword( const QStr
} }
QVector< QLinkedList<Okular::Annotation*> > annots( d->mDocument->pageCount() ); QVector< QLinkedList<Okular::Annotation*> > annots( d->mDocument->pageCount() );
for ( int i = 0; i < d->mAnnotationInfos.count(); ++i ) { for ( const TextDocumentGeneratorPrivate::AnnotationInfo &info : annotationInfos ) {
const TextDocumentGeneratorPrivate::AnnotationInfo &info = d->mAnnotationInfos[ i ];
annots[ info.page ].append( info.annotation ); annots[ info.page ].append( info.annotation );
} }
@ -360,9 +365,7 @@ bool TextDocumentGenerator::doCloseDocument()
d->mTitlePositions.clear(); d->mTitlePositions.clear();
d->mLinkPositions.clear(); d->mLinkPositions.clear();
d->mLinkInfos.clear();
d->mAnnotationPositions.clear(); d->mAnnotationPositions.clear();
d->mAnnotationInfos.clear();
// do not use clear() for the following two, otherwise they change type // do not use clear() for the following two, otherwise they change type
d->mDocumentInfo = Okular::DocumentInfo(); d->mDocumentInfo = Okular::DocumentInfo();
d->mDocumentSynopsis = Okular::DocumentSynopsis(); d->mDocumentSynopsis = Okular::DocumentSynopsis();

@ -35,25 +35,25 @@ namespace TextDocumentUtils {
const QTextBlock endBlock = document->findBlock( endPosition ); const QTextBlock endBlock = document->findBlock( endPosition );
const QRectF endBoundingRect = document->documentLayout()->blockBoundingRect( endBlock ); const QRectF endBoundingRect = document->documentLayout()->blockBoundingRect( endBlock );
QTextLayout *startLayout = startBlock.layout(); const QTextLayout *startLayout = startBlock.layout();
QTextLayout *endLayout = endBlock.layout(); const QTextLayout *endLayout = endBlock.layout();
if (!startLayout || !endLayout) { if (!startLayout || !endLayout) {
qCWarning(OkularCoreDebug) << "Start or end layout not found" << startLayout << endLayout; qCWarning(OkularCoreDebug) << "Start or end layout not found" << startLayout << endLayout;
page = -1; page = -1;
return; return;
} }
int startPos = startPosition - startBlock.position(); const int startPos = startPosition - startBlock.position();
int endPos = endPosition - endBlock.position(); const int endPos = endPosition - endBlock.position();
const QTextLine startLine = startLayout->lineForTextPosition( startPos ); const QTextLine startLine = startLayout->lineForTextPosition( startPos );
const QTextLine endLine = endLayout->lineForTextPosition( endPos ); const QTextLine endLine = endLayout->lineForTextPosition( endPos );
double x = startBoundingRect.x() + startLine.cursorToX( startPos ); const double x = startBoundingRect.x() + startLine.cursorToX( startPos );
double y = startBoundingRect.y() + startLine.y(); const double y = startBoundingRect.y() + startLine.y();
double r = endBoundingRect.x() + endLine.cursorToX( endPos ); const double r = endBoundingRect.x() + endLine.cursorToX( endPos );
double b = endBoundingRect.y() + endLine.y() + endLine.height(); const double b = endBoundingRect.y() + endLine.y() + endLine.height();
int offset = qRound( y ) % qRound( pageSize.height() ); const int offset = qRound( y ) % qRound( pageSize.height() );
if ( x > r ) { // line break, so return a pseudo character on the start line if ( x > r ) { // line break, so return a pseudo character on the start line
rect = QRectF( x / pageSize.width(), offset / pageSize.height(), rect = QRectF( x / pageSize.width(), offset / pageSize.height(),
@ -71,7 +71,7 @@ namespace TextDocumentUtils {
{ {
const QAbstractTextDocumentLayout *layout = document->documentLayout(); const QAbstractTextDocumentLayout *layout = document->documentLayout();
const QSizeF pageSize = document->pageSize(); const QSizeF pageSize = document->pageSize();
double margin = document->rootFrame()->frameFormat().margin(); const double margin = document->rootFrame()->frameFormat().margin();
/** /**
* Take the upper left and lower left corner including the margin * Take the upper left and lower left corner including the margin
@ -85,8 +85,8 @@ namespace TextDocumentUtils {
const QSizeF pageSize = document->pageSize(); const QSizeF pageSize = document->pageSize();
const QRectF rect = document->documentLayout()->blockBoundingRect( block ); const QRectF rect = document->documentLayout()->blockBoundingRect( block );
int page = qRound( rect.y() ) / qRound( pageSize.height() ); const int page = qRound( rect.y() ) / qRound( pageSize.height() );
int offset = qRound( rect.y() ) % qRound( pageSize.height() ); const int offset = qRound( rect.y() ) % qRound( pageSize.height() );
Okular::DocumentViewport viewport( page ); Okular::DocumentViewport viewport( page );
viewport.rePos.normalizedX = (double)rect.x() / (double)pageSize.width(); viewport.rePos.normalizedX = (double)rect.x() / (double)pageSize.width();
@ -128,6 +128,20 @@ class TextDocumentGeneratorPrivate : public GeneratorPrivate
void initializeGenerator(); void initializeGenerator();
struct LinkInfo
{
int page;
QRectF boundingRect;
Action *link;
};
struct AnnotationInfo
{
int page;
QRectF boundingRect;
Annotation *annotation;
};
Q_DECLARE_PUBLIC( TextDocumentGenerator ) Q_DECLARE_PUBLIC( TextDocumentGenerator )
/* reimp */ QVariant metaData( const QString &key, const QVariant &option ) const override; /* reimp */ QVariant metaData( const QString &key, const QVariant &option ) const override;
@ -143,8 +157,8 @@ class TextDocumentGeneratorPrivate : public GeneratorPrivate
void addMetaData( const QString &key, const QString &value, const QString &title ); void addMetaData( const QString &key, const QString &value, const QString &title );
void addMetaData( DocumentInfo::Key, const QString &value ); void addMetaData( DocumentInfo::Key, const QString &value );
void generateLinkInfos(); QList<LinkInfo> generateLinkInfos() const;
void generateAnnotationInfos(); QList<AnnotationInfo> generateAnnotationInfos() const;
void generateTitleInfos(); void generateTitleInfos();
TextDocumentConverter *mConverter; TextDocumentConverter *mConverter;
@ -169,14 +183,6 @@ class TextDocumentGeneratorPrivate : public GeneratorPrivate
}; };
QList<LinkPosition> mLinkPositions; QList<LinkPosition> mLinkPositions;
struct LinkInfo
{
int page;
QRectF boundingRect;
Action *link;
};
QList<LinkInfo> mLinkInfos;
struct AnnotationPosition struct AnnotationPosition
{ {
int startPosition; int startPosition;
@ -185,14 +191,6 @@ class TextDocumentGeneratorPrivate : public GeneratorPrivate
}; };
QList<AnnotationPosition> mAnnotationPositions; QList<AnnotationPosition> mAnnotationPositions;
struct AnnotationInfo
{
int page;
QRectF boundingRect;
Annotation *annotation;
};
QList<AnnotationInfo> mAnnotationInfos;
TextDocumentSettings *mGeneralSettings; TextDocumentSettings *mGeneralSettings;
QFont mFont; QFont mFont;

Loading…
Cancel
Save