Commit 8b2ecc3c authored by Thomas Hartmann's avatar Thomas Hartmann
Browse files

QmlDesigner.propertyEditor: add editing of alpha channels for colors

parent 193c7019
......@@ -65,20 +65,24 @@ QExtGroupBox {
valueSpinBox.setStyleSheet("color: "+scheme.changedBaseColor);
hueSpinBox.setStyleSheet("color: "+scheme.changedBaseColor);
saturationSpinBox.setStyleSheet("color: "+scheme.changedBaseColor);
alphaSpinBox.setStyleSheet("color: "+scheme.changedBaseColor);
} else {
valueSpinBox.setStyleSheet("color: "+scheme.defaultColor);
hueSpinBox.setStyleSheet("color: "+scheme.defaultColor);
saturationSpinBox.setStyleSheet("color: "+scheme.defaultColor);
alphaSpinBox.setStyleSheet("color: "+scheme.defaultColor);
}
} else {
if (backendColor.isInSubState) {
valueSpinBox.setStyleSheet("color: "+scheme.changedStateColor);
hueSpinBox.setStyleSheet("color: "+scheme.changedStateColor);
saturationSpinBox.setStyleSheet("color: "+scheme.changedStateColor);
alphaSpinBox.setStyleSheet("color: "+scheme.changedStateColor);
} else {
valueSpinBox.setStyleSheet("color: "+scheme.defaultColor);
hueSpinBox.setStyleSheet("color: "+scheme.defaultColor);
saturationSpinBox.setStyleSheet("color: "+scheme.defaultColor);
alphaSpinBox.setStyleSheet("color: "+scheme.defaultColor);
}
}
}
......@@ -133,7 +137,6 @@ QExtGroupBox {
}
layout: VerticalLayout {
topMargin: 36
......@@ -199,6 +202,7 @@ QExtGroupBox {
}
}
QWidget {
layout: HorizontalLayout {
Label {
......@@ -214,6 +218,23 @@ QExtGroupBox {
}
}
}
QWidget {
layout: HorizontalLayout {
topMargin: 12
Label {
text: "A"
fixedWidth: 15
}
QSpinBox {
id: alphaSpinBox
maximum: 255
value: colorControl.alpha;
onValueChanged: if (Math.floor(colorControl.alpha)!=value)
colorControl.alpha=value;
}
}
}
}
}
......
......@@ -87,7 +87,9 @@ namespace QmlDesigner {
{
if (y<0) y=0;
if (y>120) y=120;
int oldAlpha = m_color.alpha();
m_color.setHsv((y * 359)/120, m_color.hsvSaturation(), m_color.value());
m_color.setAlpha(oldAlpha);
update(); // redraw pointer
emit hueChanged();
}
......@@ -139,7 +141,9 @@ namespace QmlDesigner {
if (x>120) x=120;
if (y<0) y=0;
if (y>120) y=120;
int oldAlpha = m_color.alpha();
newColor.setHsv(hue(), (x*255) / 120, 255 - (y*255) / 120);
newColor.setAlpha(oldAlpha);
setColor(newColor);
}
......
......@@ -82,14 +82,46 @@ private:
QString m_colorString;
};
inline QString properName(const QColor &color)
{
QString s;
if (color.alpha() == 255)
s.sprintf("#%02x%02x%02x", color.red(), color.green(), color.blue());
else
s.sprintf("#%02x%02x%02x%02x", color.alpha(), color.red(), color.green(), color.blue());
return s;
}
inline QColor properColor(const QString &str)
{
int lalpha = 255;
QString lcolorStr = str;
if (lcolorStr.at(0) == '#' && lcolorStr.length() == 9) {
QString alphaStr = lcolorStr;
alphaStr.truncate(3);
lcolorStr.remove(0, 3);
lcolorStr = "#" + lcolorStr;
alphaStr.remove(0,1);
bool v;
lalpha = alphaStr.toInt(&v, 16);
if (!v)
lalpha = 255;
}
QColor lcolor(lcolorStr);
lcolor.setAlpha(lalpha);
return lcolor;
}
class ColorBox : public QWidget
{
Q_OBJECT
Q_PROPERTY(QString color READ color WRITE setColor NOTIFY colorChanged)
Q_PROPERTY(QString strColor READ strColor WRITE setStrColor NOTIFY colorChanged)
Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
Q_PROPERTY(int hue READ hue WRITE setHue NOTIFY hueChanged)
Q_PROPERTY(int saturation READ saturation WRITE setSaturation NOTIFY saturationChanged)
Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)
Q_PROPERTY(int alpha READ alpha WRITE setAlpha NOTIFY alphaChanged)
public:
......@@ -104,7 +136,9 @@ void setHue(int newHue)
if (m_color.hsvHue() == newHue)
return;
int oldAlpha = m_color.alpha();
m_color.setHsv(newHue,m_color.hsvSaturation(),m_color.value());
m_color.setAlpha(oldAlpha);
update();
emit hueChanged();
emit colorChanged();
......@@ -118,12 +152,28 @@ int hue() const
return retval;
}
void setColor(const QString &colorStr)
void setAlpha(int newAlpha)
{
if (m_color.alpha() == newAlpha)
return;
m_color.setAlpha(newAlpha);
update();
emit alphaChanged();
emit colorChanged();
}
int alpha() const
{
if (m_color.name() == colorStr)
return m_color.alpha();
}
void setStrColor(const QString &colorStr)
{
if (properName(m_color) == colorStr)
return;
setColor(QColor(colorStr));
setColor(properColor(colorStr));
}
void setColor(const QColor &color)
......@@ -134,19 +184,25 @@ void setColor(const QColor &color)
int oldsaturation = m_color.hsvSaturation();
int oldvalue = m_color.value();
int oldhue = m_color.hsvHue();
int oldAlpha = m_color.alpha();
m_color=color;
update();
if (oldhue != m_color.hsvHue()) emit hueChanged();
if (oldsaturation != saturation()) emit saturationChanged();
if (oldvalue != value()) emit valueChanged();
if (oldAlpha != alpha()) emit alphaChanged();
emit colorChanged();
}
QString color() const
QString strColor() const
{
return m_color.name();
return properName(m_color);
}
QColor color() const
{
return m_color;
}
int saturation() const
{
......@@ -156,7 +212,9 @@ int saturation() const
void setSaturation(int newsaturation)
{
if (m_color.hsvSaturation()==newsaturation) return;
int oldAlpha = m_color.alpha();
m_color.setHsv(m_color.hsvHue(),newsaturation,m_color.value());
m_color.setAlpha(oldAlpha);
update();
emit saturationChanged();
emit colorChanged();
......@@ -170,7 +228,9 @@ int value() const
void setValue(int newvalue)
{
if (m_color.value()==newvalue) return;
int oldAlpha = m_color.alpha();
m_color.setHsv(m_color.hsvHue(),m_color.hsvSaturation(),newvalue);
m_color.setAlpha(oldAlpha);
update();
emit valueChanged();
emit colorChanged();
......@@ -181,6 +241,7 @@ signals:
void hueChanged();
void saturationChanged();
void valueChanged();
void alphaChanged();
protected:
void paintEvent(QPaintEvent *event);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment