123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- /****************************************************************************
- **
- ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
- ** Contact: http://www.qt-project.org/legal
- **
- ** This file is part of the demonstration applications of the Qt Toolkit.
- **
- ** $QT_BEGIN_LICENSE:LGPL21$
- ** Commercial License Usage
- ** Licensees holding valid commercial Qt licenses may use this file in
- ** accordance with the commercial license agreement provided with the
- ** Software or, alternatively, in accordance with the terms contained in
- ** a written agreement between you and Digia. For licensing terms and
- ** conditions see http://qt.digia.com/licensing. For further information
- ** use the contact form at http://qt.digia.com/contact-us.
- **
- ** GNU Lesser General Public License Usage
- ** Alternatively, this file may be used under the terms of the GNU Lesser
- ** General Public License version 2.1 or version 3 as published by the Free
- ** Software Foundation and appearing in the file LICENSE.LGPLv21 and
- ** LICENSE.LGPLv3 included in the packaging of this file. Please review the
- ** following information to ensure the GNU Lesser General Public License
- ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
- ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
- **
- ** In addition, as a special exception, Digia gives you certain additional
- ** rights. These rights are described in the Digia Qt LGPL Exception
- ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
- **
- ** $QT_END_LICENSE$
- **
- ****************************************************************************/
- #include <QBasicTimer>
- #include <QList>
- #include <QImage>
- #include <QDir>
- #include <QPainter>
- #include <QPaintEvent>
- #include <QDebug>
- #include "slideshow.h"
- class SlideShowPrivate
- {
- public:
- SlideShowPrivate();
- int currentSlide;
- int slideInterval;
- QBasicTimer interSlideTimer;
- QStringList imagePaths;
- void showNextSlide();
- };
- SlideShowPrivate::SlideShowPrivate()
- {
- currentSlide = 0;
- slideInterval = 10000; // Default to 10 sec interval
- }
- void SlideShowPrivate::showNextSlide()
- {
- currentSlide++;
- if (currentSlide >= imagePaths.size())
- currentSlide = 0;
- }
- SlideShow::SlideShow(QWidget* parent) :
- QWidget(parent)
- {
- d = new SlideShowPrivate;
- setAttribute(Qt::WA_StaticContents, true);
- setAttribute(Qt::WA_OpaquePaintEvent, true);
- setAttribute(Qt::WA_NoSystemBackground, true);
- setMouseTracking(true);
- }
- SlideShow::~SlideShow()
- {
- delete d;
- }
- void SlideShow::addImageDir(QString dirName)
- {
- QDir dir(dirName);
- // lookup in directories
- QStringList fileNames = dir.entryList(QDir::Files | QDir::Readable, QDir::Name);
- for (int i=0; i<fileNames.count(); i++)
- d->imagePaths << dir.absoluteFilePath(fileNames[i]);
- // lookup in qrc
- dir = QDir(QString(":/fluidlauncher/" + dirName));
- fileNames = dir.entryList(QDir::Files | QDir::Readable, QDir::Name);
- for (int i=0; i<fileNames.count(); i++)
- d->imagePaths << dir.absoluteFilePath(fileNames[i]);
- }
- void SlideShow::addImage(QString filename)
- {
- d->imagePaths << filename;
- }
- void SlideShow::clearImages()
- {
- d->imagePaths.clear();
- }
- void SlideShow::startShow()
- {
- d->interSlideTimer.start(d->slideInterval, this);
- d->showNextSlide();
- update();
- }
- void SlideShow::stopShow()
- {
- d->interSlideTimer.stop();
- }
- int SlideShow::slideInterval()
- {
- return d->slideInterval;
- }
- void SlideShow::setSlideInterval(int val)
- {
- d->slideInterval = val;
- }
- void SlideShow::timerEvent(QTimerEvent* event)
- {
- Q_UNUSED(event);
- d->showNextSlide();
- update();
- }
- void SlideShow::paintEvent(QPaintEvent *event)
- {
- QPainter painter(this);
- painter.setRenderHint(QPainter::Antialiasing, false);
- if (d->imagePaths.size() > 0) {
- QPixmap slide = QPixmap(d->imagePaths[d->currentSlide]);
- QSize slideSize = slide.size();
- QSize scaledSize = QSize(qMin(slideSize.width(), size().width()),
- qMin(slideSize.height(), size().height()));
- if (slideSize != scaledSize)
- slide = slide.scaled(scaledSize, Qt::KeepAspectRatio);
- QRect pixmapRect(qMax( (size().width() - slide.width())/2, 0),
- qMax( (size().height() - slide.height())/2, 0),
- slide.width(),
- slide.height());
- if (pixmapRect.top() > 0) {
- // Fill in top & bottom rectangles:
- painter.fillRect(0, 0, size().width(), pixmapRect.top(), Qt::black);
- painter.fillRect(0, pixmapRect.bottom(), size().width(), size().height(), Qt::black);
- }
- if (pixmapRect.left() > 0) {
- // Fill in left & right rectangles:
- painter.fillRect(0, 0, pixmapRect.left(), size().height(), Qt::black);
- painter.fillRect(pixmapRect.right(), 0, size().width(), size().height(), Qt::black);
- }
- painter.drawPixmap(pixmapRect, slide);
- } else
- painter.fillRect(event->rect(), Qt::black);
- }
- void SlideShow::keyPressEvent(QKeyEvent* event)
- {
- Q_UNUSED(event);
- emit inputReceived();
- }
- void SlideShow::mouseMoveEvent(QMouseEvent* event)
- {
- Q_UNUSED(event);
- emit inputReceived();
- }
- void SlideShow::mousePressEvent(QMouseEvent* event)
- {
- Q_UNUSED(event);
- emit inputReceived();
- }
- void SlideShow::mouseReleaseEvent(QMouseEvent* event)
- {
- Q_UNUSED(event);
- emit inputReceived();
- }
- void SlideShow::showEvent(QShowEvent * event )
- {
- Q_UNUSED(event);
- #ifndef QT_NO_CURSOR
- setCursor(Qt::BlankCursor);
- #endif
- }
|