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

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

Loading…
Cancel
Save