diff --git a/plugins/extensions/dockers/advancedcolorselector/kis_shade_selector_line.h b/plugins/extensions/dockers/advancedcolorselector/kis_shade_selector_line.h --- a/plugins/extensions/dockers/advancedcolorselector/kis_shade_selector_line.h +++ b/plugins/extensions/dockers/advancedcolorselector/kis_shade_selector_line.h @@ -61,6 +61,7 @@ void fromString(const QString& string); void paintEvent(QPaintEvent *); + void resizeEvent(QResizeEvent *); void mousePressEvent(QMouseEvent *); void mouseMoveEvent(QMouseEvent *); void mouseReleaseEvent(QMouseEvent *); @@ -82,7 +83,9 @@ int m_patchCount; int m_lineHeight; bool m_displayHelpText; - + qreal m_mouseX; + bool m_isDown; + friend class KisShadeSelectorLineComboBox; KisColorSelectorBaseProxy* m_parentProxy; diff --git a/plugins/extensions/dockers/advancedcolorselector/kis_shade_selector_line.cpp b/plugins/extensions/dockers/advancedcolorselector/kis_shade_selector_line.cpp --- a/plugins/extensions/dockers/advancedcolorselector/kis_shade_selector_line.cpp +++ b/plugins/extensions/dockers/advancedcolorselector/kis_shade_selector_line.cpp @@ -44,6 +44,8 @@ setParam(0, 0, 0, 0, 0, 0); updateSettings(); setMouseTracking(true); + m_mouseX=width()+14; + m_isDown=false; } KisShadeSelectorLine::KisShadeSelectorLine(qreal hueDelta, qreal satDelta, qreal valDelta, @@ -52,9 +54,12 @@ m_cachedColorSpace(0), m_displayHelpText(false), m_parentProxy(parentProxy) + { setParam(hueDelta, satDelta, valDelta, hueShift, satShift, valShift); updateSettings(); + m_mouseX=width()+14; + m_isDown=false; } KisShadeSelectorLine::~KisShadeSelectorLine() @@ -76,6 +81,7 @@ { m_realColor = color; m_realColor.convertTo(m_parentProxy->colorSpace()); + m_mouseX=width()+14; update(); } @@ -134,9 +140,9 @@ } qreal patchWidth = (width()-patchSpacing*patchCount)/qreal(patchCount); - qreal hueStep=m_hueDelta/qreal(patchCount); - qreal saturationStep=m_saturationDelta/qreal(patchCount); - qreal valueStep=m_valueDelta/qreal(patchCount); + qreal hueStep=m_hueDelta/qreal(patchCount-10); + qreal saturationStep=m_saturationDelta/qreal(patchCount-10); + qreal valueStep=m_valueDelta/qreal(patchCount-10); qreal baseHue; qreal baseSaturation; @@ -146,14 +152,21 @@ int z=0; for(int i=-patchCount/2; i<=patchCount/2; i++) { - if(i==0 && patchCount%2==0) continue; - + if(i==0 && patchCount%2==0) continue; qreal hue = baseHue + (i * hueStep) + m_hueShift; while (hue < 0.0) hue += 1.0; while (hue > 1.0) hue -= 1.0; qreal saturation = qBound(0., baseSaturation + (i * saturationStep) + m_saturationShift, 1.); qreal value = qBound(0., baseValue + (i * valueStep) + m_valueShift, 1.); + + if ((i<=5)&&(i>=-5)) + { + hue = baseHue; + saturation=baseSaturation; + value=baseValue; + } + QRect patchRect(z * (patchWidth + patchSpacing), 0, patchWidth, m_lineHeight); KoColor patchColor = m_parentProxy->converter()->fromHsvF(hue, saturation, value); @@ -163,10 +176,18 @@ z++; } + QPainter wpainter(this); QImage renderedImage = m_parentProxy->converter()->toQImage(m_realPixelCache); wpainter.drawImage(0, 0, renderedImage); + wpainter.setPen(QColor(175,175,175)); + wpainter.drawRect(renderedImage.width()/2-5,0,10,renderedImage.height()-1); + wpainter.setPen(QColor(75,75,75)); + wpainter.drawRect(renderedImage.width()/2-4,0,8,renderedImage.height()-1); + wpainter.setPen(QColor(175,175,175)); + wpainter.drawRect(m_mouseX-5,0,10,renderedImage.height()-1); + emit update(); if(m_displayHelpText) { QString helpText(i18n("delta h=%1 s=%2 v=%3 shift h=%4 s=%5 v=%6", @@ -181,6 +202,16 @@ } } +void KisShadeSelectorLine::resizeEvent(QResizeEvent *e) +{ + QSize m_old = e->oldSize(); + QSize m_new = e->size(); + int m_nWidth = m_new.QSize::width(); + int m_oWidth = m_old.QSize::width(); + m_mouseX = m_mouseX*m_nWidth/m_oWidth; + + +} void KisShadeSelectorLine::mousePressEvent(QMouseEvent* e) { if(e->button()!=Qt::LeftButton && e->button()!=Qt::RightButton) { @@ -190,12 +221,18 @@ m_parentProxy->showColorPreview(); e->accept(); + m_mouseX=e->x(); + m_isDown=true; + } void KisShadeSelectorLine::mouseMoveEvent(QMouseEvent *e) { - KoColor color(Acs::pickColor(m_realPixelCache, e->pos())); + KoColor color(Acs::pickColor(m_realPixelCache, e->pos())); m_parentProxy->updateColorPreview(color); + if(m_isDown==true){ + m_mouseX=e->x(); + } } void KisShadeSelectorLine::mouseReleaseEvent(QMouseEvent * e) @@ -209,6 +246,7 @@ e->accept(); return; } + m_isDown=false; KoColor color(Acs::pickColor(m_realPixelCache, e->pos()));