]> git.sesse.net Git - kdenlive/blob - src/waveform.cpp
Add animation feature to Slideshow Clip.
[kdenlive] / src / waveform.cpp
1 /***************************************************************************
2  *   Copyright (C) 2010 by Simon Andreas Eugster (simon.eu@gmail.com)      *
3  *   This file is part of kdenlive. See www.kdenlive.org.                  *
4  *                                                                         *
5  *   This program is free software; you can redistribute it and/or modify  *
6  *   it under the terms of the GNU General Public License as published by  *
7  *   the Free Software Foundation; either version 2 of the License, or     *
8  *   (at your option) any later version.                                   *
9  ***************************************************************************/
10
11 #include <QPainter>
12 #include <QPoint>
13 #include <QDebug>
14
15 #include "renderer.h"
16 #include "waveform.h"
17 #include "waveformgenerator.h"
18
19
20 Waveform::Waveform(Monitor *projMonitor, Monitor *clipMonitor, QWidget *parent) :
21     AbstractScopeWidget(projMonitor, clipMonitor, parent),
22     initialDimensionUpdateDone(false)
23 {
24     ui = new Ui::Waveform_UI();
25     ui->setupUi(this);
26
27     ui->paintMode->addItem(i18n("Yellow"), QVariant(WaveformGenerator::PaintMode_Yellow));
28     ui->paintMode->addItem(i18n("Green"), QVariant(WaveformGenerator::PaintMode_Green));
29
30
31     bool b = true;
32     b &= connect(ui->paintMode, SIGNAL(currentIndexChanged(int)), this, SLOT(forceUpdateScope()));
33     Q_ASSERT(b);
34
35
36     init();
37     m_waveformGenerator = new WaveformGenerator();
38 }
39
40 Waveform::~Waveform()
41 {
42     writeConfig();
43
44     delete m_waveformGenerator;
45 }
46
47 void Waveform::readConfig()
48 {
49     AbstractScopeWidget::readConfig();
50
51     KSharedConfigPtr config = KGlobal::config();
52     KConfigGroup scopeConfig(config, configName());
53     ui->paintMode->setCurrentIndex(scopeConfig.readEntry("paintmode", 0));
54 }
55
56 void Waveform::writeConfig()
57 {
58     KSharedConfigPtr config = KGlobal::config();
59     KConfigGroup scopeConfig(config, configName());
60     scopeConfig.writeEntry("paintmode", ui->paintMode->currentIndex());
61     scopeConfig.sync();
62 }
63
64
65 QRect Waveform::scopeRect()
66 {
67     // Distance from top/left/right
68     int offset = 6;
69
70     QPoint topleft(offset, ui->verticalSpacer->geometry().y()+offset);
71
72     return QRect(topleft, this->size() - QSize(offset+topleft.x(), offset+topleft.y()));
73 }
74
75
76 ///// Implemented methods /////
77
78 QString Waveform::widgetName() const { return QString("Waveform"); }
79 bool Waveform::isHUDDependingOnInput() const { return false; }
80 bool Waveform::isScopeDependingOnInput() const { return true; }
81 bool Waveform::isBackgroundDependingOnInput() const { return false; }
82
83 QImage Waveform::renderHUD(uint)
84 {
85     emit signalHUDRenderingFinished(0, 1);
86     return QImage();
87 }
88
89 QImage Waveform::renderScope(uint accelFactor, QImage qimage)
90 {
91     QTime start = QTime::currentTime();
92     start.start();
93
94     int paintmode = ui->paintMode->itemData(ui->paintMode->currentIndex()).toInt();
95     QImage wave = m_waveformGenerator->calculateWaveform(scopeRect().size(), qimage, (WaveformGenerator::PaintMode) paintmode,
96                                                          true, accelFactor);
97
98     emit signalScopeRenderingFinished(start.elapsed(), 1);
99     return wave;
100 }
101
102 QImage Waveform::renderBackground(uint)
103 {
104     emit signalBackgroundRenderingFinished(0, 1);
105     return QImage();
106 }