1 /***************************************************************************
2 * Copyright (C) 2010 by Simon Andreas Eugster (simon.eu@gmail.com) *
3 * This file is part of kdenlive. See www.kdenlive.org. *
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 ***************************************************************************/
18 Waveform::Waveform(Monitor *projMonitor, Monitor *clipMonitor, QWidget *parent) :
20 m_projMonitor(projMonitor),
21 m_clipMonitor(clipMonitor),
22 m_activeRender(clipMonitor->render),
23 initialDimensionUpdateDone(false)
26 m_waveformGenerator = new WaveformGenerator();
28 connect(m_waveformGenerator, SIGNAL(signalCalculationFinished(QImage,uint)), this, SLOT(slotWaveformCalculated(QImage,uint)));
33 delete m_waveformGenerator;
38 void Waveform::updateDimensions()
40 // Distance from top/left/right
43 QPoint topleft(offset, line->y()+offset);
45 m_scopeRect = QRect(topleft, this->size() - QSize(offset+topleft.x(), offset+topleft.y()));
51 void Waveform::paintEvent(QPaintEvent *)
53 if (!initialDimensionUpdateDone) {
54 // This is a workaround.
55 // When updating the dimensions in the constructor, the size
56 // of the control items at the top are simply ignored! So do
59 initialDimensionUpdateDone = true;
62 QPainter davinci(this);
65 davinci.setRenderHint(QPainter::Antialiasing, true);
66 davinci.fillRect(0, 0, this->size().width(), this->size().height(), QColor(25,25,23));
68 davinci.drawImage(m_scopeRect.topLeft(), m_waveform);
72 void Waveform::resizeEvent(QResizeEvent *event)
75 m_waveformGenerator->calculateWaveform(m_scopeRect.size(), m_activeRender->extractFrame(m_activeRender->seekFramePosition()), true);
76 QWidget::resizeEvent(event);
79 void Waveform::mouseReleaseEvent(QMouseEvent *)
81 qDebug() << "Calculating scope now. Size: " << m_scopeRect.size().width() << "x" << m_scopeRect.size().height();
82 m_waveformGenerator->calculateWaveform(m_scopeRect.size(), m_activeRender->extractFrame(m_activeRender->seekFramePosition()), true);
88 void Waveform::slotWaveformCalculated(QImage waveform, const uint &msec)
90 qDebug() << "Waveform received. Time taken for rendering: " << msec << " ms. Painting it.";
91 m_waveform = waveform;
95 void Waveform::slotActiveMonitorChanged(bool isClipMonitor)
98 m_activeRender = m_clipMonitor->render;
99 disconnect(this, SLOT(slotRenderZoneUpdated()));
100 connect(m_activeRender, SIGNAL(rendererPosition(int)), this, SLOT(slotRenderZoneUpdated()));
102 m_activeRender = m_projMonitor->render;
103 disconnect(this, SLOT(slotRenderZoneUpdated()));
104 connect(m_activeRender, SIGNAL(rendererPosition(int)), this, SLOT(slotRenderZoneUpdated()));
108 void Waveform::slotRenderZoneUpdated()
110 qDebug() << "Monitor incoming.";//New frames total: " << newFrames;
111 // Monitor has shown a new frame
112 // newFrames.fetchAndAddRelaxed(1);
113 // if (cbAutoRefresh->isChecked()) {