X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fchoosecolorwidget.cpp;h=f8b8d3024b7050e30d4883316808a8948ae64a9b;hb=c3302003093710ee247ad84c0fe2ef3c579d417f;hp=e65a8defb292462b99526690d09770d31e6d589e;hpb=15c485914c3122e97cd8fe1271c0202d2d658c13;p=kdenlive diff --git a/src/choosecolorwidget.cpp b/src/choosecolorwidget.cpp index e65a8def..f8b8d302 100644 --- a/src/choosecolorwidget.cpp +++ b/src/choosecolorwidget.cpp @@ -22,38 +22,115 @@ #include "colorpickerwidget.h" #include -#include -#include +#include #include #include +#include +#include +static QColor stringToColor(QString strColor) +{ + bool ok = false; + QColor color("black"); + int intval = 0; + if (strColor.startsWith("0x")) { + if (strColor.length() == 10) { + // 0xRRGGBBAA + intval = strColor.toUInt(&ok, 16); + color.setRgb( ( intval >> 24 ) & 0xff, // r + ( intval >> 16 ) & 0xff, // g + ( intval >> 8 ) & 0xff, // b + ( intval ) & 0xff ); // a + } else { + // 0xRRGGBB, 0xRGB + color.setNamedColor(strColor.replace(0, 2, "#")); + } + } else { + if (strColor.length() == 9) { + // #AARRGGBB + strColor = strColor.replace('#', "0x"); + intval = strColor.toUInt(&ok, 16); + color.setRgb( ( intval >> 16 ) & 0xff, // r + ( intval >> 8 ) & 0xff, // g + ( intval ) & 0xff, // b + ( intval >> 24 ) & 0xff ); // a + } else if (strColor.length() == 8) { + // 0xRRGGBB + strColor = strColor.replace('#', "0x"); + color.setNamedColor(strColor); + } else { + // #RRGGBB, #RGB + color.setNamedColor(strColor); + } + } + + return color; +} + +static QString colorToString(const QColor &color, bool alpha) +{ + QString colorStr; + QTextStream stream(&colorStr); + stream << "0x"; + stream.setIntegerBase(16); + stream.setFieldWidth(2); + stream.setFieldAlignment(QTextStream::AlignRight); + stream.setPadChar('0'); + stream << color.red() << color.green() << color.blue(); + if (alpha) { + stream << color.alpha(); + } else { + // MLT always wants 0xRRGGBBAA format + stream << "ff"; + } + return colorStr; +} -ChooseColorWidget::ChooseColorWidget(QString text, QColor color, QWidget *parent) : +ChooseColorWidget::ChooseColorWidget(const QString &text, const QString &color, bool alphaEnabled, QWidget *parent) : QWidget(parent) { - //QGroupBox *box = new QGroupBox(text, this); - QVBoxLayout *layout = new QVBoxLayout(this); + QHBoxLayout *layout = new QHBoxLayout(this); + layout->setContentsMargins(0, 0, 0, 0); + layout->setSpacing(0); + + QLabel *label = new QLabel(text, this); + + QWidget *rightSide = new QWidget(this); + QHBoxLayout *rightSideLayout = new QHBoxLayout(rightSide); + rightSideLayout->setContentsMargins(0, 0, 0, 0); + rightSideLayout->setSpacing(0); - m_button = new KColorButton(color, this); - ColorPickerWidget *picker = new ColorPickerWidget(this); + m_button = new KColorButton(stringToColor(color), rightSide); +#if KDE_IS_VERSION(4,5,0) + if (alphaEnabled) m_button->setAlphaChannelEnabled(alphaEnabled); +#endif +// m_button->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Fixed); + ColorPickerWidget *picker = new ColorPickerWidget(rightSide); - layout->addWidget(m_button); - layout->addWidget(picker); + layout->addWidget(label); + layout->addWidget(rightSide); + rightSideLayout->addWidget(m_button); + rightSideLayout->addWidget(picker, 0, Qt::AlignRight); connect(picker, SIGNAL(colorPicked(QColor)), this, SLOT(setColor(QColor))); - connect(m_button, SIGNAL(clicked(bool)), this, SIGNAL(modified())); + connect(picker, SIGNAL(displayMessage(QString,int)), this, SIGNAL(displayMessage(QString,int))); + connect(picker, SIGNAL(disableCurrentFilter(bool)), this, SIGNAL(disableCurrentFilter(bool))); + connect(m_button, SIGNAL(changed(QColor)), this, SIGNAL(modified())); } -QColor ChooseColorWidget::getColor() +QString ChooseColorWidget::getColor() const { - return m_button->color(); + bool alphaChannel = false; +#if KDE_IS_VERSION(4,5,0) + alphaChannel = m_button->isAlphaChannelEnabled(); +#endif + return colorToString(m_button->color(), alphaChannel); } -void ChooseColorWidget::setColor(QColor color) +void ChooseColorWidget::setColor(const QColor& color) { m_button->setColor(color); - emit modified(); } #include "choosecolorwidget.moc"