[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [krita/krita-testing-wolthera] libs/ui/widgets: Implement rectangle border
From: Wolthera van Hovell tot Westerflier <griffinvalley () gmail ! com>
Date: 2016-08-19 19:10:49
Message-ID: E1bapBp-0004qF-Cq () code ! kde ! org
[Download RAW message or body]
Git commit d7a4e7e9175c18de53d89d834ca544f26500517d by Wolthera van Hovell tot \
Westerflier. Committed on 18/08/2016 at 00:19.
Pushed by woltherav into branch 'krita-testing-wolthera'.
Implement rectangle border
Not too useful and actually a little slow, but good practice.
M +95 -16 libs/ui/widgets/kis_visual_color_selector.cpp
M +3 -2 libs/ui/widgets/kis_visual_color_selector.h
http://commits.kde.org/krita/d7a4e7e9175c18de53d89d834ca544f26500517d
diff --git a/libs/ui/widgets/kis_visual_color_selector.cpp \
b/libs/ui/widgets/kis_visual_color_selector.cpp index 3226557..501a911 100644
--- a/libs/ui/widgets/kis_visual_color_selector.cpp
+++ b/libs/ui/widgets/kis_visual_color_selector.cpp
@@ -25,6 +25,8 @@
#include <QVector>
#include <QVBoxLayout>
#include <QList>
+#include <QPolygon>
+#include <QRect>
#include "KoColorConversions.h"
#include "KoColorDisplayRendererInterface.h"
@@ -90,14 +92,14 @@ void KisVisualColorSelector::slotsetColorSpace(const KoColorSpace \
*cs)
\
KisVisualRectangleSelectorShape::onedimensional,
\
KisVisualColorSelectorShape::HSL,
\
cs, 0, 0,
- \
m_d->displayRenderer); + \
m_d->displayRenderer, \
width()*0.05,KisVisualRectangleSelectorShape::border);
KisVisualRectangleSelectorShape *block = new \
KisVisualRectangleSelectorShape(this, \
KisVisualRectangleSelectorShape::twodimensional,
\
KisVisualColorSelectorShape::HSL,
\
cs, 1, 2,
\
m_d->displayRenderer);
- bar->setMaximumWidth(width()*0.1);
+ bar->setMaximumWidth(width()*0.5);
bar->setMaximumHeight(height());
- block->setMaximumWidth(width()*0.9);
+ block->setMaximumWidth(width()*0.5);
block->setMaximumHeight(height());
bar->setColor(m_d->currentcolor);
block->setColor(m_d->currentcolor);
@@ -612,10 +614,12 @@ \
KisVisualRectangleSelectorShape::KisVisualRectangleSelectorShape(QWidget \
*parent
const KoColorSpace \
*cs,
int channel1, int \
channel2,
const \
KoColorDisplayRendererInterface *displayRenderer, + \
int width,
singelDTypes d)
: KisVisualColorSelectorShape(parent, dimension, model, cs, channel1, channel2, \
displayRenderer) {
m_type = d;
+ m_barWidth = width;
}
KisVisualRectangleSelectorShape::~KisVisualRectangleSelectorShape()
@@ -623,15 +627,50 @@ \
KisVisualRectangleSelectorShape::~KisVisualRectangleSelectorShape()
}
+void KisVisualRectangleSelectorShape::setBarWidth(int width)
+{
+ m_barWidth = width;
+}
+
QPointF KisVisualRectangleSelectorShape::convertShapeCoordinateToWidgetCoordinate(QPointF \
coordinate) {
qreal x = width()/2;
qreal y = height()/2;
KisVisualColorSelectorShape::Dimensions dimension = getDimensions();
- if (dimension == KisVisualColorSelectorShape::onedimensional && m_type == \
KisVisualRectangleSelectorShape::vertical) {
- y = coordinate.x()*height();
- } else if (dimension == KisVisualColorSelectorShape::onedimensional && m_type == \
KisVisualRectangleSelectorShape::horizontal) {
- x = coordinate.x()*width();
+ if (dimension == KisVisualColorSelectorShape::onedimensional) {
+ if ( m_type == KisVisualRectangleSelectorShape::vertical) {
+ y = coordinate.x()*height();
+ } else if (m_type == KisVisualRectangleSelectorShape::horizontal) {
+ x = coordinate.x()*width();
+ } else /*if (m_type == KisVisualRectangleSelectorShape::border) */ {
+
+ QRectF innerRect(m_barWidth/2, m_barWidth/2, width()-m_barWidth, \
height()-m_barWidth); + QPointF left \
(innerRect.left(),innerRect.center().y()); + QList <QLineF> polygonLines;
+ polygonLines.append(QLineF(left, innerRect.topLeft()));
+ polygonLines.append(QLineF(innerRect.topLeft(), innerRect.topRight()));
+ polygonLines.append(QLineF(innerRect.topRight(), \
innerRect.bottomRight())); + \
polygonLines.append(QLineF(innerRect.bottomRight(), innerRect.bottomLeft())); + \
polygonLines.append(QLineF(innerRect.bottomLeft(), left)); +
+ qreal totalLength =0.0;
+ Q_FOREACH(QLineF line, polygonLines) {
+ totalLength += line.length();
+ }
+
+ qreal length = coordinate.x()*totalLength;
+ QPointF intersect(x,y);
+ Q_FOREACH(QLineF line, polygonLines) {
+ if (line.length()>length && length>0){
+ intersect = line.pointAt(length/line.length());
+
+ }
+ length-=line.length();
+ }
+ x = qRound(intersect.x());
+ y = qRound(intersect.y());
+
+ }
} else {
x = coordinate.x()*width();
y = coordinate.y()*height();
@@ -645,20 +684,60 @@ QPointF \
KisVisualRectangleSelectorShape::convertWidgetCoordinateToShapeCoordinat qreal x = \
0.5; qreal y = 0.5;
KisVisualColorSelectorShape::Dimensions dimension = getDimensions();
- if (dimension == KisVisualColorSelectorShape::onedimensional && m_type == \
KisVisualRectangleSelectorShape::vertical) {
- x = (qreal)coordinate.y()/(qreal)height();
- } else if (dimension == KisVisualColorSelectorShape::onedimensional && m_type == \
KisVisualRectangleSelectorShape::horizontal) {
- x = (qreal)coordinate.x()/(qreal)width();
- } else {
- x = (qreal)coordinate.x()/(qreal)width();
- y = (qreal)coordinate.y()/(qreal)height();
- }
+ if (getMaskMap().contains(coordinate)){
+ if (dimension == KisVisualColorSelectorShape::onedimensional ){
+ if (m_type == KisVisualRectangleSelectorShape::vertical) {
+ x = (qreal)coordinate.y()/(qreal)height();
+ } else if (m_type == KisVisualRectangleSelectorShape::horizontal) {
+ x = (qreal)coordinate.x()/(qreal)width();
+ } else /*if (m_type == KisVisualRectangleSelectorShape::border) */{
+ //border
+
+ QRectF innerRect(m_barWidth, m_barWidth, width()-(m_barWidth*2), \
height()-(m_barWidth*2)); + QPointF left \
(innerRect.left(),innerRect.center().y()); + QList <QLineF> \
polygonLines; + polygonLines.append(QLineF(left, \
innerRect.topLeft())); + \
polygonLines.append(QLineF(innerRect.topLeft(), innerRect.topRight())); + \
polygonLines.append(QLineF(innerRect.topRight(), innerRect.bottomRight())); + \
polygonLines.append(QLineF(innerRect.bottomRight(), innerRect.bottomLeft())); + \
polygonLines.append(QLineF(innerRect.bottomLeft(), left)); +
+ QLineF radius(coordinate, this->geometry().center());
+ QPointF intersect(0.5,0.5);
+ qreal length = 0.0;
+ qreal totalLength = 0.0;
+ bool foundIntersect = false;
+ for(int i=0; i<polygonLines.size();i++) {
+ QLineF line = polygonLines.at(i);
+ if \
(line.intersect(radius,&intersect)==QLineF::BoundedIntersection && \
foundIntersect==false) + {
+ foundIntersect = true;
+ length+=QLineF(line.p1(), intersect).length();
+
+ }
+ if (foundIntersect==false) {
+ length+=line.length();
+ }
+ totalLength+=line.length();
+ }
+
+ x = length/totalLength;
+
+ }
+ }
+ else {
+ x = (qreal)coordinate.x()/(qreal)width();
+ y = (qreal)coordinate.y()/(qreal)height();
+ }}
return QPointF(x, y);
}
QRegion KisVisualRectangleSelectorShape::getMaskMap()
{
QRegion mask = QRegion(0,0,width(),height());
+ if (m_type==KisVisualRectangleSelectorShape::border) {
+ mask = mask.subtracted(QRegion(m_barWidth, m_barWidth, \
width()-(m_barWidth*2), height()-(m_barWidth*2))); + }
return mask;
}
@@ -687,7 +766,7 @@ void KisVisualRectangleSelectorShape::drawCursor()
rect.setCoords(x, y, x+(cursorwidth*2), y+cursorwidth-2);
}
- if (getDimensions() == KisVisualColorSelectorShape::onedimensional) {
+ if (getDimensions() == KisVisualColorSelectorShape::onedimensional && \
m_type!=KisVisualRectangleSelectorShape::border) { painter.setPen(Qt::white);
fill.setColor(Qt::white);
painter.setBrush(fill);
diff --git a/libs/ui/widgets/kis_visual_color_selector.h \
b/libs/ui/widgets/kis_visual_color_selector.h index 33472d5..064c4da 100644
--- a/libs/ui/widgets/kis_visual_color_selector.h
+++ b/libs/ui/widgets/kis_visual_color_selector.h
@@ -241,18 +241,19 @@ public:
ColorModel model,
const KoColorSpace *cs,
int channel1, int channel2,
- const KoColorDisplayRendererInterface \
*displayRenderer = KoDumbColorDisplayRenderer::instance(), + \
const KoColorDisplayRendererInterface *displayRenderer = \
KoDumbColorDisplayRenderer::instance(), int width=20,
\
KisVisualRectangleSelectorShape::singelDTypes d = \
KisVisualRectangleSelectorShape::vertical );
~KisVisualRectangleSelectorShape();
- void setBarWidth();
+ void setBarWidth(int width);
private:
virtual QPointF convertShapeCoordinateToWidgetCoordinate(QPointF coordinate);
virtual QPointF convertWidgetCoordinateToShapeCoordinate(QPoint coordinate);
singelDTypes m_type;
+ int m_barWidth;
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