[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [krita/krita-testing-wolthera] libs/ui/widgets: Fix HSX cursor position on 0 sat, AGAIN.
From:       Wolthera van Hovell tot Westerflier <griffinvalley () gmail ! com>
Date:       2016-08-24 9:18:18
Message-ID: E1bcUKA-0001o9-1k () code ! kde ! org
[Download RAW message or body]

Git commit 28505a7455211f9448abb880af83b078b3e8fd2c by Wolthera van Hovell tot \
Westerflier. Committed on 24/08/2016 at 08:33.
Pushed by woltherav into branch 'krita-testing-wolthera'.

Fix HSX cursor position on 0 sat, AGAIN.

This is the best I can give it.

M  +61   -27   libs/ui/widgets/kis_visual_color_selector.cpp
M  +36   -15   libs/ui/widgets/kis_visual_color_selector.h

http://commits.kde.org/krita/28505a7455211f9448abb880af83b078b3e8fd2c

diff --git a/libs/ui/widgets/kis_visual_color_selector.cpp \
b/libs/ui/widgets/kis_visual_color_selector.cpp index 6ffd8b0..1cc3979 100644
--- a/libs/ui/widgets/kis_visual_color_selector.cpp
+++ b/libs/ui/widgets/kis_visual_color_selector.cpp
@@ -48,7 +48,7 @@ struct KisVisualColorSelector::Private
     const KoColorDisplayRendererInterface *displayRenderer = 0;
     KisVisualColorSelector::Configuration acs_config;
     //Current coordinates.
-    QVector <float> currentCoordinates;
+    QVector <qreal> currentCoordinates;
 };
 
 KisVisualColorSelector::KisVisualColorSelector(QWidget *parent) : QWidget(parent), \
m_d(new Private) @@ -231,11 +231,7 @@ void \
                KisVisualColorSelector::slotRebuildSelectors()
                                                                                      \
                m_d->currentCS, channel2, channel3,
                                                                                      \
m_d->displayRenderer);  block->setGeometry(bar->getSpaceForSquare(this->geometry()));
-            block->setColor(m_d->currentcolor);
-            connect (bar, SIGNAL(sigNewColor(KoColor)), block, \
                SLOT(setColorFromSibling(KoColor)));
-            connect (block, SIGNAL(sigNewColor(KoColor)), \
                SLOT(updateFromWidgets(KoColor)));
