diff --git a/core/annotations.cpp b/core/annotations.cpp index d8c1a276b..026c5ef29 100644 --- a/core/annotations.cpp +++ b/core/annotations.cpp @@ -630,12 +630,11 @@ void Annotation::setBoundingRectangle( const NormalizedRect &rectangle ) { Q_D( Annotation ); d->m_boundary = rectangle; + d->resetTransformation(); if ( d->m_page ) { d->transform( d->m_page->rotationMatrix() ); } - else - d->m_transformedBoundary = d->m_boundary; } NormalizedRect Annotation::boundingRectangle() const @@ -654,12 +653,11 @@ void Annotation::translate( const NormalizedPoint &coord ) { Q_D( Annotation ); d->translate( coord ); + d->resetTransformation(); if ( d->m_page ) { d->transform( d->m_page->rotationMatrix() ); } - else - d->m_transformedBoundary = d->m_boundary; } Annotation::SubType Annotation::subType() const @@ -804,12 +802,22 @@ void Annotation::store( QDomNode & annNode, QDomDocument & document ) const } } +void AnnotationPrivate::annotationTransform( const QMatrix &matrix ) +{ + resetTransformation(); + transform( matrix ); +} + void AnnotationPrivate::transform( const QMatrix &matrix ) { - m_transformedBoundary = m_boundary; m_transformedBoundary.transform( matrix ); } +void AnnotationPrivate::resetTransformation() +{ + m_transformedBoundary = m_boundary; +} + void AnnotationPrivate::translate( const NormalizedPoint &coord ) { m_boundary.left = m_boundary.left + coord.x; @@ -834,6 +842,7 @@ class Okular::TextAnnotationPrivate : public Okular::AnnotationPrivate } virtual void transform( const QMatrix &matrix ); + virtual void resetTransformation(); virtual void translate( const NormalizedPoint &coord ); TextAnnotation::TextType m_textType; @@ -1067,11 +1076,19 @@ void TextAnnotationPrivate::transform( const QMatrix &matrix ) AnnotationPrivate::transform( matrix ); for ( int i = 0; i < 3; ++i ) { - m_transformedInplaceCallout[i] = m_inplaceCallout[i]; m_transformedInplaceCallout[i].transform( matrix ); } } +void TextAnnotationPrivate::resetTransformation() +{ + AnnotationPrivate::resetTransformation(); + + for ( int i = 0; i < 3; ++i ) { + m_transformedInplaceCallout[i] = m_inplaceCallout[i]; + } +} + void TextAnnotationPrivate::translate( const NormalizedPoint &coord ) { AnnotationPrivate::translate( coord ); @@ -1101,6 +1118,7 @@ class Okular::LineAnnotationPrivate : public Okular::AnnotationPrivate } virtual void transform( const QMatrix &matrix ); + virtual void resetTransformation(); virtual void translate( const NormalizedPoint &coord ); QLinkedList m_linePoints; @@ -1346,13 +1364,18 @@ void LineAnnotationPrivate::transform( const QMatrix &matrix ) { AnnotationPrivate::transform( matrix ); - m_transformedLinePoints = m_linePoints; - QMutableLinkedListIterator it( m_transformedLinePoints ); while ( it.hasNext() ) it.next().transform( matrix ); } +void LineAnnotationPrivate::resetTransformation() +{ + AnnotationPrivate::resetTransformation(); + + m_transformedLinePoints = m_linePoints; +} + void LineAnnotationPrivate::translate( const NormalizedPoint &coord ) { AnnotationPrivate::translate( coord ); @@ -1804,6 +1827,7 @@ class Okular::InkAnnotationPrivate : public Okular::AnnotationPrivate } virtual void transform( const QMatrix &matrix ); + virtual void resetTransformation(); virtual void translate( const NormalizedPoint &coord ); QList< QLinkedList > m_inkPaths; @@ -1930,8 +1954,6 @@ void InkAnnotationPrivate::transform( const QMatrix &matrix ) { AnnotationPrivate::transform( matrix ); - m_transformedInkPaths = m_inkPaths; - for ( int i = 0; i < m_transformedInkPaths.count(); ++i ) { QMutableLinkedListIterator it( m_transformedInkPaths[ i ] ); @@ -1940,6 +1962,13 @@ void InkAnnotationPrivate::transform( const QMatrix &matrix ) } } +void InkAnnotationPrivate::resetTransformation() +{ + AnnotationPrivate::resetTransformation(); + + m_transformedInkPaths = m_inkPaths; +} + void InkAnnotationPrivate::translate( const NormalizedPoint &coord ) { AnnotationPrivate::translate( coord ); diff --git a/core/annotations_p.h b/core/annotations_p.h index 3cecf6879..e25af865e 100644 --- a/core/annotations_p.h +++ b/core/annotations_p.h @@ -35,7 +35,10 @@ class AnnotationPrivate * Transforms the annotation coordinates with the transformation * defined by @p matrix. */ + void annotationTransform( const QMatrix &matrix ); + virtual void transform( const QMatrix &matrix ); + virtual void resetTransformation(); virtual void translate( const NormalizedPoint &coord ); PagePrivate * m_page; diff --git a/core/area.cpp b/core/area.cpp index 1ad04a973..d2730f512 100644 --- a/core/area.cpp +++ b/core/area.cpp @@ -320,7 +320,7 @@ AnnotationObjectRect::~AnnotationObjectRect() void AnnotationObjectRect::transform( const QMatrix &matrix ) { - m_annotation->d_func()->transform( matrix ); + m_annotation->d_func()->annotationTransform( matrix ); } /** class SourceRefObjectRect **/