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

List:       kde-commits
Subject:    [krita/krita-testing-wolthera] libs/ui/widgets: Add cursor position to the triangle.
From:       Wolthera van Hovell tot Westerflier <griffinvalley () gmail ! com>
Date:       2016-08-20 11:31:41
Message-ID: E1bb4V3-0005FD-21 () code ! kde ! org
[Download RAW message or body]

Git commit f8fb2e088596ff430db5d4a74fd18f4fbbd58f82 by Wolthera van Hovell tot \
Westerflier. Committed on 20/08/2016 at 10:34.
Pushed by woltherav into branch 'krita-testing-wolthera'.

Add cursor position to the triangle.

I spent 9+ hours trying to figure out how to make one where the value length fully \
vertical, but failed, so gave up and copied the kis_color_selector_triangle solution.

Ref 2438

M  +38   -38   libs/ui/widgets/kis_visual_color_selector.cpp
M  +2    -0    libs/ui/widgets/kis_visual_color_selector.h

http://commits.kde.org/krita/f8fb2e088596ff430db5d4a74fd18f4fbbd58f82

diff --git a/libs/ui/widgets/kis_visual_color_selector.cpp \
b/libs/ui/widgets/kis_visual_color_selector.cpp index e80a44e..0b2960b 100644
--- a/libs/ui/widgets/kis_visual_color_selector.cpp
+++ b/libs/ui/widgets/kis_visual_color_selector.cpp
@@ -1062,63 +1062,63 @@ void KisVisualTriangleSelectorShape::setBarWidth(int width)
 
 void KisVisualTriangleSelectorShape::setTriangle()
 {
-    QPoint apex = QPoint (width(),height()/2);
+    QPoint apex = QPoint (width()*0.5,0);
     QPolygon triangle;
-    triangle<< QPoint(0,0) << apex << QPoint(0,height()) << QPoint(0,0);
+    triangle<< QPoint(0,height()) << apex << QPoint(width(),height()) << \
QPoint(0,height());  m_triangle = triangle;
-
+    QLineF a(triangle.at(0),triangle.at(1));
+    QLineF b(triangle.at(0),triangle.at(2));
+    QLineF ap(triangle.at(2), a.pointAt(0.5));
+    QLineF bp(triangle.at(1), b.pointAt(0.5));
+    QPointF intersect;
+    ap.intersect(bp,&intersect);
+    m_center = intersect;
+    QLineF r(triangle.at(0), intersect);
+    m_radius = r.length();
 }
 
 QRect KisVisualTriangleSelectorShape::setGeometryByRadius(QLineF radius)
 {
-    QPolygon triangle;
-    radius.setAngle(120);//point at yellow :)
-    QPointF tl = radius.p2();
-    radius.setAngle(0);//point to cyan :)
-    QPointF mr = radius.p2();
-    radius.setAngle(240);//point to magenta :)
+    radius.setAngle(90);//point at yellowgreen :)
+    QPointF t = radius.p2();
+    radius.setAngle(330);//point to purple :)
+    QPointF br = radius.p2();
+    radius.setAngle(210);//point to cerulean :)
     QPointF bl = radius.p2();
-    QPointF br = QPoint(mr.x(),bl.y());
+    QPointF tl = QPoint(bl.x(),t.y());
     QRect r(tl.toPoint(), br.toPoint());
     return r;
 }
 
 QPointF KisVisualTriangleSelectorShape::convertShapeCoordinateToWidgetCoordinate(QPointF \
coordinate)  {
-    qreal x = width()/2;
-    qreal y = height()/2;
+    qreal y = coordinate.y()*height();
+
+    qreal triWidth = width();
+    qreal horizontalLineLength = y*(2./sqrt(3.));
+    qreal horizontalLineStart = triWidth/2.-horizontalLineLength/2.;
+    qreal relativeX = coordinate.x()*horizontalLineLength;
+    qreal x = relativeX + horizontalLineStart;
+
+
     return QPointF(x,y);
 }
 
 QPointF KisVisualTriangleSelectorShape::convertWidgetCoordinateToShapeCoordinate(QPoint \
coordinate)  {
-    //default implementation: gotten from the kotrianglecolorselector.
+    //default implementation: gotten from the \
kotrianglecolorselector/kis_color_selector_triangle.  qreal x = 0.5;
-    qreal y = 1.0;
-    /*qreal triangleRadius = (width()/2) * 0.9;
-    qreal triangleLength = 3.0 / sqrt(3.0) * triangleRadius;
-    qreal triangleHeight = triangleLength * sqrt(3.0) * 0.5;
-    qreal triangleTop = 0.5 * width() - triangleRadius;
-    qreal triangleBottom = triangleHeight + triangleTop;
-
-    qreal ynormalize = ( triangleTop - coordinate.y() ) / ( triangleTop - \
                triangleBottom );
-    qreal ls_ = (ynormalize) * triangleLength;
-    qreal startx_ = center.x() - 0.5 * ls_;
-    */
-    QLineF valLine(m_triangle.at(2), m_triangle.at(1));
-    QLineF satLine(m_triangle.at(0), m_triangle.at(2));
-    QLineF coordinateLine(coordinate, m_triangle.at(0));
-    coordinateLine.setAngle(satLine.angle()+90);
-    QPointF intersect(0.0,0.0);
-    if (valLine.intersect(coordinateLine, &intersect)!=QLineF::NoIntersection) {
-        y = coordinateLine.length()/ QLineF(m_triangle.at(0),intersect).length();
-    }
-    coordinateLine.setP2(m_triangle.at(1));
-    coordinateLine.setAngle(valLine.angle()+90);
-    if (valLine.intersect(coordinateLine, &intersect)!=QLineF::NoIntersection) {
-        x = QLineF(valLine.p1(), intersect).length()/valLine.length();
-    }
-    //x = ((qreal)coordinate.x()/width() );
+    qreal y = 0.5;
+
+
+    y = (qreal)coordinate.y()/height();
+
+    qreal triWidth = width();
+    qreal horizontalLineLength = ((qreal)coordinate.y())*(2./sqrt(3.));
+    qreal horizontalLineStart = (triWidth*0.5)-(horizontalLineLength*0.5);
+
+    qreal relativeX = (qreal)coordinate.x()-horizontalLineStart;
+    x = relativeX/horizontalLineLength;
 
     return QPointF(x, y);
 }
diff --git a/libs/ui/widgets/kis_visual_color_selector.h \
b/libs/ui/widgets/kis_visual_color_selector.h index 4627b7c..19929a6 100644
--- a/libs/ui/widgets/kis_visual_color_selector.h
+++ b/libs/ui/widgets/kis_visual_color_selector.h
@@ -311,6 +311,8 @@ private:
     singelDTypes m_type;
     int m_barWidth;
     QPolygon m_triangle;
+    QPointF m_center;
+    qreal m_radius;
     virtual QRegion getMaskMap();
     virtual void drawCursor();
 };


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

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