-            m_d->widgetlist.append(block);
-        } else {
+         } else {
             block =  new KisVisualEllipticalSelectorShape(this, \
                KisVisualColorSelectorShape::twodimensional,
                                                                                      \
                modelS,
                                                                                      \
m_d->currentCS, channel2, channel3, @@ -247,6 +243,8 @@ void \
KisVisualColorSelector::slotRebuildSelectors()  block->setColor(m_d->currentcolor);
         connect (bar, SIGNAL(sigNewColor(KoColor)), block, \
                SLOT(setColorFromSibling(KoColor)));
         connect (block, SIGNAL(sigNewColor(KoColor)), \
SLOT(updateFromWidgets(KoColor))); +        connect (bar, SIGNAL(sigHSXchange()), \
SLOT(HSXwrangler())); +        connect (block, SIGNAL(sigHSXchange()), \
SLOT(HSXwrangler()));  m_d->widgetlist.append(block);
 
 
@@ -338,6 +336,26 @@ void KisVisualColorSelector::resizeEvent(QResizeEvent *) {
     }
 }
 
+void KisVisualColorSelector::HSXwrangler()
+{
+    m_d->currentCoordinates = QVector <qreal>(3);
+
+    QVector <qreal> w1 = m_d->widgetlist.at(0)->getHSX(m_d->currentCoordinates, \
true); +    QVector <qreal> w2 = \
m_d->widgetlist.at(1)->getHSX(m_d->currentCoordinates, true); +    QVector <int> \
ch(3);q +
+    ch[0] = m_d->widgetlist.at(0)->getChannels().at(0);
+    ch[1] = m_d->widgetlist.at(1)->getChannels().at(0);
+    ch[2] = m_d->widgetlist.at(1)->getChannels().at(1);
+
+    m_d->currentCoordinates[ch[0]] = w1[ch[0]];
+    m_d->currentCoordinates[ch[1]] = w2[ch[1]];
+    m_d->currentCoordinates[ch[2]] = w2[ch[2]];
+
+    m_d->widgetlist.at(0)->setHSX(m_d->currentCoordinates);
+    m_d->widgetlist.at(1)->setHSX(m_d->currentCoordinates);
+}
+
 /*------------Selector shape------------*/
 struct KisVisualColorSelectorShape::Private
 {
@@ -378,7 +396,7 @@ KisVisualColorSelectorShape::KisVisualColorSelectorShape(QWidget \
*parent,  m_d->channel1 = qBound(0, channel1, maxchannel);
     m_d->channel2 = qBound(0, channel2, maxchannel);
     this->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
-    m_d->updateTimer = new KisSignalCompressor(30 /* ms */, \
KisSignalCompressor::POSTPONE, this); +    m_d->updateTimer = new \
                KisSignalCompressor(100 /* ms */, KisSignalCompressor::POSTPONE, \
                this);
     m_d->siblingTimer = new KisSignalCompressor(30 /* ms */, \
KisSignalCompressor::POSTPONE, this);  setDisplayRenderer(displayRenderer);
     show();
@@ -409,7 +427,7 @@ void KisVisualColorSelectorShape::setColor(KoColor c)
     }
     m_d->currentColor = c;
     updateCursor();
-    convertShapeCoordinateToKoColor(getCursorPosition(), true);
+    convertShapeCoordinateToKoColor(getCursorPosition());
     m_d->imagesNeedUpdate = true;
     update();
 }
@@ -547,7 +565,7 @@ KoColor \
KisVisualColorSelectorShape::convertShapeCoordinateToKoColor(QPointF coo  if \
                (m_d->dimension == Dimensions::twodimensional) {
                     inbetween[m_d->channel2] = coordinates.y()*huedivider2;
                 }
-                if (cursor==true){setHSX(convertvectorfloatToqreal(inbetween));}
+                if (cursor==true){setHSX(convertvectorfloatToqreal(inbetween));Q_EMIT \
                sigHSXchange();}
                 HSVToRGB(qMax(inbetween[0],(float)0.0), inbetween[1], inbetween[2], \
&channelValuesDisplay[0], &channelValuesDisplay[1], &channelValuesDisplay[2]);  } \
else if (m_d->model == ColorModel::HSL) {  /*
@@ -561,7 +579,7 @@ KoColor \
KisVisualColorSelectorShape::convertShapeCoordinateToKoColor(QPointF coo  if \
                (m_d->dimension == Dimensions::twodimensional) {
                     inbetween[m_d->channel2] = coordinates.y()*huedivider2;
                 }
-                if (cursor==true){setHSX(convertvectorfloatToqreal(inbetween));}
+                if (cursor==true){setHSX(convertvectorfloatToqreal(inbetween));Q_EMIT \
                sigHSXchange();}
                 HSLToRGB(inbetween[0], inbetween[1], \
inbetween[2],&channelValuesDisplay[0],&channelValuesDisplay[1], \
&channelValuesDisplay[2]);  } else if (m_d->model == ColorModel::HSI) {
                 /*
@@ -575,7 +593,7 @@ KoColor \
KisVisualColorSelectorShape::convertShapeCoordinateToKoColor(QPointF coo  if \
(m_d->dimension == Dimensions::twodimensional) {  inbetween[m_d->channel2] = \
coordinates.y();  }
-                if (cursor==true){setHSX(inbetween);}
+                if (cursor==true){setHSX(inbetween);Q_EMIT sigHSXchange();}
                 HSIToRGB(inbetween[0], inbetween[1], \
inbetween[2],&chan2[0],&chan2[1], &chan2[2]);  channelValuesDisplay = \
convertvectorqrealTofloat(chan2);  } else /*if (m_d->model == ColorModel::HSY)*/ {
@@ -594,7 +612,7 @@ KoColor \
KisVisualColorSelectorShape::convertShapeCoordinateToKoColor(QPointF coo  if \
(m_d->dimension == Dimensions::twodimensional) {  inbetween[m_d->channel2] = \
coordinates.y();  }
-                if (cursor==true){setHSX(inbetween);}
+                if (cursor==true){setHSX(inbetween);Q_EMIT sigHSXchange();}
                 HSYToRGB(inbetween[0], inbetween[1], \
inbetween[2],&chan2[0],&chan2[1], &chan2[2],  luma[0], luma[1], luma[2]);
                 channelValuesDisplay = convertvectorqrealTofloat(chan2);
@@ -721,7 +739,7 @@ void KisVisualColorSelectorShape::mousePressEvent(QMouseEvent *e)
 {
     m_d->mousePressActive = true;
     QPointF coordinates = convertWidgetCoordinateToShapeCoordinate(e->pos());
-    KoColor col = convertShapeCoordinateToKoColor(coordinates);
+    KoColor col = convertShapeCoordinateToKoColor(coordinates, true);
     setColor(col);
     Q_EMIT sigNewColor(col);
     m_d->updateTimer->start();
@@ -731,7 +749,7 @@ void KisVisualColorSelectorShape::mouseMoveEvent(QMouseEvent *e)
 {
     if (m_d->mousePressActive==true && this->mask().contains(e->pos())) {
         QPointF coordinates = convertWidgetCoordinateToShapeCoordinate(e->pos());
-        KoColor col = convertShapeCoordinateToKoColor(coordinates);
+        KoColor col = convertShapeCoordinateToKoColor(coordinates, true);
         setColor(col);
         if (!m_d->updateTimer->isActive()) {
             Q_EMIT sigNewColor(col);
@@ -778,25 +796,41 @@ KoColor KisVisualColorSelectorShape::getCurrentColor()
     return m_d->currentColor;
 }
 
-QVector <qreal> KisVisualColorSelectorShape::getHSX(QVector<qreal> hsx)
+QVector <qreal> KisVisualColorSelectorShape::getHSX(QVector<qreal> hsx, bool \
wrangler)  {
-    if ((hsx[2]<=0.0 || hsx[2]>1.0) && hsx[1]<=0.0 && m_d->channel1!=2 && \
                m_d->channel2!=2) {
-        hsx[1] = m_d->sat;
-    }
-    if (hsx[1]<=0.0 && m_d->channel1!=1 && m_d->channel2!=1){
-        hsx[0]=m_d->hue;
+    QVector <qreal> ihsx = hsx;
+    if (!wrangler){
+        if (m_d->model==HSV){
+            if (hsx[2]<=0.0) {
+                ihsx[1] = m_d->sat;
+            }
+        } else {
+            if ((hsx[2]<=0.0 || hsx[2]>=1.0)) {
+                ihsx[1] = m_d->sat;
+            }
+        }
+        if ((hsx[1]<0.0 || hsx[0]<0.0)){
+            ihsx[0]=m_d->hue;
+        }
+    } else {
+        ihsx[0]=m_d->hue;
+        ihsx[1]=m_d->sat;
     }
-    return hsx;
+    return ihsx;
 }
 
 void KisVisualColorSelectorShape::setHSX(QVector<qreal> hsx)
 {
-    if (hsx[2]>0.0 && hsx[2<=1.0] && m_d->channel1!=2 && m_d->channel2!=2){
-        m_d->sat = hsx[1];
-    }
-    if (hsx[1]>0.0) {
-        m_d->hue = hsx[0];
-    }
+    m_d->sat = hsx[1];
+    m_d->hue = hsx[0];
+}
+
+QVector <int> KisVisualColorSelectorShape::getChannels()
+{
+    QVector <int> channels(2);
+    channels[0] = m_d->channel1;
+    channels[1] = m_d->channel2;
+    return channels;
 }
 
 /*-----------Rectangle Shape------------*/
diff --git a/libs/ui/widgets/kis_visual_color_selector.h \
b/libs/ui/widgets/kis_visual_color_selector.h index 8a5e3c3..fcc30a4 100644
--- a/libs/ui/widgets/kis_visual_color_selector.h
+++ b/libs/ui/widgets/kis_visual_color_selector.h
@@ -106,6 +106,7 @@ public Q_SLOTS:
     void setDisplayRenderer (const KoColorDisplayRendererInterface \
*displayRenderer);  private Q_SLOTS:
     void updateFromWidgets(KoColor c);
+    void HSXwrangler();
 protected:
     void leaveEvent(QEvent *);
     void resizeEvent(QResizeEvent *);
@@ -208,10 +209,45 @@ public:
     virtual QRect getSpaceForCircle(QRect geom) = 0;
     virtual QRect getSpaceForTriangle(QRect geom) = 0;
 
+    /**
+     * @brief forceImageUpdate
+     * force the image to recache.
+     */
     void forceImageUpdate();
+
+    /**
+     * @brief setBorderWidth
+     * set the border of the single dimensional selector.
+     * @param width
+     */
     virtual void setBorderWidth(int width) = 0;
+
+    /**
+     * @brief getChannels
+     * get used channels
+     * @return
+     */
+    QVector <int> getChannels();
+
+    /**
+     * @brief setHSX
+     * This is for the cursor not to change when selecting
+     * black, white, and desaturated values. Will not change the non-native values.
+     * @param hsx the hsx value.
+     */
+    void setHSX(QVector <qreal> hsx);
+    /**
+     * @brief getHSX sets the sat and hue so they won't
+     * switch around much.
+     * @param hsx the hsx values.
+     * @return returns hsx, corrected.
+     */
+    QVector <qreal> getHSX(QVector <qreal> hsx, bool wrangler= false);
+
+
 Q_SIGNALS:
     void sigNewColor(KoColor col);
+    void sigHSXchange();
 
 public Q_SLOTS:
     /**
@@ -249,21 +285,6 @@ private:
     const QScopedPointer<Private> m_d;
 
     /**
-     * @brief setHSX
-     * This is for the cursor not to change when selecting
-     * black, white, and desaturated values. Will not change the non-native values.
-     * @param hsx the hsx value.
-     */
-    void setHSX(QVector <qreal> hsx);
-    /**
-     * @brief getHSX sets the sat and hue so they won't
-     * switch around much.
-     * @param hsx the hsx values.
-     * @return returns hsx, corrected.
-     */
-    QVector <qreal> getHSX(QVector <qreal> hsx);
-
-    /**
      * @brief convertShapeCoordinateToWidgetCoordinate
      * @return take the position in the shape and convert it to screen coordinates.
      */


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic