diff --git a/knownBugs.txt b/knownBugs.txt index 8314056..54b8e59 100644 --- a/knownBugs.txt +++ b/knownBugs.txt @@ -1 +1,3 @@ -history tool doesnt load polygon data on undo iff project was loaded \ No newline at end of file +history tool doesnt load polygon data on undo iff project was loaded +history tool doesnt save delete Layer +Gradient breaks Heap Size, when big Witdh and Height (appeared on 1280x720) \ No newline at end of file diff --git a/src/Tool/IntelliToolGradient.cpp b/src/Tool/IntelliToolGradient.cpp index 40cc8bb..6a52a5f 100644 --- a/src/Tool/IntelliToolGradient.cpp +++ b/src/Tool/IntelliToolGradient.cpp @@ -21,7 +21,6 @@ void IntelliToolGradient::onMouseLeftPressed(int x, int y){ B = QPoint(x,y); VectorAB[0] = 0; VectorAB[1] = 0; - Canvas->image->drawPlain(colorPicker->getFirstColor()); Canvas->image->drawPixel(A,LineColor); } @@ -30,14 +29,13 @@ void IntelliToolGradient::onMouseRightPressed(int x, int y){ } void IntelliToolGradient::onMouseLeftReleased(int x, int y){ - if(hasMoved && A != B){ - for(int i = 0; i < activeLayer->height; i++){ - for(int j = 0; j < activeLayer->width; j++){ - computePixelColor(QPoint(i,j)); - } - } + if(hasMoved){ + computeGradientLayer(); + IntelliTool::onMouseLeftReleased(x,y); + } + else{ + IntelliTool::onMouseRightPressed(x,y); } - IntelliTool::onMouseLeftReleased(x,y); } void IntelliToolGradient::onMouseRightReleased(int x, int y){ @@ -49,12 +47,11 @@ void IntelliToolGradient::onMouseMoved(int x, int y){ B = QPoint(x,y); VectorAB[0] = static_cast(B.x() - A.x()); VectorAB[1] = static_cast(B.y() - A.y()); + NormalVector[0] = VectorAB[1]; + NormalVector[1] = (-1*VectorAB[0]); + NormalDotNormal = dotProduct(NormalVector,NormalVector); this->Canvas->image->drawPlain(Qt::transparent); - for(int i = 0; i < activeLayer->height; i++){ - for(int j = 0; j < activeLayer->width; j++){ - computePixelColor(QPoint(i,j)); - } - } + computeGradientLayer(); Canvas->image->drawLine(A,B,LineColor,1); IntelliTool::onMouseMoved(x,y); } @@ -64,9 +61,6 @@ void IntelliToolGradient::onWheelScrolled(int value){ } void IntelliToolGradient::computePixelColor(QPoint Point){ - double NormalVector[2]; - NormalVector[0] = VectorAB[1]; - NormalVector[1] = (-1*VectorAB[0]); double doublePoint[2]; doublePoint[0] = static_cast(Point.x()); doublePoint[1] = static_cast(Point.y()); @@ -75,7 +69,6 @@ void IntelliToolGradient::computePixelColor(QPoint Point){ doublePointSubA[1] = doublePoint[1] - doubleA[1]; double Perpendicular[2]; double PointSubADotNormal = dotProduct(doublePointSubA,NormalVector); - double NormalDotNormal = dotProduct(NormalVector,NormalVector); Perpendicular[0] = doublePoint[0] - (PointSubADotNormal / NormalDotNormal) * NormalVector[0]; Perpendicular[1] = doublePoint[1] - (PointSubADotNormal / NormalDotNormal) * NormalVector[1]; double VectorAPoint[2]; @@ -120,3 +113,20 @@ double IntelliToolGradient::dotProduct(double Vector1[2], double Vector2[2]){ double IntelliToolGradient::lenghtVector(double Vector[2]){ return static_cast((std::sqrt(Vector[0] * Vector[0] + Vector[1] * Vector[1]))); } + +void IntelliToolGradient::computeGradientLayer(){ + bool switched = false; + if(Canvas->image->isFastRendering()){ + switched = true; + Canvas->image->updateRendererSetting(false); + } + qDebug() << activeLayer->width << activeLayer->height; + for(int i = 0; i < activeLayer->height; i++){ + for(int j = 0; j < activeLayer->width; j++){ + computePixelColor(QPoint(i,j)); + } + } + if(switched){ + Canvas->image->updateRendererSetting(true); + } +} diff --git a/src/Tool/IntelliToolGradient.h b/src/Tool/IntelliToolGradient.h index 2e3f0ad..50ee96b 100644 --- a/src/Tool/IntelliToolGradient.h +++ b/src/Tool/IntelliToolGradient.h @@ -6,8 +6,10 @@ class IntelliToolGradient : public IntelliTool{ private: QPoint A; QPoint B; - double VectorAB[2]; double doubleA[2]; + double VectorAB[2]; + double NormalVector[2]; + double NormalDotNormal; QColor LineColor; bool hasMoved; @@ -62,6 +64,8 @@ public: double dotProduct(double Vector1[2], double Vector2[2]); double lenghtVector(double Vector[2]); + + void computeGradientLayer(); }; #endif // INTELLITOOLGRADIENT_H