/*************************************************************************** * Copyright (C) 2006 by Tobias Koenig * * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * ***************************************************************************/ #ifndef _OKULAR_ROTATIONJOB_P_H_ #define _OKULAR_ROTATIONJOB_P_H_ #include #include #include #include #include "core/global.h" #include "core/area.h" namespace Okular { class DocumentObserver; class PagePrivate; class RotationJobInternal : public ThreadWeaver::Job { friend class RotationJob; public: QImage image() const; Rotation rotation() const; NormalizedRect rect() const; protected: void run(ThreadWeaver::JobPointer self, ThreadWeaver::Thread *thread) Q_DECL_OVERRIDE; private: RotationJobInternal( const QImage &image, Rotation oldRotation, Rotation newRotation ); const QImage mImage; Rotation mOldRotation; Rotation mNewRotation; QImage mRotatedImage; }; class RotationJob : public ThreadWeaver::QObjectDecorator { Q_OBJECT public: RotationJob( const QImage &image, Rotation oldRotation, Rotation newRotation, DocumentObserver *observer ); void setPage( PagePrivate * pd ); void setRect( const NormalizedRect &rect ); QImage image() const { return static_cast(job())->image(); } Rotation rotation() const { return static_cast(job())->rotation(); } DocumentObserver *observer() const; PagePrivate * page() const; NormalizedRect rect() const; static QTransform rotationMatrix( Rotation from, Rotation to ); private: DocumentObserver *mObserver; PagePrivate * m_pd; NormalizedRect mRect; }; } #endif