Merge branch 'dev' into UnitTesting

This commit is contained in:
2020-01-16 11:24:44 +01:00
38 changed files with 1179 additions and 383 deletions

View File

@@ -2,10 +2,10 @@
#include "Layer/PaintingArea.h"
IntelliTool::IntelliTool(PaintingArea* Area, IntelliColorPicker* colorPicker, IntelliToolsettings* Toolsettings){
this->Area=Area;
this->colorPicker=colorPicker;
this->Toolsettings=Toolsettings;
this->isDrawing = false;
this->Area = Area;
this->colorPicker = colorPicker;
this->Toolsettings = Toolsettings;
this->isDrawing = false;
}
IntelliTool::~IntelliTool(){
@@ -14,7 +14,7 @@ IntelliTool::~IntelliTool(){
void IntelliTool::onMouseRightPressed(int x, int y){
if(isDrawing) {
isDrawing=false;
isDrawing = false;
this->deleteToolLayer();
}
}
@@ -24,7 +24,7 @@ void IntelliTool::onMouseRightReleased(int x, int y){
}
void IntelliTool::onMouseLeftPressed(int x, int y){
this->isDrawing=this->createToolLayer();
this->isDrawing = this->createToolLayer();
if(isDrawing) {
Canvas->image->calculateVisiblity();
}
@@ -32,7 +32,7 @@ void IntelliTool::onMouseLeftPressed(int x, int y){
void IntelliTool::onMouseLeftReleased(int x, int y){
if(isDrawing) {
isDrawing=false;
isDrawing = false;
this->mergeToolLayer();
this->deleteToolLayer();
activeLayer->image->calculateVisiblity();
@@ -47,12 +47,13 @@ void IntelliTool::onMouseMoved(int x, int y){
void IntelliTool::onWheelScrolled(int value){
//if needed for future general tasks implement in here
Area->DummyGui->setToolWidth(value + Toolsettings->getLineWidth());
}
bool IntelliTool::createToolLayer(){
if(Area->createTempTopLayer(Area->activeLayer)) {
this->activeLayer=&Area->layerBundle[static_cast<unsigned long long>(Area->activeLayer)];
this->Canvas=&Area->layerBundle[static_cast<unsigned long long>(Area->activeLayer+1)];
this->activeLayer = &Area->layerBundle[static_cast<unsigned long long>(Area->activeLayer)];
this->Canvas = &Area->layerBundle[static_cast<unsigned long long>(Area->activeLayer + 1)];
return true;
}
return false;
@@ -63,15 +64,15 @@ void IntelliTool::mergeToolLayer(){
QColor clr_1;
QImage updatedImage = activeLayer->image->getImageData();
for(int y=0; y<activeLayer->height; y++) {
for(int x=0; x<activeLayer->width; x++) {
clr_0=updatedImage.pixelColor(x,y);
clr_1=Canvas->image->imageData.pixelColor(x,y);
float t = static_cast<float>(clr_1.alpha())/255.f;
int r =static_cast<int>(static_cast<float>(clr_1.red())*(t)+static_cast<float>(clr_0.red())*(1.f-t)+0.5f);
int g =static_cast<int>(static_cast<float>(clr_1.green())*(t)+static_cast<float>(clr_0.green())*(1.f-t)+0.5f);
int b =static_cast<int>(static_cast<float>(clr_1.blue())*(t)+static_cast<float>(clr_0.blue()*(1.f-t))+0.5f);
int a =std::min(clr_0.alpha()+clr_1.alpha(), 255);
for(int y = 0; y<activeLayer->height; y++) {
for(int x = 0; x<activeLayer->width; x++) {
clr_0 = updatedImage.pixelColor(x,y);
clr_1 = Canvas->image->imageData.pixelColor(x,y);
float t = static_cast<float>(clr_1.alpha()) / 255.f;
int r = static_cast<int>(static_cast<float>(clr_1.red()) * (t) + static_cast<float>(clr_0.red()) * (1.f - t) + 0.5f);
int g = static_cast<int>(static_cast<float>(clr_1.green()) * (t) + static_cast<float>(clr_0.green()) * (1.f - t) + 0.5f);
int b = static_cast<int>(static_cast<float>(clr_1.blue()) * (t) + static_cast<float>(clr_0.blue() * (1.f - t)) + 0.5f);
int a = std::min(clr_0.alpha() + clr_1.alpha(), 255);
clr_0.setRed(r);
clr_0.setGreen(g);
clr_0.setBlue(b);
@@ -88,8 +89,8 @@ void IntelliTool::mergeToolLayer(){
}
void IntelliTool::deleteToolLayer(){
Area->deleteLayer(Area->activeLayer+1, true);
this->Canvas=nullptr;
Area->deleteLayer(Area->activeLayer + 1, true);
this->Canvas = nullptr;
}
IntelliTool::Tooltype IntelliTool::getTooltype(){

View File

@@ -16,31 +16,31 @@ void IntelliToolCircle::drawCircle(int radius){
QColor inner = this->colorPicker->getSecondColor();
inner.setAlpha(Toolsettings->getInnerAlpha());
int yMin, yMax, xMin, xMax;
yMin = centerPoint.y()-radius;
yMax = centerPoint.y()+radius;
yMin = centerPoint.y() - radius;
yMax = centerPoint.y() + radius;
// x = x0+-sqrt(r2-(y-y0)2)
for(int i=yMin; i<=yMax; i++) {
xMin = static_cast<int>(centerPoint.x()-sqrt(pow(radius,2)-pow(i-centerPoint.y(),2)));
xMax = static_cast<int>(centerPoint.x()+sqrt(pow(radius,2)-pow(i-centerPoint.y(),2)));
for(int i = yMin; i<=yMax; i++) {
xMin = static_cast<int>(centerPoint.x() - sqrt(pow(radius,2) - pow(i - centerPoint.y(),2)));
xMax = static_cast<int>(centerPoint.x() + sqrt(pow(radius,2) - pow(i - centerPoint.y(),2)));
this->Canvas->image->drawLine(QPoint(xMin,i), QPoint(xMax,i),inner,1);
}
//TODO implement circle drawing algorithm bresenham
radius = static_cast<int>(radius +(Toolsettings->getLineWidth()/2.));
yMin = (centerPoint.y()-radius);
yMax = (centerPoint.y()+radius);
for(int i=yMin; i<=yMax; i++) {
xMin = static_cast<int>(centerPoint.x()-sqrt(pow(radius,2)-pow(i-centerPoint.y(),2)));
xMax = static_cast<int>(centerPoint.x()+sqrt(pow(radius,2)-pow(i-centerPoint.y(),2)));
radius = static_cast<int>(radius + (Toolsettings->getLineWidth() / 2.));
yMin = (centerPoint.y() - radius);
yMax = (centerPoint.y() + radius);
for(int i = yMin; i<=yMax; i++) {
xMin = static_cast<int>(centerPoint.x() - sqrt(pow(radius,2) - pow(i - centerPoint.y(),2)));
xMax = static_cast<int>(centerPoint.x() + sqrt(pow(radius,2) - pow(i - centerPoint.y(),2)));
this->Canvas->image->drawPoint(QPoint(xMin,i), colorPicker->getFirstColor(),Toolsettings->getLineWidth());
this->Canvas->image->drawPoint(QPoint(xMax,i), colorPicker->getFirstColor(),Toolsettings->getLineWidth());
}
xMin = (centerPoint.x()-radius);
xMax = (centerPoint.x()+radius);
for(int i=xMin; i<=xMax; i++) {
int yMin = static_cast<int>(centerPoint.y()-sqrt(pow(radius,2)-pow(i-centerPoint.x(),2)));
int yMax = static_cast<int>(centerPoint.y()+sqrt(pow(radius,2)-pow(i-centerPoint.x(),2)));
xMin = (centerPoint.x() - radius);
xMax = (centerPoint.x() + radius);
for(int i = xMin; i<=xMax; i++) {
int yMin = static_cast<int>(centerPoint.y() - sqrt(pow(radius,2) - pow(i - centerPoint.x(),2)));
int yMax = static_cast<int>(centerPoint.y() + sqrt(pow(radius,2) - pow(i - centerPoint.x(),2)));
this->Canvas->image->drawPoint(QPoint(i, yMin), colorPicker->getFirstColor(),Toolsettings->getLineWidth());
this->Canvas->image->drawPoint(QPoint(i, yMax), colorPicker->getFirstColor(),Toolsettings->getLineWidth());
}
@@ -57,7 +57,7 @@ void IntelliToolCircle::onMouseRightReleased(int x, int y){
void IntelliToolCircle::onMouseLeftPressed(int x, int y){
IntelliTool::onMouseLeftPressed(x,y);
if(this->isDrawing) {
this->centerPoint=QPoint(x,y);
this->centerPoint = QPoint(x,y);
int radius = 1;
drawCircle(radius);
Canvas->image->calculateVisiblity();
@@ -70,14 +70,14 @@ void IntelliToolCircle::onMouseLeftReleased(int x, int y){
void IntelliToolCircle::onWheelScrolled(int value){
IntelliTool::onWheelScrolled(value);
Toolsettings->setLineWidth(Toolsettings->getLineWidth()+value);
Toolsettings->setLineWidth(Toolsettings->getLineWidth() + value);
}
void IntelliToolCircle::onMouseMoved(int x, int y){
if(this->isDrawing) {
this->Canvas->image->drawPlain(Qt::transparent);
QPoint next(x,y);
int radius = static_cast<int>(sqrt(pow((centerPoint.x()-x),2)+pow((centerPoint.y()-y),2)));
int radius = static_cast<int>(sqrt(pow((centerPoint.x() - x),2) + pow((centerPoint.y() - y),2)));
drawCircle(radius);
}
IntelliTool::onMouseMoved(x,y);

View File

@@ -79,4 +79,4 @@ virtual void onWheelScrolled(int value) override;
virtual void onMouseMoved(int x, int y) override;
};
#endif // INTELLITOOLCIRCLE_H
#endif

View File

@@ -25,7 +25,7 @@ void IntelliToolFloodFill::onMouseRightReleased(int x, int y){
void IntelliToolFloodFill::onMouseLeftPressed(int x, int y){
if(!(x>=0 && x<Area->getWidthOfActive() && y>=0 && y<Area->getHeightOfActive())) {
return;
}
}
IntelliTool::onMouseLeftPressed(x,y);
QPoint start(x,y);
@@ -33,10 +33,10 @@ void IntelliToolFloodFill::onMouseLeftPressed(int x, int y){
Q.push(start);
QColor oldColor = this->activeLayer->image->getPixelColor(start);
QColor newColor = this->colorPicker->getFirstColor();
if(newColor == oldColor){
return;
}
QColor newColor = this->colorPicker->getFirstColor();
if(newColor == oldColor) {
return;
}
Canvas->image->drawPixel(start,newColor);
QPoint left, right, top, down;
@@ -44,24 +44,24 @@ void IntelliToolFloodFill::onMouseLeftPressed(int x, int y){
QPoint Current = Q.front();
Q.pop();
left = QPoint(Current.x()-1,Current.y() );
right = QPoint(Current.x()+1,Current.y() );
top = QPoint(Current.x(),Current.y()-1);
down = QPoint(Current.x(),Current.y()+1);
if((right.x() < Canvas->width) && (Canvas->image->getPixelColor(right) != newColor) && (activeLayer->image->getPixelColor(right) == oldColor)) {
left = QPoint(Current.x() - 1,Current.y() );
right = QPoint(Current.x() + 1,Current.y() );
top = QPoint(Current.x(),Current.y() - 1);
down = QPoint(Current.x(),Current.y() + 1);
if((right.x() < Canvas->width) && (Canvas->image->getPixelColor(right) != newColor) && (activeLayer->image->getPixelColor(right) == oldColor)) {
Canvas->image->drawPixel(right,newColor);
Q.push(right);
}
if((left.x() >= 0) && (Canvas->image->getPixelColor(left) != newColor) && (activeLayer->image->getPixelColor(left) == oldColor)) {
if((left.x() >= 0) && (Canvas->image->getPixelColor(left) != newColor) && (activeLayer->image->getPixelColor(left) == oldColor)) {
Canvas->image->drawPixel(left,newColor);
Q.push(left);
}
if((top.y() >= 0) && (Canvas->image->getPixelColor(top) != newColor) && (activeLayer->image->getPixelColor(top) == oldColor)) {
if((top.y() >= 0) && (Canvas->image->getPixelColor(top) != newColor) && (activeLayer->image->getPixelColor(top) == oldColor)) {
Canvas->image->drawPixel(top,newColor);
Q.push(top);
}
if((down.y() < Canvas->height) && (Canvas->image->getPixelColor(down) != newColor) && (activeLayer->image->getPixelColor(down) == oldColor)) {
Canvas->image->drawPixel(down,newColor);
if((down.y() < Canvas->height) && (Canvas->image->getPixelColor(down) != newColor) && (activeLayer->image->getPixelColor(down) == oldColor)) {
Canvas->image->drawPixel(down,newColor);
Q.push(down);
}
}

View File

@@ -69,4 +69,4 @@ virtual void onWheelScrolled(int value) override;
virtual void onMouseMoved(int x, int y) override;
};
#endif // INTELLITOOLFLOODFILL_H
#endif

View File

@@ -22,7 +22,7 @@ void IntelliToolLine::onMouseRightReleased(int x, int y){
void IntelliToolLine::onMouseLeftPressed(int x, int y){
IntelliTool::onMouseLeftPressed(x,y);
this->lineStartingPoint=QPoint(x,y);
this->lineStartingPoint = QPoint(x,y);
this->Canvas->image->drawPoint(lineStartingPoint, colorPicker->getFirstColor(),Toolsettings->getLineWidth());
Canvas->image->calculateVisiblity();
}
@@ -33,25 +33,14 @@ void IntelliToolLine::onMouseLeftReleased(int x, int y){
void IntelliToolLine::onWheelScrolled(int value){
IntelliTool::onWheelScrolled(value);
Toolsettings->setLineWidth(Toolsettings->getLineWidth()+value);
Toolsettings->setLineWidth(Toolsettings->getLineWidth() + value);
}
void IntelliToolLine::onMouseMoved(int x, int y){
if(this->isDrawing) {
this->Canvas->image->drawPlain(Qt::transparent);
QPoint next(x,y);
switch(Toolsettings->getLinestyle()) {
case IntelliToolsettings::LineStyle::SOLID_LINE:
this->Canvas->image->drawLine(lineStartingPoint,next,colorPicker->getFirstColor(),Toolsettings->getLineWidth());
break;
case IntelliToolsettings::LineStyle::DOTTED_LINE:
QPoint p1 =lineStartingPoint.x() <= next.x() ? lineStartingPoint : next;
QPoint p2 =lineStartingPoint.x() < next.x() ? next : lineStartingPoint;
int m = static_cast<int>(static_cast<float>(p2.y()-p1.y())/static_cast<float>(p2.x()-p1.x())+0.5f);
int c = lineStartingPoint.y()-lineStartingPoint.x()*m;
//TODO implement dotted algorithm
break;
}
this->Canvas->image->drawLine(lineStartingPoint,next,colorPicker->getFirstColor(),Toolsettings->getLineWidth());
}
IntelliTool::onMouseMoved(x,y);
}

View File

@@ -20,7 +20,7 @@ QPoint lineStartingPoint;
public:
/*!
* \brief A constructor setting the general paintingArea and colorPicker. And reading in the lineWidth and lineStyle.
* \brief A constructor setting the general paintingArea and colorPicker.
* \param Area - The general paintingArea used by the project.
* \param colorPicker - The general colorPicker used by the project.
*/
@@ -73,4 +73,4 @@ virtual void onWheelScrolled(int value) override;
virtual void onMouseMoved(int x, int y) override;
};
#endif // INTELLITOOLLINE_H
#endif

View File

@@ -23,7 +23,7 @@ void IntelliToolPen::onMouseRightReleased(int x, int y){
void IntelliToolPen::onMouseLeftPressed(int x, int y){
IntelliTool::onMouseLeftPressed(x,y);
this->previousPoint=QPoint(x,y);
this->previousPoint = QPoint(x,y);
this->Canvas->image->drawPoint(previousPoint, colorPicker->getFirstColor(), Toolsettings->getLineWidth());
Canvas->image->calculateVisiblity();
}
@@ -36,12 +36,12 @@ void IntelliToolPen::onMouseMoved(int x, int y){
if(this->isDrawing) {
QPoint newPoint(x,y);
this->Canvas->image->drawLine(this->previousPoint, newPoint, colorPicker->getFirstColor(), Toolsettings->getLineWidth());
this->previousPoint=newPoint;
this->previousPoint = newPoint;
}
IntelliTool::onMouseMoved(x,y);
}
void IntelliToolPen::onWheelScrolled(int value){
IntelliTool::onWheelScrolled(value);
Toolsettings->setLineWidth(Toolsettings->getLineWidth()+value);
Toolsettings->setLineWidth(Toolsettings->getLineWidth() + value);
}

View File

@@ -71,4 +71,4 @@ virtual void onWheelScrolled(int value) override;
virtual void onMouseMoved(int x, int y) override;
};
#endif // INTELLITOOLPEN_H
#endif

View File

@@ -67,4 +67,4 @@ virtual void onMouseMoved(int x, int y) override;
};
#endif // INTELLITOOLFLOODFILLTOOL_H
#endif

View File

@@ -10,6 +10,9 @@ IntelliToolPolygon::IntelliToolPolygon(PaintingArea* Area, IntelliColorPicker* c
drawingOfPolygon = false;
isInside = false;
this->isSettingPolygon = isSettingPolygon;
if(isSettingPolygon) {
Toolsettings->setLineWidth(5);
}
this->ActiveType = Tooltype::POLYGON;
}
@@ -101,8 +104,8 @@ void IntelliToolPolygon::onMouseLeftReleased(int x, int y){
}
}
}
for(int i=0; i<static_cast<int>(QPointList.size()); i++) {
int next = static_cast<int>((i+static_cast<int>(1))%static_cast<int>(QPointList.size()));
for(int i = 0; i<static_cast<int>(QPointList.size()); i++) {
int next = static_cast<int>((i + static_cast<int>(1)) % static_cast<int>(QPointList.size()));
this->Canvas->image->drawLine(QPointList[static_cast<unsigned long long>(i)], QPointList[static_cast<unsigned long long>(next)], colorPicker->getFirstColor(), Toolsettings->getLineWidth());
}
@@ -121,14 +124,18 @@ void IntelliToolPolygon::onMouseRightReleased(int x, int y){
}
void IntelliToolPolygon::onWheelScrolled(int value){
IntelliTool::onWheelScrolled(value);
if(!drawingOfPolygon) {
Toolsettings->setLineWidth(Toolsettings->getLineWidth() + value);
if(!isSettingPolygon) {
IntelliTool::onWheelScrolled(value);
if(!isDrawing) {
Toolsettings->setLineWidth(Toolsettings->getLineWidth() + value);
}
}
}
void IntelliToolPolygon::onMouseMoved(int x, int y){
IntelliTool::onMouseMoved(x,y);
if(!isSettingPolygon) {
IntelliTool::onMouseMoved(x,y);
}
}
bool IntelliToolPolygon::isNearStart(int x, int y, QPoint Startpoint){

View File

@@ -104,4 +104,4 @@ virtual void onMouseMoved(int x, int y) override;
};
#endif // INTELLITOOLPOLYGON_H
#endif

View File

@@ -20,7 +20,7 @@ void IntelliToolRectangle::drawRectangle(QPoint otherCorner){
QColor clr = colorPicker->getSecondColor();
clr.setAlpha(Toolsettings->getInnerAlpha());
for(int y=yMin; y<=yMax; y++) {
for(int y = yMin; y<=yMax; y++) {
this->Canvas->image->drawLine(QPoint(xMin,y), QPoint(xMax, y), clr, 1);
}
this->Canvas->image->drawLine(QPoint(xMin, yMin),QPoint(xMin, yMax), this->colorPicker->getFirstColor(), Toolsettings->getLineWidth());
@@ -39,7 +39,7 @@ void IntelliToolRectangle::onMouseRightReleased(int x, int y){
void IntelliToolRectangle::onMouseLeftPressed(int x, int y){
IntelliTool::onMouseLeftPressed(x,y);
this->originCorner=QPoint(x,y);
this->originCorner = QPoint(x,y);
drawRectangle(originCorner);
Canvas->image->calculateVisiblity();
}
@@ -59,5 +59,5 @@ void IntelliToolRectangle::onMouseMoved(int x, int y){
void IntelliToolRectangle::onWheelScrolled(int value){
IntelliTool::onWheelScrolled(value);
Toolsettings->setLineWidth(Toolsettings->getLineWidth()+value);
Toolsettings->setLineWidth(Toolsettings->getLineWidth() + value);
}

View File

@@ -78,4 +78,4 @@ virtual void onWheelScrolled(int value) override;
virtual void onMouseMoved(int x, int y) override;
};
#endif // INTELLIRECTANGLETOOL_H
#endif