File indexing completed on 2024-05-12 16:36:50
0001 /* This file is part of the KDE project 0002 * Copyright (C) 2007-2008 Thorsten Zachmann <zachmann@kde.org> 0003 * Copyright (C) 2008 Fredy Yanardi <fyanardi@kde.org> 0004 * Copyright (C) 2008 C. Boemann <cbo@boemann.dk> 0005 * 0006 * This library is free software; you can redistribute it and/or 0007 * modify it under the terms of the GNU Library General Public 0008 * License as published by the Free Software Foundation; either 0009 * version 2 of the License, or ( at your option ) any later version. 0010 * 0011 * This library is distributed in the hope that it will be useful, 0012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 0013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 0014 * Library General Public License for more details. 0015 * 0016 * You should have received a copy of the GNU Library General Public License 0017 * along with this library; see the file COPYING.LIB. If not, write to 0018 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, 0019 * Boston, MA 02110-1301, USA. 0020 */ 0021 0022 #include "KPrViewModePreviewPageEffect.h" 0023 0024 #include <QEvent> 0025 #include <QKeyEvent> 0026 #include <QPainter> 0027 #include <QDesktopWidget> 0028 0029 #include <KoPointerEvent.h> 0030 #include <KoPageApp.h> 0031 #include <KoPACanvasBase.h> 0032 #include <KoPAViewBase.h> 0033 #include <KoZoomHandler.h> 0034 0035 #include "StageDebug.h" 0036 #include "KPrDocument.h" 0037 #include "KPrEndOfSlideShowPage.h" 0038 #include "KPrPage.h" 0039 #include "pageeffects/KPrPageEffect.h" 0040 #include "pageeffects/KPrPageEffectRunner.h" 0041 0042 KPrViewModePreviewPageEffect::KPrViewModePreviewPageEffect( KoPAViewBase * view, KoPACanvasBase * canvas ) 0043 : KoPAViewMode( view, canvas ) 0044 , m_savedViewMode(0) 0045 , m_pageEffect(0) 0046 , m_pageEffectRunner(0) 0047 , m_page(0) 0048 , m_prevpage(0) 0049 { 0050 connect( &m_timeLine, SIGNAL(valueChanged(qreal)), this, SLOT(animate()) ); 0051 connect( &m_timeLine, SIGNAL(finished()), this, SLOT(activateSavedViewMode()) ); 0052 } 0053 0054 KPrViewModePreviewPageEffect::~KPrViewModePreviewPageEffect() 0055 { 0056 } 0057 0058 0059 void KPrViewModePreviewPageEffect::paint(KoPACanvasBase* canvas, QPainter& painter, const QRectF &paintRect) 0060 { 0061 Q_UNUSED(canvas); 0062 Q_UNUSED(paintRect); 0063 //QRect framerect = canvas->rect(); 0064 0065 if (m_pageEffectRunner && m_timeLine.state() == QTimeLine::Running) { 0066 m_pageEffectRunner->paint(painter); 0067 } 0068 } 0069 0070 0071 void KPrViewModePreviewPageEffect::tabletEvent( QTabletEvent *event, const QPointF &point ) 0072 { 0073 Q_UNUSED(event); 0074 Q_UNUSED(point); 0075 } 0076 0077 0078 void KPrViewModePreviewPageEffect::mousePressEvent( QMouseEvent *event, const QPointF &point ) 0079 { 0080 Q_UNUSED(event); 0081 Q_UNUSED(point); 0082 } 0083 0084 0085 void KPrViewModePreviewPageEffect::mouseDoubleClickEvent( QMouseEvent *event, const QPointF &point ) 0086 { 0087 Q_UNUSED(event); 0088 Q_UNUSED(point); 0089 } 0090 0091 0092 void KPrViewModePreviewPageEffect::mouseMoveEvent( QMouseEvent *event, const QPointF &point ) 0093 { 0094 Q_UNUSED(event); 0095 Q_UNUSED(point); 0096 } 0097 0098 0099 void KPrViewModePreviewPageEffect::mouseReleaseEvent( QMouseEvent *event, const QPointF &point ) 0100 { 0101 Q_UNUSED(event); 0102 Q_UNUSED(point); 0103 } 0104 0105 void KPrViewModePreviewPageEffect::shortcutOverrideEvent( QKeyEvent *event ) 0106 { 0107 Q_UNUSED(event); 0108 } 0109 0110 void KPrViewModePreviewPageEffect::keyPressEvent( QKeyEvent *event ) 0111 { 0112 Q_UNUSED(event); 0113 } 0114 0115 0116 void KPrViewModePreviewPageEffect::keyReleaseEvent( QKeyEvent *event ) 0117 { 0118 Q_UNUSED(event); 0119 } 0120 0121 0122 void KPrViewModePreviewPageEffect::wheelEvent( QWheelEvent * event, const QPointF &point ) 0123 { 0124 Q_UNUSED(event); 0125 Q_UNUSED(point); 0126 } 0127 0128 0129 void KPrViewModePreviewPageEffect::activate( KoPAViewMode * previousViewMode ) 0130 { 0131 m_savedViewMode = previousViewMode; // store the previous view mode 0132 0133 // the update of the canvas is needed so that the old page gets drawn fully before the effect starts 0134 canvas()->repaint(); 0135 m_timeLine.setDuration( m_pageEffect->duration() ); 0136 m_timeLine.setCurrentTime( 0 ); 0137 m_timeLine.start(); 0138 } 0139 0140 0141 void KPrViewModePreviewPageEffect::deactivate() 0142 { 0143 m_savedViewMode = 0; // store the previous view mode 0144 } 0145 0146 0147 void KPrViewModePreviewPageEffect::updateActivePage( KoPAPageBase *page ) 0148 { 0149 m_view->setActivePage( page ); 0150 } 0151 0152 0153 void KPrViewModePreviewPageEffect::activateSavedViewMode() 0154 { 0155 m_view->setViewMode( m_savedViewMode ); 0156 //canvas()->update(); 0157 } 0158 0159 0160 void KPrViewModePreviewPageEffect::setPageEffect( KPrPageEffect* pageEffect, KPrPage* page, KPrPage* prevpage ) 0161 { 0162 if(m_savedViewMode) {//stop the previous playing 0163 activateSavedViewMode(); 0164 } 0165 0166 delete m_pageEffect; 0167 m_pageEffect = pageEffect; 0168 delete m_pageEffectRunner; 0169 m_pageEffectRunner = 0; 0170 0171 m_page = page; 0172 m_prevpage = prevpage; 0173 0174 if(m_page) { 0175 updatePixmaps(); 0176 0177 if(m_pageEffect) { 0178 m_pageEffectRunner = new KPrPageEffectRunner( m_oldPage, m_newPage, canvas()->canvasWidget(), m_pageEffect ); 0179 } 0180 } 0181 } 0182 0183 void KPrViewModePreviewPageEffect::animate() 0184 { 0185 if ( m_pageEffectRunner ) { 0186 m_pageEffectRunner->next( m_timeLine.currentTime() ); 0187 } 0188 } 0189 0190 void KPrViewModePreviewPageEffect::updatePixmaps() 0191 { 0192 if(!m_page) 0193 return; 0194 0195 QSize size = canvas()->canvasWidget()->size(); // TODO wrong this should be page/document size 0196 0197 m_newPage = m_page->thumbnail(size); 0198 0199 if(m_newPage.isNull()) 0200 return; 0201 0202 if(m_prevpage && m_prevpage != m_page) 0203 { 0204 m_oldPage = m_prevpage->thumbnail(size); 0205 } 0206 else 0207 { 0208 QPixmap oldPage(size); 0209 oldPage.fill( QColor(Qt::black) ); 0210 m_oldPage = oldPage; 0211 } 0212 }