From 8d9fc7b0711f886f4764066c982edbf8023401ee Mon Sep 17 00:00:00 2001 From: Craig Watson Date: Sat, 18 Feb 2017 14:57:33 -0500 Subject: [PATCH] Smaller Triangle tool Added checks for the size of the interior, cut-out triangle to make sure everything is drawn correctly at small sizes; buttons are now also hidden if they overflow from the tool. --- src/tools/UBGraphicsTriangle.cpp | 161 ++++++++++++++++++++++--------- src/tools/UBGraphicsTriangle.h | 10 +- 2 files changed, 123 insertions(+), 48 deletions(-) diff --git a/src/tools/UBGraphicsTriangle.cpp b/src/tools/UBGraphicsTriangle.cpp index 5ba3ab91..0e2b2136 100644 --- a/src/tools/UBGraphicsTriangle.cpp +++ b/src/tools/UBGraphicsTriangle.cpp @@ -49,6 +49,7 @@ UBGraphicsTriangle::UBGraphicsTriangle() , mResizing1(false) , mResizing2(false) , mRotating(false) + , mShouldPaintInnerTriangle(true) { setRect(sDefaultRect, sDefaultOrientation); @@ -224,6 +225,29 @@ void UBGraphicsTriangle::calculatePoints(const QRectF& r) C2.setX(r.left() + L); C2.setY(r.bottom() - d); break; } + + bool paintInnerTriangle = true; + switch(mOrientation) + { + case BottomLeft: + if (B2.x() > C2.x() || B2.y() < A2.y()) + paintInnerTriangle = false; + break; + case TopLeft: + if (B2.x() > C2.x() || B2.y() > A2.y()) + paintInnerTriangle = false; + break; + case TopRight: + if (B2.x() < C2.x() || B2.y() > A2.y()) + paintInnerTriangle = false; + break; + case BottomRight: + if (B2.x() < C2.x() || B2.y() < A2.y()) + paintInnerTriangle = false; + break; + } + mShouldPaintInnerTriangle = paintInnerTriangle; + W1 = rect().height() * d / C; H1 = rect().width() * d / C; @@ -251,40 +275,54 @@ void UBGraphicsTriangle::paint(QPainter *painter, const QStyleOptionGraphicsItem QPolygonF polygon; - QLinearGradient gradient1(QPointF(A1.x(), 0), QPointF(A2.x(), 0)); - gradient1.setColorAt(0, edgeFillColor()); - gradient1.setColorAt(1, middleFillColor()); - painter->setBrush(gradient1); - polygon << A1 << A2 << B2 << B1; - painter->drawPolygon(polygon); - polygon.clear(); - - QLinearGradient gradient2(QPointF(0, B1.y()), QPointF(0, B2.y())); - gradient2.setColorAt(0, edgeFillColor()); - gradient2.setColorAt(1, middleFillColor()); - painter->setBrush(gradient2); - polygon << B1 << B2 << C2 << C1; - painter->drawPolygon(polygon); - polygon.clear(); - - QLinearGradient gradient3(CC, C2); - gradient3.setColorAt(0, edgeFillColor()); - gradient3.setColorAt(1, middleFillColor()); - painter->setBrush(gradient3); - polygon << C1 << C2 << A2 << A1; - painter->drawPolygon(polygon); - polygon.clear(); - - - painter->setBrush(Qt::NoBrush); - painter->setPen(drawColor()); + if (mShouldPaintInnerTriangle) { + QLinearGradient gradient1(QPointF(A1.x(), 0), QPointF(A2.x(), 0)); + gradient1.setColorAt(0, edgeFillColor()); + gradient1.setColorAt(1, middleFillColor()); + painter->setBrush(gradient1); + polygon << A1 << A2 << B2 << B1; + painter->drawPolygon(polygon); + polygon.clear(); + + QLinearGradient gradient2(QPointF(0, B1.y()), QPointF(0, B2.y())); + gradient2.setColorAt(0, edgeFillColor()); + gradient2.setColorAt(1, middleFillColor()); + painter->setBrush(gradient2); + polygon << B1 << B2 << C2 << C1; + painter->drawPolygon(polygon); + polygon.clear(); + + QLinearGradient gradient3(CC, C2); + gradient3.setColorAt(0, edgeFillColor()); + gradient3.setColorAt(1, middleFillColor()); + painter->setBrush(gradient3); + polygon << C1 << C2 << A2 << A1; + painter->drawPolygon(polygon); + polygon.clear(); + + + painter->setBrush(Qt::NoBrush); + painter->setPen(drawColor()); + + polygon << A1 << B1 << C1; + painter->drawPolygon(polygon); + polygon.clear(); + + polygon << A2 << B2 << C2; + painter->drawPolygon(polygon); + } - polygon << A1 << B1 << C1; - painter->drawPolygon(polygon); - polygon.clear(); + else { + QLinearGradient gradient(QPointF(A1.x(), 0), QPointF(C1.x(), 0)); + gradient.setColorAt(0, edgeFillColor()); + gradient.setColorAt(1, middleFillColor()); + painter->setBrush(gradient); + painter->setPen(drawColor()); + polygon << A1 << B1 << C1; + painter->drawPolygon(polygon); + polygon.clear(); + } - polygon << A2 << B2 << C2; - painter->drawPolygon(polygon); paintGraduations(painter); @@ -329,9 +367,11 @@ QPainterPath UBGraphicsTriangle::shape() const tShape.addPolygon(tPolygon); tPolygon.clear(); - tPolygon << A2 << B2 << C2; - tShape.addPolygon(tPolygon); - tPolygon.clear(); + if (mShouldPaintInnerTriangle) { + tPolygon << A2 << B2 << C2; + tShape.addPolygon(tPolygon); + tPolygon.clear(); + } //qDebug() << "UBGraphicsTriangle shape()"<<"A1 ="<