X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Frgbparade.cpp;h=40762aa7b49294fd07551db32f58c7963aefac82;hb=198e7535cfd03d1dc67cea7dc73bffe65a289e0f;hp=3fe44412e78cf7d059e0eb0dfee33ecb5bc396b2;hpb=60d534a5d6d3472625430e4ffda2f654f7aec0c3;p=kdenlive diff --git a/src/rgbparade.cpp b/src/rgbparade.cpp index 3fe44412..40762aa7 100644 --- a/src/rgbparade.cpp +++ b/src/rgbparade.cpp @@ -8,6 +8,8 @@ * (at your option) any later version. * ***************************************************************************/ +#include +#include #include #include #include "renderer.h" @@ -15,19 +17,67 @@ #include "rgbparadegenerator.h" RGBParade::RGBParade(Monitor *projMonitor, Monitor *clipMonitor, QWidget *parent) : - AbstractScopeWidget(projMonitor, clipMonitor, parent) + AbstractScopeWidget(projMonitor, clipMonitor, true, parent) { ui = new Ui::RGBParade_UI(); ui->setupUi(this); + + ui->paintMode->addItem(i18n("RGB"), QVariant(RGBParadeGenerator::PaintMode_RGB)); + ui->paintMode->addItem(i18n("White"), QVariant(RGBParadeGenerator::PaintMode_White)); + + bool b = true; + + m_menu->addSeparator(); + m_aAxis = new QAction(i18n("Draw axis"), this); + m_aAxis->setCheckable(true); + m_menu->addAction(m_aAxis); + b &= connect(m_aAxis, SIGNAL(changed()), this, SLOT(forceUpdateScope())); + + m_aGradRef = new QAction(i18n("Gradient reference line"), this); + m_aGradRef->setCheckable(true); + m_menu->addAction(m_aGradRef); + b &= connect(m_aGradRef, SIGNAL(changed()), this, SLOT(forceUpdateScope())); + + b &= connect(ui->paintMode, SIGNAL(currentIndexChanged(int)), this, SLOT(forceUpdateScope())); + b &= connect(this, SIGNAL(signalMousePositionChanged()), this, SLOT(forceUpdateHUD())); + Q_ASSERT(b); + m_rgbParadeGenerator = new RGBParadeGenerator(); + init(); } RGBParade::~RGBParade() { + writeConfig(); + delete ui; delete m_rgbParadeGenerator; + delete m_aAxis; + delete m_aGradRef; +} + +void RGBParade::readConfig() +{ + AbstractScopeWidget::readConfig(); + + KSharedConfigPtr config = KGlobal::config(); + KConfigGroup scopeConfig(config, configName()); + ui->paintMode->setCurrentIndex(scopeConfig.readEntry("paintmode", 0)); + m_aAxis->setChecked(scopeConfig.readEntry("axis", false)); + m_aGradRef->setChecked(scopeConfig.readEntry("gradref", false)); +} + +void RGBParade::writeConfig() +{ + KSharedConfigPtr config = KGlobal::config(); + KConfigGroup scopeConfig(config, configName()); + scopeConfig.writeEntry("paintmode", ui->paintMode->currentIndex()); + scopeConfig.writeEntry("axis", m_aAxis->isChecked()); + scopeConfig.writeEntry("gradref", m_aGradRef->isChecked()); + scopeConfig.sync(); } + QString RGBParade::widgetName() const { return "RGB Parade"; } QRect RGBParade::scopeRect() @@ -36,16 +86,56 @@ QRect RGBParade::scopeRect() return QRect(topleft, QPoint(this->size().width() - offset, this->size().height() - offset)); } -QImage RGBParade::renderHUD(uint) { return QImage(); } -QImage RGBParade::renderScope(uint accelerationFactor, QImage qimage) +QImage RGBParade::renderHUD(uint) +{ + QImage hud(m_scopeRect.size(), QImage::Format_ARGB32); + hud.fill(qRgba(0,0,0,0)); + + QPainter davinci(&hud); + davinci.setPen(penLight); + + int x = scopeRect().width()-30; + + davinci.drawText(x, scopeRect().height()-RGBParadeGenerator::distBottom, "0"); + davinci.drawText(x, 10, "255"); + + if (scopeRect().height() > 0 && m_mouseWithinWidget) { + + int y = m_mousePos.y() - scopeRect().y(); + + // Draw a horizontal line through the current mouse position + // and show the value of the waveform there + davinci.drawLine(0, y, scopeRect().size().width()-RGBParadeGenerator::distRight, y); + + // Make the value stick to the line unless it is at the top/bottom of the scope + const int top = 30; + const int bottom = 20+RGBParadeGenerator::distBottom; + int valY = y+5; + if (valY < top) { + valY = top; + } else if (valY > scopeRect().height()-bottom) { + valY = scopeRect().height()-bottom; + } + int val = 255*(1-((float)y/(scopeRect().height()-RGBParadeGenerator::distBottom))); + davinci.drawText(x, valY, QVariant(val).toString()); + } + + emit signalHUDRenderingFinished(1, 1); + return hud; +} + +QImage RGBParade::renderScope(uint accelerationFactor, const QImage qimage) { QTime start = QTime::currentTime(); start.start(); - QImage parade = m_rgbParadeGenerator->calculateRGBParade(m_scopeRect.size(), qimage, - true, accelerationFactor); + + int paintmode = ui->paintMode->itemData(ui->paintMode->currentIndex()).toInt(); + QImage parade = m_rgbParadeGenerator->calculateRGBParade(m_scopeRect.size(), qimage, (RGBParadeGenerator::PaintMode) paintmode, + m_aAxis->isChecked(), m_aGradRef->isChecked(), accelerationFactor); emit signalScopeRenderingFinished(start.elapsed(), accelerationFactor); return parade; } + QImage RGBParade::renderBackground(uint) { return QImage(); } bool RGBParade::isHUDDependingOnInput() const { return false; }