#include "rgbparadegenerator.h"
#include <QColor>
-#include <QDebug>
#include <QPainter>
#include <QPoint>
#include <QTime>
{
}
-QImage RGBParadeGenerator::calculateRGBParade(const QSize ¶deSize, const QImage &image, const bool &drawAxis, const uint &accelFactor)
+QImage RGBParadeGenerator::calculateRGBParade(const QSize ¶deSize, const QImage &image,
+ const RGBParadeGenerator::PaintMode paintMode, const bool &drawAxis, const uint &accelFactor)
{
Q_ASSERT(accelFactor >= 1);
const int vm = weaken*18;
const int vl = weaken*9;
+ // Divide by 3 because of the 3 components
+ const float brightnessAdjustment = accelFactor * ((float) ww*wh/(byteCount>>3)) / 3;
+
uchar minR = 255, minG = 255, minB = 255, maxR = 0, maxG = 0, maxB = 0, r, g, b;
- qDebug() << "Expecting about " << avgPxPerPx << " pixels per pixel in the RGB parade. Weakening by " << weaken
- << " with an acceleration factor of " << accelFactor;
+// qDebug() << "Expecting about " << avgPxPerPx << " pixels per pixel in the RGB parade. Weakening by " << weaken
+// << " with an acceleration factor of " << accelFactor;
QImage unscaled(ww-right, 256, QImage::Format_ARGB32);
paradePoint = QPoint((int)dx, r);
paradeCol = QRgb(unscaled.pixel(paradePoint));
- unscaled.setPixel(paradePoint, qRgba(CHOP255(vh + qRed(paradeCol)), CHOP255(vm + qGreen(paradeCol)),
- CHOP255(vl + qBlue(paradeCol)), 255));
+ switch(paintMode) {
+ case PaintMode_RGB2:
+ unscaled.setPixel(paradePoint, qRgba(CHOP255(vh + qRed(paradeCol)), CHOP255(vm + qGreen(paradeCol)),
+ CHOP255(vl + qBlue(paradeCol)), 255));
+ break;
+ default:
+ unscaled.setPixel(paradePoint, qRgba(255,0,0, CHOP255(brightnessAdjustment*16 + qAlpha(paradeCol))));
+ break;
+ }
paradePoint = QPoint((int) (dx + partW + offset), g);
paradeCol = QRgb(unscaled.pixel(paradePoint));
- unscaled.setPixel(paradePoint, qRgba(CHOP255(vl + qRed(paradeCol)), CHOP255(vh + qGreen(paradeCol)),
- CHOP255(vm + qBlue(paradeCol)), 255));
+ switch(paintMode) {
+ case PaintMode_RGB2:
+ unscaled.setPixel(paradePoint, qRgba(CHOP255(vl + qRed(paradeCol)), CHOP255(vh + qGreen(paradeCol)),
+ CHOP255(vm + qBlue(paradeCol)), 255));
+ break;
+ default:
+ unscaled.setPixel(paradePoint, qRgba(0,255,0, CHOP255(brightnessAdjustment*16 + qAlpha(paradeCol))));
+ break;
+ }
paradePoint = QPoint((int) (dx + 2*partW + 2*offset), b);
paradeCol = QRgb(unscaled.pixel(paradePoint));
- unscaled.setPixel(paradePoint, qRgba(CHOP255(vm + qRed(paradeCol)), CHOP255(vl + qGreen(paradeCol)),
- CHOP255(vh + qBlue(paradeCol)), 255));
+ switch(paintMode) {
+ case PaintMode_RGB2:
+ unscaled.setPixel(paradePoint, qRgba(CHOP255(vm + qRed(paradeCol)), CHOP255(vl + qGreen(paradeCol)),
+ CHOP255(vh + qBlue(paradeCol)), 255));
+ break;
+ default:
+ unscaled.setPixel(paradePoint, qRgba(0,0,255, CHOP255(brightnessAdjustment*16 + qAlpha(paradeCol))));
+ break;
+ }
if (r < minR) { minR = r; }
{
ui = new Ui::RGBParade_UI();
ui->setupUi(this);
- init();
+
+ ui->paintMode->addItem(i18n("RGB"), QVariant(RGBParadeGenerator::PaintMode_RGB));
+ ui->paintMode->addItem(i18n("RGB 2"), QVariant(RGBParadeGenerator::PaintMode_RGB2));
+
+ bool b = true;
+ b &= connect(ui->paintMode, SIGNAL(currentIndexChanged(int)), this, SLOT(forceUpdateScope()));
+ Q_ASSERT(b);
m_rgbParadeGenerator = new RGBParadeGenerator();
+ init();
}
RGBParade::~RGBParade()
{
+ writeConfig();
+
delete ui;
delete m_rgbParadeGenerator;
}
+void RGBParade::readConfig()
+{
+ AbstractScopeWidget::readConfig();
+
+ KSharedConfigPtr config = KGlobal::config();
+ KConfigGroup scopeConfig(config, configName());
+ ui->paintMode->setCurrentIndex(scopeConfig.readEntry("paintmode", 0));
+}
+
+void RGBParade::writeConfig()
+{
+ KSharedConfigPtr config = KGlobal::config();
+ KConfigGroup scopeConfig(config, configName());
+ scopeConfig.writeEntry("paintmode", ui->paintMode->currentIndex());
+ scopeConfig.sync();
+}
+
+
QString RGBParade::widgetName() const { return "RGB Parade"; }
QRect RGBParade::scopeRect()
{
QTime start = QTime::currentTime();
start.start();
- QImage parade = m_rgbParadeGenerator->calculateRGBParade(m_scopeRect.size(), qimage,
+
+ int paintmode = ui->paintMode->itemData(ui->paintMode->currentIndex()).toInt();
+ QImage parade = m_rgbParadeGenerator->calculateRGBParade(m_scopeRect.size(), qimage, (RGBParadeGenerator::PaintMode) paintmode,
true, accelerationFactor);
emit signalScopeRenderingFinished(start.elapsed(), accelerationFactor);
return parade;