diff --git a/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorGroupBox.qml b/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorGroupBox.qml index 5a715a522532cf12ee2a2b23a4ea80ca0fcc4b14..1cb4b09cc0631be5c7280dd5cf3721513855f626 100644 --- a/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorGroupBox.qml +++ b/share/qtcreator/qmldesigner/propertyeditor/Qt/ColorGroupBox.qml @@ -74,15 +74,12 @@ QExtGroupBox { onColorChanged: { colorGroupBox.backendColor.value = color; } - hue: hueControl.hue; } HueControl { id: hueControl; - color: colorGroupBox.backendColor.value; - onColorChanged: { - colorGroupBox.backendColor.value = color; - } + hue: colorControl.hue; + onHueChanged: colorControl.hue=hue; } QWidget { @@ -100,10 +97,10 @@ QExtGroupBox { } QSpinBox { - maximum: 360 - value: colorControl.hue*360; - onValueChanged: if (colorControl.hue !=value/360.0) - colorControl.hue=value/360.0; + maximum: 359 + value: colorControl.hue; + onValueChanged: if (colorControl.hue != value) + colorControl.hue=value; } } @@ -117,9 +114,9 @@ QExtGroupBox { } QSpinBox { maximum: 255 - value: colorControl.saturation*255; - onValueChanged: if (colorControl.saturation !=value/255.0) - colorControl.saturation=value/255.0; + value: colorControl.saturation; + onValueChanged: if (colorControl.saturation !=value) + colorControl.saturation=value; } } @@ -132,16 +129,13 @@ QExtGroupBox { } QSpinBox { maximum: 255 - value: colorControl.value*255; - onValueChanged: if (colorControl.value!=value/255.0) - colorControl.value=value/255.0; + value: colorControl.value; + onValueChanged: if (Math.floor(colorControl.value)!=value) + colorControl.value=value; } - } } -// QWidget { -// } } } } diff --git a/src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp b/src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp index a4064dbf4f6c9f5cad1808a540b2dc50b9a91feb..89f3e208460b9ad821187a5d90b924d7e780dbe9 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp +++ b/src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp @@ -84,12 +84,11 @@ namespace QmlDesigner { void HueControl::setCurrent(int y) { - QColor color(m_colorString); if (y<0) y=0; - if (y>119) y=119; - color.setHsvF(qreal(y) / 120.0, color.hsvSaturationF(), color.valueF()); - setColor(color.name()); - setHue(qreal(y) / 120.0); + if (y>120) y=120; + m_color.setHsv((y * 359)/120, m_color.hsvSaturation(), m_color.value()); + update(); // redraw pointer + emit hueChanged(); } void HueControl::paintEvent(QPaintEvent *event) @@ -108,7 +107,7 @@ namespace QmlDesigner { for (int i = 0; i < height; i++) { QColor c; - c.setHsvF(qreal(i) / 120.0, 1,1.0); + c.setHsv( (i*359) / 120.0, 255,255); cacheP.fillRect(0, i, 10, i + 1, c); } } @@ -117,7 +116,7 @@ namespace QmlDesigner { QVector<QPointF> points; - int y = hue() * 120 + 5; + int y = m_color.hueF() * 120 + 5; points.append(QPointF(15, y)); points.append(QPointF(25, y + 5)); @@ -135,10 +134,8 @@ namespace QmlDesigner { if (x>120) x=120; if (y<0) y=0; if (y>120) y=120; - newColor.setHsvF(hue(), qreal(x) / 120, 1.0 - qreal(y) / 120); - - QString newColorStr = QVariant(newColor).toString(); - setColor(newColorStr); + newColor.setHsv(m_saturatedColor.hsvHue(), (x*255) / 120, 255 - (y*255) / 120); + setColor(newColor); } void ColorBox::paintEvent(QPaintEvent *event) @@ -146,10 +143,12 @@ namespace QmlDesigner { QWidget::paintEvent(event); QPainter p(this); - QColor color(m_colorString); - if (m_hue != (m_lastHue) || (m_cache.isNull())) { - m_lastHue = m_hue; + if ((m_color.saturation()>1) && (m_color.value()>1)) + m_saturatedColor.setHsv(m_color.hsvHue(),255,255); + + if ((m_saturatedColor.hsvHue() != m_lastHue) || (m_cache.isNull())) { + m_lastHue = m_saturatedColor.hsvHue(); m_cache = QPixmap(120, 120); int height = 120; @@ -157,14 +156,11 @@ namespace QmlDesigner { QPainter chacheP(&m_cache); - if (color.hsvHueF() < 0) - color.setHsvF(hue(), color.hsvSaturationF(), color.valueF()); - for (int y = 0; y < height; y++) for (int x = 0; x < width; x++) { QColor c; - c.setHsvF(color.hsvHueF(), qreal(x) / 120, 1.0 - qreal(y) / 120); + c.setHsv(m_saturatedColor.hsvHue(), (x*255) / 120, 255 - (y*255) / 120); chacheP.setPen(c); chacheP.drawPoint(x ,y); } @@ -172,8 +168,8 @@ namespace QmlDesigner { p.drawPixmap(5, 5, m_cache); - int x = color.hsvSaturationF() * 120 + 5; - int y = 120 - color.valueF() * 120 + 5; + int x = m_color.hsvSaturationF() * 120 + 5; + int y = 120 - m_color.valueF() * 120 + 5; p.setPen(Qt::white); p.drawEllipse(x - 2, y - 2, 4, 4); diff --git a/src/plugins/qmldesigner/components/propertyeditor/colorwidget.h b/src/plugins/qmldesigner/components/propertyeditor/colorwidget.h index 5cb4b6218f8e6dc7db2e220715e6a6455cafa0f7..e1f72820750fc7af2b967a5664b886713fd0d9cc 100644 --- a/src/plugins/qmldesigner/components/propertyeditor/colorwidget.h +++ b/src/plugins/qmldesigner/components/propertyeditor/colorwidget.h @@ -87,46 +87,53 @@ class ColorBox : public QWidget Q_OBJECT Q_PROPERTY(QString color READ color WRITE setColor NOTIFY colorChanged) -Q_PROPERTY(qreal hue READ hue WRITE setHue NOTIFY hueChanged) -Q_PROPERTY(qreal saturation READ saturation WRITE setSaturation NOTIFY saturationChanged) -Q_PROPERTY(qreal value READ value WRITE setValue NOTIFY valueChanged) +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) public: -ColorBox(QWidget *parent = 0) : QWidget(parent), m_colorString("#ffffff"), m_hue(0), m_lastHue(0) +ColorBox(QWidget *parent = 0) : QWidget(parent), m_color(Qt::white), m_saturatedColor(Qt::white), m_lastHue(0) { setFixedWidth(130); setFixedHeight(130); } -void setHue(qreal newHue) +void setHue(int newHue) { - if (m_hue == newHue) + if (m_color.hsvHue() == newHue) return; - m_hue = newHue; + m_color.setHsv(newHue,m_color.hsvSaturation(),m_color.value()); update(); emit hueChanged(); emit colorChanged(); } -qreal hue() const +int hue() const { - return m_hue; + return m_color.hue(); } void setColor(const QString &colorStr) { - if (m_colorString == colorStr) + if (m_color.name() == colorStr) + return; + + setColor(QColor(colorStr)); +} + +void setColor(const QColor &color) +{ + if (m_color == color) return; - qreal oldsaturation = saturation(); - qreal oldvalue = value(); - m_colorString = colorStr; + int oldsaturation = m_color.hsvSaturation(); + int oldvalue = m_color.value(); + int oldhue = m_color.hsvHue(); + m_color=color; update(); - qreal newHue = QColor(m_colorString).hsvHueF(); - if (newHue >= 0) - setHue(newHue); + if (oldhue != m_color.hsvHue()) emit hueChanged(); if (oldsaturation != saturation()) emit saturationChanged(); if (oldvalue != value()) emit valueChanged(); emit colorChanged(); @@ -134,37 +141,33 @@ void setColor(const QString &colorStr) QString color() const { - return m_colorString; + return m_color.name(); } -qreal saturation() const +int saturation() const { - return QColor(m_colorString).hsvSaturationF(); + return m_color.hsvSaturation(); } -void setSaturation(qreal newsaturation) +void setSaturation(int newsaturation) { - QColor color(m_colorString); - if (color.hsvSaturationF()==newsaturation) return; - color.setHsvF(color.hsvHueF(),newsaturation,color.valueF()); - m_colorString=color.name(); + if (m_color.hsvSaturation()==newsaturation) return; + m_color.setHsv(m_color.hsvHue(),newsaturation,m_color.value()); update(); emit saturationChanged(); emit colorChanged(); } -qreal value() const +int value() const { - return QColor(m_colorString).valueF(); + return m_color.value(); } -void setValue(qreal newvalue) +void setValue(int newvalue) { - QColor color(m_colorString); - if (color.valueF()==newvalue) return; - color.setHsvF(color.hsvHueF(),color.hsvSaturationF(),newvalue); - m_colorString=color.name(); + if (m_color.value()==newvalue) return; + m_color.setHsv(m_color.hsvHue(),m_color.hsvSaturation(),newvalue); update(); emit valueChanged(); emit colorChanged(); @@ -204,10 +207,10 @@ void setCurrent(int x, int y); private: - QString m_colorString; + QColor m_color; + QColor m_saturatedColor; bool m_mousePressed; - qreal m_hue; - qreal m_lastHue; + int m_lastHue; QPixmap m_cache; }; @@ -215,53 +218,31 @@ class HueControl : public QWidget { Q_OBJECT -Q_PROPERTY(QString color READ color WRITE setColor NOTIFY colorChanged) Q_PROPERTY(qreal hue READ hue WRITE setHue NOTIFY hueChanged) public: -HueControl(QWidget *parent = 0) : QWidget(parent), m_colorString("#ffffff"), m_mousePressed(false), m_hue(0) +HueControl(QWidget *parent = 0) : QWidget(parent), m_color(Qt::white), m_mousePressed(false) { setFixedWidth(40); setFixedHeight(130); } -void setHue(qreal newHue) +void setHue(int newHue) { - if (m_hue == newHue) + if (m_color.hsvHue() == newHue) return; - - m_hue = newHue; - QColor color(m_colorString); - color.setHsvF(newHue, color.hsvSaturationF(), color.valueF()); - m_colorString = color.name(); + m_color.setHsv(newHue, m_color.hsvSaturation(), m_color.value()); update(); emit hueChanged(); } -qreal hue() const +int hue() const { - return m_hue; -} - -void setColor(const QString &colorStr) -{ - if (m_colorString == colorStr) - return; - - m_colorString = colorStr; - m_hue = QColor(m_colorString).hsvHueF(); - update(); - emit colorChanged(); -} - -QString color() const -{ - return m_colorString; + return m_color.hsvHue(); } signals: - void colorChanged(); void hueChanged(); protected: @@ -292,9 +273,8 @@ void setCurrent(int y); private: - QString m_colorString; + QColor m_color; bool m_mousePressed; - qreal m_hue; QPixmap m_cache; };